Rails Developers Meetup 2017

Rails Developers Meetup 2017 に登壇枠で参加してきた。会場は SHIBUYA TECH PLAY さん。

今回のイベントでは自分の発表以外に、銅鑼スポンサーの手配をしたりとかしていた。銅鑼運搬、運用の hisas お疲れ様でした。また平野さん、秒速さんはじめスタッフの皆さんありがとうございました。

当日の発表スライドは以下で、この日記では 5 分で話せるわけないだろうといったこのスライドへのページ解説をしてみようと思う。

speakerdeck.com

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 で動く (と思う) 唯一かもしれないアダプターだと思う。

github.com

4ページ

Rails 5.2 の beta が出ているので使って行きましょうという話と、beta で問題を見つけた場合も master で直っている可能性があるので master のヘッドを指定しましょうという話。

5ページ

マージコミットを抜いた Rails の 2017 年コミットランキング。トップ12のうち会場には最後4人いた。kamipo さん、y-yagi さん、yhirano55 さん、オレ。

github.com

6ページ

勤務先の宣伝。その1。

7ページ

RuboCop 0.51.0 という今回話すプロダクトとそのバージョンについて。

8ページ

RuboCop 0.51.0 のチェンジログ。全文は以下。

github.com

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 だとこうなる。

github.com

25ページ

自分が選んだ Issue 。日頃の活動の中で Rails のイベントにあわせて Railswith_options に関わる Issue の話を選んでいた。

github.com

26ページ

問題となっている Cop について。ドキュメントは以下。

Class: RuboCop::Cop::Rails::HasManyOrHasOneDependent — Documentation for rubocop (0.51.0)

27ページ

自分が問題を直した PR の紹介の入り。

github.com

28ページ

バグフィックスを作るためは再現テストを書くことから。

29ページ

Parser gem による AST の話。ある Ruby コードの AST は ruby-parse コマンドで取得できる。以下は例。

% ruby-parse -e "puts 'hello'"
(send nil :puts
  (str "hello"))

30ページ

自作の Ruby AST Visualizer を使った図。これノードの表現にバグがありますね。。。

github.com

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_methoddefine_singleton_method のような動的なメソッド定義を行なう、RuboCop 内部でマッチする AST を定義する API となる。

36ページ

レビューコメントへの自分のレスのキャプチャ。

37ページ

その PR で解決した問題に対して、レビューコメントが解決の範囲外の話題をしているようであれば別 PR にする提案をして太った PR にするのを避けましょうという話。

38ページ

上述のテキストページ。

39ページ

別 PR にしましょうと提案した PR への入り。InternalAffairs/DynamicPredicateName cop という cop 名で提案していた。ちなみに InternalAffairs という部署は RuboCop 開発向けの cop で名前のとおり内部業務用の cop がいる部署なのだった。

github.com

40ページ

設計を UML で表そうという前世紀へのオマージュの図。その既存クラス。

41ページ

既存のクラスから Extract Method を使った設計の図。refactoring.com 的な表現。

Extract Class

42ページ

前ページの前段を踏まえた機能追加の図。

43ページ

y-yagi さんの jpcal の宣伝。この3連休で作ったのが最初の PR だった。

github.com

44ページ

実際の PR のキャプチャ。

45ページ

PR 改善への入り。

46ページ

pocke さんからの提案のキャプチャ。

47ページ

自分のレスのキャプチャ。

48ページ

pocke さんの提案で一番ここが良いと思った感想のテキスト。

49ページ

再実装した PR の入り。

50ページ

PR のキャプチャ。以下、最終的に取り込まれた PR となる。

github.com

51ページ

UML 表現。

52ページ

config/default.yml による published API の定義について。いくつかのスタイルをサポートする cop について、どんなスタイルがあり、どのスタイルをデフォルトにしているかといった情報なんかは、このファイルを見ると分かる。どういうことかというと、ドキュメントにはまだ漏れがあるからこの default.yml なら確実という意味。

github.com

def_node_matcherdef_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 のキャプチャ。

rubyonrails.org

61ページ

rubyonrails.org でコミュニティと書かれたリンクを押してみようというページ。

62ページ

リンク先の Rails Contributor のページ。ちょうど Rails 5.2 のベータも出ていることから Edge のページにしておいた。

contributors.rubyonrails.org

ちなみにこのページ自体も Rails コミッターのシャビエルさんが作った Rails アプリケーションだったりする。

github.com

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 のプレゼンテーションへのオマージュ。