Rails Developers Meetup 2017 に登壇枠で参加してきた。会場は SHIBUYA TECH PLAY さん。
今回のイベントでは自分の発表以外に、銅鑼スポンサーの手配をしたりとかしていた。銅鑼運搬、運用の hisas お疲れ様でした。また平野さん、秒速さんはじめスタッフの皆さんありがとうございました。
当日の発表スライドは以下で、この日記では 5 分で話せるわけないだろうといったこのスライドへのページ解説をしてみようと思う。
1ページ
表紙。最近公開されている Fate Heaven's Fees へのオマージュ。連作の発表2つめだったので、UBW っぽい表紙にした。Keynote で発光しているような文字を作るにあたり次のサイトを参考にした。
Keynoteで文字が光っているようにする方法 (Kanasansoft Web Lab.) 。
2ページ
当日の GitHub アカウントのキャプチャ。草の継続は t-wada の影響ではじめた Write Code Every Day を続けた結果となる。
ちなみに空白の一日があるが、もともとは草が生えていてコードを書いた日ではなく Bundler 2 の RFC にコメントをした日だった。この頃、GItHub でいろいろメンテナンスをしていそうな気配もあったし、コード以外のコメント分について GitHub がデータマイグレーションに失敗したのかも?
https://github.com/koic?tab=overview&from=2017-07-07
3ページ
ActiveRecord Oracle enhanced adapter の宣伝。ちなみに JRuby でも Active Record の master で動く (と思う) 唯一かもしれないアダプターだと思う。
4ページ
Rails 5.2 の beta が出ているので使って行きましょうという話と、beta で問題を見つけた場合も master で直っている可能性があるので master のヘッドを指定しましょうという話。
5ページ
マージコミットを抜いた Rails の 2017 年コミットランキング。トップ12のうち会場には最後4人いた。kamipo さん、y-yagi さん、yhirano55 さん、オレ。
6ページ
勤務先の宣伝。その1。
7ページ
RuboCop 0.51.0 という今回話すプロダクトとそのバージョンについて。
8ページ
RuboCop 0.51.0 のチェンジログ。全文は以下。
9ページ
今回発表の三部作の俯瞰。
10ページ
前作第一部サマリー紹介の入り。
11ページ
Fate Heaven's Feel を観た人へのサービスページ。このページのデザインが映画のどの場面かは劇場に足を運んだ人は分かるかもしれない。
12ページ
物語への入り。
13ページ
日頃の Rails アプリケーション開発が発端で、日頃の何気ない事柄から OSS に繋がりますよという話。
14ページ
はじまりのレビューコメント。レビューコメントには新たな Cop を作る機会がたくさん眠っていると思う。
15ページ
第一部の肝。
16ページ
勤務先の宣伝。その2。この勤務先の社是に対する行動の話が第一部になっていた。
17ページ
OSS とその上に乗っているアプリケーション開発の話。問題があれば upstream に還元して、それをアプリケーションで使うと行った図。
18ページ
15ページ目の話が絵物語ではないという証明。
19ページ
第一部 (サマリー) 完。
20ページ
今日の本題である第二部の入り。
21ページ
第二部の入り。その2。
22ページ
第一部の17ページからの続きの話。
23ページ
発表当日に会場で足したページ。
24ページ
Issue の bug ラベルでおもしろそうなものからやってみるのも良い。RuboCop の Issue の bug だとこうなる。
25ページ
自分が選んだ Issue 。日頃の活動の中で Rails のイベントにあわせて Rails の with_options
に関わる Issue の話を選んでいた。
26ページ
問題となっている Cop について。ドキュメントは以下。
Class: RuboCop::Cop::Rails::HasManyOrHasOneDependent — Documentation for rubocop (0.51.0)
27ページ
自分が問題を直した PR の紹介の入り。
28ページ
バグフィックスを作るためは再現テストを書くことから。
29ページ
Parser gem による AST の話。ある Ruby コードの AST は ruby-parse
コマンドで取得できる。以下は例。
% ruby-parse -e "puts 'hello'" (send nil :puts (str "hello"))
30ページ
自作の Ruby AST Visualizer を使った図。これノードの表現にバグがありますね。。。
31ページ
実装の話を含めて5分とか無理ゲーなので、実装の進め方のリズムの話。
32ページ
実際に出した PR のキャプチャ。
33ページ
Ted さんからのコメント。別の Cop の既存の問題についての言及。
34ページ
言及のあった Style/PredicateName cop の紹介ページ。RuboCop 0.50.0 の時点では、静的なメソッド定義に対してしか offense を検出できなかった。
Class: Rubocop::Cop::Style::PredicateName — Documentation for bbatsov/rubocop (master)
35ページ
言及のあった def_node_matcher
についてのページ。define_method
や define_singleton_method
のような動的なメソッド定義を行なう、RuboCop 内部でマッチする AST を定義する API となる。
36ページ
レビューコメントへの自分のレスのキャプチャ。
37ページ
その PR で解決した問題に対して、レビューコメントが解決の範囲外の話題をしているようであれば別 PR にする提案をして太った PR にするのを避けましょうという話。
38ページ
上述のテキストページ。
39ページ
別 PR にしましょうと提案した PR への入り。InternalAffairs/DynamicPredicateName cop という cop 名で提案していた。ちなみに InternalAffairs という部署は RuboCop 開発向けの cop で名前のとおり内部業務用の cop がいる部署なのだった。
40ページ
設計を UML で表そうという前世紀へのオマージュの図。その既存クラス。
41ページ
既存のクラスから Extract Method を使った設計の図。refactoring.com 的な表現。
42ページ
前ページの前段を踏まえた機能追加の図。
43ページ
y-yagi さんの jpcal の宣伝。この3連休で作ったのが最初の PR だった。
44ページ
実際の PR のキャプチャ。
45ページ
PR 改善への入り。
46ページ
pocke さんからの提案のキャプチャ。
47ページ
自分のレスのキャプチャ。
48ページ
pocke さんの提案で一番ここが良いと思った感想のテキスト。
49ページ
再実装した PR の入り。
50ページ
PR のキャプチャ。以下、最終的に取り込まれた PR となる。
51ページ
UML 表現。
52ページ
config/default.yml による published API の定義について。いくつかのスタイルをサポートする cop について、どんなスタイルがあり、どのスタイルをデフォルトにしているかといった情報なんかは、このファイルを見ると分かる。どういうことかというと、ドキュメントにはまだ漏れがあるからこの default.yml なら確実という意味。
def_node_matcher
や def_node_search
は RuboCop 内部用のメソッドなので、次ページの .rubocop.yml のみに記述している。
53ページ
RuboCop 本体の .rubocop.yml による internal API の定義について。
54ページ
最初の PR からの改善で何が良くなったのかの話。
55ページ
はじまりのバグフィックスで出した PR とまったく異なる新機能も RuboCop 0.51.0 に入っている。
56ページ
おわりへの導入。
57ページ
OSS ライセンスをつけて公開している段階は public repository としての公開のステップ。
58ページ
ソーシャルレビューによって創発しあって価値が生み出されていくのが面白い。プロダクトによって関わっている OSS 開発者の顔ぶれも違っていて、それぞれのプロダクトの常連さんや一見さん、卒業生 (が残したコード) など含めてコミュニティというのが形成されている。
59ページ
OSS コミュニティのひとつとして Ruby on Rails というのがある。Rails Developers Meetup と Rails の名前を冠しているいべんということで、ここにきて Rails に回帰した話にしている。
60ページ
Rails Developers Meetup らしく、rubyonrails.org のキャプチャ。
61ページ
rubyonrails.org でコミュニティと書かれたリンクを押してみようというページ。
62ページ
リンク先の Rails Contributor のページ。ちょうど Rails 5.2 のベータも出ていることから Edge のページにしておいた。
ちなみにこのページ自体も Rails コミッターのシャビエルさんが作った Rails アプリケーションだったりする。
63ページ
OSS への参加が不安なひとは OSS Gate というコミュニティから参加してみるのも手という OSS Gate の宣伝。
https://oss-gate.doorkeeper.jp
64ページ
タイトルの Enter the OSS world に繋げようとしたまとめ。当日はこのページで銅鑼が鳴ってほぼ理想的な終了タイミングとなった。
65ページ
当日お披露目することのなかった次回予告ページへ。
66ページ
当日話したのは三部作の2つめ。
67ページ
次回予告は三部作の3つめ。
68ページ
三部作の仮表紙。Fate Heaven's Feel に倣って、パート1のサブタイトルは「presage flower」→「presage comment」、パート2は「lost butterfly」→「lost boundary」としているけれど、パート3のサブタイトルは公開されていないので名付けられないのであった。
69ページ
RubyKaigi 2017 で「話を聞きにきただけではなくて、何人かの開発者に話しにきた」と yahonda さんに話した際にもらった印象的な言葉。ちなみにこのときに私が RubyKaigi に行って話したかった開発者は普段会えなかったりなかなかな会えない、yahonda さん、nobu さん、pocke さんだった。
70ページ
Ruby らしく end
でおわり。amatsuda のプレゼンテーションへのオマージュ。