書いた人 : 五十嵐 邦明 さん
2015 年 6 月 4, 5 日にシンガポールで RedDotRubyConf が開催され、大満喫してきましたのでレポートします。発表は面白いものが多くて、しかもシングルトラックなので 1 つ 1 つの発表に集中できてとても良かったです。
シンガポールはたくさんの民族の人が住んでいる国だからか、このカンファレンスもいろんな民族の人たちがわいわい発表している雰囲気がとても良かったです。参加者と発表者の女性率も高くて、ほぼ半々。特に調整はしてなさそうに見えたので、他のカンファレンスもゆくゆくはこうなれるのかもしれないですね。最も多様性の高い Ruby のカンファレンスかもしれません。アフターパーティは海外組と地元の人とたくさん話すことのできる楽しい時間でした。
日本以外で世界の Ruby のカンファレンスを 1 つ勧めるなら、RedDot を勧めたいと思える今回の参加でした。日本からだと乗り換えなしの 8 時間で着けて、空港から地下鉄で街へ行けて、ごはんも何食べてもおいしい。カンファレンスのランチもビュッフェ形式で温かい料理が出てきて、しかもめちゃめちゃうまくて感動でした。
では、いくつかのセッションについてメモを元にレポートします。
(概ねの翻訳と、セッション後の聞き込みで構成します)
私がプログラミングをはじめたときは、小さなポケコンだった。それは使える変数が数百個ほどの小さな小さな環境だった。その後、私は C や Pascal といった言語を知る。私は goto 文がないことに驚いた。え? どうやってプログラム書くの? え? 再帰? それは衝撃だった。私の手元にはプログラムを動かすコンピュータがないので、紙のノートにプログラムを書いていた。私は全てのプログラム言語は意図を持って作られていることを知る。そしてこれなら私も作れるとではと思った。
1993 年、日本はバブル崩壊後の不景気で、私のいたプロジェクトはキャンセルされた。暇で退屈になった。そこで私がプログラミング言語を作りはじめた。それが Ruby。
Dave Thomas と Andy Hunt の達人プログラマーたちが Duck Typing と DRY という概念を言語化してくれた (Duck Typing と DRY は Dave たちが命名してくれた。もちろんその前にその概念はあったのだけど)。そうそう、彼らはまさに Y2K のさなかの大晦日の日にメールをくれた。長文で英語の返事をするのは大変だったなぁ……。そしてピッケル本を書いてくれた。
Duck Typing はただ実行できるかどうかを聞けばいい。継承のことは考えなくて済む。我々は怠惰で、怠惰でなければならない。真面目と、不真面目と、どちらを選ぶか。私は不真面目、つまり怠惰を選んだ。これが Duck Typing の神髄だ。
DRY (Don’t repeat yourself) は重複を排除すること。コピペはやめろ! なぜならバグが拡散して蔓延してひどいことになるからな。なにより怠惰の精神に反する。
つまり、Duck Typing と DRY は怠惰の原則なんだ!
まぁとにかくこの 20 年間、私たちは怠惰道を進んできた。もっと怠惰になれないのだろうか?
2015 年の課題は、Web アプリ、でかいコードベース、マルチコア、ネイティブスレッド、高トラフィック、OOP から関数型へ。これらを様々な方法でクリアしてきている。進化の法則。進化して環境に適用するか、または絶滅するかだ。私たちはどこへ向かうべきだろうか? ここからいくつかのトピックについて話します。
mruby。組込向けの Ruby だ。これを nginx で使う方法を明日しばたさんが話します。
concurrency。これには 3 つの案があって現在検討中。1 つ目は Actor モデル。これは Erlang とか Golang とかで使われている。2 つ目は笹田さんが考えている Share / Borrow モデル。3 つ目は Stream でやっている方法 (ステップごとに処理を分割して、それぞれの処理を並列に実行する)。Stream はトライアルな言語で、未来の Ruby の concurrency の基礎になるかもしれない。
Man Machine collaboration。Did-you-mean feature (明日西嶋さんが話すやつ)。これは人が間違えたときにアドバイスしてくれるもの。積極的な警告 (Proactive Warning)。実行前にいろいろ教えてくれるもの。Rubocop っていうのもある。
Soft-typing。型を明に書くのは DRY じゃないと思ってる。Soft-typing は型を書くのではなくて、言語処理系でなんとかする。型推論と Duck Typing をどうやって両立するかが 1 つのポイント。たとえば、書かれているメソッド呼び出しできるかを推定して、実行前に警告を出す。実現方法としては、たとえば、ある変数で呼び出されているメソッドのリストを def や define_method などから集めて作る。コードで呼ばれているメソッドがこのリストの中になければエラーっぽいので実行前に警告する。 これをやるにはいくつか制約が必要。もしも method_missing を使っていると、これは使えない。また、ある変数に 1 と “abc” など異なるオブジェクトを代入されると無理。制約の範囲で書けば、メリットを享受できる。
ぶっちゃけ、私はテストを書くのが好きじゃない。なぜなら DRY ではないから。だってプログラム書いたら動かしたいじゃないですか、テストでおんなじこと書いてるじゃないですか。さらにドキュメントも書いたら 3 重ですよ! だからなんとかテストを書かなくて済まないかを考えている。でもまだノーアイデア。
Ruby が絶滅すると困るんです (みなさんは別の言語使えばいいので、いいですけど、私は困るんです!)。理由は Ruby が好きだから。Ruby がくれるパワーが好きだから。
Ruby を絶滅させないために、できることはあるか? 私達はもっと怠惰であるべきだ。そして怠惰であるために、めっちゃがんばるべきだ。Happy Hacking!
RubyMotion ファウンダーのローレンツさん。
RubyMotion は Ruby で iOS と Android のネイティブアプリが作れるフレームワーク。Ruby のコードをビルドして、iOS と Android のアプリファイルを作成する。RubyMotion は全ての Native API を使える。
そのまま書くと両者のネイティブ API を書くことになるが、もしも iOS と Android の両方で共通のコードを書きたければ、共通化 gem を使って書くこともできる。iOS は RedPotion, Android は BluePotion という名前。
irb とシミュレータを使って Ruby のコードを書きながら iOS アプリを作るライブコーディングが面白かったです。
東京に住んでドイツの会社の同僚の仕事をしているラウラさんによるリモートワークについてのお話。アフターパーティで聞いたところによると、時差は大変だけど、重なる時間 (2 〜 3 時間) に会議とかまとめてやるようにお互いに工夫しているとのこと。どのくらいの頻度で同僚に会うの? と聞いたら「1 年に 1 回会うかなー?」とのことで、かなりうまくリモートを回していた。私の英語がもう少しできればもっと詳しく話を聞けたのが残念。
また、次の Ruby 会議は CFP 出して話したい! と言っていました。
Ruby 会議の “Ruby committers vs the World” 企画の RedDot 版。Matz さん、しばたさん、アーロンさんの発表されたコミッタのみなさんに加えて、前回の Ruby 会議で基調講演をした tmm1 さんも登壇するという豪華メンバー。たくさんの質問が飛び交いました。
最初に話してた Chrome 上で使える Rails アプリのプロファイリングツールが便利そうだったんだけど、あれなんてやつだったんだろう。資料読み返したい (いろんなツールを組み合わせて使ってた自分の Rails プロジェクトだったのかも。資料の Omakase V2 のところ)。
この方、いろんなプロファイル系の gem を作っててそれの紹介なプレゼンだったので面白かった。memoryprofiler 使って、Rails 本体の boot で “\n” が 4 万回メモリ確保されてるって発表スライドで、後ろから “wow” って聞こえてきた (アーロンさん)。
AR はエレガントだけど遅いよね、だけど生 SQL は書きたくないよね、ってときにその中間くらいに位置する SqlBuilder を使うとええよって話をしてました。AR の方がメンテナンス性は良いので、AR でパフォーマンスつらいってときにまずは取得時に AR オブジェクトじゃなくて Array で受けるようにして、それでも遅い (つまり SQL 部分が遅い) ってなったら SqlBuilder ありかもしれない。
後半はいろいろ面白そうな技とかツール紹介してたけど速すぎて追えず。logster っていうログ整形とか、定番の rack-mini-profiler とか。いろいろ測って速くしようぜ、使うメモリ減らそうぜ! というメッセージを残しておしまい。すごい方でした。
メタプログラミング Ruby の著者の Paolo さん。Refinement についての話。Refinement はグローバルなモンキーパッチをなくしてくれる。Refinement のつかいどころ、はまりどころを解説。Refinement の仕様、難しいかも? (細かいところよく分からなかった)
発表の締めは「Refinement はこういう風に使えるって例を紹介したけど、みんなもっと使って新しい使い方を提案しよう。」と話して、そのあと最前列の Matz に向かって Refinement に感じた想いとお礼を話しかけておしまい。こういう発表の仕方もあるのかすごい。
メタプログラミング Ruby の Paolo さん、12 月の RubyKaigi に来たいとのこと。期待。メタプロ本第 2 版は角さんがほぼ翻訳終わり、そろそろ発売!
休み時間に、「私、英語なかなかうまくできるようにならないんですよね……」って話をしたら「私もできなかったけどあるとき突然できるようになったよ!」って励ましていただいた。気さくで優しい方です。5 年前にRuby 会議で私がサインもらったのだけど、顔覚えててくれて嬉しかった!
nginx の拡張を mruby で書いて、それを mruby 上のユニットテストライブラリでテストするお話。
いろいろ便利な話を聞けました。たとえば nginx の子モジュールで CPU やメモリ使用量の制限を cgroup (Linux API) でできる。普通は cgroup 制御は C とかで書かなくちゃいけないが、mruby なら cgroup gem があるので、いつもの Ruby と gem で制御できる。便利。あと、ImageMagick をラップする rmagick 的なものも mruby にあるので、 nginx だけで画像変換とかもできちゃう。リソース制御もできる。mruby を使うと他のプロセスに寄り添ってごにょごにょする、ってことができるので、新しい使い方が今後生まれていくかもしれない。
Rails Girls ファウンダーのリンダさん。製作中の絵本を題材に子供へのコンピュータ教育についてプレゼン。絵本、本当にかわいいのでぜひ日本の書店の (コンピュータ書ではなく) 絵本コーナーに並んで欲しい。ここまでコンピュータを身近に感じられる絵本は初めてかもしれませんね。
スライドも配色やイラストがかわいくて美しかったです。
メソッド名もしかしてサジェストツール did_you_mean gem 作者の西嶋さん。この gem の解説でしたが、スペル校正の理論、重み付けの式をちゃんと説明するガチなプレゼンでした。発表外で聞いたら、 did you mean gem は Ruby 2.3? から Ruby 本体に入る方向でがんばってるとのこと。
load, require の話。require の返り値って初読み込みだと true で読み込み済だと false なんですね。require は最初に canonicalize (パスの正規化。require “./bar.rb” を /foo/bar.rb にするとか) の処理が入る。Rails の require のロジック、ruby の require して、exception したら Gem の中を見に行く、なければ LOADPATH も見に行く。1 つの gem に平均 400 個のファイルがあるので、アプリ全体で読み込むファイルは数千以上。
メモいろいろ書いたのだけど、英語難しくて後から読み返したらよく分からず。あとでもう 1 回スライド見直そう。
とても楽しかったです! 英語は喋るのはだいぶがんばれるようになってきたけど、聞くのがまだ全然できなくてしょんぼり。もっとがんばろう。
Paolo さんが 5 年前に会っただけなのに覚えててくれてたくさん話せて嬉しかった。アーロンさんは自撮り棒が大人気w。みんなで写真を撮りまくっていました。海外カンファレンス恒例の「Matz さんと一緒に写真撮影」の列も絶えませんでした。ニューヨーク在住の西嶋さんと久々に話せたし、Matz さんもたくさん話せていろいろ教えてもらった。しばたさんはシンガポール Hacks いろいろ教えてくれて大変ありがたや。珈琲タイムのテーブルが隣になって話してた人が関西 Ruby 会議のオーガナイザーさんだと分かって Facebook でやりとりしてましたねどうもどうもって話してたら私が Ruby 始めた頃から知ってる雲の上の人 cuzic さんだと分かってうろたえた。Win32OLE の本、めちゃ活用させてもらってました。
今回、行くかどうか迷ったのですが、この前台湾に行った時に JuanitoFatas さんに勧められたこともあって思い切って行ってみて本当によかったです。オーガナイザーの winstonyw さん、素晴らしいカンファレンスをありがとう。
シンガポールは料理や果物がおいしく、滞在も楽しい時間でした。かっこいいビルが多いですね。物価は日本と同じか少し安いくらい。地下鉄があるのでどこへ行くのも便利です。sim はチャンギ空港の両替所 (代理販売している) で StarHub 社の 18 ドルで 5 日間インターネットだけ使えるものを買いました (Singtel 社の 15 ドルのものもあるとのこと)。両替レートは現地の方がよかったです。空港着が朝 6 時でしたが両替所はもうたくさん開いていました。また、便利な “EZ link Card” (こちらの Suica) は空港 MRT 駅の窓口 (AM 7 時開始) で買えます。電源は 200V の BF なので変換プラグをお忘れ無く。飛行機は羽田空港からの深夜便に乗ると 8 時間のフライトで現地の朝につけて便利でした。
海外のカンファレンスは前の方の席に座ると Matz さんや登壇者のみなさんとたくさん話しができるのでお勧めです。RedDotRubyConf、本当に楽しい時間でした。次回もぜひ参加したいです!
今回の費用は全て弊社 spicelife に出していただきました。また、留守中仕事をまわしてくれた同僚に感謝します。
http://www.reddotrubyconf.com/
https://twitter.com/reddotrubyconf
http://confreaks.tv/events/rdrc2015
https://www.flickr.com/photos/hsbt/sets/72157651906930644
https://www.flickr.com/photos/igaiga/sets/72157651834993813
hsbt さん:RedDotRubyConf 2013 旅行記
株式会社 spicelife のエンジニア。オリジナル T シャツプリントサービス tmix と、ソーシャルフラワーギフトサービス \SPOTLIGHTS/ を開発中。tmix が各地のイベントでスタッフ T シャツスポンサーになるべく営業活動中で、前回のるびま 50 号で紹介された全ての地域 Ruby 会議 (松江 Ruby 会議 05、TokyuRuby 会議 07、渋谷 Ruby 会議 01、神奈川 Ruby 会議 01) でスタッフ T シャツスポンサーをさせていただきました。