Thinking In Erlang
仕事でミッションクリティカルなシステムを開発しているので、Erlangの存在を知った時は設計思想に興味を持ちました。ですが、仕事でRabbitMQを使っているくらいで、自分でコードを書くこともなくこれまで過ごしていました。
そんなところに、Erlangのトレーニングが行われるとの話を聞きつけ、Erlang/OTP トレーニング 2013.10に参加してきました。
講師はフランスから来日中のLoïc Hoguinさん(@lhoguin)。以下のような方です。
私はErlang素人なので全然知りませんでしたが、Erlangの世界的な方が来る、ということで楽しみに参加しました。
スライドはここにアップされており、当時利用したコードはここにアップされていますので、内容についてはそちらを見ると良いと思います。
Erlangの考え方を学び、コースコードを書きながら説明してもらえたり、エクササイズがあったりと、濃い一日を過ごすことができました。Loïcさんも優しい感じの雰囲気で、丁寧にディープなことまで教えてくれました。一気にいろいろ学べ、ひとりで読書しているより遥かに効果が大きかったです。
私はJavaをメインに使っているため、Akkaの考え方のベースになっているErlangそのものを学ぶのは非常に興味深かったです。信頼性の高い分散システムを構築するための仕組みが、数多く用意されているのが良いですね。また、atomとパターンマッチングを使ったメッセージ処理も、分かりやすくて気持ち良い。この辺はとても良い所ですね。
特に面白いと思ったのは、observerのstart/0関数。Javaで言うとjconsoleみたいな機能。これは便利そうと思いました。次のようなコマンドを打つとGUIで起動します。
observer:start().
起動直後に表示されるSystemタブは、こういう感じ。Erlangのバージョンから、メモリ、CPU、IO等の情報が載っています。
次は、Load Chartsタブ。スケジューラ、メモリ、IOの使用率/使用量がグラフで分かります。
その次は、Applicationタブ。supervision treeがひとめで分かります。Javaで言うとスレッドの親子関係が分かるイメージ。ノードを右クリックメニューから、各Erlangプロセスの詳細を見たり、メッセージを送信したりと、様々な操作することもできます。これは便利そう。
続いて、Processesタブ。各Erlangプロセスのメモリ使用量やキューにあるメッセージ数、実行中の関数が分かります。
その後は、Table Viewerタブ。Erlangが持つテーブルの概況が分かるようですが、この画像だとあまりおもしろくなさそうですね。。。
最後に、Trace Overview。デバッグに使えるようですが、私は使い方を分かっていません^^;
こういう機能は便利だな~と思ったのですが、懇親会で@voluntasさんと話してみると「使わない」とのこと。Erlangのデバッグはデバッグプリントが王道のようです。そもそも、デバッグプリントで解析できないようなプログラムを書く方が悪いそうです。。。
そうそう、懇親会でこういった方々にErlangの現場の話を聞けたのは良かったです。Erlang界隈の雰囲気も分かりますし、久しぶりの再会があったり。
最後になりますが、会場を提供してくださったVOYAGE GROUPさん、懇親会のピザ・寿司・お酒を提供してくださったBashoさん、ありがとうございました。
面白い内容で、懇親会も活気があり、今後、Erlangのセミナーがあれば、また参加してみたいと思いました。