天の月

ソフトウェア開発をしていく上での悩み, 考えたこと, 学びを書いてきます(たまに関係ない雑記も)

年末の大掃除〜リファクタリング・コード断捨離勉強会〜に参加してきた

timeedev.connpass.com

こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。

会の概要

以下、イベントページから引用です。

タイミー、ユニークビジョン、リブセンス、RightTouch(PLAIDグループ)の4社合同で年末に向けた大掃除勉強会と称してリファクタリング、コード断捨離勉強会を開催します。

会の様子

大規模なシステムは「内側」から実装しよう!AWS 初心者が計算処理の実行基盤を移行した話

最初に伊藤さんから、大規模システムの計算処理のリファクタリングに取り組んだ事例のお話がありました。

自社プロダクトである転職ドラフトには、秘伝のSQLがあったそうで、このSQLが高頻度で失敗することが問題になってきたそうです。

もちろんSQLを改善させる方法もありますが、中身がブラックボックスになっていたり、ガベージコレクションをはじめとしたパフォーマンスのための工夫は実施済みだったので、AWS上で実行することにしたそうです。

実現する際には、コアの機能を実現する最小構成を作るとことから、マイルストーンを作りながら実行したそうで、具体的には

  1. EC2内でタスクを実行する
  2. ECSとRDSを立ち上げタスクを実行する
  3. サービス本体のRDSと新規に作成したECSを接続し、計算結果をサービス本体のRDSにINSERTできるようにする
  4. dumpをS3にバックアップ
  5. EventBridgeで一連のタスクを定期実行
  6. Terraformでリソースを定義

という流れで実装したということでした。

キーボードを押す度にバグるので、なるべくキーボードを押さない開発がしたい

次に青柳さんから、バグを減らすために行った様々な施策に関する発表がありました。

バグはキーボードを打つから生まれるのでは?と思い至った青柳さんは、キーボードをなるべく打たなくて済むことを意識しだしたということでした。(半分冗談)

実際にキーボードを打たなくてもよくするための取り組みとしては以下があるそうです。

  • DRY原則
  • エディターの自動補完(ストアードプロシージャに関しては自動補完する仕組みを自前で作った)
  • マルチカーソル
  • ERDからモデルクラスを自動生成
  • OpenAPIの自動生成
  • LLM
  • 単語のコピペ
  • (おまけ)HHKBのOEA配列でキーボードを打っても楽しくしている

機能リプレースで進化する:フロントエンド刷新と柔軟なサーバーモデルへのリファクタリング

続いて、Yabuさんからフロントエンドを刷新した経験のお話がありました。

Yabuさんチームが開発していたSupport Widgetは、Svelteを拡張してきたことで、ロジックの複雑化が発生したり、設定UIのUXが低下してきたりしたそうで、まるっとすべて作り出そうという決断をしたということです。

Svelteは、チームの知見不足によって実装が微妙になっていた上、再描画の仕組みになれなかった点が辛かったということで、より汎用的なWebサポートをするために、Support Actionを仕組みとして導入したそうでした。

そこで、SvelteからPreactへの移行を決断したそうで、サーバーモデルとともにリファクタリングを実施したそうです。(サーバーモデルは、コアとなるAction型をシンプルにしつつ、役割ごとにComponentで抽象化したということでした)

こうした大規模なリプレイスでしたが、結果的に短い時間で無事に移行が終えられたそうで、この要因としては以下の点が挙げられるという話が出ていました。

  • サンドボックスで実験した
  • シンプルさと構造化の妥協を防いだ
  • 夫妻に対するもやもや感からリプレースへのモチベが高かった
  • 普段からリファクタリング会をやっていた
  • 社内の理解が得られた

RailsアプリケーションをSPA化しながら容赦ない削除をした話

最後に江田さんから、UIリニューアルの取り組み内容に関して話がありました。

まず、江田さんのPJ*1がUIリニューアルを実施した問題意識に関して話がありました。問題意識としては以下の点があったということです。

  • フロントエンドの内部品質改善に時間が割けていない
  • Railsのビューにビジネスロジックやクエリ発行箇所がある
  • BootStrapをベースにしつつ独自CSSも書いてた
  • JQuery...

そこで、TypeScript+Next.jsの別リポジトリを切り、

  • Fat Controllerの削除
  • 思考停止で作られていた確認画面の削除
  • CSS, JSライブラリの削除(BootStrapベースのMaterial Dashboardなど)

といったようにいらないものをガンガン消していった結果、5万行以上のコードを消すことができたそうで、徹底的な削除を通して内部品質の改善ができたということでした。

会全体を通した感想

リファクタリングやコード断捨離のエピソードが4社4様で、それぞれのアプローチが聞けて面白かったです。

そんなに特異的なアプローチをしている部分はなかったですが、やはりコードをガンガン消すというのはめちゃくちゃいいなあと思いながら見ていました。

*1:モノリスRailsシステムの