🦾

カウシェのバックエンド開発領域における、LLMフレンドリーなコードベースとその効果

に公開

こんにちは。カウシェでバックエンド/Web フロントエンドのEMを務めているs.ichijimaです。
先日の上半期レポートでは組織全体のLLM活用を振り返りましたが、本稿ではバックエンド開発に焦点を当て、コードベースとLLMの噛み合わせ、そして数値で確認できた効果をまとめます。

1Qチーム目標

要は「早く書き、早く届ける」ということをどこよりもやり切ることを掲げ、LLMを前提に据えてスタートしました。

コードベースがLLMと噛み合った理由

前回のレポートで、カウシェのコードベースとLLM親和性について少し言及しました。詳細に述べると、以下の点で親和性がありました。

観点 仕組み 効いたポイント
モノレポ構成 主要4サービスが 1リポジトリに同居 隣のサービスの実装をLLMが参照し、提案が的確になる
規約のコード化 こちらのように、カウシェではコーディング規約を定めて運用している Githubに置いておくことで、NGな書き方を避けてくれる
protoとE2Eテスト protoにしっかりとAPIの仕様を書き、E2Eテストでは、実装したAPIがprotoに記載されている仕様を満たしているかを中心に検証 しっかりとしたガードレールがあるため、仕様逸脱を検知できる
共通ライブラリ libにauth/db/loggerなどを集約 既存関数を再発明せず、生成コードの冗長化を防止
時間依存テスト基盤 TimeDebuggerでNow()を自在に操作 時間関係のテストを生成しやすく、flaky testを回避しつつテストカバレッジを増やせる

FirestoreからSpannerへの移行をLLMで回してみた例

Firestore → Spanner移行に関しては別の記事で紹介しますが、コレクションごとに移行するという手順で行いました。
最初の方は手探りで移行用のDDLや必要なコード、移行スクリプトを書いていたのですが、しばらくやっていくうちに作業自体は一定、型化することができました。そのためLLM活用の練習台に最適でした。
手順としては以下のような感じです。

  1. コレクション単位でタスクを分解し、必要なDDL・repository・移行スクリプトの雛形をLLMに一括生成させる
  2. 二重書き込み防止など冪等性チェックを最終確認
  3. double write、read切替、write完全切替の各段階をチェックリスト化し安全にカットオーバー

チェックやリリースは流石に人の手が加わってしまっているのですが、とはいえ一番重い部分だったコーディング部分をLLM活用で省力化できたのは大きな収穫でした。

数値の変化

ブランチ名のsuffixに-by-cursorまたは-by-clineを入れてもらったり、PRに「AIラベル」というのを付けてもらうことで、生み出されるPRのうち、どれぐらいがvibe codingされているのかを集計し始めました。4月末では38%だったのが5月末では68%まで上昇し、大半のコードがvibe codingで作成されるようになりました。組織的にかなりvibe codingに慣れてきたように思います。

しかし実はまだPRの作成数及び平均リードタイムに関しては、本格的にAIを使い始める2月, 3月の頃の数値を超えられていないという実情はあります。
もちろん人の入れ替わりや開発案件の粒度など、単純比較を妨げる要素は多分にあります。
とはいえ数値自体はもっと上がっているべきな肌感です。開発メンバーに聞いても、明らかに楽になったと言われているのにどうして...。
したがって、どこがボトルネックになっているのかを今後も計測・改善していく必要があるなと感じています。

まとめ

LLMが真価を発揮するかどうかは、ツール選びよりも土台の整備にかかっているのを強く実感しました。
偶然にも開発者体験を良くするべく、protoとE2Eテストで仕様ファーストな開発フローをやっていたり、モノレポ、仕様共通ライブラリ、コーディング規約を先に固めていたことで、LLMにコードを書くことを任せ、人は判断に集中するサイクルが自然に回り始めました。

下半期はAI前提で開発プロセスを再設計し、さらに高速化するフェーズに移ります。
さらに速く価値を届けるための試行錯誤を続けていきます。

つらつらと書いてしまいましたが、カウシェで働くことに興味を少しでも持ってもらえた方はぜひともカジュアル面談をしましょう!
https://youtrust.jp/recruitment_posts/a82b92474ace4f2e2ecaa2d2ef7a3a68

直近開催するイベントの案内です!
https://kauche.connpass.com/event/360073/
https://kauche.connpass.com/event/358309/
https://kauche.connpass.com/event/359790/

カウシェ Tech Blog

Discussion