Railsバージョンを最新に保つ俺たちの話 〜2重弁当添え〜

Railsバージョンを最新に保つ俺たちの話 〜2重弁当添え〜

2018/3/24 RailsDevelopersMeetup2018
ランチセッションでの発表資料です

B421be6601a66c0941ca32d0478cb17c?s=128

Misoca Inc.

March 24, 2018
Tweet

Transcript

  1. Railsバージョンを 最新に保つ 俺たちの話 〜2重弁当添え〜

  2. 本日のお弁当

  3. 本日のお弁当 HAL YAMASHITA 東京 「虎竹」

  4. 本日のお弁当 ▪ 海山御飯 ▪ 鶏肉のローズマリー味噌漬焼 ▪ 旨味煮卵 ▪ いぶりがっことクリームチーズのポテトサラダ ▪

    揚げ蓮根のバルサミコ風味 ▪ 炊き合わせ色々 ▪ など HAL YAMASHITA 東京 「虎竹」
  5. 本日のCDN ※Contents = お弁当

  6. Railsバージョンを 最新に保つ 俺たちの話 〜2重弁当添え〜

  7. 今日お話すること ▪ Misoca? ▪ 日常と開発スタイル ▪ Misocaの誕生と最新に保つ現状 ▪ 試してみた話

  8. 今日お話すること ▪ Misoca? ▪ 日常と開発スタイル ▪ Misocaの誕生と最新に保つ現状 ▪ 試してみた話

  9. ▪ 「請求書がめんどくさい!」を解決する ▪ 自動で郵送される仕組みも提供

  10. None
  11. 技術的な特徴

  12. Rails - 最新リリースバージョン

  13. Ruby - 最新リリースバージョン

  14. Webpacker - 最新リリースバージョン

  15. None
  16. そんな「俺たち」の話をします

  17. バージョンを最新にするチームって どういう日常を送ってるのか?

  18. どのようにして 今のスタイルになったのか?

  19. 挑戦してきたこと・していること

  20. 今日お話すること ▪ Misoca? ▪ 日常と開発スタイル ▪ Misocaの誕生と最新に保つ現状 ▪ Misocaの試してみた話

  21. 東京以外から来たひと〜

  22. 私たちは.. 富山 岐阜 岐阜

  23. リモートワークを採用してます

  24. 富山県民:特に今年は良かった

  25. 誰でもいつでも ▪ 誰でもいつでもリモートワークOK ▪ 申請・許可は不要

  26. 誰でもいつでも ▪ 誰でもいつでもリモートワークOK ▪ 申請・許可は不要

  27. 情報の共有・コミュニケーション をどうやってるか?

  28. オフィス⇆リモートは相互に常時接続 ▪ 互いに様子を把握できる ▪ リモートの疎外感が無くなる(≠ 監視)

  29. GoogleHangouts→Zoom ▪ 以前はGoogleHangoutsを利用 ▪ リモートの人数が増え、利用が辛くなった ▪ Zoomを試したところ良かった → 乗り換えた

  30. 日報 毎日書いてます! (esa)

  31. 気持ちや意識の 共有が一番上 (正直「やったこと」は あんまり見てない) 日報

  32. #now_nippou 日報通知チャンネル 「手伝いましょうか?」 のきっかけに 日報

  33. 朝会・Geekbot ▪ 毎日朝会を実施 ▪ GeekBotを使った 非同期の朝会も

  34. 日々の改善

  35. ふりかえり ▪ プロジェクトごと・全体の2種類で毎週 ▪ KPT+A

  36. ふりかえり ▪ A = Action ▪ 「やりたい」「やってみよう」だけではなく 「やる」ものを明確にしてる ▪ Actionには必ず誰かがサインアップする

    ▪ 翌週には進捗状況を皆で共有 ▪ 流れが滞らないようにしてる
  37. 事後検証 ▪ プロジェクト(1週間〜2ヶ月程度)の終わり ▪ 開始〜終了をふりかえり、学びを抽出・共有

  38. 開発スタイル

  39. ペアプロ ▪ 日常的にやってます ▪ もちろんリモートも!

  40. ペア「プロ」だけじゃない

  41. たとえば ▪ 障害アラートへの対応・調査 ▪ 採用時の技術面談 (候補者の方とがっつりペアプロ)

  42. 「ペア」プロだけじゃない

  43. とあるプロジェクト ▪ 悩ましい実装をしないといけない ▪ 基盤的な部分 ▪ 今後を考えるとメンバー全員で理解したい ▪ ペアでやってから共有とか勉強会をする? ▪

    それはそれでコストが高いし手間だな〜
  44. みんなでやればいいのでは?

  45. モブプロだ!

  46. やってみた ▪ 全体で共有 →他のプロジェクトでもモブプロをするケースが増えた

  47. 作業配信専用channel ▪ 専用のSlack Channelができた ▪ SlackCallで配信・誰でも自由に出入り可

  48. 開発者ブログ - http://tech.misoca.jp/ ▪ 約1記事/週 で更新してます ▪ 持ち回りではない (自主的に書いてる)

  49. ▪ 書いてきた内容もいろいろ 開発者ブログ - http://tech.misoca.jp/

  50. ▪ 一番バズった記事 開発者ブログ - http://tech.misoca.jp/

  51. 色々試している / 試してきた ▪ リモートワーク ▪ Zoom ▪ ペアプロ・モブプロ ▪

    事後検証 ▪ 開発者ブログ ▪ など...
  52. 「試してみよう」 ▪ Misocaで掲げている行動指針の1つ ▪ やるかやらないか迷ったら、とりあえず試す

  53. もちろん技術面でも!

  54. 今日お話すること ▪ Misoca? ▪ 日常と開発スタイル ▪ Misocaの誕生と最新に保つ現状 ▪ 試してみた話

  55. 自己紹介 @eitoball かたぎりえいと

  56. ところで、アンケートを 1. RailsやRubyの更新に興味が ある。 2. Misocaに興味がある。 3. お弁当に興味がある。 4. 何となく。

  57. 誕生と現状

  58. 2011年06月02日創業

  59. None
  60. None
  61. https://www.slideshare.net/toyoshi/ruby-3100004

  62. None
  63. None
  64. 2011年11月

  65. Ruby 1.9.2 Rails 3.1.1

  66. 2012年 2012/06 Ruby 1.9.3 (p194) Rails 3.2.5

  67. 2012年 2012/06 Ruby 1.9.3 (p194) Rails 3.2.5 サービスの充実に注力していた ため、6月に1度更新(1/1)

  68. 2013年 Rails 3.2.13 Rails 3.2.12 Rails 3.2.11 Rails 3.2.14 Rails

    3.2.15 Rails 3.2.16 2013/01 2013/02 2013/03 2013/07 2013/11 2013/12 2013年06月 Rails 4.0 リリース
  69. 2013年 Rails 3.2.13 Rails 3.2.12 Rails 3.2.11 Rails 3.2.14 Rails

    3.2.15 Rails 3.2.16 2013/01 2013/02 2013/03 2013/07 2013/11 2013/12 2013年06月 Rails 4.0 リリース 6月にRails 4.0がリリースされた が、3.2系のままで更新(0/6)
  70. 2014年 Rails 3.2.17 Rails 4.1.8 2014/01 2014/02 2014/07 2014/11 2014/12

    Ruby 1.9.3 (p484) 2014/04 Ruby 2.1.1 Ruby 2.1.5 2014/05 Rails 4.0.4 Rails 4.1.1 2014/06 Rails 4.1.2 Rails 4.1.4 2014/09 Rails 4.1.6 2014年04月 Rails 4.1 リリース
  71. 2014年 Rails 3.2.17 Rails 4.1.8 2014/01 2014/02 2014/07 2014/11 2014/12

    Ruby 1.9.3 (p484) 2014/04 Ruby 2.1.1 Ruby 2.1.5 2014/05 Rails 4.0.4 Rails 4.1.1 2014/06 Rails 4.1.2 Rails 4.1.4 2014/09 Rails 4.1.6 2014年04月 Rails 4.1 リリース 4月にRuby 2に更新。5月に Rails 4.0に更新して、同月、 Rails 4.1に(3/7)
  72. 2015/03 2015年 Rails 4.2.4 2015/01 2015/02 2015/11 2015/12 Ruby 2.2.0

    Ruby 2.3.0 2015/06 Rails 4.2.1 Rails 4.2.2 Rails 4.2.3 Rails 4.1.9 Rails 4.2.0 Rails 4.2.5 Ruby 2.2.4 Ruby 2.2.3 2015/08 2015年05月26日 「株式会社Misoca」社名変更
  73. 2015/03 2015年 Rails 4.2.4 2015/01 2015/02 2015/11 2015/12 Ruby 2.2.0

    Ruby 2.3.0 2015/06 Rails 4.2.1 Rails 4.2.2 Rails 4.2.3 Rails 4.1.9 Rails 4.2.0 Rails 4.2.5 Ruby 2.2.4 Ruby 2.2.3 2015/08 2015年05月26日 「株式会社Misoca」社名変更 最新のリリースバージョンに更 新するようになる。Ruby 2.3 は 12月26日に更新(4/7)
  74. 2016/03 2016年 Rails 4.2.7.1 2016/11 2016/12 2016/07 Rails 4.2.5.2 Rails

    4.2.6 Rails 4.2.7 Rails 5.0.1 Ruby 2.3.3 Ruby 2.3.1 2016/08 Ruby 2.3.2 2016/09 Rails 5.0.0.1 2016年06月 Rails 5.0 リリース
  75. 2016/03 2016年 Rails 4.2.7.1 2016/11 2016/12 2016/07 Rails 4.2.5.2 Rails

    4.2.6 Rails 4.2.7 Rails 5.0.1 Ruby 2.3.3 Ruby 2.3.1 2016/08 Ruby 2.3.2 2016/09 Rails 5.0.0.1 2016年06月 Rails 5.0 リリース Rails 5.0への更新は少し遅れて 8月に(3/6)
  76. 2017/03 2017年 2016/11 2017/12 2017/06 Rails 5.0.2 Rails 5.1.0 Rails

    5.1.1 Ruby 2.4.3 Ruby 2.4.1 2017/08 Ruby 2.4.2 2017/09 2017/01 Ruby 2.4.0 Ruby 2.5.0 2017/02 2017/05 Rails 5.1.2 Rails 5.1.3 Rails 5.1.4
  77. 2017/03 2017年 2016/11 2017/12 2017/06 Rails 5.0.2 Rails 5.1.0 Rails

    5.1.1 Ruby 2.4.3 Ruby 2.4.1 2017/08 Ruby 2.4.2 2017/09 2017/01 Ruby 2.4.0 Ruby 2.5.0 2017/02 2017/05 Rails 5.1.2 Rails 5.1.3 Rails 5.1.4 ほぼ、リリース直後に更新(5/6)
  78. 2018年 Rails 5.1.5 2018/02 $ bundle exec rails server =>

    Booting WEBrick => Rails 5.1.5 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options [2018-03-19 00:38:28] INFO WEBrick 1.4.2 [2018-03-19 00:38:28] INFO ruby 2.5.0 (2017-12-25) [x86_64-darwin16] [2018-03-19 00:38:28] INFO WEBrick::HTTPServer#start: pid=20184 port=3000
  79. 2018年 Rails 5.1.5 2018/02 $ bundle exec rails server =>

    Booting WEBrick => Rails 5.1.5 application starting in development on http://localhost:3000 => Run `rails server -h` for more startup options [2018-03-19 00:38:28] INFO WEBrick 1.4.2 [2018-03-19 00:38:28] INFO ruby 2.5.0 (2017-12-25) [x86_64-darwin16] [2018-03-19 00:38:28] INFO WEBrick::HTTPServer#start: pid=20184 port=3000 現在まで、Rubyの更新は14回、 Railsの更新は33回。
  80. 更新できるようになった理由 ▪ 多く更新をすることで経験を積 んだ。 ▪ Misocaの成長に伴い人が増え た。

  81. 更新の時、問題はな かったのか?

  82. 更新の時、問題はなかったのか? 特に大きな問題はな かった。

  83. 大きな問題がなかった理由 ▪ テストが充実していて、事前に変更が必 要な部分をテストで検知することができ た。 ▪ 回数を多くすることでノウハウがたまっ た。 ▪ (Railsの場合)更新ガイドがしっかり書か

    れていて、それに従った。
  84. でも、困難はありました… Ruby Rubyを更新しようとして、GCの 不具合でテストが時々不可解に 失敗することがあった ▪ Rubyが修正されるまでまった ▪ テストフレームワークが依存しているgem に不具合があり修正PRをだした

  85. でも、困難はありました… Rails Rails を更新しようとすると対応 していない gem があった ▪ 一時的に対応されたブランチを使ったり、 対応するように修正PRを出したりした

  86. 更新する理由は?

  87. 更新する理由 ▪ 脆弱性が対応されているから ▪ 不具合が修正されているから ▪ 新機能を早く試した いから

  88. https://mlomnicki.com/yield-self-in-ruby-25/

  89. https://medium.com/statuscode/introducing-webpacker-7136d66cddfb

  90. http://rspec.info/blog/2017/05/rspec-3-6-has-been-released/

  91. 「試してみよう」

  92. RubyやRailsの 更新手順

  93. RubyやRailsの更新手順 1. バージョンを上げてみる。 2. WIPなプルリクエストを出す 3. ビルドする。 4. (ビルドが成功しない場合は)修正する。 5.

    ビルドが成功するまで繰り返す。 6. PRをレビューしてもらう。 7. マージする。 8. リリースする。
  94. 気をつけているこ と

  95. 更新の際、気をつけていること ▪ deprecationなどの警告は全て対処する。 ▪ 変更履歴やリリースノートを読む。 ▪ Railsの場合は、「A Guide for Upgrading

    Ruby On Rails」も ▪ プレビューやリリース候補のバージョンから試してみる。 ▪ 可能であれば、早めに変更を取り込む。
  96. GemやJSの 更新手順

  97. Dependabot

  98. Dependabot • gemやJavaScriptモジュールの更新1 つにつき1PR • Gemfile.lockやyarn.lockがコンフリク トすると自動で解消 • PRのdescriptionにCHANGELOGの 内容やコミットログを追加

  99. まとめ Misocaでは、できるだけ早く最新 のリリースバージョンのRubyと Railsを使っています。 皆さんも「試してみよう」の精神でやってみ てはいかがでしょうか?

  100. 今日お話すること ▪ Misoca? ▪ 日常と開発スタイル ▪ Misocaの誕生と最新に保つ現状 ▪ 試してみた話

  101. Misocaの フロントエンド

  102. Webpacker +

  103. 移行の理由 Browserifyが遅くて フルビルドで数分待たされて辛い

  104. 「Webpack使うと早くなりそう」

  105. 「Webpackerってのがあるぞ?」

  106. (ついカッとなって) 試した

  107. Rails Developers Meetup #4 (2017/08) 「Webpacker is installed」

  108. 乗り換えてよかったこと

  109. フルビルド 数分 → 20秒まで短縮

  110. CIも速くなって快適

  111. Railswayに乗っかるので 気持ちよさがある

  112. 若干大変なこと

  113. メジャーバージョンアッ プ早い

  114. バージョン1から 付き合ってる

  115. v1→v2 v1で導入実験してたら v2がリリースされる → 初回リリース時はv2

  116. v2 → v3

  117. v3 → v4 ? ▪ 現在 Webpacker 3.3.1 ▪ Webpack

    4系がリリースされた ▪ そのうち Webpacker 4.0?が来るよなぁ
  118. メジャーバージョンアップがくる度に 「やってやるぞ!」感で盛り上がる

  119. 総合的にみて良かった

  120. MisocaのCI

  121. 分散テスト rrrspec by クックパッドさん

  122. Jenkins + rrrspec

  123. 導入した理由

  124. 使ってるサーバーの見 直し時期

  125. 「AWS使ったらいい感じに並 列実行できるのでは?」

  126. 「最近雑誌でrrrspecの 特集見たよ」

  127. 試してみよう!

  128. 最初は同じぐらいの パフォーマンスを狙っていた

  129. 20分 → 10分

  130. スケールもできるように なった

  131. 快適にテストできるように なった 現在は9126 examples

  132. そんなCI

  133. 使えば使うほど、切れ味は悪くなりまして

  134. rrrspec移行後も 20分ぐらいかかるように

  135. 開発者がどんどん増えた テストもどんどん増えた 専任のメンテナーがいない

  136. 「開発生産性向上」 プログラムで いい感じにするぞ!!

  137. キャッシュ効かせる 重いテストのリファクタリング AWSに課金

  138. 20分 → 5分

  139. 爆速 快適 気持ち良い

  140. 錆びた斧を 放置しないことが大事

  141. Misocaの 社内勉強会

  142. Rails 輪読会

  143. Rails本体のコードを読む 有志ではじめた

  144. どんな感じで進めてるの? ▪ 昼休みに開催(12:15〜12:45) ▪ その日の担当が 事前に調べて esaなど にまとめる ▪ 30分

    ◆ 15分で説明 ◆ 15分で深掘り・雑談 ▪ 参加者は5人 + 聞き専 ◆ 勿論リモートOK
  145. 話した内容 最初は「ActiveRecordから読んでみるか〜」って始めた ▪ 第1回:進め方を話し合った ▪ 第2回:ActiveRecord::Railtie ▪ 第3回:ActiveRecord::Base#save ▪ 第4回:ActiveRecord::Associations::*

    ▪ 第5回:ActiveRecord::Associations::CollectionProxy ▪ 第6回:ActiveSupport Integer拡張 ▪ 第7回:ActiveRecord::Associations::CollectionProxy(リベンジ) ▪ 第8回:ArelでSQLが作られるまで ▪ 第9回:ActiveRecord::Attributes, ActiveModel ▪ 第10回:ふりかえり、今後について
  146. 参加者の声

  147. 事後検証

  148. かなり好評◎

  149. 「楽しい!」 「ボリューム感がちょうどよい」 「継続できそう」 「もっとテクいコードかと思ってた」 「基本をおさえたコードで勉強になる」

  150. 「この先どうする?」

  151. 「PRやissueベースで見てもいいかも。」 「何が問題か?何が解決されたか?目線で見 れそう」 「三人寄れば文殊の知恵だ」 「コントリビュートしていこう」 「社内だけに留めておくのもったいない」

  152. 学んでいこう 貢献していこう 継続して試すぞ!

  153. 貢献?

  154. スポンサー ▪ RubyKaigi ▪ Rails Developers Meetup (本日) ▪ Rails

    Girls ▪ 名古屋Ruby会議 ▪ 引き続き協賛していきます!
  155. 採用

  156. エンジニアの7割近くが 採用に何かしらの形で関わっている

  157. ペアプロ ペア設計 疑似リモート体験

  158. 新しい職場は不安ですよね

  159. 入社を決める前に

  160. お互いがどういう人か知るのは とてもいいこと

  161. 面接の過程で安心して 楽しく働けることを 実感してもらいたい

  162. 気づいたら みんなで採用やってた

  163. 応募待ってます! https://recruit.misoca.jp

  164. ありがとうございました!