Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

アプリがパッチにまみれたら

488 views

Published on

TokyuRuby会議11 (https://tokyurubykaigi.github.io/tokyu11/)

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

アプリがパッチにまみれたら

  1. 1. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 アプリがパッチに まみれたら TokyuRuby会議11 2017-07-29�(Sat) 伊藤�浩⼀�(@koic)
  2. 2. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 �
  3. 3. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 �
  4. 4. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 �
  5. 5. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 �
  6. 6. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 ドリンク アップス ポンサー
  7. 7. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 �
  8. 8. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 ティルックラル�第391篇 学ぶ価値のある知識はすべて 学べ学ん だ知 恵を⽣か し て⾏ 動せよ
  9. 9. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 今⽇ の話
  10. 10. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 rails� new�以降 はパッチ
  11. 11. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 パッチいろいろ 機能拡張✓ バグ修正✓ パフォーマンス改善✓ 依存Gemのアップグレード✓ リファクタリング✓ 機能削除✓
  12. 12. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 結論
  13. 13. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 良いパッチにま みれれば幸い、 悪いパッチにま みれたら⾟い。
  14. 14. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 良いパッ チと悪い パッチ
  15. 15. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 良いパッチ 本質的な問題を解決している✓ 必要最⼩限でいて拡張の邪魔に ならないパッチ ✓
  16. 16. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 悪いパッチ その場凌ぎで問題解決している✓ 本質的な問題解決となっておら ずしばしば拡張の邪魔になるパ ッチ とはいえ問題解決はしているので、 度合いの問題ではある ✓ ✓
  17. 17. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 今⽇の お題
  18. 18. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 みんな大好 きモンキー パッチ
  19. 19. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 課題
  20. 20. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 アプリケーションの ドメインコードと、 フレームワーク/ラ イブラリの汎用コー ドが同⼀リポジトリ に混在する
  21. 21. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 分け よう
  22. 22. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 本来フォーカスす る問題領域のみア プリケーションの コードとしてリポ ジトリにあるべき
  23. 23. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 依存する OSSを含 めた観点
  24. 24. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 良いパッチ 適切な�upstream�に対するパ ッチを送って、本質的な問題解 決をする ✓ アプリケーションコードに依存 Gem特有の問題を混ぜない ✓
  25. 25. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 問題の残るパッチ とりあえず⼿元のアプリケーシ ョンが動くワークアラウンド ✓ あの時のあのパッチがあればが 今のアプリケーションに埋もれ たままになるかも ✓
  26. 26. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 天使の助⾔と悪魔の囁き 問題の抽象化やupstream向け のテストを書く⼿間はある 往々にして汎化問題より特化問題の ⽅が簡単 ✓ ✓ 「おまえもモンキーパッチにし てやろうか」 ✓
  27. 27. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 モンキーパッチの⽌むを得な い場合 フレームワーク/ライブラリへ の抽象化が難しい、本当にアプ リケーション特有の問題 ✓ RailsAdmin�での�CSV�ダウン ロードの�ShiftJIS�変換とか あれ?この例パッチ送れるのでは...✓ ✓
  28. 28. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 ⼈間の葛藤
  29. 29. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 悪魔の囁き に敗れた際 の対処事例
  30. 30. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 bundle�updateへ負債対策 ������������������������������������������� bundle�update�に注意みたいな コメントではなく、動くコード での警告にしておく。 ✓ Gemfileへのバージョン固定にす ると固定されて終わる ✓
  31. 31. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Extract�Gem 外部Gemにして開発サイクル を分ける ✓ アプリケーション固有の問題で ないので切り出しGemfile�1⾏ にする ✓ 事例:�https://github.com/ koic/oracle-enhanced- monky̲patch̲755 ✓
  32. 32. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Gemfile ������������������������������������������ ���������������������������������������������������������� Rails�4.2.1でタイムゾーンがズ レる問題を直すGemのはずが、 Rails�5でタイムスタンプ型が変 わったことへの対応も⼊った ✓ Oracleでのスキーマ移⾏を延命 できる ✓
  33. 33. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Railsアップグレードとスキ ーマ RDBMSのスキーマの型変更は 重い話になりうる ✓ Railsアップグレードと異なる タイミングで⾏なえるようにし たのは悪い判断ではなかった ✓
  34. 34. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 究極の弱点 activerecord- oracle̲enhanced-adapter- monky̲patch̲755 ✓ わざとイケてない名前にしたけ れど、本当にイケてなくてつら い 全⼒でこの名前を消しにかかる✓ ✓
  35. 35. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 パッチ戦争 からGem 戦争へ
  36. 36. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 モンキーパッチGemを倒す Gem https://github.com/koic/ screamers ✓ oracle-enhanced- monky̲patch̲755を倒すた めに誕⽣した ✓ 怨念駆動開発✓
  37. 37. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 screamers:migration ����������������������������������������������� �������������������������������������������������� dateからdatetimeに⼀括変換す るマイグレーションファイルを ⽣成する ✓
  38. 38. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 天使界と 悪魔界の 狭間
  39. 39. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Forked�Gem upstreamのmasterでは直っ ているがリリースされていない ✓ PRは出しているがコミッター が活動していない ✓
  40. 40. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Rails�5.0.1�+�Ruby�2.4 warning:�constant�::Fixnum� is�deprecated�川が氾濫して いた ✓ ⾒たいログが警告に流されて⾒ えない ✓ 警告川の氾濫✓
  41. 41. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Rails�5.0.1で警告を鎮まら せた ���������������������������������������������������������� �������������������������������������������������� ���������������������������������������������������������������� rails/railsの5-0-stableからブラ ンチを切って、必要なコミット をmasterからcherry-pick ✓ Rails�5.0.2までのあいだ警備し ていた ✓
  42. 42. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 反応がない。どうしたら... �������������������������������������� ������������������������������������������������ パッチはある。反応はない。✓ Gemの選定は大事✓
  43. 43. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 天使の助 ⾔が勝っ たとき
  44. 44. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 Upstreamに投げる Oracleに詳しいわけではない ので、DBAに⾒てもらえる ✓ 新しい知識を得ることが出来る✓ パッチ投げていたら、コミッタ ーに推薦してもらえた ✓
  45. 45. アプリがパッチにまみれたら Powered�by�Rabbit�2.1.9 ⼩さな仕事、大きな成功 パッチの送り先はアプリケーシ ョンに限らない ✓ 依存先のupstreamにも出来る ことからコツコツと ✓ 少しずつ出来ることが増えて⾏ くので、カルマを積み重ねて⾏ きましょう ✓

×