コーディングエージェントで加速するビジネスロジック開発
はじめに
「このトリガー、誰が書いたんだろう......ロジックが読み解けない」
「フローが複雑すぎて、どの条件分岐がどう動いているのか把握できない」
「緊急の修正依頼が来たけど、影響範囲が怖くて手が止まる」
Salesforce開発に携わるエンジニアなら、一度は誰もが直面する課題ではないでしょうか。宣言型開発(フローやバリデーションルール)とプログラム開発(Apex、LWC)が混在するSalesforceの世界では、ビジネスロジックがどこに実装されているのかを特定するだけでも一苦労です。ましてや、それを「高速に」「品質を保ちながら」変更し続けるとなれば、相当な熟練が求められます。
薬剤師戦略推進チーム所属の前島です。私は現在、Salesforceの開発を中心とした社内システムの開発・改修・運用を担当しています。新卒2年目のルーキーではありますが、AI駆動開発の急速な進化を肌で感じながら、日々の業務に取り組んでいます。本記事では、私がこれまで試行錯誤してきたコーディングエージェントの活用手法と、それによってもたらされた開発プロセスの劇的な変化について共有します。
本記事で得られる価値
本記事を読み終える頃、読者は以下の知見を得ることができます。
| 得られる知見 |
具体的な内容 |
| Salesforce開発の複雑性の整理 |
3層構造と、AI導入時に直面する4つの組織的課題 |
| ツール選択の判断基準 |
GitHub CopilotとClaude Codeの特性と使い分けの指針 |
| 変革の実感(Before/After) |
要件矛盾の事前検知、自己修復ループの具体的な効果 |
| AI時代のエンジニア像 |
コードを書く力から「問う力」へのシフト |
[執筆中] .claude/ディレクトリ構成・L1/L2階層化設計のテンプレート、Spec-Driven Development(SDD)の導入手順については、実践編として現在執筆中です。公開次第こちらにリンクを追記します。
「AIを使えば開発が速くなる」という漠然とした期待をお持ちの方も多いと思います。しかし、実際にAIを現場に導入してみると、以下のような壁にぶつかることがほとんどです。
- 「AIが生成したコードがプロジェクトのアーキテクチャと合わない」
- 「セキュリティやコンプライアンスの観点から、気軽に使えない」
- 「AIに何をどう指示すればいいのか、そもそも分からない」
本記事は、これらの課題に対する実践的な解決策を提示します。単なるツール紹介にとどまらず、「なぜその設計が必要なのか」「どのようなプロセスで導入したのか」という文脈を重視しました。本記事は「現状の課題と考察編」です。.claude/の設定テンプレートやSpec-Driven Developmentの実践手順は実践編として別途執筆予定です。(おそらく皆さんが見たいのはこちらですかね?😓)
1. なぜ今、AI駆動開発なのか
1.1 Salesforce開発者が直面する「あるある」ジレンマ
Salesforce開発の現場で、以下のような経験はないでしょうか。
ケース1:トリガーのスパゲッティ
ある顧客レコードの更新時に発火するトリガー。中身を開いてみると、200行を超えるロジックがぎっしりと詰まっています。「このSOQLはどの条件で走るの?」「このDMLは誰が呼んでいるの?」を追うだけで半日が過ぎてしまいます。さらに恐ろしいのは、修正した途端に予期せぬバグが発生することです。
ケース2:フローの迷宮
複雑な条件分岐が組み合わさったフロー。視覚的には理解しやすいはずですが、実際には「このパスは本当に通るの?」を検証するのが困難です。しかも、フローの変更履歴はGitで追跡しにくく、「誰が・なぜ・何を変えたのか」が闇に消えていってしまいます。
ケース3:影響範囲の恐怖
「取引先オブジェクトの項目を一つ追加したい」。シンプルな依頼に見えます。しかし、その項目は20のApexクラス、15のフロー、10のバリデーションルール、そして5のLightningページに関係しているかもしれません。修正そのものより「何が壊れるか」を調べる方が遥かに時間がかかってしまいます。
これらは、Salesforce開発特有の課題というわけではありません。しかし、宣言型開発とプログラム開発が混在するSalesforceのエコシステムでは、これらの課題がより顕著に、より深刻に現れる傾向があります。
1.2 Salesforce開発要素の3層構造
この複雑性の根源を理解するため、Salesforceの開発要素を整理しておきましょう。
Salesforce 開発要素
├── 1. 宣言型開発 (No-Code / Low-Code)
│ ├── データモデル (オブジェクト、項目、リレーション)
│ ├── ユーザインターフェース (Lightning レコードページ、動的アクション)
│ └── ビジネスロジック (Salesforce フロー、承認プロセス)
│
├── 2. プログラム開発 (Pro-Code)
│ ├── バックエンド (Apex クラス、トリガー、非同期処理)
│ ├── フロントエンド (LWC, Visualforce)
│ └── データベース操作 (SOQL, SOSL)
│
└── 3. 連携・運用基盤
├── 外部連携 (REST/SOAP API, Platform Events)
└── 開発ライフサイクル (ALM, Salesforce CLI, メタデータ管理)
宣言型開発は「素早く」「ノンエンジニアでも」実装できる一方、複雑なロジックでは限界があります。プログラム開発は柔軟性が高いですが、高度なスキルと時間を要します。この2つが混在する環境で、ビジネス要件の変化に追従し続けること―それがSalesforceエンジニアに課せられた使命です。
1.3 標準化か、差別化か―SaaSの本質的な問い
Salesforceを導入する企業が直面する最初の、そして最も重要な問いはこれです。「標準機能に合わせるか、独自プロセスを構築するか」この判断は、開発への投資方針を大きく左右します。
| 判断軸 |
SaaSに業務を寄せる(標準化) |
独自プロセスを維持する(差別化) |
| 業務の種類 |
バックオフィス(経理、人事、総務) |
コア事業、顧客接点、独自の製造工程 |
| 付加価値の源泉 |
正確性、スピード、コスト効率 |
独自のノウハウ、クリエイティビティ |
| 市場の標準 |
「ベストプラクティス」が存在する |
自社独自の商習慣がある |
| 変更の頻度 |
外部要因(法令等)に合わせて変更 |
高速にPDCAを繰り返したい |
標準化を選択すれば、開発負荷は低いです。しかし、差別化を選択した場合―特に市場の変化に機敏に対応する必要がある場合―エンジニアはこれまで以上のスピードで開発のPDCAを回さなければなりません。ここで鍵となるのが、コーディングエージェントの活用です。
1.4 コーディングエージェントがもたらす「第3の道」
従来、Salesforce開発には2つの道がありました。
- 道A:熟練エンジニアによる手書き開発―品質は高いが、時間がかかる。属人化のリスクも高いです。
- 道B:宣言型ツールによる素早い実装―スピードは出るが、複雑な要件では限界があります。
コーディングエージェントは、この2つの間に位置する「第3の道」を切り開きます。
| 観点 |
手書き開発 |
宣言型ツール |
コーディングエージェント |
| スピード |
低 |
高 |
高 |
| 複雑要件への対応 |
高 |
低 |
高 |
| 一貫性 |
エンジニア依存 |
高 |
高(インストラクション次第) |
| 学習コスト |
高 |
低 |
中 |
| 属人化リスク |
高 |
低 |
低(ルールを共有化) |
コーディングエージェントは、熟練エンジニアの「設計判断」と「コーディング速度」の中間に位置します。適切に設定すれば、誰が使っても同じ品質のコードを、手書きの数倍の速度で生成できるようになります。
ただし、ここで重要な注意点があります。「AIに任せる」ことは「考えなくていい」ことではありません。むしろ、AIを効果的に活用するためには、「なぜその設計が必要なのか」というアーキテクチャの理解が不可欠です。AIが生成したコードが適切かどうかを判断するのは人間であり、その判断には深い洞察が求められます。
2. AI駆動開発を実現する技術スタック
2.1 開発環境の全体像
現在のプロジェクトでは、以下のスタックで開発を支えています。
| ツール |
役割 |
エージェントとの関わり |
| Salesforce 組織 |
実行環境(本番/Sandbox/Scratch Org) |
メタデータの取得・デプロイ先 |
| VS Code + Extension |
統合開発環境 |
コード編集、デバッグ、メタデータ操作 |
| Salesforce CLI (SFDX) |
コマンドラインツール |
デプロイ、retrieve、テスト実行 |
| sfdx-git-delta |
差分抽出ツール |
変更セットの効率的な生成 |
| GitHub (Git-flow) |
ソースコード管理 |
ブランチ戦略、履歴管理 |
| Atlassian Confluence |
公式ドキュメント管理 |
設計書、議事録(AIからはアクセス不可) |
コーディングエージェントが「何を」書くべきかを知るためのソースは、これらのツールに分散しています。特にConfluenceに蓄積されたドメイン知識は、AIから見えない「サイロ」として存在している―これが大きな課題です。
2.2 エンタープライズ導入の必須条件
2.2.1 モデル発給元の統一
当社では、AIモデルの発給元がGCP(Vertex AI)に統一されています。これにより、データガバナンス、監査対応、コスト管理、セキュリティの観点で一元管理が実現されています。
重要なルールとして、各コーディングエージェントやツールの導入は法務審査が必須であり、シャドーAI(無許可でのAIツール利用)は禁止されています。このアプローチにより、開発者が利便性を追求しながらも、組織としてのコンプライアンスが担保されています。
2.2.2 現状の課題:Confluenceのサイロ化
現在、プロジェクトの公式ドキュメントはConfluenceで管理されています。設計書、議事録、意思決定の経緯など、重要なドメイン知識の多くがここに蓄積されています。しかし、ConfluenceはAIから直接アクセスできません(※)。この結果、文脈の欠如、暗黙知の損失、重複作業といった問題が生じています。これが「ドキュメントのサイロ化」問題の核心です。
※Atlassian CLIやAtlassian MCPを利用すれば取得は可能。
2.2.3 解決への構想:Issue駆動開発
MCP導入を待つ以外に、現在構想しているアプローチがあります。GitHub Issuesを「文脈の中央リポジトリ」として位置づけ、設計判断や変更経緯を蓄積していくアプローチです。Confluenceは「読み物」として残しつつ、開発に関する意思決定はIssueに集約することで、AIが追跡可能な履歴を構築します。この構想が実現すれば、MCPの許可状況に関わらず、AIが参照可能な形で文脈を蓄積できるようになります。
※注:これは構想段階であり、実践はまだ始まっていません。
2.3 GitHub Copilot vs Claude Code 選び方の決定打
現在、Salesforce開発において主要なコーディングエージェントとしてGitHub CopilotとClaude Codeの2つがあります。
GitHub Copilot
GitHub Copilotについては、率直に言えば「使いこなせていない感」が強いのが現状です。直面した課題として、インライン補完の限界(アーキテクチャレベルの設計支援や複数ファイルにまたがる実装には活用できていなかった)、インストラクションの肥大化(Copilot-Instructions.mdが大量の情報を詰め込まれた状態)がありました。
しかし、最近のアップデートで状況は変わりつつあります。Copilot CLI・VS Code Copilot ChatではPremium Requestによりリファレンス等の参照が容易になり、Agent Skills(VS Code Insiders)ではClaude CodeやCodexと同様のAgent Skillsが利用可能になりました。
Claude Code
Claude Codeの検証において、特に強力だと感じているのが「エージェント/スキル」の概念と、それらを支えるインストラクション構成の柔軟性です。Subagents(タスク特化型AIペルソナ)、Skills(モデル起動型の能力定義)、Rules(常時参照される軽量ルール)、Docs(必要に応じて参照される詳細ナレッジ)という構成で、AIの振る舞いを詳細に制御できます。
選び方の決定打
結論から言えば「両方使う」が正解です。ただし、使い分けの指針があります。
| シーン |
推奨ツール |
理由 |
| 単一ファイルの素早い補完 |
GitHub Copilot |
レスポンスが速い |
| 複数ファイルにまたがる実装 |
Claude Code |
整合性を保ちやすい |
| アーキテクチャレベルの設計 |
Claude Code |
Agents/Skillsが強力 |
| コードレビュー |
Claude Code |
専用エージェントで体系的に |
| 日常的なコーディング |
GitHub Copilot |
エディタ統合がシームレス |
3. 現場で直面した課題と解決アプローチ
AI駆動開発は劇的なスピードアップをもたらしました。しかし、Salesforce特有、あるいは組織特有の「情報の断絶」という課題が浮き彫りになりました。本章では、直面した4つの課題と、それらに対する解決アプローチを整理します。
3.1 ドキュメントのサイロ化による「場当たり的」な分析
【問題】既存のドメイン知識がConfluenceに閉じ込められており、AIは「今あるコード」からの推論に頼らざるを得ません。結果として、本質を突かないリファクタや分析が発生しがちです。
【アプローチ】短期的には人間がコンテキストを補完する運用を継続。中長期的には、Atlassian MCPの許可、Issue駆動開発への移行を構想しています。
3.2 履歴なきGUI改修(突然の「隕石現象」)
【問題】Salesforce特有のGUI(数式項目、バリデーションルール、フロー等)での改修は、Git履歴上ではある日突然現れた「隕石」のように見えます。議論のプロセスがコードベースから切り離されているため、後からAIが意図を汲み取ることが極めて困難です。
【アプローチ】GUIでの設定変更であっても、必ず変更の経緯と意図をGitHub Issuesに紐付ける運用を徹底します(構想段階)。
3.3 ビジネスロジックの分散(コード基盤の乖離)
【問題】ロジックがApex(コード)とフロー/GUI設定(メタデータ)に分散しているため、コードだけを見て判断するとデグレを招くリスクがあります。
【アプローチ】テストによる挙動の確約を構想しています。テストで「コードとGUI設定の間で生じうる不整合」を仕様として明文化し、リグレッションを防ぐ。※これはまだ公式な標準化プロセスではなく、個人的な草の根活動段階です。
3.4 メタデータ定義とエラー通知の非標準化
【問題】Descriptionのフォーマットが不定で更新も続かない、かつバリデーションメッセージもGUI依存(主語抜け)であるため、AIがメタデータから仕様を理解したり、テスト失敗時に原因を特定したりする際のノイズが大きくなっています。
【アプローチ】Descriptionやエラーメッセージのフォーマットを再定義し、標準化を進めています。主語と理由を明記したエラーメッセージ等を維持することで、AIがエラーを読み込み、コードや設定を自動修正させる「自己修復型のフィードバックループ」が極めて正確に回るようになります。
3.5 課題まとめ
| カテゴリ |
課題 |
現状 |
構想・草の根活動 |
| ドキュメント |
Confluence等への情報のサイロ化 |
人間がコンテキストを補完 |
Atlassian MCP、Issue駆動開発 |
| 開発プロセス |
GUI改修によるコンテキストの欠如 |
特になし |
Issue-drivenな設定変更履歴 |
| 品質保証 |
ロジックの分散 |
特になし |
テストケースでの挙動確約 |
| 標準化 |
メタデータDescription等の形骸化 |
AIフレンドリーな記述形式の標準化(進行中) |
--- |
4. 実践ストーリー:Before/Afterで見る変革
4.1 ストーリー1:要件の矛盾を事前に検知
【Before】ある機能開発で、以下のような要件を受け取りました。「1回の処理で最大10,000件の取引先を更新できること」「ステータス変更時に通知メールを送信すること」「更新履歴を別オブジェクトに記録すること」。実装を進めていく中でガバナ制限への考慮漏れがあったため、修正が必要になりました。原因は「1件ずつメール送信と履歴記録を行っていた」こと。設計段階で気づけば、実装工数を大きく節約できたはずです。
【After】Spec-Driven Development(SDD)を導入してからは、実装前に技術仕様書(spec)を生成させるようにしました。AIが「この要件では1件ずつメール送信を行うと、ガバナ制限に抵触する恐れがある」と警告を出し、設計段階で問題を発見できました。(※cc-sdd: https://github.com/gotalab/cc-sdd を参照)
| 段階 |
Before |
After |
| 問題発見 |
実装・テスト後 |
設計段階 |
| 手戻りコスト |
大(実装やり直し) |
小(仕様修正のみ) |
| エンジニアの負担 |
自己批判 |
AIと一緒に設計を検証 |
4.2 ストーリー2:自己修復ループ(Self-Healing)
【Before】あるデプロイ作業中のこと。sf project deploy startを実行すると、エラーが発生しました。「ERROR: Invalid field: Some_Field__c on Account」。原因は「ローカル環境に項目定義がない」こと。手動で本番環境から項目定義をretrieveし、メタデータをローカルに取り込み、再度デプロイする必要がありました。これを手動で行うと、都度コマンドを調べ、実行し、結果を確認する必要があります。地味に時間がかかる作業です。
【After】Claude Codeにデプロイを任せると、AIがエラー出力を読み取り、原因を特定し、必要なメタデータを自動でretrieveし、再度デプロイを試行しました。「失敗 → 解析 → 修正 → 再実行」のループが、人間の介在なく回ることで、開発スピードが飛躍的に向上しました。
| 観点 |
Before |
After |
| 対処時間 |
10-30分(手動) |
1-2分(自動) |
| エンジニアの介入 |
必須 |
不要(成功時) |
| 学習コスト |
コマンドを覚える必要 |
AIにお任せ |
4.3 2つのストーリーから見える共通点
共通するのは、「人間が判断し、AIが実行する」という役割分担です。人間が「どうすべきか」を考え、AIが「どう実現するか」を担います。この協働により、開発者はより価値のある作業に時間を使えるようになりました。
5. AI時代のエンジニア像
5.1 「なんでも作れる」時代の新しい問い
AI駆動開発の進展により、Salesforceエンジニアの役割は大きく変化しています。コーディングエージェントが技術的な実装を高速にこなすようになった今、エンジニアに求められるのは「どう書くか」ではなく「なぜ書くのか」を問う力です。
従来の開発フローでは、要件受領から技術調査、設計、実装、テストと進み、技術調査に多くの時間を費やしていました。AI駆動開発のフローでは、要件受領後、「なぜ必要か」の精査に時間をかけ、AIとの協働による設計、AIによる実装、そしてレビューへと進みます。
5.2 全員がPdMの視点を持つ時代へ
AI駆動開発において、「個人が作りたいもの」は驚くほど簡単に実現できるようになりつつあります。しかし、ここで一度立ち止まる必要があります。その機能は、「みんなが作りたいもの・現場が本当に欲しているもの」と一致しているでしょうか?個人の技術的興味や「作ってみたい」という動機が先行していないでしょうか?
今後のSalesforceエンジニア × コーディングエージェントの開発環境では、メンバーレベルであっても「PdM(プロダクトマネージャー)」のような視点が求められます。優先順位の判断、ステークホルダーの視点、スコープのコントロール、根拠の明確化―これらの能力が重要になります。
5.3 エージェントインフラで再現性を高め、属人化を防止する
この「ディレクションを問い直す」姿勢を組織として持続可能にするために、エージェントインフラの整備が重要な役割を果たします。.claude/rules/や.claude/docs/のような仕組みは、単にAIへの指示を効率化するだけではありません。
再現性の担保(誰がエージェントを動かしても同じ品質)、属人化の防止(「あの人しか知らない」暗黙知の共有)、ディレクションの可視化(ルールファイル自体がドキュメントになる)―これらを実現します。
5.4 AI時代に求められる4つの力
AI時代のエンジニアに求められるのは、コードを書く力だけではありません。
- 全体最適を考える視点:個別の機能ではなく、システム全体としての最適化を意識
- ステークホルダーの要求を整理する力:依頼の背景や真のニーズを汲み取る
- アーキテクチャ原則を明文化する力:暗黙知を形式知に変換し、チームで共有
- 再現性と属人化防止を両立させる設計力:誰がやっても同じ結果になる仕組みづくり
これらはまさに「システムアーキテクト」としての素養であり、AI駆動開発が普及するほど、この視点を持つエンジニアの価値は高まっていくと考えています。
5.5 今後の展望
Claude Code × Devinの併せ技の普及
伴走型エージェント(Claude Code)で設計・仕様を固め、自立型エージェント(Devin)で実装を完結させるフローを、より多くのチーム・プロジェクトで展開していきたいと考えています。