Gemnasium とは
Gemnasium は主に Ruby で使われているウェブサービスで、Gem の依存関係を可視化しウォッチしてくれます。
上記のようなバッジも生成できます。README.md に貼り付けることで、依存ライブラリの状態を他の人から見える形で可視化できます。
OSS でのライブラリの開発の際、とても便利なサービスです。
Shards Rocks とは
Shards Rocks は Gemnasium の Crystal 版にあたるウェブサービスです。私は Gemnasium が好きで、Crystal にそのサービスが無いことを不満に感じていたので、同様なサービスを作ることにしました。
Ruby のライブラリを gem
と呼ぶのに対し、Crystal では shard
と呼びます。
Shards Rocks では Gemnasium と同じように、依存ライブラリの状態を表示する機能と、バッジを生成する機能があります。
生成されたバッジの例
Crystal の shard では、通常の依存ライブラリと開発に使う依存ライブラリの指定ができます。
サービス画面の例
Shards Rocks のレポジトリに対して、この Shards Rocks を適応した例です。
サービス構成
Shards Rocks は全面的に Crystal を利用して開発されています。主な構成は、下記のとおりです。
API サーバー部分
Crystal を開発言語に採用し、ミドルウェアに MySQL と Redis を使っています。
ウェブアプリケーションフレームワークとしては、Sinatra ライクな Kemal を採用しました。
本サービスは SPA として構成されているため、API サーバーは基本的に JSON を吐くことに特化しています。
ソースコード: https://github.com/shardsrocks/sharock-server
バックグラウンドワーカー部分
基本的に Crystal を使って開発してありますが、一部ワーカー部分を Go を使って書いてあります。ワーカー部分は resque compatible な goworker を使っており、ワーカーから exec で Crystal のプログラムを起動しています。
フロント部分
フレームワークに Vue.js を採用し、Webpack でビルドしています。記述言語は、LiveScript、LESS、Jade です。
LiveScript で書かれているのは、完全に遊び心です。
ソースコード: https://github.com/shardsrocks/sharock-frontend
まとめ
Crystal はまだまだ未熟な言語ですが、もともと高速な言語なので、発展途上だからといってパフォーマンス上の問題は発生しません。ライブラリが充実し、言語仕様が安定したら Crystal はもっと実用的に利用できると思います。
バッジをペタペタ README.md にあるのが好きな方は、ぜひ Shards Rocks を使ってください!
宣伝
1/22 (金) に東京恵比寿にある Cookpad さんのオフィスで、Crystal の勉強会を開催します。興味のある方は、是非参加してください! Crystal の今後ついて、みんなで議論しましょう。
- 1/22 (金) 東京 Crystal 勉強会 #3 in 恵比寿
http://crystal.connpass.com/event/22754/