大江戸Ruby会議 06 に行ってまいりました

こんにちは、hachi8833です。昨日3/20の春分の日に、東京の御茶ノ水で開催された大江戸Ruby会議 06に行ってまいりました。

会議のナンバーから今回が6回目となります。私は今回が初めてです。

概要

御茶ノ水駅のすぐそばなので、アクセスはそれはそれは至便でした。神田経由で乗り換えた後うっかり乗り過ごして四谷から引き返しましたが、それでも十分間に合ったほどです。御茶ノ水駅が目の前なので、お昼を食べられる場所の選択肢がものすごく多いのもうれしいところです。

2Fの会場は飲食可で、喫煙室もありました。Wi-Fiは会場のものを使いたい人が受付にパスワードを聞いて使うという形でしたので、あまり大勢でぶら下がる感じではありませんでした。

床電源は普通に使えましたが、奥まっていてMacbookの電源を突っ込める大きさではないので、電源の延長コードを持ってくればよかったとそのときになってやっと気づきました。失敗。
お昼の間に空いた電源タップでの充電が頼りでした(´・ω・`)

その他のレポート

現時点でネットに公開されているレポートは以下のとおりです(登壇者によるレポートを除く)。
* 大江戸Ruby会議 06 に行ってきた
* 大江戸Ruby会議06に行ってきた

登壇者(登壇順、リストは敬称略)

お名前はTwitterアカウントで統一しました。

今年はRuby生誕20周年(Rubyという名前が決まった年)であり、大トリのKeynoteを務めた@sora_h(そらは)さんが20歳になった年でもあるそうです。おめでとうございます!

以下、他の方のレポートとあまりかぶらない感じで取り急ぎ簡単にレポートしたいと思います。

Docker時代の分散RSpec環境の作り方

CIサーバーをAWS上で常にぶん回すようなRails開発案件で、Dockerコンテナを使ってテスト環境を構築を簡略化し、RSpecをなるべく安価かつ高速にコンテナで並列実行するノウハウです。

DockerコンテナはAmazon ECSで起動し、レポートはS3に保存します。そのためのgemを2つ開発するなどして、なるべく手をかけずにメンテナンスフリーで運用できるようにしたそうです。

環境のDockerコンテナ化の際は、productionとテストを共用しない、子プロセスにまでシグナルが届くようシェルではexecするなどのポイントが挙げられていました。

途中のデモンストレーションでコンテナを起動してみたところ、500エラーが表示されて会場が一気に沸きました。その後は無事復帰です。

なおBPSの場合は自社内にも物理サーバーがあるので、長時間のヘビーな社内運用にはそちらを使うことが多いようです。

My Open Source Journey

台湾出身で日本大好きのJuanitoさんが日本でRails開発者として働くようになるまでの自分史です。プレゼンは流暢な英語でしたが、とても聞き取りやすい発音だったので助かりました。

台湾時代の活動のひとつとして、台湾語版Railsガイドを一人で翻訳したそうです。私も日本語版Railsガイドをほぼ一人で翻訳したので、ボリューム感は身に沁みています。お疲れさまです!

ところで台湾語は日本の旧字体とほぼ同じなので、漢文の素養があれば何となく意味がわかるのが面白いですね。

Text editing in Ruby

Rubyで書かれたEmacs風テキストエディタTextbringerでのテキスト処理が主題です。

会場で普段使いのエディタについて手を上げてもらったところ、私の目にはVimmerが多かったような気がしましたが「やっぱりEmacsが多いですねw」と定番の切り返しでした。その他の内訳はわかりませんでしたが、IDEとかSublimeとかでしょうか。

バッファの内部表現は「バッファギャップ方式」だそうですが、事実上のバイナリ操作で私はのけぞってしまいました。文字位置が文字の途中を指したりすることはまったく気にならないそうです。私は気になるなー。

@shugomaedaさんの場合、最終的にTextbringerをメイラーとしても使うのが目標らしく、MUAを実装することに燃えていました。Emacsのメイラーはエディタと一体化しているので、この味を覚えてしまうと他のメイラーを使いたくないのもわかる気がします。

プレゼンはムアコックの例のファンタジー小説ネタ全開で、エディタの命名もそこから来ていました。確か他の方のプレゼンにも「法と混沌」が登場していた覚えが。

Ruby考古学II 1993-1997(招待講演)

スライドは今のところ公開されていません。

Rubyと@sorahさんの生誕20周年を機に、Ruby誕生初期から1.0リリースまでの仕様や実装の変遷の移り変わりや当時の事情を振り返る内容です。キーワードやメソッド名の生々流転を知ることができる貴重な講演でした。

以下、私の手元のメモから抜粋します。順序関係はおおよそであり、必ずしも正確とは限りませんのでご容赦ください。

  • 開発のきっかけ「Perlは手軽だが後で読むのが大変だからもう少しいい感じのオブジェクト指向言語欲しいよね」
  • ごく初期は「Perlのオブジェクト指向版」のようなイメージで、シェル的な要素もあった
    • 変数は$で始まってた(!)
    • 引数がカンマ区切りでなかった(シェル的)
  • Rubyの誕生日は2/23説と2/24説があったが、チャットを見ると2/23で決まったっぽい
    • 2/25のサマリーにRubyで決まったとある
  • 当初はyaccなしでやってたがやっぱり必要になった
  • イテレータはforだった(!)
    • その後「do expr using var 〜 end」に
  • インスタンス変数を使うには宣言が必要だった
  • グローバル変数はglobal varで宣言した
  • メソッド定義のかっこは必須だった
    • 後に制限付きでオプショナルに
  • 例外処理は「protect except ensure end」だったが「protect resque ensure end」になり、後にスペルミスに気づいてrescueに
  • ローカル変数は大文字で始まることもできた
    • 後に定数が大文字始まりになり、クラス名と同名の変数も定数になった
  • プライベートメソッド宣言がunexport、protected、privateなどと移り変わる
  • 「protect 〜 end」を「begin 〜 end」に変更
  • include/extend導入、includeは後に宣言からメソッドに
  • メソッド名末尾に?!が使えるようになった
  • ::で定数にアクセスできるようになった
  • クラスの継承が「class Sub : Super」から「class Sub < Super」に変更
  • coarceメカニズム導入
  • Rational/Complex/Mathn導入
  • このあたりでRuby 1.0リリース
  • 奇数番号が開発版、偶数が安定版というのは割りとなりゆきでそうなった

こういう話大好き。ところでRuby考古学IIということはIもあったんですよね。

多相型、推論、Ruby

matzの「絶対型は書きたくない」をキーワードに、Rubyの既存の仕様を制約しないアプローチと、制約するアプローチの両面で型導入を考察する内容です。

まず、いい感じに型が使えるRubyに必要そうなものとして「パラメータ多相+構造的+ローカル型推論」を挙げ、このアプローチがOCaml言語に似ていることを指摘したうえで、RubyではArray#mapとかString#splitに型をつけられないという問題を挙げていました。

次は逆にRubyに何らかの制約を与えることで型を実現できないかということでany型の導入を例に出し、any型がActiveRecordやプログラミングやrequireなどとうまく共存できないことを示していました。

そして、Rubyに型を導入するのであれば何かをあきらめないといけないのではないかということで、「構造的な部分型多相+ローカル型推論+Gradual Typing」と、TypeScript的な「型注釈とインターフェイス宣言」はどうか、という提案で締めくくっていました。

見ていた私は、言語仕様をこじらせるより、標準ライブラリに明示的な型チェックを追加する方が楽だしこちらもありがたいなーと無責任に思ってしまいました。

なお、@soutaroさんのそのものズバリと思える共同論文「多相レコード型に基づくRubyプログラムの型推論(NAID: 110006684629)」を見つけました。

esaとRubyistと私(仮)

https://esa.io/のデザイナーである@ken_c_loさんの発表は、ご本人とRuby/Railsコミュニティとの関わりについてでした。さすが、スライドの色使いが見事です。

「生活発表会」のおかげでこうしたプレゼンが増えるのはよいことだと思いました。「Rubyistには仕事を度外視して面倒を見てくれる親切な人がとても多い」そうです。

途中の「無名の質」という言葉で、私はデザイナー山中俊治さんのブログで見た「亀の井別荘のスーパーノーマル」という記事を思い出してしまいました。

Rationalを(もうちょっと)最適化してみた

RubyのRationalクラスで、Rubyのメソッドが頻繁に呼び出されていることを突き止め、Cで書き換えてRuby 2.4でのRational処理の高速化を実現したとのことです。前半は以前の発表を駆け足で紹介していました。

やった作業はひたすらrb_functal()の置き換えで、クラスの数だけ場合分けし、不要な約分回避も行ったそうです。

プレゼンの最後は、2.4公開後に見つかった、String#to_rがSEGVで落ちることがあるというバグでした。修正は2.4.1で反映されるそうです。

フルタイムコミッター大戦

4人のフルタイムコミッターによる早押し対戦ゲームでした。進行はゆるく&内容はエクストリームで楽しゅうございました。コミッター同士が、相手が簡単に答えられそうにない問題を選んで出し合う形式なので、自然とエクストリームになります。

詳しくは別のレポート記事「大江戸Ruby会議 06 に行ってきた」をどうぞ。

高濃度雑談

今回最も猛烈なテンポのプレゼンでした。8割はVimの話で最後は「発酵はスゴい」で締めくくっていました。

途中ほんの一瞬RubyのContinuationクラスに触れていたのが気になりました。こんなクラスがあったなんてまったく知りませんでしたが、随分前からあったようです。

Ruby 2.4 Internals

大戦と高濃度に続けて、Ruby 2.4の濃い情報が続きます(スライドは後日に公開されたものを追記しました)。

2.4.0はまだちょっぴりバギーで、2.4.1で安定するかもとのことでした。

WriteBarieers(WB)周りの改修は「GCを知り尽くしていないと非常に危険」だそうです。いろいろあって1.3倍ほど速くなったものの、なぜかjRubyはもっと速くなっていたそうです。Q&Aでも「理由はわかりません」とのことでした。

今一番詳しいRuby 2.4のまとまった情報は、ko1さんの以前の職場でもあるHerokuのブログ「Ruby 2.4 Released: Faster Hashes, Unified Integers and Better Rounding」だそうです。ありがとうございます。

如何にして若き天才コミッタは生まれるのか

こちらはスライド非公開(写真撮影はOK出ました)。こればかりは現場で味わうしかありません。

次の大トリを務める@sora_hさんの凄さを知らしめる内容です。わずか10歳でメーリングリストに参加した@sora_hさんのここだけのエピソードが満載でした。あー書きたい。

@rosylillyさんはそのときの尋常ならざる経験を元に、コードを書いたことのない学生などに短期間でアプリを作らせる企画をやったことがあるそうで、本人曰く「9割」がものになったとのことでした。ただし「モチベーションだけは外からはどうにもできなかった」とのことです。「どうしても作りたいものがある」ことが最強のキーであることを改めて思い知りました。

なおプレゼンからうかがった限りでは、@rosylillyさんも@sora_hさんよりわずか数年年上なだけなようです。

Keynote

大トリのスライドがつい先ほど公開されました。20歳おめでとうございます!
「生活発表会」ということで@sora_hさんの自分史を振り返る内容です。タイトルはまんまKeynoteです。

最近は仕事の絡みもあってインフラに夢中になっているそうで、CISCOなどのルーターを買ったりJPNICからグローバルAS番号を取得したりしているうちに、自宅のサブネットの方が職場より多いというスゴいことになっています。

インフラに入れ込む理由は「いろいろ積み上げて歯車がぴったり合って動き出すのが好きだということがわかってきた」からだそうです。

ほとんど隙のないように思えるスキルセットをリストアップしながら「フロントエンドとかDBとかまだよくわかっていませんし」と、スキルに安住しない危機感を常に感じているとのことです。本人の言葉で言うと「これもできないと死ぬ」という呪い(思い込み)に突き動かされているそうです。

まとめ

大江戸Ruby会議(Kaigiではありません)のコンセプトのひとつが「生活発表会」であるそうです。私は今回初めてなので以前もそうであったかどうかまではわかりませんが、少なくとも今回はそうです。

「生活発表会」と銘打っているだけあり、esa.ioのデザイナーである@ken_c_lさんのプレゼンや自分史的な話などもある一方、濃厚な話題が猛烈なスピードで展開されるプレゼンがやはり多数で、ビジネスよりは開発者指向のカンファレンスでした。登壇の敷居を下げるうえでうまいコンセプトですね。

英語での発表は台湾出身の@JuanitoFatasさんのみでしたので、RubyKaigiほどは敷居が高くないと思います。有料ではありますが、すごい人たちの発表に触れてモチベを高めるには絶好の機会でした。

進行は総じてスムーズで、ほぼきっかり時間通りに終了しました。皆さまお疲れさまでした。終了後のオフ会には参加しませんでしたが、#oedo06を見るとバースデーケーキが振る舞われるなど、非常に盛り上がったようです。

私にとって昨年のRubyKaigi@京都以来2度目の大きな開発者向けカンファレンスでしたが、今回もいろんな面で参考&刺激になりました。
都内のアクセスのよい場所でのカンファレンスは、参加する側にとって非常にありがたいですね。

今回もすごい人たちを大勢目にすることができ、コミュニティの勢いも未だ衰えずでうれしくなりました。

登壇&参加した皆さま、スタッフの皆さま、お疲れさまでした!

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

関連する記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