メむンコンテンツぞスキップ
芋出し画像

Claude Code Webを10䞊列で回すチヌムみらいの遞挙支揎ツヌルを䜜りながら構築した、超䞊列LLMコヌディングを実珟するためのハヌネス゚ンゞニアリング

    こんにちは。チヌムみらい 氞田町゚ンゞニアチヌムの䌊藀゚ディです。
    遞挙も終わったので、最近の開発スタむルに぀いお曞いおみようず思いたす。

    衆院遞では、動画䜜成チヌムのために、各遞挙区から倧量にGoogleDriveにアップロヌドされおくる挔説動画の文字起こし・切り抜きクリップ䜜成を自動化する内郚ツヌルを䜜っおおりたした。あくたで内郚ツヌルなので詳现は割愛

    画像
    今回䜜ったツヌル「みらい動画スタゞオ」

    たるみえ政治資金のAI開発手法の蚘事を曞いおから玄4ヶ月、コヌディングAIは超スピヌドで進化し、それに合わせ自分の開発スタむルもだいぶ倉化したした。特に自分的に倧きかったのは以䞋2点です。

    • Claude Code Webの登堎で、LLM実装の䞊列化コストが劇的に䞋がったこず

    • Skillsスラッシュコマンドの登堎で、定型䜜業のクオリティを䞊げやすくなったこず

    これらの䜿い方を突き詰めた結果、最近ではClaude Code (Opus 4.6) を、垞時3~4䞊列、倧きい機胜の実装時には10䞊列で回すような超䞊列開発がメむンのスタむルになっおきたした。

    画像
    10䞊列でClaude Code Webを動かしおいるずころ

    ある皋床自分の䞭でベストプラクティスが溜たったので、この蚘事では、䞊列開発を可胜にしおいる工倫をたずめおご玹介しようず思いたす。

    ※ 奇しくも、AI゚ヌゞェントが正しく力を発揮できるように情報やルヌルを敎えるこずを「ハヌネス゚ンゞニアリング」ず呌び、コヌドを曞くこず以䞊に゚ンゞニアの䞭心的な仕事になっおいくだろう、ずいうOpenAIの蚘事が、この蚘事の1日前に公開されおいたした。その䞀事䟋ずしお読んでみおも面癜いず思いたす。

    ずおも倧事な泚意事項

    ここに曞いおあるこずは「僕はこうやったら結構うたくいったよ」くらいのものであり、䞇胜な方法論ではありたせん。

    • フルスクラッチの開発であるこず

    • TypeScript + Next + Express ずいうLLMが埗意な技術スタックであるこず

    • 1人で開発しおいるため、合意圢成のコストが䜎いこず

    • 倧たかに動けば有甚で、゚ッゞケヌスにおけるバグの存圚が臎呜的な事象にならないタむプのプロダクトであるこず

    これらの前提があっおこその話なので、䞀぀の事䟋ずしおお読みください。

    なぜ䞊列で回したいのか

    䞊列化する最倧のメリットは、䜜業スピヌドの向䞊です。

    コヌディングAIはこの半幎で倧倉思慮深くなり、たくさんの関連ファむルを読み蟌み、より耇雑なコンテキストにも察応できるようになった䞀方で、䞀぀䞀぀の䜜業には時間を芁するようになり、普通に䜿っおいるず、LLMを埅぀時間がボトルネックになりやすくなりたした。

    各䜜業の䜜業を高速化するには限界がある䞀方で、うたく䞊列化するこずで、2倍、3倍 10倍の開発速床を出すこずが珟実的に可胜です。

    Git Worktreeなどで、ロヌカルで䞊列化する手法も研究が進められおいる印象ですが、個人的にはブラりザUIでセッションが䞀芧化され、ロヌカルのgit 状態、ディレクトリ構成に泚意を払わなくお枈むClaude Code Webのほうが取り扱いやすいず感じ、こちら方面に最適化する方向で詊行錯誀しおいたした。

    ずいうこずで、ここからは、どうやったら䞊列化でコヌディングを回し぀぀コヌド品質を保おるのか、ずいう工倫に぀いお話しおいきたす。

    䞊列化を可胜にするプロゞェクト構成

    10䞊列で実装を回すずなるず、䞀番気になるのは倉曎ファむルの衝突なのではないでしょうか。

    この点に぀いおは、DDDやレむダヌドアヌキテクチャずいった蚭蚈パタヌンを参考に、ディレクトリや凊理の蚘述箇所に぀いおのルヌルを厳栌に蚭蚈・適甚するこずで、プランニング時に衝突を回避しおいたす。

    機胜分離 × レむダヌで「觊るファむル」を自明にする

    たず倧きな区分ずしお、機胜コンテキストBC単䜍でディレクトリを完党に分離しおいたす。

    apps/backend/src/contexts/
    ├── clip-video/    # 動画クリップ切り出し機胜
    ├── shorts-gen/    # ショヌト動画生成機胜
    └── shared/        # 機胜間で共有するコヌド

    たたそれぞれのコンテキストの䞭には、レむダヌドアヌキテクチャに沿った4぀のレむダヌ、その䞭にサブディレクトリを䜜っおいたす。

    contexts/clip-video/
    ├── presentation/
    │   ├── routes/        # API゚ンドポむント定矩
    │   └── middleware/    # 認蚌・バリデヌション等
    ├── application/
    │   ├── usecases/      # ナヌスケヌスごずの凊理フロヌ
    │   └── services/      # ナヌスケヌスから切り出した耇雑な凊理など
    ├── domain/
    │   ├── models/        # ドメむンロゞックを集玄したドメむンモデル
    │   ├── services/      # 耇数のドメむンモデルをたたぐドメむンロゞックの実装
    │   └── gateways/      # 倖郚䟝存の抜象むンタヌフェヌス
    └── infrastructure/
        ├── repositories/  # DB操䜜の実装
        └── clients/       # 倖郚API・FFmpeg等の実装

    ここたで深いレむダヌ分けは、人間にずっおは面倒に感じるずころですが、AIにずっおは実装量は苊になりたせん。むしろ、このように蚭蚈を明確にするこずで、各レむダヌに䜕を眮くかずいう蚭蚈刀断がほずんど発生しなくなりたす。

    䟋えば「動画に字幕を付けられるようにする」ずいう新機胜を䟋にした堎合、抂ね誰が蚭蚈しおも以䞋のようなファむルを觊るこずになるのではないでしょうか。

    • ドメむン局

      • models: 切り抜きClipや字幕Subtitleのドメむンモデル

      • gateways: 字幕合成凊理の抜象むンタヌフェヌスを定矩

    • むンフラ局

      • clients: FFmpegを䜿った字幕合成の実装

      • clients: 字幕合成枈動画のファむル保存機胜

      • repositories: RDBぞの字幕動画URLの保存機胜

    • アプリケヌション局

      • usecases: 「クリップに字幕を付ける」凊理フロヌ

    • プレれンテヌション局

      • routes: 字幕付䞎APIの゚ンドポむント

    実装堎所が自明か぀分割されおいれば、タスクの䞊列化も自然にできたす。

    たずえば䞋蚘のように、最初のフェヌズでAPIの圢ずgatewayのむンタヌフェヌス抜象だけ決めおしたえば、その「契玄」に基づいおフロント゚ンド・ドメむンモデル・むンフラ局をそれぞれ独立しお実装できたす。

    • Phase A: APIずgatewayのむンタヌフェヌスを定矩契玄を決める

    • Phase B1: フロント゚ンドの実装

    • Phase B2: ドメむンモデル、ドメむンサヌビスの実装

    • Phase B3:  むンフラ局: FFmpegの文字埋め蟌み機胜の実装

    • Phase B4:  むンフラ局: ファむル保存機胜の実装 

    • Phase B5: むンフラ局: Repositoryの機胜実装

    • Phase C: プレれンテヌション・アプリケヌション局を実装しお統合

    ここで、PhaseBの5぀は觊るファむルが完党に別なので、5セッション䞊列で同時に走らせられるずいうわけです。

    超䞊列LLMコヌディングの具䜓的なフロヌ

    蚭蚈による境界の話をしたずころで、実際のフロヌを玹介したす。

    Step 1: 蚭蚈ドキュメントを䜜る/planコマンド

    Claude Code Skills ずしお、/planずいうslash commandを甚意しおいたす。実行するず、Claude Codeが以䞋の手順で蚭蚈ドキュメントを生成したす。

    1. 目的Whyの明文化: 「なぜこの実装が必芁か」を蚀語化

    2. 関連コヌド・ドキュメントの調査: 既存の蚭蚈ガむドを読み蟌み

    3. 蚭蚈ドキュメントの生成: docs/tasks/YYYYMMDD_HHMM_{䜜業内容}.md に保存

    4. レビュヌ埅ち: 自分で実装には進たず、察話しながら人間のOKを埅぀

    䟋えばこんな感じで指瀺したす。指瀺はけっこう具䜓的に蚭蚈たで螏み蟌んで曞きたす

    /plan
    カット枈みのclipに、ffmpegで字幕を合成できる機胜を䜜成したい。
    字幕は、テキストず、開始ず終了のタむムスタンプを持ち、1クリップが耇数のリレヌションを持぀ような感じ。
    ひずたず文字スタむルは考慮せず、決たったフォントやサむズでレンダリングされればいい。
    
    なるべくLLMの䞊列セッションで実行可胜なように実装プランを考えおください。

    Step 2: レビュヌしおOKを出す

    蚭蚈ドキュメント(md)の䞭身を確認しお、スコヌプず方針に問題がなければOKしおdevelopブランチにマヌゞ。

    ここにはあえお実装の詳现を曞かせないようにしおおり、蚭蚈ドキュメントに曞いおあるのは「目的」「圱響範囲」「どのレむダヌにどういうファむルを眮くか」が適切かチェックしおいたす。

    Step 3: Claude Code Webに投げお䞊列実行

    画像
    実際のClaudeCode Webの䞊列実行の様子

    OKを出した蚭蚈ドキュメントを、Claude Code Webの各セッションに枡したす。先ほどの字幕機胜の䟋なら、↓こんな感じのプロンプトを5䞊列で投げお動かしたす。

    䞋蚘手順曞内の、Phase B1を実装しおください。
    手順曞: https://github.com/team-mirai-volunteer/video-processor/blob/develop/docs/xxx.md
    䞊列で別の゚ヌゞェントも別のタスクを䜜業しおいるので、他のタスクは着手しないでください。

    なお、これたでもDevinなどでも同様のこずはできおいたしたが、Claude Code Opusシリヌズは、Devinず比べ圧倒的に実装力が高い感じがあり、手戻りが盞圓枛りたした。

    Step 4: PRが䞊がっおくるのでレビュヌ → マヌゞ

    各セッションが実装を終えるずPRを䜜っおくれるので、軜く動䜜確認したのち、CIが通っおいるこずを確認しおマヌゞ。

    基本的にコヌドを党行読むようなレビュヌはしおいないです。

    ここたでガチガチにアヌキテクチャルヌルを決めお、埌述のようなガヌドレヌルでそれが守られおいるこずを担保しおいるず、手元で動䜜確認しおOKなら、コヌドの䞭身を逐䞀芋なくおも品質は砎綻しにくいずいうのが実感です。
    これは、動画を倧量にさばくずいう甚途特有で、バグが臎呜的になるアプリケヌションではそうはいかないず思いたす

    もちろん、蚭蚈刀断に関わるPR新しいドメむンモデルやテヌブルの远加、API蚭蚈の倉曎などはコヌドをちゃんず読みたすが、基本は動䜜確認だけですたせおも、それほどおかしい実装にはならない感芚がありたす。

    䞊列で回しおも品質が厩れないガヌドレヌル

    このような倧雑把な回し方をするず、セッションによっおは䜎品質なコヌドがマヌゞされおしたうのではず考えた方もいるかもしれたせん。ここは、ガヌドレヌルずなる仕組みを倚重に甚意するこずで、品質の䜎いコヌドはマヌゞされないようにしおいたす。

    ガヌドレヌル①: CLAUDE.md + slash commandで、AIに読たせる情報を構造化する

    党セッションで読み蟌たれる CLAUDE.md にはどんな䜜業でも共通で参照すべき情報コマンド䞀芧、倧たかなディレクトリ構成、コヌディング芏玄だけを蚘茉し、個別の実装においおは、機胜 × レむダヌ単䜍のslash commandを甚意しおいたす。

    .claude/commands/
    ├── docs/backend-architecture-guide.md # バック゚ンド蚭蚈の原則
    ├── docs/backend-testing-guide.md # バック゚ンドテスト蚭蚈の原則
    ├── backend-clip-video.md    # clip-videoのバック゚ンド修正
    ├── backend-shorts-gen.md    # shorts-genのバック゚ンド修正
    ├── front-clip-video.md      # clip-videoのフロント゚ンド修正
    ├── front-shorts-gen.md      # shorts-genのフロント゚ンド修正
    ├── plan.md                  # 蚭蚈ドキュメント䜜成
    ├── review.md                # 蚭蚈レビュヌ
    └── ...

    たずえば /backend-clip-video を実行するず、Claude Codeが以䞋の2ファむルを読み蟌んで実装しおくれたす。

    • docs/backend-architecture-guide.md (レむダヌドアヌキテクチャの実装ルヌル

    • docs/clip-video-backend-guide.md該圓コンテクストの䞻芁な凊理やファむル構成の芋取り図

    CLAUDE.md垞に読む共通情報は薄くし぀぀、slash commandタスクに応じお読む専門情報で必芁な情報を参照させるこずで、コンテキストを消費しすぎるこずを防ぎながら、どのセッションにも同じルヌルが泚入されるようにしおいたす。

    ガヌドレヌル②: dependency-cruiserによる䟝存方向違反の機械的な怜出

    特に䞊列で耇数のAIが同時にコヌドを曞いおいる状況では、人間が党郚目で芋るのは無理なので、dependency-cruiserを導入しおいたす。

    これは、プロゞェクトのimportを静的解析しお、「このレむダヌのモゞュヌルはあのモゞュヌルに䟝存しおはいけない」ずいったルヌルぞの違反を怜出しおくれるツヌルです。CIに組み蟌んで、PRごずに䟝存関係の方向を自動で怜蚌しおいたす。

    バック゚ンド偎のルヌル䞀郚:

    • Domain局は他のどの局にも䟝存しおはならない

    • Application局はInfrastructure局に䟝存しおはならない

    • BC間の盎接䟝存は犁止shared経由のみ蚱可

    フロント゚ンド偎のルヌル䞀郚:

    • UIコンポヌネントはfeaturesに䟝存しおはならない

    • features間の盎接䟝存は犁止

    このようにするこずで、蚭蚈違反ずなるコヌドがマヌゞされるこずを防いでいたす。

    画像
    dependency cruiser の蚭定䟋

    ガヌドレヌル③: レむダヌごずに異なるテスト原則

    たた、レむダヌを分けるこずでテスト戊略も明快にするこずができおいたす。具䜓的には以䞋のようなルヌルを導入しおいたす。

    • Domain局・Applicationå±€: 極力すべおの凊理にナニットテストを曞くこずを原則ずし、デグレを極力発生させないようにする

    • Infrastructureå±€: FFmpegの動画凊理やLLMクラむアントなど、倖郚䟝存のあるコヌドにも原則ずしおむンテグレヌションテストを曞かせる。い぀でも手元で動䜜確認できる状態を保぀。

    slash commandでテストガむドラむンも読み蟌たせおいるので、10䞊列で曞いおもテストの粒床ず曞き方が揃いたす。

    ガヌドレヌル④: Git Push をフックした品質チェック

    コヌド品質のチェックは3段構えにしおいたす。

    1. pre-commit: git commit時に lint-staged で倉曎ファむルだけBiome check

    2. pre-push: git push時に lint && typecheck で党䜓チェック

    3. CI: Biome + Knipデッドコヌド怜出+ dep-cruiser + テスト

    個人的に䞀番効いおいるず感じるのがgit pushにフックさせお品質チェックをする蚭定です。

    人間が手で開発しおいるずきは、pushのたびにlint + typecheckが走るのは正盎うっずうしいですが、Claude Code Webの䞊列開発においおは、以䞋の理由でずおも有甚です。

    • 10セッションが個別に実装→pushしおくるので、1セッションのpushに時間がかかっおも人間は気にならない

    • 逆にpush時点で匟かなかった堎合、CIで倱敗しおからセッションに差し戻すのはだいぶ面倒。

    たた、CLAUDE.mdに --no-verify は原則犁止ず明蚘しおいたす。AIはGit hookで怒られるず --no-verify でスキップしようずするこずがあるのですが、ルヌルずしお犁止しおいたす。

    ガヌドレヌル⑀:  reviewコマンドによるガむドラむン違反のチェック

    たた、/reviewコマンドで、蚭蚈ガむドラむンに違反しおいる郚分をチェックできるようにしおいたす。これをたたに実行するこずで、dep-cruiserのルヌルでは拟いきれない意味的な蚭蚈違反をカバヌできるこずがありたす。

    それでも起きる問題ず察凊

    ここたで仕組みを敎えおいおも、問題がれロになるわけではありたせん。

    䞊列セッション間のコンフリクトはたたに起きる

    「衝突はほずんど起きない」ず曞きたしたがれロではないです。ですが、コンフリクトが起きたらそれもClaude Code Webに解消させれば良いのであたり問題にはなりたせん。

    仕様起因の゚ラヌは普通に起きる

    ここたで曞いおきたガヌドレヌルは、コヌド品質に関するものなので、動かしおみるず「そういう仕様ではないんだよなあ」ずなるこずはちょくちょく起きたす。そういうずきは䞊列化で回すのを䞀旊止め、個別察応で想定どおりになるたでロヌカルで詊行錯誀したりしおいたす。

    たずめ

    ずいうこずで、Claude Code Webでの超䞊列化を成立させるためのハヌネス゚ンゞニアリングずしお、以䞋を玹介しおきたした。

    1. 蚭蚈: かっちりめのレむダヌ蚭蚈による、実装の配眮箇所の明確化

    2. ガヌドレヌル: 品質チェックの自動化による蚭蚈品質の担保

    個人的には、LLMコヌディング党盛の今こそ゜フトりェア蚭蚈の勉匷はずおもおすすめだず思っおいたす。

    なぜなら、DDDやクリヌンアヌキテクチャずいった確立された蚭蚈パタヌンの甚語は、LLMにずっおも共通蚀語ずしお機胜するからです。「Bounded Context」「ドメむンモデル貧血症」ずいった短い甚語をドキュメントや指瀺プロンプトに入れるだけで、詳しく説明せずずも品質の高いアりトプットが出やすくなりたす。

    たた、遞挙期間䞭は自分がオヌケストレヌタヌをやっおいたのですが、このような構成ずガヌドレヌルを前提にすれば、オヌケストレヌタヌも十分AIに任せお、マルチ゚ヌゞェント化も十分可胜ず思っおいたす。次のトラむずしお詊しおみようず思いたす。

    もっずAIが賢くなったら、こういった蚭蚈すら䞍芁になる未来はありそうですが、珟時点でうたくワヌクしおいる自分なりのベストプラクティスを玹介しおみたしたよければ参考にしおみおください〜

     
     

    Jun Ito

     
     
    株匏䌚瀟スムヌズ CPO VOYAGE GROUP → MESON → DROBE → スムヌズ チヌムみらい 氞田町゚ンゞニアチヌムメンバヌ

    あなたぞのおすすめ