2021年4月のふりかえりです。 引き続き B 社(週5日)にて Rails 製の EC サイトの開発業務と Engineering Manager / Scrum Master 業務に携わっています。

4 月はマネジメント1割、プレイヤー9割といった割合で対応していました。

マネジメント系

  • 中長期計画・NextArchitecture・システム状態について資料の共有だったり説明だったりをしました。
    • 先月 作成した資料ですね。
  • 4月〜5月にかけてメンバー加入が続くので esa のドキュメントの整理などを合間みつつやっていました。
  • 日々の開発の指針として活用する目的で、いくつかのエンジニア向けガイドを書き始めています。
    • Message Queue、データストア、アプリケーションアーキテクチャやパターンについてなど。
      • 今四半期〜来四半期の半年がかりでどんどん充実させていく予定です。
    • 背景としては以下のようなポイントになります。
      • 現状のチームメンバーに大規模トラフィック・大規模システムの経験者が不足している。
        • データボリューム増・トラフィック増に対応できていない・想定できていない設計が多い。
          • とりあえずリリースする!という勢い駆動開発しかやってこなかったツケが回ってきている感じですね。
          • すべてのスタートアップが通るペインポイントだと思いますが、短期の生産性が落ちることに対するビジネスサイドの理解も必要な、組織として大人になるための通過儀礼だと思っています。
      • IT統制整備への布石でもあります。

プレイヤー系

  • EC高速化とキャパプラ引き続き。
    • 引き続きキャッシュ強化による高速化対応を色々入れました。中旬くらいで一段落しています。
    • 徐々にマーケティング施策を実施した結果(それなりにハネます)をみながらインスタンスの配置を最適化できるようになっていきました。
      • 大量メール配信や Line 配信等実施している状況で何事もなく稼働できるようになっています。(4 月末時点。3 月まではできなかった)
  • Rails の mimemagic 問題 の影響をちゃんと(?)受けつつ対応しました。
    • みなさんおつかれさまです。
  • Imgix のプランの最適化と実装の最適化をすすめました。
  • delayed_job => Sidekiq 移植。
    • 先々月から粛々と継続対応しています。4 月中に全部は終わらなかったです。
      • メール配信まわりに影響があるものが残っていて、物日がすぎるまでは寝かせるかんじにしようかな、というところです。(失敗時のリスクが大きすぎる)
  • Capistrano によるデプロイが大分遅くなっていて調査したり対応したりしていました。
    • Webpack ビルドが何故か 2 回実行されていたので 1 回にしました(別件のバグ修正の影響でデグレっていたようです)。
    • そもそも Webpack ビルドが遅いので高速化したり
      • こちらは Webpack3 => Webpack4 などもやったりしましたが、対応していくうちに上記のとおり 2 回実行されとる!というのを発見してそちらの修正を行って終わり!というところにしました。
        • 物日前で影響大きい修正を入れたくないという感じでした。
        • Webpack4 化は物日終わったらやっちゃっていいかなという感じです。(だいたい終わってる)
        • 今回の対応をしていく中で、アセットパイプラインが直列になっており Webpack ビルド => 結果を Sprockets で再度ビルドという流れになっていることを発見したので、これは並列化しようと思っています。
          • あわせて、Capistrano でビルドするのをやめて Github Actions でビルド => CloudFront 配信に変更予定です。
          • あわせて、Sprockets ビルドも Github Actions にするかもです(ここはまだ検討してないです)。
  • Mac で Datadog Agent を動かしてパフォーマンス改善の結果確認をしているのですが、結構起動しっぱなしになっちゃうよね〜というのをチームでふりかえっていて、それの対応を行いました。
    • datadog api で Hosts に Mac で動いている Agent がいたら Slack 通知する感じです
    • Github Actions で実装しました
  • コンテナベースのアーキテクチャへ移行する予定で、その準備をはじめています。
    • 現行コードベースが動く Docker イメージの作成を行いました。
      • Rails の部分は動くようになっていますが、PDF 作成処理や分かち書き関連などあり、ちゃんと動くイメージ作成まではまだ至ってないはずです(動作確認できてない)。
    • 既存の Whenever (Cron) で実現している部分の移行プランは検討中。(Scheduled Task 予定)
    • アセット系ファイルをコンテナイメージから外す方向で進めているので、その準備やタスクの整理も行っています。
      • 検討のため実際にちょっと外す実験をしたりもしています。
        • この流れで app/assets/images/public 配下のファイルを Imgix から配信するように変えたりしました(まだ一部だけ)。
        • imgix-rails 使いましたが、ちゃんとパラメータを調整すると調整しきった img タグが生成されてすばらしい gem だなとおもいました。
      • 上述した Webpack ビルド、Sprockets ビルドの Github Actions 化・CloudFront 配信化などもコンテナイメージから外す点を視野に入れつつな検討内容だったりします。
    • ローカルの Webserver を Webrick から Puma に変えました。
      • Production 環境をコンテナベースの環境に移行後は、Apache + Passenger から Puma に変更しようとしており、その一環の対応になります。
      • ローカルで Puma 由来の問題がでないかチーム全員で毎日使ってみるという状況にしています(継続中)。
  • 4 月から増員が始まっており、コードベースの安定性を向上させる目的で、Rubocop の Metrics cop を一般的な Rails プロジェクト並にキツめの設定に変えていきました。
    • 既存コードは一定しょうがない部分があるので個別に Disable にしつつ、新規にマージされるコードがちゃんと書かないといけない程度にきつい感じにしました。
    • AbcSize でいうと 35 にしました。

おわり