CodeIQ MAGAZINECodeIQ MAGAZINE

Ruby風の文法で注目を集めるCrystal。その勉強会の様子をレポート!

2015.10.28 Category:勉強会・イベント Tag: ,

  • 68
  • このエントリーをはてなブックマークに追加

一見しただけでは区別がつかないほどRubyに似た文法でありながら、その高速な実行速度や静的型チェックといった特徴で少しずつ注目を集めているプログラミング言語のCrystal。

今回は日本のCrystalユーザーコミュニティによる勉強会の様子を、登壇者でもある若杉(@5t111111)さんがレポートしてくれました!
by 馬場美由紀 (CodeIQ中の人)

東京Crystal勉強会 #2 in 渋谷

この「東京 Crystal 勉強会」は、日本のCrystalユーザーコミュニティであるCrystal-JPが主催している勉強会です。

今回が第2回で、第1回も7月に開催されたばかりなので、まだスタートしたばかりの勉強会といえます。

その第2回の会場となったのは、渋谷にある株式会社ミクシィさんのコラボルームというところ。バーカウンターのようなスペースも用意されたとてもお洒落な空間になっていて、しかもすごく広い!

そして、参加者の人数は第1回のときよりずっと多いおよそ50人!

参加希望者が想像以上に多かったので、最初に設定していた募集人数に対して何度か増枠を行いました。このことからもCrystalに興味を持つ人が増えてきていることが伺えます。

勉強会は最初に2つのトークセッションがあって、それから5名の方によるLTという流れで進行しました。

現在のCrystalの開発状況は?

まずは主催者のpine613さんが登壇します。「Crystal の開発進捗とロードマップ」というタイトルで、現在のCrystalの開発状況と、これからのロードマップに関するセッションです。

第1回が開催された時点からまだ2か月ほどしか経過していないにも関わらず、その間にCrystalは「0.7.5」から「0.9.0」に大きくバージョンアップしています。

開発は非常に活発に行われており、バージョンアップの過程で、意欲的な新機能の追加や、大規模な仕様の見直しが行われているようです。

この中で特に興味を惹かれたのは、「フォーマッタの組み込み」と「Ruby から移植された問題のある仕様の削除」に関する内容です。

フォーマッタの組み込み

フォーマッタはGo言語にも搭載されているもので、コードのフォーマットを自動的に整えるための機能です。

実際のプログラミングの現場では、書く人によってコードのフォーマットがバラバラになってしまうことも多く、これまではエディタの機能や外部のチェック用ツールなどを利用して、どうにか対応しているケースが多かったことと思います。

そういった背景から、標準でフォーマッタが含まれていることは、Go言語の大きな魅力の1つとなっていました。そのフォーマッタがCrystalにも組み込まれたということは非常に嬉しいニュースでした。

Rubyから移植された問題のある仕様の削除

これは、例えば、

  • length/countメソッドを廃止してsizeに統一
  • 後置while/untilを削除しイテレーターを利用するように変更

といった仕様変更が該当します。

Rubyには「TMTOWTDI (There’s More Than One Way To Do It)」というPerlから受け継いだモットーがあり、同じことをやるのにも「色々なやり方ができる」プログラミング言語になっています。

Crystalもこれまでは「Rubyでできることはできるようにしよう」という方針で、結果的に「TMTOWTDI」を継承している側面があったのですが、後方互換性を犠牲にしてまでこうした思いきった仕様変更を行ったことからは、Rubyに準拠した方針から転換する意思を伺うことができます。

実際にCrystalの作者であるAry Borenszweigさんも「今後はRubyの仕様に拘らず、Crystalとしてより良いと考える方向に発展させていきたい」という趣旨の発言をしており、これからは少しずつCrystal独自の仕様の割合が増えてくることが予想されます。

これは、Crystalが自立したプログラミング言語として少しずつ成熟し、バージョン「1.0.0」のリリースに向けて新しいステージに入ったことを予感させるものでした。

開発資金を募集中!

セッションは、Crystalがプロジェクトの開発資金をクラウドファンディングによって募集していることの紹介で締めくくられました。

Crystalのファンにとっては魅力的なリワードも用意されているので、「ぜひCrystalに貢献したい!」という方は寄付ページを見てみるとよいでしょう。実際にその場ですぐに寄付してサポーターになった方もいたようです。

Crystalは静的型付けのプログラミング言語

続いて、この記事の筆者でもある若杉 (@5t111111) が、「静的型付け言語 Crystal」というタイトルで、Crystalの静的型付けプログラミング言語としての特徴についてセッションを行いました。

Crystalの文法はRubyと非常に似ていますが、静的型付けのプログラミング言語であることから、動的型付けのRubyとは異なるアプローチでプログラミングすることが求められる場面も多いです。

