Slide 1

Slide 1 text

2025/09/08 髙橋 俊⼀ (a.k.a shuntaka) Claude Codeチーム活⽤の現在地 〜⼩さな実践と今後の展望〜

Slide 2

Slide 2 text

⾃⼰紹介 2 ● 2016年 ⾦融情報ベンダー⼊社 バックエンド ○ 株価配信Web API開発 ● 2019年 クラスメソッド⼊社 ○ CX/IoT事業部にてIoT案件を複数 ● 2024年 製造ビジネステクノロジー部担当 ○ R&D業務/サーバーサイド/RAG/AI Agent開発 ● 部署 ○ 製造ビジネステクノロジー部 ● 名前(shuntaka) ○ 髙橋 俊⼀ ● 出⾝‧住まい ○ 東京 詳細はhttps://shuntaka.dev/whoを⾒てね

Slide 3

Slide 3 text

⽬次 3 ‧チームで利⽤しているAIコーディングエージェント ‧Claude Codeのチーム活⽤ ‧今後試したい、取り組みたいこと ‧まとめ ※ Claude Codeは v1.0.98の情報となります

Slide 4

Slide 4 text

チームで利⽤しているAIコーディングエージェント

Slide 5

Slide 5 text

前提: チームの規模 5 ・マルチテナントSaaSアプリケーション、アーキテクチャ刷新及び新機能開発 ・25年7月から開始、弊社は全体のデザインと管理系システム、AIチャットボット開発 ・弊社のエンジニアチーム体制はFE 3名 BE 1.5名体制

Slide 6

Slide 6 text

利⽤しているAIコーディングエージェント 6 AIコーディングエージェント(有償)は沢山ある 中、弊チームでは以下を利用。 ・Claude Code → 自律的なコード生成 ・Cursor → Cursor Tab補完で小回りが効く 汎⽤ 特化 アシスタント ⾃律型 CLI, 定額 VSCode fork Devin Cline v0 Lovable CodeRabbit Amazon Q Kiro Windsurf Cursor Copilot AWSに強い CLI 仕様ドリブン開発 UI特化 PRレビュー特化 browser use ⾼い⾃律性

Slide 7

Slide 7 text

Claude Codeのチーム活⽤

Slide 8

Slide 8 text

チーム活⽤の課題 8 今回はチーム活用の第一歩というところで、導入しやすいものを紹介します!🔰 チーム共通適用可能なプラクティスを貯めるには検証に時間かかる... ・大規模言語モデルは不確実で汎用的に使えるのか検証が難しい ・副作用が強いプラクティスを共通化すると、人のスタイルと合わず逆に非効率な例がある 基本的には従来のアジャイル、スクラム開発にAIコーディングエージェントを導入して、効率化したスタイルと なります。

Slide 9

Slide 9 text

前提: モノリシックリポジトリ採⽤ 9 仕様、FE、BE共に同⼀リポジトリに ある。移植元のソースも同様に格納 インフラ設定で、ビルド設定や環境 変数の移し替えなど効率的に出来て いる。 /add-dir コマンドもあるが@シンボ ル検索⾮対応ですし、あまり同列に 検索してくれない?マルチレポにし ないと厳しい場⾯は普通になるの で、ディレクトリルート変えるなど で対応は出来そう。 . ├── docs │ ├── legacy-app # 過去のアプリ │ └── source # 現状ドキュメント ├── apps │ ├── rest-api # BE │ ├── web # FE │ └── iac # インフラ定義 └── README.md

Slide 10

Slide 10 text

アプリ → インフラ設定反映を効率化 10 モノレポで、以下のような変更を効率的に できる。 1. アプリ側の環境変数の設定を変更 2. そのままecspressoのタスク定義変更

Slide 11

Slide 11 text

Slash commandsのリポジトリ共有 11 .claude ├── commands │ ├── check-code.md │ └── pr-template.md 王道。便利。 ‧使いたい⼈が使いたいときに利⽤可能 ‧洗練されていなくても問題ない ‧⾝近なトイル削減活動に繋がる 現在は2種類を使っている ‧PRテンプレート作成 ‧コードチェック

Slide 12

Slide 12 text

Slash commandsのリポジトリ共有 12 PRテンプレート作成の場合 以下のフローを⾃動化 ‧チームのテンプレートを適⽤ ‧PRサマリを作成 ‧⾃分をアサインしてDraftでPR作成 ‧PR画⾯を開く ⼩さいPRを作りやすい。GitHub周り はCLIでおおよその操作が可能なので 業務に合わせて整えるのが良い。 ⼤きいPRは出⼒をレビューしてちゃ んと削ることを意識しないと負荷に なるので注意! https://youtu.be/lRd3TQPuPLE

Slide 13

Slide 13 text

