ペンギン村 Tech Blog

技術をこよなく愛するエンジニア集団が在住するペンギン村から、世界へ役立つ(かもしれない)技術情報を発信する技術系ブログです。某アラレちゃんが済む村とは一切関係ありません。んちゃ!

swift-emmet をリリースしました。

どうも、まだ生き延びてる @tobi462 です。

swift-emmet という CLI ツールをリリースしたので、それの紹介的な記事です。

github.com

ちなみに Haskell で書かれています。

それは何?

シンプルな記法で構造体やクラスのコードを生成する CLI ツールです。

f:id:yu_dotnet2004:20210209175454p:plain

おまけ程度ですが REPL も備えています(ほんとにおまけレベルです)。

f:id:yu_dotnet2004:20210209175512p:plain

なんで作ったの?

業務アプリ(でなくとも)だと、多数のプロパティを持った構造体(やクラス)のコードを記述する機会は多いと思います。

そうした際、だいたい私は VSCode のマルチカーソルを使って雛形コードを書いて、それを Xcode に貼り付けるというフローをしていました(伝わりますかね?)。

f:id:yu_dotnet2004:20210209175545p:plain

ただ、それでも面倒に感じることが多かったので、Emmet インスパイアな CLI ツールを作ってみた次第です。

詳細は README に譲りたいと思いますが、 var のみの構造体であれば、以下のように短い記述で生成できます。

$ swift-emmet 's.Person = name:S, age:I, homepage:U'
struct Person {
    var name: String
    var age: Int
    var homepage: URL
}

インストール

Homebrew (tap) に対応しています。

$ brew tap YusukeHosonuma/swift-emmet
$ brew install swift-emmet

なぜ Haskell で作った?

Haskeller であることのアピールですかね。

f:id:yu_dotnet2004:20210209175602p:plain

まぁ真面目な話をすると、Haskell はそれなりに勉强してるんですが、ちゃんとしたプロダクトを作ったことが無いなぁと思い、テストや CI環境を含めてやってみた、という感じです。

Hackage にも公開しようかと思ったのですが、ライブラリという感じでもありませんし、そもそも Haskell 向けツールでも無いので、無駄に名前空間を汚しても仕方ないなと思って見送りました。

ぶっちゃけコード的にはそんなに難しいことはやっていませんが、attoparsec というパーサコンビネータを使ってるので、それなりに見通しの良いコードになっていると思います。

おわりに

正直、需要があるか分からないのですが、もしアイディアやフィードバックなどがあればお気軽に Issue や PR をいただければと思います。(だったら Swift で書いておけよと小一時間・・・

P.S.

Haskell はいいぞ。