大江戸Ruby会議06に行ってきた

一言で言うとお祭りでした。

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

ざっくりいうとDockerでどうやってCIを回しているか、高速化をしたかという話。
CIとクラウドとDockerをどう組み合わせているかというところが焦点でした。

RSpecの分散実行には

- 実行のキューイング
- ポーリングするワーカー
- テストレポートの収集と統合
- レポートの表示

が必要だけど「一切作る必要がない」。

- Amazon ECSの活用
    - ECSのAPIを叩いてCI用のコンテナを起動する
    - ノードでタスクが終わったらノードが開いて次のタスクを実行する
    - つまり、**キューイングとワーカーの役目をこいつが果たしてくれる**
    - docker-swarmやk8sでも似たようなことが出来るのでは？とのこと
- テストレポートの収集と統合
    - **俺たちにはS3がある**
    - 各タスクでテストが終わったらS3にレポートを出力
    - **Pull Requestフックで管理できる**ので、全部のタスクが終わってるかどうかを監視するような親タスクは不要
    - json formatでクラウドストレージにレポートを置くgemを作った → [rspec-storage](https://github.com/joker1007/rspec-storage) GCSにも対応してるとのこと
    - タスクが全部終わったらjsonを集めてJUnit形式に変換して表示するだけ

コンテナでテストを行うメリットは「リソースを抽象化出来ること」。ECSのAPIを叩けば開いている適切なスペックのノードでコンテナが起動するためノード毎のマシンスペックを気にしなくてよい、テスト実行に必要なリソースを1ユニットとして一つのノードに押し込めるなどを挙げられてました。

最後に仰ってたんですが「テストからコンテナ化するのが良いのでは」については、開発環境をDockerで快適に回すのは相応の努力が必要なのでまずはCIから導入するのは僕も賛成です。

それよりもクラウドを上手く使い倒していて、その辺の知見が全然ないのでクラウドをもっと利用しなきゃな、という気持ちになりました……

### 個人的に質問したこと

- テストの分割方針ってどうしてるんですか？
  - feature specを先に詰めていって他を後から詰めればだいたい均等に終わる。もっと最適化できるとは思うけど前のテスト結果が必要で、状態を持ちたくないからやってない
- テストは1ファイルずつじゃなくて12分割してノードにそれぞれまとめてファイル指定してるんですよね？
    - イエス
    - コンテナとはいえどちらかというとmysqlやrails起動のオーバヘッドコストが高い
- ECSに12ノードっていうのは決め打ち？
    - 現状決め打ち。これぐらいが現状最適という判断
- DockerだとRSpecの実行が遅くて困ってるんですけどなんか知見ないですか
    - Dockerにすると主にディスクIOの問題で1.2倍ぐらいにはなる
    - それ以上遅いのはなんかよくわからないけど他に原因があるかもしれない。
    - Volumeの種類によって速度が変わることも。device-mapperやaufsを使ってるなら普通は大丈夫なはず

終わりがけに凸ったのにめちゃくちゃ丁寧に質問に答えてくださってありがとうございました :bow: 

## Open Source Journey @JuanitoFatas 

最近台湾から越してこられたcookpad社の方で、英語のセッションでした。
頑張って聞き取ろうとしたんですが僕の英語力が低すぎて理解できたかは自信ありません :bomb: 

（おそらく）自分がオープンソースに関わったキッカケから、OSSにcontributeしたらcommiter権限もらった話や、オープンソースへのcontributeまで、といった内容でした。

全体を通してRubyコミッタが多数来られてるカンファレンスだけあり「OSSにcontributeするのが当たり前」みたいな人たちばっかりで、まだほとんどOSSにPR出したことがない身としては色々感じるところがあります。

自分はOSSに不満があったら直すより作っちゃうタイプの人間なんですけどあんまり公開出来るレベルにまとめてどうこうみたいなの少ないんで、もっと「みんなでOSSを良くしていくこと」「自分のコードを公開して世の中に貢献すること」みたいなのは考えていかなければいけないなと思います。

## Text Editng in Ruby [@shugomaeda](https://twitter.com/shugomaeda)

Rubyコミッタの前田修吾さんのテキストエディタの話。

ご本人がレポートを書かれてました。
https://shugo.net/jit/20170320.html

「テキストエディタ何使ってますか？」

- Emacs系：2.5割ぐらい
- vim系：5.5割ぐらい
- その他：2割ぐらい

※雑にパッと見た感じ

「私よく目が悪いんであんまり見えなかったんですけど殆どの人がEmacs使ってますね^^」（会場爆笑）


どのエディタもRubyで拡張書くのはつらいという話をされて、ないなら作るってことでRubyでテキストエディタを作った（！）とのこと。

https://github.com/shugo/textbringer

- TUI
- Emacs風キーバインディング
    - 「Emacsが多数派なので^^」
- MUAを実装してEmacsを捨てたい
- Full Pure ruby
- Pluginはgemとして実装

最初にamatsudaさんが「見たことないプレゼンツールが出てきた……！」ってざわざわしてたんですが[presentation形式で見ることの出来るgemを作って](https://github.com/shugo/textbringer-presentation)それを使ってたとか。

各言語いろいろplugin managerがあると思うんですけど、「rubyの場合はrubygemsがある」ってのはすごいデカイんじゃないかっていう感想です。
Vim派ですけどEmacsも興味あるんでちょっと触ってみようかなと思います。

## Ruby考古学II 1993-1997

Rubyの名付け親であり、Irbの作者である石塚圭樹さんのお話。
テーマは「Ruby誕生前後からSorahさん誕生年の1997年までを振り返る」。

メーリングリストやチャットの履歴を掘り返して、初期の頃のRubyの実装や歴史について語るっていうコンセプトでしたが素直に面白かったです。
詳しい内容はTwitterのHashタグを追いかけてもらったほうが良いんじゃないでしょうかｗ

## 多相型、推論、Ruby - [@soutaro](https://twitter.com/soutaro)

資料： https://speakerdeck.com/soutaro/duo-xiang-xing-tui-lun-ruby

型にはどんな種類があるのか、Rubyで型を導入するとしたらどのような形式になりうるのかについて順序よく話されていて非常に理解しやすかったです。

最終的に「Rubyに型を導入するとしたらどうするか　→　何かを諦めなければならない」という話で、「Rubyらしさを一部諦めることで型を導入する？　→　やっぱ無理」から「型を書きたくないを諦めるのが良いのでは　→　matz」という話のオチまでついていて楽しく聞けました。

## esaとRubyistと私 - [@ken_c_lo](https://twitter.com/ken_c_lo)

デザイナの方の発表。以前はやりたかった自分でサービスを作ることができなかったけど、rubyコミュニティと関わっていたらいつの間にかそれが形になっていた、というお話でした。

一言で感想を言うと「非常にエモくていい話」でした。

Rubyistとは　→　「Rubyに対して単なるお客さん以上の気持ちを持っている人たち」っていう定義があったんですね（知らなかった……

たぶんこのスライドの話： https://www.slideshare.net/takahashim/how-to-become-a-rubyist

## Rationalを（もうちょっと）最適化してみた [@tad](https://twitter.com/_tad_)

[RubyKaigi2015のLTで発表したもの](http://niconare.nicovideo.jp/watch/kn856)の続き

具体的に何をやったのかという話で、「Rationalは引数に渡ってきた型に応じて処理を変える必要があるので地道に組み合わせパターンを実装していった」というお話。

話の途中で「1つ組み合わせを実装するのを見落としてたのでSEGVが発生する」とのことで試してみましたが、 `require 'mathn'` して `'1/2'.to_r` ってやるとたしかにSEGVします(Ruby 2.4.0)。

こういう地道な努力がRubyを速くしていってるんですねぇ。

## フルタイムコミッター対戦

フルタイムコミッター四名による早押しクイズ対決。
コミッターでもわからない問題ばかり出題されていて「そんなのわかんねーよｗ」って感じでした。

フルタイムコミッター5人（司会のamatsudaさん合わせて）使って非常に豪華なメンバーで、いろいろ面白かったです。

あと早押しボタンにさっそくNintendo Switchのコントローラを使ってWebAPPを実装されてたんですが仕事早すぎませんか。

## 高濃度雑談 [@ujm](https://twitter.com/ujm)

ほんとにタイトル通り高濃度な雑談。

Rubyの話だと思ってたらほとんどVimの話をしていてquickrunとかもっとちゃんと使おうと思ってたらいつの間にか1分前になってて残り1分料理の話をして終わる色んな意味ですごい発表でした。

## ruby2.4 internals change block/env structs [@ko1](https://twitter.com/ko1)

Ruby2.4で行われたblock周りについての最適化の話。
もとい、笹田さんはすごいことをやった話。

正直（知識がなくて）「なるほど、わからん」って感じの話だったんですがこの辺ガリガリ書ける笹田さんはほんとすごいなってセッション聞くたびに思います。

## 如何にして若き天才コミッタは生まれるのか [@rosylilly](https://twitter.com/rosylilly)

sorahさんとの思い出を語る超内輪話だったんですが興味深い話でした。

若いときから経験を詰める環境があって、周囲に理解があって、本人にやる気があるっていう環境から天才が作れたって感じで、そういう環境があれば天才は出来る！ってことで教育プログラムを組んでみたってところまでの話で、その結果「すげえことするやつらは出来た」「でも最初の衝動だけは作れなかった」ってのがすごい面白かったです。
というかそのプログラムで出来た人たち1年目とは思えないぐらいスキル高くてすげー！って感じでしたね……

## keynote

「僕にしては珍しく自慢します」

sorahさんの半生振り返り。
凄すぎてみんな終始変な笑いがこみあげてるようなお話でした。「お前は何を言ってるんだ」のAAが常に張れそうな状況。
ってかこれが20歳とは……「若者にはインフラをもっと学んで欲しい」とか20歳の発言じゃないんですが。

## 感想

大江戸Ruby会議が生活発表の場って実は行ってから知ったんですけど、これが生活レベルだとしたら自分の生活レベルを挙げないといけないという強迫観念が生まれそうなカンファレンスでした。
でもsorahさん曰く強迫観念に追われることで成長するみたいなこともあるらしいんで、後ろから刺されないようにもっと強迫観念に追われていきたいと思います。

大阪から遠征してきたんですがくっそ楽しかったです。スピーカーの皆様、運営の皆様、ありがとうございました！