Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Misoca Inc.

March 24, 2018
Tweet

Other Decks in Technology

Transcript

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

    View Slide

  2. 本日のお弁当

    View Slide

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

    View Slide

  4. 本日のお弁当
    ■ 海山御飯
    ■ 鶏肉のローズマリー味噌漬焼
    ■ 旨味煮卵
    ■ いぶりがっことクリームチーズのポテトサラダ
    ■ 揚げ蓮根のバルサミコ風味
    ■ 炊き合わせ色々
    ■ など
    HAL YAMASHITA 東京 「虎竹」

    View Slide

  5. 本日のCDN
    ※Contents = お弁当

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. View Slide

  11. 技術的な特徴

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. 日々の改善

    View Slide

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

    View Slide

  36. ふりかえり
    ■ A = Action
    ■ 「やりたい」「やってみよう」だけではなく
    「やる」ものを明確にしてる
    ■ Actionには必ず誰かがサインアップする
    ■ 翌週には進捗状況を皆で共有
    ■ 流れが滞らないようにしてる

    View Slide

  37. 事後検証
    ■ プロジェクト(1週間〜2ヶ月程度)の終わり
    ■ 開始〜終了をふりかえり、学びを抽出・共有

    View Slide

  38. 開発スタイル

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  44. みんなでやればいいのでは?

    View Slide

  45. モブプロだ!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  51. 色々試している / 試してきた
    ■ リモートワーク
    ■ Zoom
    ■ ペアプロ・モブプロ
    ■ 事後検証
    ■ 開発者ブログ
    ■ など...

    View Slide

  52. 「試してみよう」
    ■ Misocaで掲げている行動指針の1つ
    ■ やるかやらないか迷ったら、とりあえず試す

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  57. 誕生と現状

    View Slide

  58. 2011年06月02日創業

    View Slide

  59. View Slide

  60. View Slide

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

    View Slide

  62. View Slide

  63. View Slide

  64. 2011年11月

    View Slide

  65. Ruby 1.9.2
    Rails 3.1.1

    View Slide

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

    View Slide

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

    View Slide

  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 リリース

    View Slide

  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)

    View Slide

  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 リリース

    View Slide

  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)

    View Slide

  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」社名変更

    View Slide

  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)

    View Slide

  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 リリース

    View Slide

  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)

    View Slide

  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

    View Slide

  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)

    View Slide

  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

    View Slide

  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回。

    View Slide

  80. 更新できるようになった理由
    ■ 多く更新をすることで経験を積
    んだ。
    ■ Misocaの成長に伴い人が増え
    た。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  86. 更新する理由は?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  91. 「試してみよう」

    View Slide

  92. RubyやRailsの
    更新手順

    View Slide

  93. RubyやRailsの更新手順
    1. バージョンを上げてみる。
    2. WIPなプルリクエストを出す
    3. ビルドする。
    4. (ビルドが成功しない場合は)修正する。
    5. ビルドが成功するまで繰り返す。
    6. PRをレビューしてもらう。
    7. マージする。
    8. リリースする。

    View Slide

  94. 気をつけているこ

    View Slide

  95. 更新の際、気をつけていること
    ■ deprecationなどの警告は全て対処する。
    ■ 変更履歴やリリースノートを読む。
    ■ Railsの場合は、「A Guide for Upgrading Ruby On Rails」も
    ■ プレビューやリリース候補のバージョンから試してみる。
    ■ 可能であれば、早めに変更を取り込む。

    View Slide

  96. GemやJSの
    更新手順

    View Slide

  97. Dependabot

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  101. Misocaの
    フロントエンド

    View Slide

  102. Webpacker
    +

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  110. CIも速くなって快適

    View Slide

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

    View Slide

  112. 若干大変なこと

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  116. v2 → v3

    View Slide

  117. v3 → v4 ?
    ■ 現在 Webpacker 3.3.1
    ■ Webpack 4系がリリースされた
    ■ そのうち Webpacker 4.0?が来るよなぁ

    View Slide

  118. メジャーバージョンアップがくる度に
    「やってやるぞ!」感で盛り上がる

    View Slide

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

    View Slide

  120. MisocaのCI

    View Slide

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

    View Slide

  122. Jenkins + rrrspec

    View Slide

  123. 導入した理由

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  127. 試してみよう!

    View Slide

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

    View Slide

  129. 20分 → 10分

    View Slide

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

    View Slide

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

    View Slide

  132. そんなCI

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  138. 20分 → 5分

    View Slide

  139. 爆速
    快適
    気持ち良い

    View Slide

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

    View Slide

  141. Misocaの
    社内勉強会

    View Slide

  142. Rails 輪読会

    View Slide

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

    View Slide

  144. どんな感じで進めてるの?
    ■ 昼休みに開催(12:15〜12:45)
    ■ その日の担当が 事前に調べて esaなど にまとめる
    ■ 30分
    ◆ 15分で説明
    ◆ 15分で深掘り・雑談
    ■ 参加者は5人 + 聞き専
    ◆ 勿論リモートOK

    View Slide

  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回:ふりかえり、今後について

    View Slide

  146. 参加者の声

    View Slide

  147. 事後検証

    View Slide

  148. かなり好評◎

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  153. 貢献?

    View Slide

  154. スポンサー
    ■ RubyKaigi
    ■ Rails Developers Meetup (本日)
    ■ Rails Girls
    ■ 名古屋Ruby会議
    ■ 引き続き協賛していきます!

    View Slide

  155. 採用

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  159. 入社を決める前に

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide