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

巨大なRailsアプリケーションを「普通」にするための取り組み

 巨大なRailsアプリケーションを「普通」にするための取り組み

Kazuhito Hokamura

February 06, 2019
Tweet

More Decks by Kazuhito Hokamura

Other Decks in Technology

Transcript

  1. •コードを変更すると意図しないところが壊れる。例えばウェブサービスをいじるとガラケーの認証が壊れる。 •ライブラリが古かったとしても依存が多すぎて気軽に更新できない。 •実行環境が非常に複雑かつ特殊で、迂闊にデータベースを追加したりできない。 •普通のツールが動かない。例えばコードカバレージが取れない、並列テストが動かない。 •ObjectクラスやStringクラスのような非常に基本的なクラスが改変されており、普通の動きをしない。 •あるコードのオーナーが誰かわからない。例えばuserリソースのAPIを変更したくても誰にも相談できない。 •開発者が多すぎて、改善系のpull requestを作ると頻繁にコンフリクトする •I/Oの激しいシステムを追加するためにDynamoDBを使いたいと思ったとしても、 AWS-SDKのバージョンが古いのでまずは

    SDKのバージョンを更新するのに1ヶ月かかる •テストが遅いので検証にも時間がかかり、そのあいだに別のpullreqがマージされてコンフリクト •実装を進めていくと既存のクラスに変更が必要そうなことがわかってきたがオーナーが誰かはわからない •がんばって実装してみたが触ってもいないバッチのCIが通らない •ようやく理由がわかって直してデプロイしたらなぜかガラケーサイトが落ちた •etc................... IUUQTUFDIMJGFDPPLQBEDPNFOUSZPEBJCBTUSBUFHZΑΓൈਮ
  2. Machinist Recipe.blueprint do title { 'recipe title' } description {

    'recipe description' } user { User.make } end Recipe.make(title: 'foo')
  3. FactoryBot FactoryBot.define do factory :recipe do title { 'recipe title'

    } description { 'recipe description' } user end end FactoryBot.create(:recipe, title: 'foo')
  4. hako化への道のり •symlink が大量にあって docker build がつらい ‣ rsync --copy-links で乗り切る

    •Spreadsheetで管理されていた秘匿値の移行 ‣ がんばって Parameter Store に移行 •古の fluentd の設定を読み解く •一部のサーバーでcronが動いてたりする