例えば、Arrayには要素の型を指定する必要があり、複数の型の要素を含めたい場合には、Union型という「型の組み合わせ」を指定しなければいけません (Arrayリテラルを利用する場合は、型推論によって自動的に要素の型が決定されます) 。また、要素の型を指定できるようにするために、Arrayはジェネリック型として実装され、型引数を受け入れるようになっています。

その一方で、一度定義した変数に対して、宣言されたときの型と別の型の値を代入できるというのは、他の静的型付けのプログラミング言語にはあまり見られない特徴です。

また、ダックタイピング的に型チェックが行われるため、クラスやその継承関係に大きく依存することのない型システムとなっています。したがって、メソッドの引数の型などをあえて指定せず、ダックタイピングを活用したDRYで柔軟なプログラムの記述がしやすくなっています。

このように、Crystalは静的型付けのプログラミング言語でありながら、Rubyの持つ表現力や生産性をできる限り犠牲にしないように型システムが設計されています。

これはCrystalの非常にユニークな点で、例えばもし静的型付けのプログラミング言語に初めて触れるというRubyプログラマーであっても、あまり違和感を感じることなく受け入れやすいのではないでしょうか。

ISUCONにCrystalで挑んだ!?

しばしの休憩を挟んで、後半は総勢5名の方によるLTです。

最初に登壇したのはkfly8さん。なんとISUCONにCrystalで挑んだときのことを話してくれました。

CrystalにはAmethystというWebアプリケーションフレームワークがあるため、それを利用されたそうです。確かにCrystalは単純なHTTPサーバーのベンチマークであれば非常に良好な結果を出しているので、これはひょっとするとかなり期待できるかもしれません…

しかし、実際にはやはり一筋縄ではいかなかったようで、データベースとの接続や、Amethyst自体にルーティングなどで未完成な部分が多いことから苦労したとのことでした。

ただ、こういった「実際にCrystalを活用した事例」というのはまだまだ少ないため、非常に貴重なお話を聞くことができました。

Amethystも今年スタートしたばかりの新しいプロジェクトなので、これからの発展に期待です。開発に貢献したい方にとっても、きっと多くのコントリビュートチャンスがあることでしょう!

モダンなデザインのドキュメントとdocrystal

2番目に登壇したのは「ハトのアイコンの人」で有名なrosylillyさん。

pine613さんのセッションの中で、Crystalの開発状況の1つとして「ドキュメント生成ツールのデザインの近代化」というものが紹介されていました。実はそれを担っているのがこのrosylillyさんなのです。

Crystalにはもともとドキュメントの生成ツールが標準で搭載されているのですが、生成されるドキュメントが前時代的な設計のHTMLであるため、APIリファレンスを参照しづらいという欠点がありました。

そこで、rosylillyさんは生成されるドキュメントを大幅にリデザインしました。そして、その新しいデザインは公式にCrystal本体に取り込まれ、現在では公式のAPIリファレンスもモダンなデザインで閲覧しやすいものになっています。

また、rosylillyさんはdocrystalというドキュメントのホスティングサイトも運営していて、Crystalのライブラリ (shards) のドキュメントをWeb上で閲覧できるようになっています。

最後には、その場で新バージョンのdocrystalをデプロイするというライブ感のある演出を見事に決めて締めくくりました。Crystalに多大な貢献をされている方の話が直接聞ける貴重な時間でした!

CygwinでCrystalを動かす!?

現在のところCrystalが公式にサポートするのはMacとLinuxのみで、残念ながらWindowsには対応していません。次に登壇したfd0さんは、WindowsのCygwin上でCrystalを動かすことに挑戦しました!

CygwinというのはWindows上で動作するUNIXライクな環境で、CrystalはバックエンドがLLVMなのでCygwin上でも動作するはずだ、と考えて調査を始めたそうです。

ただ、実際にはこれも一筋縄ではいかなかったようで、何度もトライ&エラーを繰り返しながら、時には力技で解決しつつ少しずつ調査を進めていきました。

最終的に完全に動作するところまでは残念ながら到達できなかったそうですが、それでも簡単な実行ファイルの生成までは達成できたとのことで感嘆の声があがっていました。

Crystalがメジャーなプログラミング言語と肩を並べるためには、将来的にWindowsでの動作はやはり必須になるでしょう。そのときに1つの選択肢としてCygwin上でも動作させることができたら、それは開発者にとって非常に嬉しいオプションとなるだろうと思います。まだ調査はWIPということでしたので、次回の勉強会でまた進捗を聞かせてもらうことへの期待が膨らみました。

私にとってのCrystalの価値とは…

続いて登壇したのはtebasakiさん。鳥が好きなのでこのハンドルネームを名乗っています!とのこと。

tebasakiさんの業務では、セキュリティなどの観点からサーバーに任意のソフトウェアをインストールすることが難しいため、アプリケーション実行環境を用意するのが大変であるそうです。