Slash commandsのリポジトリ共有 13 コードチェックの場合、Claude Codeが よく勘違いする静的解析のお決まりの修 正パターン改善。 以下が揃ったらcode-checkコマンドにぶ ち込みましょう! ‧毎回やる静的解析結果の修正 ‧Claude Codeがよく勘違いする スペルチェック解析ツールの場合 ⼩⽂字統⼀でいいのに毎回両⽅含めてき てしまう... npx cspell lint . --cache --gitignore | perl -nle 'print "\"$1\"," if /.*\((.*?)\).*/' | sort | tr '[:upper:]' '[:lower:]' | uniq 👈 👈これでもできるけど保守がつらい 😓

Slide 14

Slide 14 text

Slash commandsのリポジトリ共有 14 # ソースコードチェック ## コンテキスト `pnpm spell-check`を実行して、エラー内容を確認してくださ い ## Your task 結果を元に修正を行ってください。 ### スペルミスの場合 * ライブラリや技術的な用語は @cspell.json に 小文字で除 外設定をしてください * 単語はwordsで単語として成立していないハッシュのような 文字列はignoreWordsに記述してください * タイプミスの場合は、ソース側を正しい記述に変更してくださ い ### 最後に 修正が発生した場合、再度 `pnpm spell-check`を実行し、成功 することを確認してください https://youtu.be/lRd3TQPuPLE 👍 スラッシュコマンド の内容の⼀部抜粋

Slide 15

Slide 15 text

setting.local.json運⽤ 15 .claude ├── commands │ ├── check-code.md │ └── pr-template.md ├── settings.local.json └── .settings.local.json .gitignore settings.jsonは共通で置いていない。 .setting.local.jsonをテンプレートとして⽤意 し、setting.local.jsonにコピーしてもらう。 試⾏錯誤しやすくかつ、おすすめ設定はテン プレ取り込みスタイルにした。 https://speakerdeck.com/shuntaka/lets-manage-claude-code-with-dotfiles MCPなど個⼈の設 定ファイル管理⽅ 法はこちら👉

Slide 16

Slide 16 text

.rgignoreを使った@シンボル検索調整 16 .gitignore # .rgignore !* # 全て除外しない .git # .gitを除外 @シンボルファイル検索で余計なものが引っかかるノイズは.rgignoreで調整可能 過去dot付きファイルが検索できない問題の解消に使っていたが現在は、余計なフォルダを検索対象 から除外させる設定。プロジェクトごとに設定が良い。

Slide 17

Slide 17 text

.mcp.json 17 ⽤意する場合、こちらもテンプレートだ け⽤意するのが良い ‧ローカル環境の作り⽅の差異の吸収が 出来ない ‧クレデンシャルを利⽤する場合がある ⾃分はグローバルにGitHubやAWS KnowledgeのMCPサーバーを⼊れてい る。 . ├── $CLAUDE_CONFIG_DIR/ │ ├── .claude.json │ └── settings.json │ └── / └── .mcp.json リポジトリルートのmcp.jsonと併用する場合 enableAllProjectMcpServers=trueが必要?

Slide 18

Slide 18 text

Claude Hooksのチーム活⽤模索 18 リポジトリルートのmcp.jsonと併用する場合 enableAllProjectMcpServers=trueが必要? 実装、修正 静的解析 ① Stopフック ② 解析結果を フィードバック

Slide 19

Slide 19 text

HooksのStopイベントで静的解析結果をフィードバック 19 ‧decision=block, reasonフィールド使う       or ‧exit 2, stderrに書き込んで返却 exit 1 stderr stdout exit 1 stdout clippy exit 101 stderr cspell ruff

Slide 20

Slide 20 text

exit 1以上の結果をexit 2 stderrに書き込み直すラッパーCLIを書く 20 2 0 cspell ruff exit 1 stderr stdout exit 1 stdout clippy exit 101 stderr $ blocc -s "cspell lint ." { "message": "1 command(s) failed", "results": [ { "command": "cspell lint .", "exitCode": 1, "stderr": "CSpell: …", "stdout": "… Unknown word (oicd)" } ] } ※ brew install shuntaka9576/tap/blocc

Slide 21

Slide 21 text

21 ① Claude Codeが実装 完了する

Slide 22

Slide 22 text

22 ② Stop Hook発⽕ 循環複雑度エラーを認識 (gocyclo)

Slide 23

Slide 23 text

23 ③ ⾃動リファクタへ誘導

Slide 24

Slide 24 text

良さそうに⾒えるが... ‧静的解析ツールの出⼒が⼤きくてcontext lowになったり。stdio, stderrに本当に必要なものだけ出してくれれば良いが。。 ‧worktreeを使わず、コンフリクトしないようにClaude Codeを2 セッション⽴ち上げた場合、別セッションのエラーをフィードバック してしまうことがある ⾃分の開発スタイルとの結合度が⾼く、汎⽤化が難しい 😓

