Ruby
MySQL
crystal

Crystal 版 Gemnasium を Crystal + MySQL 構成でリリースしました

More than 1 year has passed since last update.

Gemnasium とは

gemnasium_logo.png

Gemnasium は主に Ruby で使われているウェブサービスで、Gem の依存関係を可視化しウォッチしてくれます。

Dependency Status

上記のようなバッジも生成できます。README.md に貼り付けることで、依存ライブラリの状態を他の人から見える形で可視化できます。

OSS でのライブラリの開発の際、とても便利なサービスです。

Shards Rocks とは

Shards Rocks は Gemnasium の Crystal 版にあたるウェブサービスです。私は Gemnasium が好きで、Crystal にそのサービスが無いことを不満に感じていたので、同様なサービスを作ることにしました。

Ruby のライブラリを gem と呼ぶのに対し、Crystal では shard と呼びます。

Shards Rocks では Gemnasium と同じように、依存ライブラリの状態を表示する機能と、バッジを生成する機能があります。

生成されたバッジの例

Crystal の shard では、通常の依存ライブラリと開発に使う依存ライブラリの指定ができます。

Dependency Status devDependency Status

サービス画面の例

Shards Rocks のレポジトリに対して、この Shards Rocks を適応した例です。

https://shards.rocks/github/shardsrocks/sharock-server

Screen Shot 2016-01-17 at 03.18.43.png

サービス構成

Shards Rocks は全面的に Crystal を利用して開発されています。主な構成は、下記のとおりです。

Picture1.png

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 でビルドしています。記述言語は、LiveScriptLESSJade です。

LiveScript で書かれているのは、完全に遊び心です。

ソースコード: https://github.com/shardsrocks/sharock-frontend

まとめ

Crystal はまだまだ未熟な言語ですが、もともと高速な言語なので、発展途上だからといってパフォーマンス上の問題は発生しません。ライブラリが充実し、言語仕様が安定したら Crystal はもっと実用的に利用できると思います。

バッジをペタペタ README.md にあるのが好きな方は、ぜひ Shards Rocks を使ってください!

宣伝

1/22 (金) に東京恵比寿にある Cookpad さんのオフィスで、Crystal の勉強会を開催します。興味のある方は、是非参加してください! Crystal の今後ついて、みんなで議論しましょう。