Ginza.rb は 2013 年 6 月に発足し、毎月第 3 火曜日にミートアップを開催しています。 2017 年 8 月に 50 回目のミートアップを迎える事を記念して、 ぎんざ Ruby 会議 01 が開催されました。その様子についてレポートします。
いつもミートアップ告知ページで愛嬌のある猫のイラストを書かれている (@ken1flan) さんによると、 Ruby on Rails 4 が出る頃に、ランチで話をしている間に「Rails 4 を勉強しなきゃね」という話題になり、 Ginza.rb が始まったそうです。Ruby on Rails 周辺の話題が多く聞けるミートアップという印象がありましたが、その理由を知ることができました。
Ruby と Rails 両方のコミッターである松田さんから「 Ginza.rb というコミュニティが Rails 4.0 以降に始まったので、それ以前の Rails のコミュニティについて、語ろうかな」と話されました。
Ruby on Rails のトップページ ( http://rubyonrails.org/ には、メニューからは飛べないリンクがあるそうです。そのページ (http://rubyonrails.org/community/) によると Rails コミュニティとは、 Ruby on Rails ユーザではなく、 Ruby on Rails 開発者のことを指すそうです。Rails コミュニティは以下の 3 つの役割ごとにチームに分かれているそうです。
また、 Rails コミュニティには卒業制度があり、開発を離れた人は The Alumni となり、 Rails コミュニティ自体も健全に新陳代謝しているそうです。こういったドキュメントを整備してメンテナンスしているのは Ruby 開発者コミュニティにはない特徴だそうです。
Rails にコミットを残すと名前が載る、Rails Contributors があります。このサイト自身も OSS になっているため、松田さんは、今回の講演のためにパッチを当てて、各バージョンごとに活躍した開発者のコミットを集計したそうです。集計結果をメジャーバージョンごとに見ていきながら、
などについて松田さんの視点で語られました。講演の最後に、「人を知ると、プロダクトの見え方や GitHub 上での SNS 活動のリアリティが変わります。日本にいても Rails のコミュニティには会えません。海外に出ていきましょう。」との言葉で締められました。
Rails を使っている方は Rails で 1 番大きなファイルが何かご存知でしょうか? 松島さんによると、Unicode正規化処理のモジュール (ActiveSupport::Multibyte::Unicode::UnicodeDatabase) が使用している (unicode_tables.dat) だそうです。
ちょうど直前に基調講演をされた松田さんの Rails Conf 2016 での講演資料 をヒントに、 Unicode 正規化について理解を深めながら、前述の処理を Ruby 本体のメソッドで置き換えていき、この巨大ファイルを使った処理を削減する挑戦について発表されました。最終的に Rails 本体に送ったプルリクエスト #26743 ですが、 Rails 5 がサポートする Ruby のバージョンが比較的古いために、マージすることができないそうです。Rails 6.0 でマージされるのを楽しみにしたいと思います。
森さんは、勤務先の会社のビジネス上、 Web API や マイクロサービスを大事にして開発されているそうです。Web API でよくある失敗を避けるために「強いリソース指向」というものを取り決めて開発しているということでした。強いリソース指向で定義したリソースを BFF (Backends For Frontend) でまとめあげる例が、実際に開発したスマートフォンアプリの画面で示されていました。 UI の柔軟さに対応するためにもドメインモデルの考察が重要だということでした。そして、 Rails で実装する詳細について話されました。
新卒の立場から、どんなことを学び、考えてきたのかを情報共有したい、という趣旨で以下のトピックについて話されました。
この発表は、前月に行われたイベント Rails Developers Meetup #3 で発表された、勤務先の先輩である伊藤浩一さんの発表(資料) と対をなすそうです。プルリクエストのレビューで同じ指摘をされないために、プルリクエストを出す前にチームメンバーになりきってレビューしてみたり、自分の性格を考慮して詳細が伝わるコミットを書く習慣づけをしたりといった工夫をされているそうです。新人エンジニアでなくとも役立ちそうでした。
Ruby on Rails という Webアプリケーションフレームワークには、批判が割りと多いそうです。鈴木さんは、現在お勤めの会社に転職後、 Java + Spring Framework (Spring Boot) に触れたことから、 Spring Framework との比較を通して、 Ruby on Rails への批判の内容を理解しようという発表をされました。2 つのフレームの機能を比較していくと、Rails はユースケースを絞って割り切った設計をしていて、マッチしないビジネス要件にはつらみが出ることもあるそうです。一方、 Spring Framework は、はじめから広いユースケースに対応するように設計されているため、複雑なビジネス要件や長期的な拡張性を考慮したユースケースに適しているが、その分、あらかじめ理解しなくてはいけないことも多いそうです。最後に、「どちらが優れていると優劣をつけるのではなく、フレームワークやアーキテクチャの思想とユースケースを理解して、適切な技術選定をしましょう」と締められました。
テンプレートエンジンの高速化などで、 Rails を使う人ならきっと恩恵を受けているであろう、国分さんから以下について話されました。
文字列操作やメソッド呼び出しのバイパスなど、テンプレートエンジンの高速化を手がける国分さんならではと思わされるトピックも多くありました。パフォーマンス改善は、計測自体がとても難しいことがあるというのが印象的でした。プロファイラの使い方などをどうやって調べたり、憶えていくのかと疑問に思った著者が発表後に個人的にお話を伺ったところ、憶えていられないのでラッパーのスクリプトやコマンドを書いていて、その時に覚えてしまったり、覚える必要がなくしてしまうという回答をいただきました。
以下の豪華メンバーによる LT が行われました。
上薗さん (左) と聞き手の前島さん (@willnet) (右)
Rails の ActiveRecord ライブラリに数多くのコミットを残していることで有名な上薗さんが、 事前に集めた質問に答えていく形で、Q&Aが展開されました。思い出深い Rails へのプルリクエストからよく行く飲み屋までざっくばらんに回答されていました。
「active_record のコードを理解するためにおすすめの読み方、順序はあるでしょうか」という質問にたいしては、自分が修正をしたいかったコネクションプールのあたりから周辺を徐々に読んでいったので、自分の関心のあるところから読むとよいのではないかいうことでした。
思い出深いプルリクエストとして #30000 が挙げられていました。キリがよいのは偶然ではなく、上薗さんは、自分が解決したい問題の認知を高めるために、GitHub のプルリクエストでキリ番を取るということを実践されているそうです。 active_record でクエリを生成する際に ID に巨大な数値を指定すると RangeError を上手くハンドリングできないという問題があります。上薗さんはこの問題を修正したプルリクエストを 30000 番にしようと、 29996 から 30000 まで 5 連続でプルリクエストを出されていて、会場では驚嘆の声が漏れていました。
普段から手元に数多くのコミットを作っておき、どの順番でプルリクエストを出せばレビュワーのコミッタが納得してマージしてくれるか、戦略を練るそうです。 Rails には Cosmetic Changes のプルリクエストは受け付けないというポリシーがありますが、「 trailing space (行末のスペース) を消す Cosmetic Changes をしたいがために、そのファイルを弄れる修正を考える」こともあるそうです。とてもすごい情熱です。その結果として、この会議の直後には Rails のコミッタに就任されました。
以下の企業様にスポンサーして頂きました。ありがとうございました。(50音順)
@suginoy – フリーランスで Web エンジニアを数年やっています。最近は Ruby on Rails を使ったサービスの開発に関わることが多いです。