Slide 25

Slide 25 text

Claude CodeとSerena MCPの活⽤ 25 コードベースを直接操作できるセマンティックなコード解析・ 編集ツールを提供するMCPサーバー > IDE's capabilities LSPを使った検索で部分一致の検索より効率のよいコード 解析が可能 https://github.com/oraios/serena https://x.com/_mohansolo/status/1899630200780153274 ※ 全く別の文脈ですが、windsurf 元CEOもコード検索周りの話をして いたので参考まで...

Slide 26

Slide 26 text

LSPを使ったシンボル検索によりコンテキストを削減 26 =/ LSP検出 export class Calc { sum(a: number, b: number) { return a + b; } } =/ コメントのCalc =/ Calc comment =/ 文字列のCalc const msg = "Calc"; === ripgrep === src/test-data/simple.ts:2 - export class Calc { src/test-data/simple.ts:8 - =/ コメントのCalc src/test-data/simple.ts:9 - =/ Calc comment src/test-data/simple.ts:11 - =/ 文字列のCalc src/test-data/simple.ts:12 - const msg = "Calc"; === LSP === src/test-data/simple.ts:2 - Calc (Class) https://github.com/shuntaka9576/rg-lsp-search-compare rgとLSP(workspace/symbol)の検索結果 上記の⽐較スクリプト:

Slide 27

Slide 27 text

Claude CodeのMCPコンテキスト管理 27 v1.0.86から/contextでコンテ キスト内訳が確認できるように 🥳 よくコンテキストオーバーに なる場合使うMCPを⾒なすと 少し改善する。著名なCLIは LLMが知識を持っているので 代⽤可能(例: ghコマンド)

Slide 28

Slide 28 text

今後試したい、取り組みたいこと

Slide 29

Slide 29 text

Clade Codeと⾃作リモートMCP 29 MCPはClaude Codeと対応している部分がある ‧Resources → Claude Codeの@シンボル検索 ‧Tools → ⼀般的に指す会話中で⾃律的に呼び出されるツール ‧Prompts → Slash コマンド

Slide 30

Slide 30 text

Clade Codeと⾃作MCP 30 今後マルチレポになったり、チームや、組織でノウハウを貯めるにはリモー トMCPで配信がおもしろそうと考える。呼び出し状況で⼈気も分かる。 ‧リポジトリ ‧チーム ‧組織

Slide 31

Slide 31 text

MCP(Resources)とClaude Codeの@シンボル検索 31 Resourcesは@シンボル検索の対象に。コンテキストに含めたいがローカルに落 とせない、リモート取得したい場合検討しても良いかも。(v1.0.27: 1⽉くらい)

Slide 32

Slide 32 text

MCP(Prompts)とClaude CodeのSlash Command 32 MCPのPromptsはClaude CodeではSlash Commandsに なる https://dev.classmethod.jp/articles/shuntaka-claude-code-slash-commands-mcp-publish/ → ユーザー側で更新のコス トがなくなる 前述のresources含めて、 /mcp のcapabilitiesの対応 状況確認の確認が可能 /(MCPサーバー名):(プロンプト名)

Slide 33

Slide 33 text

リモートMCPの課題 33 ‧認証、認可 → IDaaSがDCR未対応な場合、APIキー認証になる。まだ枯れていない部分があ る。まずは汎⽤かつ公開可能なものに絞る ‧特定のToolsやPromptsの絞り込み機能がClaude Codeにない → 設定ファイルで対応 ‧呼び出しのセキュリティ的な問題 → Toolsはやめておく(引数にセンシティブデータなど)。PromptsやResources は、get/readなのでサーバーに情報が送信されることはない。

Slide 34

Slide 34 text

レビュー負荷を下げる⽅向への活⽤ 34 作る⼒が上がった結果、レビュー量も多くなっ てくる。なるべくケアレスミスを減らすためにAI レビュー → AI修正のサイクルの導⼊は気になっ ている 👀 経験が浅めのメンバーは、⼀度レビューを受け た内容をCLAUDE.mdやSlashコマンドに盛り込 んで抜け漏れ防⽌、効率化の試⾏錯誤している という話も⭐ https://x.com/jarredsumner/status/1962264204083433675

Slide 35

Slide 35 text

まとめ

Slide 36

Slide 36 text

まとめ 36 ‧Slash commands共有や設定ファイルのテンプレート化 ‧個⼈の開発スタイルとの衝突を避け、各⾃が使いたい機能を選択できる柔軟な 運⽤している段階... ‧リモートMCPでのノウハウ共有、AIレビューによる負荷軽減を検討