All Articles

GolangでCSSポストプロセッサ書いた

車輪の再発明

Golangで何か作りたいって思ってたので作りました。

実は他に作りたいものがあって、それを実現するためのツールの一つという位置付けです。 とはいえ、ここちゃんと作らないと上に載せるのが辛くなるので結構頑張った。と思います。

リポジトリはこちら:

https://github.com/ysugimoto/gssp

使い方とかはREADMEを見てください。

これは何

CSSのポストプロセッサです。ポストプロセッサといえばnodeのpostcssが有名ですね。 autoPrefixerの内部で使ってるアレです。中身はほとんど一緒で、それをただGolangで再実装しただけです。

ちなみにpostcssのコードは全く見ずにノリで書いてます。が、テストケースだけ使わせてもらいました。なんなのこのいやらしいCSSのシンタックス…。

使い方とか

READMEの通りなんですが、go getして入ってきたバイナリを使うだけのシンプルなやつです。 もちろんGolangのプログラム内で使うこともできますが、需要はないでしょうきっと。

学び

Golangでテキスト解析を初めてやったんですが、とにかく[]byte型の使いやすいのなんの。

今までstringで扱うほうがわかりやすいじゃんって思ってたんですが、一字ずつ解析しているときは[]byteがすごく便利です。bytesパッケージもありますし、なによりスライスが扱いやすい。 encoding/jsonとかのパッケージが[]byteで扱うのもわかるような気がします(たぶん)。

あと、開発する上でstructとかをわかりやすくdumpしてくれるppパッケージが神すぎました。開発者の方に感謝。

https://github.com/k0kubun/pp

あと手前味噌ですが、コマンドラインオプションのユーティリティも作ってて、これも自分的に馴染んでて使いやすいです。

https://github.com/ysugimoto/go-cliargs

それからそれから、GolangのテストでRSpec的に書けるパッケージもあったので使わせて頂きました。便利。

Goでテストを書く

まとめとこれから

冒頭の通り、他に作りたいものがあって、それにはちゃんとしてCSSパーサが必要だったので作りました。 あとはせっかくなので、@t32k氏のstylestatsみたいなのも作りたいなーって思います。

というわけで、とりあえずパーサだけできたので公開した次第です。まぁnodeでやるのが通常でしょうから、そっち使えばいいと思います。タスクとかないですしね。

エラーになっちゃうCSSがあれば(明らかにevilなのは除いて)、またバグなど見つけたらissues/Pull Requestお待ちしてます!

現場からは以上です。