そんな中で出会ったCrystalは、ネイティブコードの実行ファイルを書き出せるために業務で利用しやすいと感じ、それが自分にとってのCrystalの大きな価値である、というお話をされました。

個人的にも、かつてネットワークが完全にインターネットと分断された環境で業務を行っていたとき、Ruby製のツールのインストールに非常に苦労した経験があるため、その内容にはとても共感するものがありました。

ただ、残念ながら現在のCrystalのクロスコンパイルなどでは期待通りに動作しないこともあったとのことです。デプロイの容易さもCrystalの大きな魅力なので、今後の改善に期待しましょう!

Fiberで並行処理

最後を飾ったのは「聖人君子」のTシャツが眩しいkubo39さん。FiberというCrystalで並行処理をするための機構についての説明です。

FiberはRubyにも実装されているもので、軽量スレッドと呼ばれることもあります。Fiberではコンテキストを実際の処理内で切り換えることができるため、並行処理を協調的に行うことが可能になっています。

また、これによって、コルーチンという構造のプログラムを実現できます。

並列処理/並行処理は最近のプログラミング言語において特に重要視される機能の1つで、Crystalの課題としても頻繁に議論の対象となっているため、参加者の中にもその動向を興味深く追っている方が多い印象でした。

kubo39さんも、Crystalの並行処理/並行処理は発展途上で、課題が解決するのにはまだ時間がかかると考えているとのこと。ただ、開発は非常に活発に行われているので、果たして今後どのように進化していくのか楽しみです。

CrystalとCrystalコミュニティのこれから

LTはそれぞれ非常にバラエティに富んだテーマで、様々な方がCrystalに抱いている思いを伺うことのできる非常に充実した内容でした。

個人的な感想としても、Crystalに興味があるのはやはりRubyプログラマーが大多数だろうという想像をしていたので、このように色々な背景を持った方が興味を持っていることに対しての驚きと感動がありました。

本編の後はそのまま会場で懇親会が行われ、Crystalユーザー同士で自由に意見を交わして楽しみました。やはり皆さんCrystalへの期待は大きく、だからこそ現状の課題に対する意見もある程度共通認識として持っているように感じます。

主に、

  • 並列処理/並行処理
  • O/Rマッパー
  • マルチプラットフォーム対応
  • REPL

などを重要な課題と捉えている方が多く、これからのCrystalの大きなマイルストーンとなるでしょう。

そして、Crystal-JPも、日本のユーザーコミュニティとして、引き続きCrystalの発展に貢献していきたいと考えています。まだ生まれたばかりのコミュニティですが、「新しいプログラミング言語」の「新しいコミュニティ」だからこそ味わうことのできる喜びや楽しさもきっとあるのではないでしょうか。

興味のある方は、ぜひCrystalの日本語公式サイトを訪れてみて、そして3か月後を予定している第3回の勉強会にご参加ください!

  • 68
  • このエントリーをはてなブックマークに追加

■関連記事

Rubyでデータサイエンスができるのか?ワークショップ「DataScience.rb」に参加した... なぜRubyでデータサイエンスは行われないのか? 最初に登壇したのは、Rubyのコミッターであり、Speeeのエンジニアでもある村田賢太さん。「Rubyでデータサイエンスやろう!」と言い出した張本人です。 ▲株式会社Speee 村田賢太さんCRubyコミッタ。bigdecimalメンテナ。pyc...
まつもとゆきひろ氏がSpeeeで語った、勉強会・英語・プログラミングの話... まつもとゆきひろ氏とコードを競うコードゴルフ大会 今回訪問したSpeeeの社内勉強会が開催されたのは、同社のカフェスペース「SpeeeLounge」。とても素敵なカフェだ。 そこでは、エンジニアたちが真剣にコードを書いていた。 今回の勉強会で行われたのは、与えられたお題に対して、誰がも...
実践的なテーマの発表も増えた「東京Crystal勉強会」第3回の様子をレポート!... 東京 Crystal 勉強会 #3 in 恵比寿 この「東京 Crystal 勉強会」は、日本のCrystalユーザーコミュニティであるCrystal-JPが主催している勉強会です。まだ発足して1年足らずのコミュニティですが、定期的に勉強会を開催しており、今回は1月22日に開催されたその第3回の様...
CodeIQの問題をみんなで解いてみよう〜横浜へなちょこプログラミング勉強会レポ #yhpg #Ru... 11月1日に開催された横浜へなちょこプログラミング勉強会の「第15回 オフラインリアルタイムどう書く」に行ってきました!!!主催者は、CodeIQの出題者である鍋谷武典さんです。 世の中にはいろんな勉強会がありますが、この勉強会は、よくある発表形式とその場でコードを書くハッカソン形式を混ぜあわせた...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