こんにちは、hachi8833です。昨日3/20の春分の日に、東京の御茶ノ水で開催された大江戸Ruby会議 06に行ってまいりました。
会議のナンバーから今回が6回目となります。私は今回が初めてです。
概要
- 名称: 大江戸Ruby会議 06
- 公式サイト: http://regional.rubykaigi.org/oedo06/
- Twitterハッシュタグ: #oedo06
- スポンサー: クックパッド
- 日時: 2017年3月20日(月・祝日) 10:00 〜 17:00
- 場所: 東京 御茶ノ水 ソラシティカンファレンスセンター
- アクセスマップ
- Googleマップ
御茶ノ水駅のすぐそばなので、アクセスはそれはそれは至便でした。神田経由で乗り換えた後うっかり乗り過ごして四谷から引き返しましたが、それでも十分間に合ったほどです。御茶ノ水駅が目の前なので、お昼を食べられる場所の選択肢がものすごく多いのもうれしいところです。
2Fの会場は飲食可で、喫煙室もありました。Wi-Fiは会場のものを使いたい人が受付にパスワードを聞いて使うという形でしたので、あまり大勢でぶら下がる感じではありませんでした。
床電源は普通に使えましたが、奥まっていてMacbookの電源を突っ込める大きさではないので、電源の延長コードを持ってくればよかったとそのときになってやっと気づきました。失敗。
お昼の間に空いた電源タップでの充電が頼りでした(´・ω・`)
その他のレポート
現時点でネットに公開されているレポートは以下のとおりです(登壇者によるレポートを除く)。
* 大江戸Ruby会議 06 に行ってきた
* 大江戸Ruby会議06に行ってきた
登壇者(登壇順、リストは敬称略)
お名前はTwitterアカウントで統一しました。
- Docker時代の分散RSpec環境の作り方(@joker1007)
- My Open Source Journey(@JuanitoFatas)
- Text Editing in Ruby(@shugomaeda)
- Ruby考古学II 1993-1997(@keiju_ishitsuka)
- 多相型、推論、Ruby(@soutaro)
- esaとRubyistと私(仮)(@ken_c_lo)
- Rationalを(もうちょっと)最適化してみた(@tad)
- アトラクション: フルタイムコミッター大戦(@n0kada、@shyouhei、@_ko1、@mrkn)
- 高濃度雑談(@ujm)
- Ruby 2.4 Internals(@_ko1)
- 如何にして若き天才コミッタは生まれるのか(@rosylilly)
- Keynote(@sora_h)
今年はRuby生誕20周年(Rubyという名前が決まった年)であり、大トリのKeynoteを務めた@sora_h(そらは)さんが20歳になった年でもあるそうです。おめでとうございます!
大江戸Ruby会議06とそらはー生誕祭のケーキ。値段が5倍になるとサイズも5倍近くになるということがわかった #oedo06 pic.twitter.com/WPeuYMguTk
— あそなす (@asonas) 2017年3月20日
以下、他の方のレポートとあまりかぶらない感じで取り急ぎ簡単にレポートしたいと思います。
Docker時代の分散RSpec環境の作り方
CIサーバーをAWS上で常にぶん回すようなRails開発案件で、Dockerコンテナを使ってテスト環境を構築を簡略化し、RSpecをなるべく安価かつ高速にコンテナで並列実行するノウハウです。
DockerコンテナはAmazon ECSで起動し、レポートはS3に保存します。そのためのgemを2つ開発するなどして、なるべく手をかけずにメンテナンスフリーで運用できるようにしたそうです。
- joker1007/rspec-storage: RSpecを任意のストレージに出力
- reproio/wrapbox: コンテナ起動ヘルパー
環境のDockerコンテナ化の際は、productionとテストを共用しない、子プロセスにまでシグナルが届くようシェルではexec
するなどのポイントが挙げられていました。
途中のデモンストレーションでコンテナを起動してみたところ、500エラーが表示されて会場が一気に沸きました。その後は無事復帰です。
AWSのコンソールで500出たのは、自分でもお笑いの神が降臨した気がしているww #oedo06
— 夜行性のフレンズ じょーかー (@joker1007) 2017年3月20日
なおBPSの場合は自社内にも物理サーバーがあるので、長時間のヘビーな社内運用にはそちらを使うことが多いようです。
My Open Source Journey
台湾出身で日本大好きのJuanitoさんが日本でRails開発者として働くようになるまでの自分史です。プレゼンは流暢な英語でしたが、とても聞き取りやすい発音だったので助かりました。
台湾時代の活動のひとつとして、台湾語版Railsガイドを一人で翻訳したそうです。私も日本語版Railsガイドをほぼ一人で翻訳したので、ボリューム感は身に沁みています。お疲れさまです!
ところで台湾語は日本の旧字体とほぼ同じなので、漢文の素養があれば何となく意味がわかるのが面白いですね。
Text editing in Ruby
- @shugomaeda
- ご本人のレポート: 大江戸Ruby会議06で発表してきた
- 発表資料: oedo06/textbringer.md
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を(もうちょっと)最適化してみた
はぁー、拙い発表でしたがいろいろありがとうございました。スライドは明日上げる予定です #oedo06
— 斎藤ただし, Tadashi Saito (@_tad_) 2017年3月20日
RubyのRationalクラスで、Rubyのメソッドが頻繁に呼び出されていることを突き止め、Cで書き換えてRuby 2.4でのRational処理の高速化を実現したとのことです。前半は以前の発表を駆け足で紹介していました。
やった作業はひたすらrb_functal()
の置き換えで、クラスの数だけ場合分けし、不要な約分回避も行ったそうです。
プレゼンの最後は、2.4公開後に見つかった、String#to_r
がSEGVで落ちることがあるというバグでした。修正は2.4.1で反映されるそうです。
フルタイムコミッター大戦
4人のフルタイムコミッターによる早押し対戦ゲームでした。進行はゆるく&内容はエクストリームで楽しゅうございました。コミッター同士が、相手が簡単に答えられそうにない問題を選んで出し合う形式なので、自然とエクストリームになります。
詳しくは別のレポート記事「大江戸Ruby会議 06 に行ってきた」をどうぞ。
昨日言った「一番たくさん編集されてるやつ」の求め方です https://t.co/obfdcI5ho0
— Urabe, Shyouhei (@shyouhei) 2017年3月21日
高濃度雑談
高濃度雑談のスライドです https://t.co/pakFymgWVQ 緊張したし本当に疲れた・・・このスタイルは準備も本番も体力消耗がやばいのでやらないことを強くオススメします #oedo06
— ujm (@ujm) 2017年3月20日
今回最も猛烈なテンポのプレゼンでした。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度目の大きな開発者向けカンファレンスでしたが、今回もいろんな面で参考&刺激になりました。
都内のアクセスのよい場所でのカンファレンスは、参加する側にとって非常にありがたいですね。
今回もすごい人たちを大勢目にすることができ、コミュニティの勢いも未だ衰えずでうれしくなりました。
登壇&参加した皆さま、スタッフの皆さま、お疲れさまでした!