生成AIの最近の記事

目次

  1. はじめに
  2. Kiroについて
  3. 実際に触ってみた
  4. 感想
  5. おまけ


1. はじめに

AIを使用してコーディングする場面を思い浮かべてください。
コード生成した結果、周辺とは違った書き方をされたり、余計な箇所を直されたり、意図しない修正をされて困った経験はありませんか?
他機能への影響が限定的な箇所や、とても簡単な機能の修正は、思い通りにいくことが多いですが、
他機能への影響が大きい改修など、機能の複雑度が高くなればなるほど上手くいかないことは顕著になりませんか?
本来はそんな(レバレッジの効きやすい)大規模な修正作業こそ、AIに任せたいものですよね。(しみじみ)

これらの問題の多くは、AIに「何を作りたいか」を正確に伝えられていないことが原因であることが多いと思います。
つまり、AIとの対話において、必要な情報を適切な形で提供できていないことが原因です。
プロンプトを調整したり、サービスとやり取りするチャットのセッションをリセットしたり、AIへの依頼方法を調整する行為をプロンプトエンジニアリングの上位概念として「コンテキストエンジニアリング」と言うらしいです。

調整したコンテキストをAIに依頼する。という熟練者達の暗黙知を
手段として提供しているAIコーディングエージェント「AWS Kiro」について、特徴や実際の操作についてまとめてみたので紹介します。


2. Kiroについて

AWS Kiroは、AIコーディングエージェントで、特にSpecモードが特徴的です。
公式ドキュメント

2.1. Spec駆動開発:AIとの対話を構造化する

従来のAIコーディングエージェントでは、「何を作りたいか」「どう作るか」はユーザの任意のタイミングで伝える必要がありました。
しかし、KiroのSpecモードは、開発プロセスを3つのフェーズに分けることで、AIとの対話を構造化してます。

  • フェーズ1: 要件定義(Requirements)
    • 「何を作るか」を明確にする
    • ユーザーストーリーと受入基準を定義
    • この段階でレビュー・修正が可能
  • フェーズ2: 設計(Design)
    • 「どう作るか」を設計する
    • アーキテクチャ、コンポーネント、テスト戦略を定義
    • 要件を基に自動生成され、レビュー・修正が可能
  • フェーズ3: 実装計画(Tasks)
    • 「どの順番で作るか」を計画する
    • 具体的なタスクリストを生成
    • 設計を基に自動生成され、レビュー・修正が可能


この段階的なアプローチにより、各フェーズで必要な情報だけに集中することができ、AIに対して適切な情報を適切なタイミングで提供することができます。
結果として、AIが生成するコードの品質が安定し、意図しない実装を最小限にすることができます。

注意:

AIへ依頼する仕組みとしては整備がされていますが、必ずしも十分な内容を提案してくれるとは限りません。
意図に沿わないものは、適宜修正する必要があります。
他者に伝えるときと同じように、AIにも伝わるよう丁寧に整理する心遣いが大切ですね。

2.2. なぜSpec駆動開発が効果的なのか

Specモードの最大の特徴は、「AIに必要な情報を段階的に整理させる」という点です。

  • 情報の整理
    • 各フェーズで必要な情報だけに焦点を当てられる
    • 前のフェーズの成果物が次のフェーズの入力になる
    • 情報の抜け漏れを防ぐ
  • レビューポイントの明確化
    • 各フェーズで人間がレビュー・修正できる
    • 早い段階で方向性の誤りを修正できる
    • 実装前に要件と設計を確定できる
  • 品質の安定化
    • 要件から実装までのトレーサビリティ
    • (ドキュメント次第ではありますが)プロパティベーステストを含む包括的なテスト戦略
    • 個々のエンジニアの経験に依存しにくい


つまり、Specモードは「AIとの対話の仕組み」そのものを改善することで、
(ある程度のレベルまでは)誰でも適切にAIに情報を伝えられるようになっています。


3.実際に触ってみた

今回はIDE版で進めていきます。
インストール・セットアップの手順については本記事では割愛します。
詳細は公式ドキュメントをご参照ください。

~ % cd sample_kiro
sample_kiro % kiro .

対象のプロジェクトに移動して「kiro .」でkiro.appが開きます
※kiro.appを開いて対象のプロジェクトを開くでも問題ないです。

kiro_start

「Spec」を選択して、早速以下のプロンプトを渡してみました

ブラウザで動作する簡単なTODOリストを作成したいです。

created_requirements

Kiroが requirements.md(要件ドキュメント) を作成してくれました
中身はこんな感じです

requirements.md - クリックして展開

要件ドキュメント

はじめに

ブラウザで動作するシンプルなTODOリストアプリケーション。ユーザーがタスクを追加、完了マーク、削除できる基本的な機能を提供します。

用語集

  • System: TODOリストアプリケーション全体
  • Task: ユーザーが管理する個々のTODO項目
  • Task_List: すべてのタスクを保持するコレクション
  • Local_Storage: ブラウザのローカルストレージAPI
  • User_Interface: ユーザーが操作するブラウザのUI

要件

要件1: タスクの追加

ユーザーストーリー: ユーザーとして、新しいタスクをTODOリストに追加したい。そうすることで、やるべきことを記録し整理できる。

受入基準

  1. WHEN ユーザーがタスクの説明を入力してEnterキーを押すかまたは追加ボタンをクリックする THEN THE System SHALL 新しいタスクを作成してリストに追加する
  2. WHEN ユーザーが空のタスクを追加しようとする THEN THE System SHALL 追加を防止し現在の状態を維持する
  3. WHEN 新しいタスクが追加される THEN THE System SHALL 入力フィールドをクリアして次の入力のためにフォーカスする
  4. WHEN タスクが追加される THEN THE System SHALL タスクを即座にローカルストレージに永続化する

要件2: タスクの完了マーク

ユーザーストーリー: ユーザーとして、タスクを完了としてマークしたい。そうすることで、どのタスクが完了したかを追跡できる。

受入基準

  1. WHEN ユーザーがタスクをクリックする THEN THE System SHALL タスクの完了状態をトグルする
  2. WHEN タスクが完了としてマークされる THEN THE System SHALL 視覚的なフィードバックを提供する(例:取り消し線、チェックマーク)
  3. WHEN タスクの完了状態が変更される THEN THE System SHALL 変更を即座にローカルストレージに永続化する

要件3: タスクの削除

ユーザーストーリー: ユーザーとして、タスクを削除したい。そうすることで、不要になったタスクをリストから削除できる。

受入基準

  1. WHEN ユーザーが削除ボタンをクリックする THEN THE System SHALL タスクをリストから削除する
  2. WHEN タスクが削除される THEN THE System SHALL 削除を即座にローカルストレージに反映する
  3. WHEN タスクが削除される THEN THE System SHALL UIを更新して削除されたタスクを表示しない

要件4: タスクの永続化

ユーザーストーリー: ユーザーとして、ブラウザを閉じて再度開いたときにタスクが保持されていてほしい。そうすることで、作業を継続できる。

受入基準

  1. WHEN ユーザーがアプリケーションを開く THEN THE System SHALL ローカルストレージから既存のタスクを読み込む
  2. WHEN ローカルストレージにデータが存在しない THEN THE System SHALL 空のタスクリストで開始する
  3. WHEN ローカルストレージのデータが破損している THEN THE System SHALL エラーを処理して空のリストで開始する

要件5: ユーザーインターフェース

ユーザーストーリー: ユーザーとして、シンプルで使いやすいインターフェースを使いたい。そうすることで、タスク管理に集中できる。

受入基準

  1. THE User_Interface SHALL 入力フィールド、追加ボタン、タスクリストを表示する
  2. WHEN タスクが表示される THEN THE System SHALL 各タスクに完了状態と削除ボタンを表示する
  3. THE User_Interface SHALL レスポンシブで様々な画面サイズに対応する
  4. WHEN ユーザーがインターフェースと対話する THEN THE System SHALL 即座にフィードバックを提供する

要件6: データの整合性

ユーザーストーリー: システム管理者として、データの整合性が維持されることを確認したい。そうすることで、ユーザーがデータを失わないようにできる。

受入基準

  1. WHEN タスクが作成される THEN THE System SHALL 一意の識別子を割り当てる
  2. WHEN 複数の操作が実行される THEN THE System SHALL データの整合性を維持する
  3. WHEN ローカルストレージへの書き込みが失敗する THEN THE System SHALL エラーを適切に処理する

要件を確認して、修正したいところがあれば修正します。
今回はこのまま進めます。 Move to design phase を押下します。

created_design

要件に沿って Kiro が design.md(設計ドキュメント) を作成してくれました
アーキテクチャ、コンポーネント、データの永続化の方法論や、正常性プロパティ、テスト戦略まで、結構細かい粒度で設計をアウトプットしてくれました。

design.md - クリックして展開

設計ドキュメント

概要

ブラウザで動作するシンプルなTODOリストアプリケーション。HTML、CSS、JavaScriptを使用して実装し、ブラウザのローカルストレージAPIを使用してデータを永続化します。

このアプリケーションは以下の主要機能を提供します: - タスクの追加、完了マーク、削除 - ローカルストレージによるデータの永続化 - レスポンシブなユーザーインターフェース

アーキテクチャ

アプリケーションは以下の3層アーキテクチャで構成されます:

レイヤー

  1. UI Layer(UIレイヤー): ユーザーインターフェースの表示とユーザー入力の処理
  2. Application Layer(アプリケーションレイヤー): ビジネスロジックとタスク管理
  3. Storage Layer(ストレージレイヤー): データの永続化と取得

コンポーネントとインターフェース

1. Task Model(タスクモデル)

タスクを表現するデータ構造:

2. TaskManager(タスクマネージャー)

タスクの管理を担当するコアコンポーネント

3. StorageService(ストレージサービス)

ローカルストレージとのやり取りを担当

4. UIController(UIコントローラー)

UIの更新とユーザー入力の処理を担当

データモデル

Task(タスク)

ローカルストレージ形式

正確性プロパティ

プロパティとは、システムのすべての有効な実行において真であるべき特性や動作のことです。本質的には、システムが何をすべきかについての形式的な記述です。プロパティは、人間が読める仕様と機械で検証可能な正確性保証の橋渡しをします。

Property 1: タスク追加でリストが増加

任意のタスクリストと有効な(空でない)タスク説明に対して、それをタスクリストに追加すると、タスクリストの長さが1増加するべきです。

検証対象: 要件 1.1

Property 2: 空白文字のみのタスクは無効

任意の空白文字のみで構成された文字列に対して、それをタスクリストに追加しようとすると拒否され、タスクリストは変更されないべきです。

検証対象: 要件 1.2

Property 3: 入力フィールドのクリア

任意の入力バーが空でないUI状態に対して、入力を送信すると入力バーが空になるべきです。

検証対象: 要件 1.3

Property 4: 操作の永続化ラウンドトリップ

任意のタスク操作(追加、トグル、削除)に対して、操作を実行してからローカルストレージから読み込むと、同じ状態が復元されるべきです。

検証対象: 要件 1.4, 2.3, 3.2, 4.1

Property 5: 完了状態のトグル

任意のタスクに対して、完了状態をトグルすると、状態が反転する(completed: false → true または true → false)べきです。

検証対象: 要件 2.1

Property 6: 完了タスクの視覚的フィードバック

任意の完了したタスクに対して、レンダリングされたHTMLには完了状態を示す視覚的インジケーター(CSSクラスや属性)が含まれるべきです。

検証対象: 要件 2.2

Property 7: タスク削除でリストから除外

任意のタスクリストとタスクに対して、そのタスクを削除すると、タスクはリストに含まれなくなり、UIにも表示されなくなるべきです。

検証対象: 要件 3.1, 3.3

Property 8: タスクレンダリングの完全性

任意のタスクに対して、レンダリングされた文字列には、タスクの説明、完了状態インジケーター、削除ボタンが含まれるべきです。

検証対象: 要件 5.2

Property 9: タスクIDの一意性

任意のタスクのコレクションに対して、すべてのタスクIDは一意であるべきです(重複がない)。

検証対象: 要件 6.1

エラーハンドリング

入力検証エラー

  • 空または空白文字のみのタスク説明は拒否される
  • エラーメッセージは表示せず、単に操作を無視する(シンプルなUX)

ストレージエラー

  • ローカルストレージが利用できない場合、メモリ内でのみ動作
  • ローカルストレージのデータが破損している場合、空のリストで開始
  • ストレージへの書き込みが失敗した場合、コンソールにエラーをログ出力

データ検証エラー

  • ローカルストレージから読み込んだデータが無効な形式の場合、そのエントリをスキップ
  • 必須フィールド(id、description)が欠けているタスクは無視

テスト戦略

デュアルテストアプローチ

このアプリケーションは、ユニットテストとプロパティベーステストの両方を使用して包括的なカバレッジを実現します:

  • ユニットテスト: 特定の例、エッジケース、エラー条件を検証
  • プロパティテスト: すべての入力にわたる普遍的なプロパティを検証

両方のアプローチは補完的であり、包括的なカバレッジに必要です。

ユニットテストの焦点

ユニットテストは以下に焦点を当てます:

  • 特定の例(例:「買い物に行く」というタスクを追加)
  • エッジケース(空のストレージ、破損したデータ、ストレージ失敗)
  • コンポーネント間の統合ポイント
  • エラー条件とエラーハンドリング

プロパティベーステストの設定

  • テストライブラリ: fast-check(JavaScriptのプロパティベーステストライブラリ)
  • イテレーション数: 各プロパティテストは最低100回実行
  • タグ形式: 各テストには設計ドキュメントのプロパティを参照するコメントを含める
    • 例:// Feature: browser-todo-list, Property 1: タスク追加でリストが増加
  • 実装ルール: 各正確性プロパティは単一のプロパティベーステストで実装される

テストカバレッジ

  1. TaskManager:

    • ユニットテスト: 基本的な追加/トグル/削除操作
    • プロパティテスト: Property 1, 2, 4, 5, 7, 9
  2. StorageService:

    • ユニットテスト: 保存/読み込み/エラーハンドリング
    • プロパティテスト: Property 4(ラウンドトリップ)
  3. UIController:

    • ユニットテスト: イベントハンドリング、UI更新
    • プロパティテスト: Property 3, 6, 8

エッジケースのテスト

以下のエッジケースはユニットテストでカバーします:

  • 空のローカルストレージ(要件 4.2)
  • 破損したローカルストレージデータ(要件 4.3)
  • ストレージへの書き込み失敗(要件 6.3)
  • 特殊文字を含むタスク説明
  • 非常に長いタスク説明

設計についてもこのまま進めます。 Move to implementation plan を押下します。

created_tasks

tasks.md(実装計画)が作成されました。
一部のタスクをオプション化してまずはコア機能のみの計画にするか or 最初から包括的に作成する計画にするか
聞かれたので、包括的に作ってもらいました。

tasks.md - クリックして展開

実装計画: ブラウザTODOリスト

概要

HTML、CSS、JavaScriptを使用してブラウザで動作するシンプルなTODOリストアプリケーションを実装します。ローカルストレージを使用してデータを永続化し、プロパティベーステスト(fast-check)とユニットテストで品質を保証します。

タスク

  • [] 1. プロジェクト構造とテスト環境のセットアップ

    • HTMLファイル(index.html)を作成
    • CSSファイル(styles.css)を作成
    • JavaScriptファイル(app.js)を作成
    • テスト環境をセットアップ(Jest + fast-check)
    • package.jsonを作成してテストスクリプトを設定
    • 要件: すべて
  • [] 2. StorageServiceの実装

    • [] 2.1 StorageServiceクラスを実装
    • ローカルストレージへの保存・読み込み機能
    • エラーハンドリング(破損データ、ストレージ失敗)
    • 要件: 4.1, 4.2, 4.3, 6.3

    • [] 2.2 StorageServiceのユニットテストを作成

    • 正常な保存・読み込みのテスト
    • 空のストレージのテスト
    • 破損データのエラーハンドリングテスト
    • 要件: 4.2, 4.3, 6.3
  • [] 3. TaskManagerの実装

    • [] 3.1 TaskManagerクラスを実装
    • タスクの追加、トグル、削除機能
    • 一意のID生成(UUID)
    • StorageServiceとの統合
    • 要件: 1.1, 1.2, 2.1, 3.1, 6.1

    • [] 3.2 Property 1のプロパティテストを作成

    • Property 1: タスク追加でリストが増加
    • 検証対象: 要件 1.1

    • [] 3.3 Property 2のプロパティテストを作成

    • Property 2: 空白文字のみのタスクは無効
    • 検証対象: 要件 1.2

    • [] 3.4 Property 4のプロパティテストを作成

    • Property 4: 操作の永続化ラウンドトリップ
    • 検証対象: 要件 1.4, 2.3, 3.2, 4.1

    • [] 3.5 Property 5のプロパティテストを作成

    • Property 5: 完了状態のトグル
    • 検証対象: 要件 2.1

    • [] 3.6 Property 7のプロパティテストを作成

    • Property 7: タスク削除でリストから除外
    • 検証対象: 要件 3.1, 3.3

    • [] 3.7 Property 9のプロパティテストを作成

    • Property 9: タスクIDの一意性
    • 検証対象: 要件 6.1

    • [] 3.8 TaskManagerのユニットテストを作成

    • 基本的な追加・トグル・削除操作のテスト
    • エッジケース(特殊文字、長い説明)のテスト
    • 要件: 1.1, 2.1, 3.1
  • [] 4. チェックポイント - すべてのテストが通ることを確認

    • すべてのテストが通ることを確認し、質問があればユーザーに尋ねる
  • [] 5. UIControllerの実装

    • [] 5.1 UIControllerクラスを実装
    • DOM要素の取得と初期化
    • イベントリスナーの設定(追加、トグル、削除)
    • タスクリストのレンダリング
    • 入力フィールドのクリア
    • 要件: 1.1, 1.3, 2.1, 2.2, 3.1, 5.1, 5.2

    • [] 5.2 Property 3のプロパティテストを作成

    • Property 3: 入力フィールドのクリア
    • 検証対象: 要件 1.3

    • [] 5.3 Property 6のプロパティテストを作成

    • Property 6: 完了タスクの視覚的フィードバック
    • 検証対象: 要件 2.2

    • [] 5.4 Property 8のプロパティテストを作成

    • Property 8: タスクレンダリングの完全性
    • 検証対象: 要件 5.2

    • [] 5.5 UIControllerのユニットテストを作成

    • イベントハンドリングのテスト
    • UI更新のテスト
    • 要件: 1.1, 2.1, 3.1
  • [] 6. HTMLとCSSの実装

    • [] 6.1 index.htmlを完成させる
    • 入力フィールド、追加ボタン、タスクリストのマークアップ
    • JavaScriptファイルの読み込み
    • 要件: 5.1

    • [] 6.2 styles.cssを実装

    • レスポンシブデザイン
    • 完了タスクの視覚的スタイル(取り消し線など)
    • シンプルで使いやすいUI
    • 要件: 2.2, 5.3
  • [] 7. アプリケーションの統合とワイヤリング

    • [] 7.1 すべてのコンポーネントを統合
    • app.jsでStorageService、TaskManager、UIControllerを初期化
    • アプリケーション起動時にタスクを読み込む
    • 要件: 4.1

    • [] 7.2 統合テストを作成

    • エンドツーエンドのフローをテスト
    • 要件: すべて
  • [] 8. 最終チェックポイント - すべてのテストが通ることを確認

    • すべてのテストが通ることを確認し、質問があればユーザーに尋ねる

注記

  • 各タスクは特定の要件を参照してトレーサビリティを確保します
  • チェックポイントは段階的な検証を保証します
  • プロパティテストは普遍的な正確性プロパティを検証します
  • ユニットテストは特定の例とエッジケースを検証します

run all tasks

Kiroにタスクの実行してもらいます。(チャットに「run all tasks」と入力) 実行中は以下のような感じで、進行状況がわかるようになってます。

run

最終的にできたアプリはこちらです。

todoアプリ

  • タスクの追加、削除、do/undoができる
  • データの永続化ができてる(localstrageの範囲で)
  • レスポンシブでシンプルなデザイン


4. 感想

「実際に触ってみた」のセクションで見てきたように、Specモードを使った開発では、
最初の簡単なプロンプトから

  • 要件定義、設計、実装計画が段階的に生成
  • 各フェーズで必要な情報が整理・確認することができ
  • tasks.mdの実行中に何度かエラーが発生し(エラー解析>修正を繰り返し)つつも、最終的に要件を満たすアプリを完成することができました


実際には、AIが提案する要件や、設計に対して、修正しながら進めていく事になると思います。
「要件定義、設計、実装計画」に時間をかける事で、品質や満足度の高いものを提供していければなと思いました。

AWS KiroのSpec駆動開発は、AIとの対話を構造化することで、品質を一定以上に得られる仕組みだと思います。
プロンプトの書き方ばかりに時間をかけるのではなく、最初から仕組み化されたツールを選ぶことも大切ですね。
ぜひ一度、試してみてはいかがでしょうか。


5. おまけ

AWS KiroにはCLI版の提供もあります。
以下の通り、インストール、pathの設定後に「kiro-cli」にて起動できます。 (メッセージは英語表示になってますが、日本語の質問すると日本語で返ってきました。)
エディターの縛りなく使用が可能です!!

sample_kiro % curl -fsSL https://cli.kiro.dev/install | bash ### Kiro CLIをインストール ###
Kiro CLI installer:

Downloading package...
✓ Downloaded and extracted
✓ Package installed successfully

🎉 Installation complete! Happy coding!

1. Important! Before you can continue, you must update your PATH to include:
/Users/moronagajun/.local/bin

Add it to your PATH by adding this line to your shell configuration file:
export PATH="$HOME/.local/bin:$PATH"

2. Use the command "kiro-cli" to get started!

sample_kiro % nvim ~/.zshrc ### 自分の場合はmacなので「~/.zshrc」に「export PATH="$HOME/.local/bin:$PATH"」を追記 ###
sample_kiro % source ~/.zshrc ### 「~/.zshrc」を再読み込み ###
sample_kiro % kiro-cli ### プロジェクトのディレクトリで「kiro-cli」を実行 ###

sample_kiro % Welcome to Kiro CLI, let's get you signed in!

Press enter to continue to the browser or esc to cancel ### enter 押下するとブラウザが起動するので、ログイン ###

✓ Signed in with Google (use "kiro-cli logout" to logout)
⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢀⣴⣶⣶⣦⡀⠀⠀⠀⢀⣴⣶⣦⣄⡀⠀⠀⢀⣴⣶⣶⣦⡀⠀⠀⢀⣴⣶⣶⣶⣶⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣶⣶⣶⣶⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢰⣿⠋⠁⠈⠙⣿⡆⠀⢀⣾⡿⠁⠀⠈⢻⡆⢰⣿⠋⠁⠈⠙⣿⡆⢰⣿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠻⣦⠀⠀⠀⠀⣴⡿⠟⠋⠁⠀⠀⠀⠈⠙⠻⢿⣦⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⣇⣴⡿⠋⠀⠀⠀⢀⣼⠇⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢠⣤⣤⣤⣤⣄⠀⠀⠀⠀⣿⡆⠀⠀⣼⡟⠀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⢻⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡿⠋⠀⠀⠀⢀⣾⡿⠁⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⠉⠉⠉⣿⡇⠀⠀⠀⣿⡇⠀⣼⡟⠀⠀⠀⣰⡿⠟⠛⠻⢿⣆⠀⠀⠀⢻⣧⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠙⠁⠀⠀⢀⣼⡟⠁⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⢸⣿⣶⣶⡶⠋⠀⠀⠀⠀⣿⠇⢰⣿⠀⠀⠀⢰⣿⠀⠀⠀⠀⠀⣿⡆⠀⠀⠀⣿⡆
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠹⣷⡀⠀⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣼⠟⠀⢸⣿⠀⠀⠀⢸⣿⠀⠀⠀⠀⠀⣿⡇⠀⠀⠀⣿⡇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⠀⣠⡀⠀⠀⠹⣷⡄⠀⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣤⣄⠀⠀⠀⠀⠹⣿⡅⠀⠀⠸⣿⠀⠀⠀⠸⣿⠀⠀⠀⠀⠀⣿⠇⠀⠀⠀⣿⠇
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣾⡟⣷⡀⠀⠀⠘⣿⣆⠀⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡟⣷⡀⠀⠀⠀⠘⣿⣆⠀⠀⢻⣧⠀⠀⠀⠹⣷⣦⣤⣤⣾⠏⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠈⢻⡇⠀⢸⣿⠀⠀⠀⠀⣿⡇⢸⣿⠀⠀⠀⠀⣿⡇⠹⣷⡀⠀⠀⠀⠈⢻⡇⠀⠀⢻⣧⠀⠀⠀⠀⠉⠉⠉⠀⠀⠀⠀⣼⡟
⠀⠀⠀⠀⠀⠀⠀ ⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⢀⣼⠇⠀⠸⣿⣄⡀⢀⣠⣿⠇⠸⣿⣄⡀⢀⣠⣿⠇⠀⠙⣷⡀⠀⠀⢀⣼⠇⠀⠀⠀⠻⣷⣦⣄⡀⠀⠀⠀⢀⣠⣴⣾⠟
⠀⠀⠀⠀⠀⠀⠀ ⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠈⠻⠿⠿⠟⠁⠀⠀⠀⠀⠀⠈⠙⠻⠿⠿⠿⠿⠟⠋⠁


Jump into building with Kiro:

1. Ask a question or describe a task
2. Use /context add to provide Kiro with additional info
3. Connect to external tools with by using /mcp

Use /help for more information and happy coding!

Model: auto (/model to change) | Plan: KIRO FREE (/usage for more detail)


4% > Ask me anything! ### ここにプロンプトを渡す ###

最後に、「設計を明確にしてからAIに依頼することが大切」という観点でCursorのPlanモードについても記事を書いてます。
興味がありましたら、一緒に読んでいただけると嬉しいです。
CursorのPlanモードについての記事はこちら

最後の最後までお読みいただき、ありがとうございました。


  1. はじめに
  2. ポイント1:設計書を書いてもらいましょう
  3. ポイント2:Geminiを使うときの指示の出し方
  4. ポイント3:自分で修正したら「読み直して」と必ず伝える
  5. まとめ


はじめに

生成AIを使ってコード生成や修正を行うことは、もはや特別なことではなくなってきました。 Gemini や CodeX、Copilot、Cursor など、選択肢も増え、「うまく使えばかなり楽になる」という実感を持っている方も多いと思います。

一方で、実際に使い込んでみると、
以下のような「ちょっとしたストレス」にぶつかることも少なくないようです。

  • 途中から意図と違う方向に進み始める
  • さっきまでの前提を忘れたような修正をしてくる
  • replace に失敗して延々とやり直しを始める


この記事では、生成AIでコードを書くときに安定して進めるためのちょっとしたポイントを紹介します。 特に、コード生成や修正を生成AIに任せる機会が多い方に向けた内容です。


ポイント1:設計書を書いてもらいましょう

機能追加、不具合修正やリファクタリングを生成AIに依頼するとき、いきなり「ここを直して」と指示していないでしょうか。 実はこのやり方だと、生成AIが目の前の修正作業だけに集中してしまい、全体の前提を忘れることがよくあります。 おすすめなのは、最初に「どういう修正をしたいのか」を設計書(Markdown)として書いてもらうことです。

初回の出力は、設計書を書かなくても比較的安定して良い結果が出ることが多いです。 しかし、修正や追加依頼を繰り返していくうちに、最初の前提を少しずつ忘れ、 意図と違う方向へ進み始めることがあります。

設計書を用意しておくことで、 「今回はこの前提で直していたよね」と立ち返ることができ、 迷走を防ぐだけでなく、迷走後のリカバリーにも役立ちます。

例えば、

  • どんな不具合を直したいのか
  • どの方針で修正したいのか
  • 影響範囲はどこか


といった内容をまとめたドキュメントを作り、その上で 「調査結果や修正方針をこの設計書に追記してください」 と指示します。

こうしておくと、修正や追加依頼を重ねたときに、 最初の前提が少しずつ崩れていくことを防ぎやすくなります。 生成AIが迷走し始めたときも、設計書という"基準点"に戻すことができます。 また、途中でセッションを切った後でも、「この設計書通りに進めたけど、ここに不具合があるんだよね」 と前提を思い出させることができます。 前の情報のうち「大事なことだけ」を引き継ぐ手段として、設計書はとても有効です。

ただし、生成AIも人間と同じで、情報を大量に与えられると注意が分散する傾向があります。

そのため、毎回すべての設計書を読ませるのではなく、 今回の修正と関連する方針だけを再掲するほうが、 生成AIの注意が分散せず、出力が安定しやすいです。


ポイント2:Gemini を使うときの指示の出し方

これは Gemini を使っている場合の話ですが、git の履歴や差分を調査させるときに、 そのまま git log や git diff を実行させると、なぜか数分待たされることがあります。

そこでおすすめなのが、 「調査結果を一度ファイルに保存して、そのファイルを見て判断してください」 と指示することです。

例えば、git log や git diff の結果を一時ファイルに出力させてから、それを読み取らせるようにすると、驚くほどスムーズに進むことがあります。 理由は正直よく分かりませんが、少なくとも体感としては そのままコマンドを実行させるより安定します。

Gemini 特有の挙動かもしれませんが、一度試してみる価値があります。


ポイント3:自分で修正したら「読み直して」と必ず伝える

これもGeminiを使う場合に多い話なのですが、LLM全般に少なからずあるポイントと思われます。 生成AIに修正を任せている途中で、自分でソースコードやMarkdownを少し直したくなることはよくあります。

  • 改行を整えたい
  • 「てにをは」を直したい
  • 変数名を変えたい
  • 行の順番を入れ替えたい

こうした修正を 自分で行った後に、そのまま続きを依頼すると、生成AIが大混乱することがあります。replace コマンドが失敗し、「もう一回やります」を繰り返し、気づいたら10分過ぎてしまった⋯ということもよくあります。

これを防ぐためには、

「こちらで修正したので、最新の内容を読み直してください」

と、明示的に伝えることで改善されることがよくあります。 それでもうまくいかない場合は、無理に続けず セッションを切って新しく始める方が早いこともあります。

おそらく、モデル内部に前回の状態を強く保持していて、差分がうまく当たらず混乱しているのだろう、というのが推測です。 理由を説明すると気をつけてくれることもありますが、体感では半分くらいは無視されてしまいます。 そういうときは、割り切って新しいセッションで続きの作業を進めることがおすすめです。

また、せっかく「てにをは」やトンマナを修正したのに、 追加のドキュメント修正を依頼したら元に戻されることや、 こちらで変数名を変えたのに別の箇所の再修正を依頼したら、変数名まで元に戻された⋯ こうした現象もよく起こります。

その場合は、無理に続けるよりも、 一度セッションを切り替えるほうが結果的に早いことも多いです。

そしてそのときに役立つのが、ポイント1で紹介した設計書です。 設計書があれば、前提を明示的に再共有できるため、 新しいセッションでも迷走しにくくなります。


まとめ

CopilotやCursorでは、ここまで気を遣わなくてもよい、という話もあるようですが、 今回紹介したやり方でかなり安定して生成AIを使えるようになりました。 また、今回コード生成にフォーカスしていますが、コード生成以外の場合でも今回の3つのポイントは有効だと考えています。

生成AIは賢いですが、前提をどう渡すか、どう指示を出すか、どこで区切るかによって、結果は大きく変わります。 もし最近「生成AIが言うことを聞いてくれないな......」と感じている方がいれば、ぜひ一度お試しください。


目次

  1. はじめに
  2. プロジェクトの概要 ― 障害対応を生成AIで効率化する
  3. 全体の構想 - PowerAutomate × Copilot Studioによる自動化
  4. 実際に構築したフロー - Microsoft 365 Copilotでできること
  5. 振り返りと教訓
  6. おわりに



1. はじめに

2026年現在、生成AIサービスは目的や専門性に合わせて非常に多くの選択肢がありますが、その中でも、Microsoft Copilotは比較的、大企業に選ばれている印象があります。

本記事では、筆者が生成AIを活用したPoCの開発支援に携わった経験をもとに、Microsoft Copilotを利用した業務改善の一例を紹介します。当該プロジェクトにおいては、技術全般のサポートという役割で参画しました。全体の開発方針を考えたり、メンバーが開発で詰まりそうな箇所を先回りして技術調査したりといった裏方の立場です。直接開発を行ったのは先方のメンバーであり、非エンジニアのチームが主体となってPoCを推進したプロジェクトでした。

このプロジェクトでは、まずCopilot単体で実現できる機能を追求し、十分に実用的な仕組みを構築することができました。本記事の内容が、少しでもご参考になれば幸いです。


2. プロジェクトの概要 ― 障害対応を生成AIで効率化する

今回のPoCで対象としたのは、システム障害発生時の初動対応です。

多くの企業では、システムに障害が発生すると監視ツールなどから障害通知メールが届きます。担当者はそのメールの内容を確認し、障害の概要を把握したうえで、過去の事例やドキュメントを参照しながら発生原因を推測し、対応策を検討します。この一連の作業は、経験豊富な担当者であればスムーズに進められますが、経験の浅いメンバーにとっては時間がかかり、対応の遅れにつながることもあります。

そこで本PoCでは、障害通知メールの内容を生成AIに読み込ませ、以下の情報を自動的に生成させることを目指しました。

  • 障害の概要(何が起きているかの要約)
  • 想定される発生原因
  • 推奨される対応策


これにより、経験の浅い担当者でも迅速に初動対応の方針を立てられるようになり、チーム全体の障害対応スピードの向上が期待できます。


3. 全体の構想 - PowerAutomate × Copilot Studioによる自動化

当初描いていた理想のフローは、障害通知メールの受信から対応策の共有までを、人手を介さずワンストップで完結させるものでした。具体的には、以下のような構成を想定していました。

【当初構想のフロー】


障害通知メール受信
↓
PowerAutomate(トリガー:メール受信)
↓ メール本文・件名などを抽出
Copilot Studio(生成AI処理)
↓ 障害概要・原因・対応策を生成
Teams(結果を通知)

まず、障害通知メールの受信をPowerAutomateのトリガーとして設定します。PowerAutomateがメールの本文や件名といった情報を抽出し、Copilot Studioへ連携します。Copilot Studioでは、あらかじめ設定したエージェント設定に基づいて、障害の概要や発生原因、対応策などを生成します。最後に、その生成結果をTeamsのチャネルへ自動投稿し、関係者全員がすぐに確認できる状態にします。

この構成が実現できれば、障害通知メールを受信してから対応策がチームに共有されるまでの流れがすべて自動化され、担当者は生成された対応策を確認して実際の対応に集中するだけで済みます。PowerAutomateとCopilot Studioの組み合わせは、Microsoft 365のエコシステム内で完結するため、追加のインフラ構築も不要であり、非エンジニアにとっても取り組みやすいアプローチとなっています。


4. 実際に構築したフロー - Microsoft 365 Copilotでできること

まずはCopilot Chatを使用して目的の情報取得を実現するために、以下のようなフローを構築しました。メールの取り込みは手動で行いますが、生成AIによる障害分析という核心部分はしっかりと実現できています。

【実際のフロー】


障害通知メール受信
↓ (手動)担当者がメール内容をコピー
Copilot Chat(生成AI処理)
↓ 障害概要・原因・対応策を生成
担当者が結果をもとに対応を実施


ステップ1:SharePointへのドキュメント格納とナレッジ登録

まず、事前準備として、障害対応に必要な資料やドキュメントをSharePointに格納します。たとえば、過去の障害対応履歴やサーバー管理台帳などが該当します。

次に、Copilot Chatのナレッジ設定で、これらのSharePoint上のドキュメントを参照先として登録します。これにより、Copilotは汎用的な知識だけでなく、自社固有の情報も踏まえた回答を生成できるようになります。


ステップ2:障害通知メールの内容をCopilot Chatへ入力

障害通知メールを受信したら、担当者はメールの本文をコピーし、Copilot Chatに貼り付けます。あらかじめ設定したエージェント設定をもとに、回答が生成されます。


ステップ3:生成結果をもとに対応を実施

従来であれば過去の資料を一つ一つ探し、経験と勘に頼って対応策を考えていたプロセスが、Copilot Chatへの入力ひとつで大幅に効率化されたことは、大きな前進です。


5. 振り返りと教訓

プロジェクト全体を振り返り、特に重要だと感じた教訓を共有します。

情報システム部門の協力は必須

ライセンスの管理や社内のITポリシーに関する判断は、情報システム部門の管轄であることが一般的です。 今回、業務部門のメンバー中心のプロジェクトで、先方の情報システム部門の担当者がプロジェクトに参加していなかったため、ライセンスやアクセス制約の確認が遅くなりました。

今後、同様の開発支援型プロジェクトに携わる際には、プロジェクトの初期段階で先方の情報システム部門の担当者をメンバーに加えていただくことを強く推奨するつもりです。

「完璧」でなくても価値は出せる生成AIサービスの強み

今回のPoCでは、一部分の実現のみとなってしまいました。しかし、手動のステップが入ったとしても、生成AIを活用した障害分析そのものは十分に機能し、従来の対応プロセスと比較して明確な効率化が達成できました。試験的に本PoCを実運用で取り入れたところ、一次切り分けにかかる時間は約80%削減し、目に見えるほど対応品質の安定性も向上したようです。

本件の事例がすべてのプロジェクトで当てはまるというわけではないですが、単体でも十分に既存業務の効率化を果たし得る生成AIサービスに対して改めてポテンシャルの高さを感じました。いまひとつ生成AIサービスの利用に二の足を踏んでいる企業様においても、カジュアルに試すことができるのは大きな魅力の一つだと思います。


6. おわりに

本記事では、Microsoft 365のCopilot Chatを活用した障害対応効率化のPoCについて紹介しました。

当初の理想であった完全自動化こそ実現できませんでしたが、一部分の実現であっても、生成AIを活用した業務改善は十分に可能であることを実感しました。SharePointにドキュメントを格納し、Copilot Chatのナレッジとして登録するだけで、自社の業務に特化した生成AIを構築することができます。この手順自体は、エンジニアでなくても十分に実行可能です。

まずは身近な業務課題をひとつ選び、Copilotに相談してみるところから始めてみてはいかがでしょうか。


目次


1. はじめに

生成AIを活用したコードエディタが急速に広まりつつある昨今、Cursorはその代表的な存在のひとつです。

私自身、とあるプロジェクトでCursorを使うことになったものの、使い始めて数日は正直なんとなくで使っていたところがありました。

そこで本記事では、

 ・これからCursorを使ってみようとしている方
 ・とりあえず使い始めたものの、手探りで使っている方

に向けて、実際の画面や設定例を交えながら、使ってみて「もっと早く知っておけばよかった」と感じたポイントをまとめてみました。


2. Cursorの概要

Cursorは、VSCodeをベースに生成AIを統合したコードエディタです。
既にVSCodeを使っている方であればCursorへの機能的・心理的な移行はスムーズかと思います。

コード補完や生成だけでなく、既存のプロジェクト全体を前提にした質問応答や、設計・実装の補助までをエディタ上で完結できる点が特徴です。

ChatGPTを別タブで使うのとは異なり、現在のコードやファイル構成を文脈として扱えるため、より実践的なやり取りが可能になります。


3. 言語モデルの選択

cursor language model

CursorではGPT系やGemini系など含めて様々な言語モデルを選択できますが、モデルごとに料金や得意な作業が異なります。

下の表では、2025年12月時点での代表的なモデルとその特徴について、入力単価が安い順に整理しています。
特徴についてはCursorに聞いてまとめてもらいました。


モデル名 特徴
Grok Code レスポンスが速く、日常的な開発作業向け。
短い質問や軽いコード補完、試行回数の多い作業で使いやすい。
Gemini 3 Flash 高速な応答性と効率性を備えたモデル。
プロ級の知性と速度を兼ね備え、日常的な開発作業に適している。
GPT-5.1 Codex Max 汎用性が高く、幅広い用途で安定した性能を発揮。
複雑な推論や多段階のタスクに強みを持つ。
Composer 1 Cursor向けに設計されたエージェント型モデル。
複数ファイルにまたがるコードの読み書きや変更が可能。
GPT-5.2 OpenAIの最新かつ最も高度なコーディングモデル。
複雑で長時間のコーディングタスクやサイバーセキュリティ分野での性能が向上している。
Gemini 3 Pro マルチモーダルな理解力とツール活用に優れ、画像や動画、コードを統合的に処理可能。
プロトタイピングやMVP開発に適している。
Claude 4.5 Sonnet 安定性と予測可能性が高く、指示に忠実で小規模な非破壊的編集に適している。
複雑なリファクタリングやエージェント型ワークフローに最適。
Claude 4.5 Opus Anthropicの最も高度なAIモデルで、コーディング性能が業界トップクラス。
情報検索やツール使用、分析、Excel自動化などの企業向け機能も強化されている。

現状、公式ドキュメントにモデルごとの具体的な利用シーンが詳しく載っているわけではなく、実際には試しながら把握していく部分も多い印象です。

また、実際の開発では「これは軽い作業だからこのモデル」「次は設計だからこのモデル」とモデルを毎回切り替えるのは、思った以上に判断コストがかかります。

そのため、モデル選択にこだわりがない場合は、少なくとも最初はデフォルトのAutoを使うのが無難だと感じました。

Autoは、Cursorがタスク内容に応じて適切なモデルを自動で選択してくれるため、モデルの違いを意識せずに作業を進めることができます。

ただし、稀に「急に変なこと言い出したな」と感じる場面もあるため、その場合は明示的にモデルを選択する必要があるかと思います。


4. 4つのモード(Agent/Ask/Plan/Debug)

cursor four mode

Cursorには、作業内容ごとに使い分けられるAgent / Ask / Plan / Debugの4つのモードが用意されています。
デフォルトではAgentモードで動作します。

言語モデルはデフォルトのAutoのままでも大きな問題は起きにくい一方で、モードについてはそれぞれの特徴を理解した上で使い分ける必要があると思っています。


4-1. Agentモード

Agentモードは、エディタ上でのコード作成やコマンド実行などの作業をCursorに任せたいときに使います。

新機能の実装やRspecのテスト作成など、実際に手を動かす開発作業をまとめて進められます。

一方で、Agentモードは「最終的にコードを直す」前提で動く傾向があります。

例えば「このエラーの原因は?」と単に質問しただけのつもりでも、原因が確定していない段階でもコードの修正まで進めてしまうことがあります。

そのため、考えを整理したいだけの場面や、まずは状況を理解したい段階では、後述する別のモードを選んだほうが快適でしょう。


4-2. Askモード

Askモードはその名の通り、質問や相談をしたいときに使います。

途中から入ったプロジェクトの既存コードの流れを理解したい場合や、この処理が何を意図して書かれているのかを確認したい場面などで有効です。

私の場合は費用を抑えるため、一般的な構文や言語仕様のようにプロジェクトの文脈が不要な内容はChatGPTで確認し、 文脈を踏まえた回答が必要な場合はAskモードを使うようにしています。


4-3. Planモード

Planモードは、実装に入る前に方針を整理・具体化したいときに使います。

こちらから要件や目的を伝えると、Cursorから前提条件や確認事項が提示されます。

それらのやり取りを踏まえて、実装方針や作業手順をMarkdown形式のドキュメントとしてまとめてくれます。

「何を作るか」「どこを直すか」などを文章として可視化できるため、少し規模のある改修や新機能を考える場面で役立ちます。

また、作成された計画ファイルは、後述するコードレビューでも活用できます。

※Planモードについてはコチラの記事でも詳しく紹介されているので是非ご覧ください。
Cursor Planモードのススメ:なぜ"いきなり書かせる"と事故るのか


4-4. Debugモード

Debugモードは、バグの原因特定から修正・検証までを進めたいときに使います。

バグの状況を伝えると、複数の仮説を立てたうえでログ出力の追加などのコード修正を行い、バグ再現のための画面操作やコマンド実行の手順を示してくれます。

その実行結果をもとに原因を絞り込み、修正案の提示や再修正を進めていく流れになります。

このモードは2025年12月にリリースされた比較的新しいもので、まだあまり試せてはいませんが、デバッグの進め方そのものを支援してくれる点が特徴的だと感じています。


5. Rulesの設定

cursor-rules.webp

Cursorには、振る舞いをあらかじめ調整できる「Rules」という仕組みがあり、プロジェクト固有の前提や自分の作業スタイルを共有した状態でCursorとやり取りできます。

Rulesには主にプロジェクトルールとユーザールールの2つがあり、いずれもCursor SettingsRules and Commandsから設定できます。


5-1. プロジェクトルール

プロジェクトルールは、特定のプロジェクトごとに適用されるルールで、開発環境や作業前提などをCursorに伝えることができます。

例えば、RSpecをDocker Compose経由で実行する場合は以下のようなルールを設定できます。

--- alwaysApply: true --- RSpecのテストを実行する際は、必ず以下の形式で実行すること: - 'docker-compose exec web bundle exec rspec [テストファイルパス]' - 直接 'bundle exec rspec' を実行しないこと 例: - 全テスト: 'docker-compose exec web bundle exec rspec' - 特定ファイル: 'docker-compose exec web bundle exec rspec spec/models/user_spec.rb' - 特定行: 'docker-compose exec web bundle exec rspec spec/models/user_spec.rb:10'

このルールにより、CursorはRSpecを正しいコマンドで実行できるようになります。

ルールがない場合はデフォルトでbundle exec rspecなどを実行して失敗するため、毎回正しいコマンドを指示する必要があります。
(これが結構ストレスでした。。)

なお、alwaysApplyはルールの適用方法(Rules Type)の一つで、すべてのチャットセッションに自動的に適用されることを表しています。
適用方法は「そのルールをどのタイミングで適用するか」を指定するもので、全部で4つあります。


適用方法 概要 必要な要素
Always Apply すべてのチャットセッションに自動的に適用 alwaysApply: true
Apply Intelligently ルールの説明文をもとに、Cursorが関連ありと判断したら適用 description
Apply to Specific Files 指定したファイルに関する話題のときのみ適用 globs
Apply Manually @で該当ルールを指定した時に適用 なし


5-2. ユーザールール

ユーザールールは、すべてのプロジェクトに適用されるルールで、会話スタイルや個人の開発スタイルをCursorに伝えることができます。

例えば、私の環境では以下のようなルールがあらかじめ設定されていました。
(Cursorを日本語対応させた際に自動で追加されたのかもしれません。)

Always respond in Japanese

このように、ユーザールールはプロジェクトルールとは異なり1~2文程度で簡潔に記載するのが良いようです。


6. コードレビューでの活用

cursor review

Cursorは実装や修正だけでなく、コードレビュー用途でもかなり使えます。

今のところ、以下のような手順でレビューしてもらっています。


6-1. レビュー用のプロジェクトルールを作成する

例えばこのようなルールを作成します。

--- alwaysApply: true --- # コードレビュールール コードレビューを行う際は、このファイルを必ず参照し、 最初に「review.mdcファイルを参照しました」と出力すること。 ## チェック項目 ### 1. コーディング規約・品質 - [ ] RuboCop(.rubocop.yml)に準拠しているか - [ ] 可読性が保たれているか(命名・責務・重複コード) - [ ] デバッグコードや不要なコメントが残っていないか ### 2. テスト - [ ] 変更内容に対応するテストが書かれているか - [ ] エッジケース・異常系が考慮されているか ### 3. セキュリティ・安全性 - [ ] SQLインジェクション / XSS / 認可まわりに問題がないか - [ ] 機密情報がハードコードされていないか ### 4. パフォーマンス - [ ] N+1など明らかな非効率がないか - [ ] 大量データを扱う処理が妥当か ### 5. 仕様・ロジック - [ ] 計画ファイル・仕様に沿った実装になっているか - [ ] ロジックの誤りや境界値の考慮漏れがないか - [ ] 既存機能への影響がないか ## レビュー時の参照物 - 差分ファイル(changes.diff 等) - Planモードで作成した計画ファイル ## レビューコメント - 各項目を '[x] / [ ]' で明示する - 必須修正と任意修正を区別する - 可能であれば改善案を添える

ちなみに、このルールはCursorと一緒に作ったもので、読みやすさを優先して短く整理しています。

実際にはプロジェクトごとに必要な観点を追加・調整する必要があると思います。


6-2. レビュー対象の差分ファイルを作成する

下記のようなコマンドを実行し、差分ファイルを作成します。

git diff origin/develop..HEAD > changes.diff


基底ブランチがmainの場合は、Cursorが用意している「Branch (Diff with Main)」シンボルを渡せば十分です。

一方、main以外を基底にしたい場合は、現状このようにgit diffで差分ファイルを作るのが一番確実そうです。


6-3. レビューしてもらう

Askモードを選択し、下記2つのファイルを渡して「レビューして」と入力します。

  • 上記で作成したchanges.diff
  • 実装前にPlanモードで作成した計画ファイル

  • Askモードを使うことで、コードを書き換えられずレビューに集中してもらえます。


    7. おわりに

    本記事では、実際にCursorを使ってみる中で、「もっと早く知っておけばよかった」と感じたポイントを中心に紹介してきました。

    Cursorをこれから使い始める方や、すでに使ってはいるものの活用しきれていないと感じている方にとって、少しでも参考になれば幸いです。

想定読者

  • Cursorを使い始めたけれど「なんとなくAskしか使っていない」方
  • Copilotの延長のような感覚でAgentを使ってうまくいかなかった経験がある方
  • 設計やレビューの工夫に関心がある方


目次

  1. はじめに
  2. Cursorの4つのモードと使い分け
  3. Planモードでできること
  4. Planモードの実践的な使い方
  5. よくある失敗パターン
  6. まとめ


1. はじめに

Cursorでコーディングしているとき、こんなことに心当たりはありませんか?

  • とりあえず個別に分からないことをAskモードで都度質問しているけど、なんとなく思ったような答えが得られなくて堂々巡りになってしまう
  • 全体の方針や設計を固めずに、いきなりAgentモードで「こんな機能作って」と任せてみたら、意図していないコードやイマイチな実装が返ってきてしまったことがある
  • 要件や意図がLLM(AI)にちゃんと伝わっていないまま進めてしまい、「なんでこうなった?」と感じた経験がある

実はCursorは4つの試行モードを持っています。それがAsk / Agent / Plan / Debugです。
なぜコードの質が安定しないのか?
その答えは、「設計を明確にせずに実装に進んでしまう」ことにあると自分は考えています。
Agentモードは優秀ですが、前提が曖昧だと迷走し、その場しのぎのコードを量産しやすい傾向がある。とも。。

この記事では、特にPlanモードに焦点を当て、以下のことについて独断と偏見を交えて書いています:

  • 4つのモード(Ask / Agent / Plan / Debug)の違いと使い分け
  • Planモードがなぜ「コードを書かないモード」なのか
  • Plan → Agentの黄金パターンでコードの質を安定させる方法
  • よくある失敗パターンの回避

それぞれのモードの特徴を理解することで、コードの質を安定させ、設計を明確にしながら効率的に開発しやすくなると信じています。
Cursorを使用してみて、また調べたりした中での自分なりの解釈も含まれていると思いますので、一解釈として捉えていただければ幸いです。
その結果「自分はこう思う」、「この箇所はこうだ」という議論のきっかけにつながれば嬉しいなという思いです。
最後までお付き合いいただけると大変嬉しいです。


2. Cursorの4つのモードと使い分け

それぞれのモードについて順番に確認していきましょう。
公式ドキュメントはこちらです:https://cursor.com/ja/docs/agent/modes

2.1. Ask モード:壁打ち・検索・局所理解

  • 役割
    • 質問・調査・コードリーディング補助
    • ChatGPT的だが「今開いているコード」を文脈に持てる
  • 向いている用途
    • 「このメソッド何してる?」
    • 「Railsでこれどう書く?」
    • 「このエラーが出た時の対処方法は?」
  • 弱点
    • 複数ファイルをまたぐ判断が不安定になりやすい


2.2. Agent モード:実装を"手で書かせる"

  • 役割
    • コード生成・修正・リファクタ
    • 指示に基づきファイルを編集する実行役
  • 向いている用途
    • 単機能の追加
    • 定型リファクタ
    • テスト生成
  • 危険ポイント
    • 設計を渡さずに使うと事故りやすい
    • その場しのぎのコードを"それっぽく"量産する傾向がある


2.3. Debug モード:バグの再現と修正支援(2025年12月追加)

  • 役割
    • ランタイムログを埋め込んでバグの再現と修正を支援
    • 複雑なバグの根本原因を特定
    • さまざまなスタック、言語、モデルで動作
  • 向いている用途
    • 再現が困難なバグの調査
    • ランタイム時の動作確認
    • 複雑なバグの根本原因分析
  • 特徴
    • 2025年12月10日のバージョン2.2で追加された比較的新しい機能
    • 実行時のログを自動的に収集・分析
    • バグの再現条件を特定しやすくする


2.4. Plan モード:設計・思考の言語化

Plan モードは「コードを書かないモード」です。それではなぜコードを書かないのか?

  • 役割
    • 設計の整理・最適化
    • 実装前の計画立案
    • コード生成の指示を構造化
  • Planモードの本質
    • コードを書かない
    • ファイルも編集しない
    • 「何を・なぜ・どう進めるか」を構造化することで、コードの質を向上させやすくなる
  • なぜ Planモード が存在するのか?(自分なりの解釈です🙏)
    • LLMは「最初の前提」が曖昧だと破綻しやすい傾向がある
    • Agentにいきなり投げると問題が起きやすい:
      • 境界が曖昧(どこまで実装すべきか判断できない)
      • 責務が混ざる(単一責任の原則が守られない)
      • 後から直しづらい(設計意図がコードに反映されない)

Planモードとは

前提を固定するための安全装置


2.5. 4つのモードの使い分け判断基準

では、実際にどのモードを使うべきか?作業の種類でざっくりと分類すると以下の通りだと考えています。

人間の作業 Cursorモード
要件整理 Plan
設計レビュー Plan
実装 Agent
調べ物 Ask
バグの再現・調査 Debug


更に具体的な判断基準は以下の通りです。

  • Askモード:コードを理解したい、調べ物をしたい時
    • 「このコードの意味は?」
    • 「このエラーの原因は?」
    • 「この機能の実装方法は?」
  • Agentモード:設計が明確で、単一のタスクを実装したい時
    • 単機能の追加
    • 定型リファクタ
    • テスト生成
  • Planモード:複雑なタスクや、設計を明確にしたい時
    • 複数ファイルにまたがる機能追加
    • 大規模なリファクタリング
    • 新規機能の設計検討
    • バグ修正の原因特定と修正計画
  • Debugモード:バグの再現や調査が必要な時
    • 再現が困難なバグの調査
    • ランタイム時の動作確認
    • 複雑なバグの根本原因分析

判断のポイント

「このタスクは1つのファイルで完結するか?設計が明確か?」が分かれ目だと思っています。
不明確ならPlanモードで設計を固めてからAgentモードに進むことをおすすめします。


3. Planモードでできること

2章で説明した通り、Planモードは「前提を固定するための安全装置」です。
なぜ本記事でPlanモードを特に強調するのかというと、「設計や前提を明文化するプロセス」こそが、実はコードの質と開発効率を大きく左右すると考えているからです。

Planモードの本質は、頭の中にある全体像や前提事項を言語化し、AIや他者と共有することだと考えています。
設計を整理できていないと、実装も迷走しがちです。Planモードは、その「思考の棚卸し」「設計の明文化」をサポートしてくれるツールです。

ここからは、Planモードで実際にどんなことができるか、具体的な使い方や機能を見ていきましょう。

3.1.できること

Planモードでは、以下のようなことができます:

  • 設計の整理・最適化
    • 実装前に設計を構造化して整理
    • 責務の分離や境界の明確化
    • 実装順序の最適化
  • コード生成の指示を整理・最適化
    • Agentモードに渡す指示を明確化
    • 実装の粒度や範囲を定義
    • エラーハンドリングやテストの方針を決定
  • リスクの事前発見
    • 実装前に設計上の問題点を発見
    • 依存関係や影響範囲の確認
    • 実装の難易度や工数の見積もり

3.2.弱点・注意点

Planモードにも以下のような限界があります:

  • 設計責任はすべて人間にある
    • Planモードは設計を「整理」するだけで、設計自体は人間が考える必要がある
    • 良い計画を立てるためには、そもそも良い設計をインプットとして与える必要がある
  • 計画の過信に注意
    • 計画はあくまで「仮説」なので、実装中に問題があれば柔軟に修正する必要がある
    • 計画が細かすぎると、実装の柔軟性を失う可能性がある
  • 計画作成にも時間がかかる
    • 複雑なタスクほど計画作成に時間がかかる
    • 単純なタスクではAgentモードを直接使う方が効率的な場合もある


4. Planモードの実践的な使い方

Planモードの真価は、Agentモードと組み合わせることで発揮されます。
ここでは、最も効果的な使い方である「Plan → Agentの黄金パターン」と、実践的な使い方について紹介します。(黄金パターンは大げさかもです。。笑)

4.1. 基本フロー

  1. Planモードで計画を作成
    • タスクの全体像を把握
    • 実装すべき機能を分解
    • 実装順序を決定
  2. 計画をレビュー・修正
    • 計画の妥当性を確認
    • 不足している点を補完
    • 実装の優先順位を調整
  3. Agentモードで実装
    • 計画に基づいて明確な指示を出す
    • 段階的に実装を進める
    • 各ステップで動作確認
  4. 必要に応じて計画を見直し
    • 実装中に問題が発見されたら計画を修正
    • 柔軟に対応する


4.2. 実例:ユーザー認証機能の追加

  • 悪い例(PlanなしでAgentに投げる)
    • プロンプト

      $ ユーザー認証機能を追加して

    • 結果
      認証ロジック、セッション管理、エラーハンドリングが混在し、後から修正が困難になる傾向がある。


  • 良い例(Plan → Agentの黄金パターン)
    • Step 1:Planモードで計画を作成
      • プロンプト:

        $ ユーザー認証機能を追加したい。以下の要件を満たす設計を考えて:
        - メールアドレスとパスワードでのログイン
        - セッション管理
        - エラーハンドリング
        - テストコード

      • Planモードが生成する計画例
        • 認証コントローラーの作成(ログイン / ログアウト)
        • 認証サービスの作成(認証ロジックの分離)
        • セッション管理ミドルウェアの実装
        • エラーハンドリングの実装
        • テストコードの作成
    • Step 2:計画をレビュー
      • 各コンポーネントの責務が明確か
      • 実装順序が適切か
      • 要件に漏れがないか
    • Step 3:Agentモードで段階的に実装
      • プロンプト

        $ Step 1の計画に基づいて、
        まず認証コントローラーを作成してください。
        ログインとログアウトのエンドポイントを実装し、
        認証サービスを呼び出すようにしてください。

    • このように1ステップずつ実装 → 動作確認を繰り返すことで、実装の破綻を防ぎやすくなる。


4.3. メリット

  • コードの質が安定しやすい
    • 一貫性のあるコードが生成されやすい
    • 責務の分離が適切に行われやすい
  • 修正が容易
    • 問題箇所の特定が早い
    • 影響範囲が明確
  • レビューが効率的
    • 実装前後で設計と照合できる
  • チーム開発での共有が容易
    • 認識合わせがしやすい
    • 実装方針が明確になる


5. よくある失敗パターン

Planモードを理解していても、実践では様々な失敗をしてしまいます。
ここでは、よくある失敗パターンとその回避方法を紹介します。

失敗パターン1:PlanなしでAgentに投げる

  • 症状
    • Agentモードに複雑なタスクを丸投げ
    • 生成されたコードが期待と違う
    • 修正に時間がかかる
    • 例:
      「ユーザー管理機能を実装して」
      → 認証、認可、プロフィール管理が混在
      → 後から分離するのに時間がかかる
              
  • 回避方法
    • 複雑なタスクは必ずPlanモードで設計を固める
    • 「このタスクは1ファイルで完結するか?」を自問する
    • 設計が不明確ならPlanモードを使う


失敗パターン2:計画を過信する

  • 症状
    • Planモードで作成した計画を絶対視
    • 実装中に問題が発見されても計画を修正しない
    • 柔軟性を失う
    • 例:
      Planで「A → B → C」の順序を決めた
      → 実装中に「Bの前にDが必要」と判明
      → でも計画を変えずに進めて、後で大修正
              
  • 回避方法
    • 計画は「仮説」として扱う
    • 実装中に問題が発見されたら、すぐに計画を見直す
    • Planモードは何度でも使える


失敗パターン3:計画が細かすぎる

  • 症状
    • 計画が細かすぎて、実装の柔軟性を失う
    • 計画作成に時間がかかりすぎる
    • 実装中に微調整できない
    • 例:
      Planで「1行目のコードはこう、2行目はこう...」と詳細に指定
      → 実装中に「この方法の方が良い」と気づいても変更できない
      → 計画に縛られて非効率
              
  • 回避方法
    • 計画は「何を」「なぜ」を明確にし、「どう」は大まかに
    • 実装の詳細はAgentモードに任せる
    • 計画の粒度は「コンポーネント単位」程度が適切


失敗パターン4:Planモードを過度に使う

  • 症状
    • 単純なタスクでもPlanモードを使う
    • 計画作成に時間がかかり、効率が悪い
    • 「計画を作るのが目的」になってしまう
    • 例:
      「変数名を変更する」という単純なタスクでもPlanモードを使う
      → 計画作成に5分、実装に1分
      → 直接Agentモードで1分で終わるタスクを6分かける
              
  • 回避方法
    • 単純なタスクはAgentモードを直接使う
    • 「このタスクはPlanが必要か?」を判断する
    • 計画作成の時間もコストとして考える


失敗パターン5:計画をレビューしない

  • 症状
    • Planモードで計画を作成したら、すぐにAgentモードで実装
    • 計画の妥当性を確認しない
    • 実装後に「計画が間違っていた」と気づく
    • 例:
      Planで「認証はJWTで実装」と計画
      → レビューせずに実装開始
      → 実装後に「セッション管理が必要」と判明
      → 最初からやり直し
              
  • 回避方法
    • 計画を作成したら、必ずレビューする
    • 「この計画で本当に要件を満たせるか?」を確認
    • チーム開発では計画を共有してレビュー


失敗パターン6:Askモードを活用しない

  • 症状
    • コードベースを理解せずにPlanモードで設計
    • 既存の実装と整合性が取れない
    • 重複実装や不整合が発生
    • 例:
      既存の認証実装を確認せずにPlanモードで設計
      → 既存の認証方式と異なる方式を提案
      → 実装後に不整合が発覚
              
  • 回避方法
    • 新しいタスクに取り組む前に、Askモードで既存コードを理解する
    • 既存の設計パターンや規約を確認する
    • Planモードで設計する際も、既存実装との整合性を考慮する


6. まとめ

この記事では、Cursorの4つのモード(Ask / Agent / Plan / Debug)について、 特にPlanモードに焦点を当てて解説しました。

重要なポイント

  1. 4つのモードは単なるUI切り替えではない
    • それぞれ異なる役割と使いどころがある
    • 人間の思考フェーズを明示的に分ける仕組み
  2. Planモードは「コードを書かないモード」
    • 設計を整理し、前提を固定するための安全装置
    • Agentモードに明確な指示を渡すための準備段階
  3. Plan → Agentの黄金パターンが効果的
    • 計画 → レビュー → 実装の流れでコードの質が安定
    • 複雑なタスクほど、このパターンが重要
  4. 使い分けが重要
    • 単純なタスク:Agentモードを直接使用
    • 複雑なタスク:Ask → Plan → Agentの順で進める
    • 判断基準:「1ファイルで完結するか?設計が明確か?」
  5. よくある失敗を避ける
    • PlanなしでAgentに投げない
    • 計画を過信しない
    • 計画が細かすぎないようにする
    • 単純なタスクではPlanモードを使いすぎない

「いきなり書かせる」のではなく、「設計してから書かせる」。
この意識を持つだけで、Cursorとの付き合い方が大きく変わる可能性があります。
ぜひ、Planモードを活用して、より効率的で質の高い開発を実現してみてください。
最後までお付き合いいただきありがとうございました。


  1. はじめに:顧客データ活用が進まない
  2. AIエージェントを利用した顧客データ活用環境(Amazon Bedrock)
  3. AIエージェントで顧客データを分析する
  4. まとめ:スモールスタートで始める顧客データ活用


1.はじめに:顧客データ活用が進まない

「顧客データをもっと活用したい」という声をよく耳にします。購買データ、会員データ、来店履歴、キャンペーンの反応率など、日々さまざまなデータが蓄積されていますが、それらを活用して顧客理解を深め、顧客体験の向上や販促施策に結びつけていくことは簡単ではありません。

データが複数のシステムに散らばっていたり、分析担当者が不足していたり、情報システム部も本業の対応で忙しく、すぐに動けない場合もあります。「どこから手をつけたらいいかわからない」という状況のまま、時間だけが過ぎてしまうこともあります。

しかし、顧客データ活用が重要であることは間違いありません。そこでAWSが公開しているサンプルソリューションを活用することで、データ活用の最初の一歩を驚くほど軽やかに踏み出すことができます。

本記事では、主に小売業の皆さま向けに、「顧客データ活用の最初の一歩をどう簡単に始められるのか」をご紹介します。 今回ご紹介のデモンストレーションは小売業のシナリオですが、もちろん小売業以外でも営業・販売促進(マーケティング)・企画...といった職種の方々にお役に立てる内容です。また、「データ収集・加工・分析の依頼が多い...。」といったIT部門の方々の課題解決にもなります。 少しでも多くの皆様の参考になれば嬉しいです。


2.AIエージェントを利用した顧客データ活用基盤(Amazon Bedrock)

2-1. データ活用のはじめの一歩

今回はAWSが公開している下記リポジトリを利用します。
https://github.com/aws-samples/sample-c360-text2sql-segmentation-entityresolution 

デプロイは簡単で、AWSが提供しているWebページにてDeployボタンを押下するだけで、任意AWSアカウントに以下「AIエージェントを利用した顧客データ活用環境」を構築することができてしまいます。

構成図

構築手順概要

  1. AWSアカウントを用意してログインする
  2. 下記WebページにおいてDeployボタンを押下する
  3. https://aws-samples.github.io/sample-one-click-generative-ai-solutions/solutions/c360/

    構成図

  4. S3バケットにサンプルデータをアップロードする
  5. Cognitoユーザプールでログイン認証情報を設定する


※上記はサンプルデータを活用する手順です。オリジナルデータを活用するには、別途手順を踏む必要があります。


2-2.具体的にAIエージェントは何をしてくれるの?

上記構成において、AIエージェントはデータ分析に使用する下記のようなSQL文を作成してくれます。例えば、チャットに「20代女性が頻繁に購入する商品、および購入される時期を教えてください。」と投げかけると、下記のような複雑なSQL文が一瞬で作成されます。

 
WITH twenties_female_customers AS (
  SELECT customer_id
  FROM customer_master
  WHERE gender = 'female' AND age >= 20 AND age < 30
)

SELECT 
  im.item_id,
  im.item_name,
  im.item_category,
  im.item_style,
  COUNT(*) as purchase_count,
  DATE_FORMAT(from_unixtime(ph.purchase_date), '%Y-%m') as purchase_month,
  COUNT(DISTINCT ph.customer_id) as unique_customers
FROM purchase_history ph
JOIN twenties_female_customers tfc ON ph.customer_id = tfc.customer_id
JOIN item_master im ON ph.item_id = im.item_id
GROUP BY 
  im.item_id, 
  im.item_name, 
  im.item_category, 
  im.item_style, 
  DATE_FORMAT(from_unixtime(ph.purchase_date), '%Y-%m')
ORDER BY purchase_count DESC
LIMIT 20;

 


今までは、複雑なSQL文作成を情報システム部に依頼していたかもしれません。それでは、コミュニケーションコストや作業工数がかさんでしまいます。これからは、AIエージェントがSQL文を自動生成してくれるので、他部署とのコミュニケーションコストや全体的な作業工数を低減していくことができます。
また、AIエージェントは下記役割も果たしています。

AIエージェントの役割

今までは、作成されたSQL文を分析ツール(Athena)に手動で流す必要や、出力結果を業務に使いやすい形にブラッシュアップする必要がありました。これからは、データ分析から要約までAIエージェントが対応してくれるので、業務効率が一層上がると思われます。
結果として、ビジネス部門が自走できる組織づくりを支援してくれるのです。


2-3.データベース層にはどんなデータが入っているの?

ここで使用しているテストデータを紹介いたします。今回は下記のようなCSV形式の顧客データをS3に格納しています。

S3に蓄積された顧客データをGlueで構造化

本構成においては、S3に蓄積された顧客データをGlueで構造化していくことで、AIエージェントやSQLからすぐに活用できる分析基盤を構築しています。


3.AIエージェントで顧客データを分析する

AIエージェントを利用した顧客データ活用環境の構築ができれば、顧客データが分析できる状態まで整います。

3-1.どうやってAIエージェントを使えるの?

これまで、小売の現場で売上や購買傾向を調べるには、多くの手順が必要でした。期間を指定し、商品カテゴリごとに抽出し、必要であれば顧客データと結びつけ、場合によってはエンジニアに依頼して結果が出るまで待つこともありました。
しかし、AIエージェントを使うと、自然な言葉で質問するだけで答えが返ってきます。 例えば次のような会話が可能になります。

ai_agent_conversationAIエージェントと会話ベースでのやりとり

質問すれば、意図に沿った情報に答えてくれるというのはとても魅力的です。
これまでは数日かかっていた問いが、わずか数秒で返ってくるだけではありません。すぐに次の問いが思い浮かぶようになります。
「では、その商品を購入している人のリピート率は?」
「購買が増える時間帯は?」
「他に一緒に買われている商品は?」
「天候との関係は?」
このように、問いが連鎖することで、現場の意思決定スピードが大きく向上します。

表1


3-2.AIエージェントを使うメリット

こうした即時性のある分析が可能になると、現場だけでなく、情報システム部にとっても良い変化が生まれます。これまで情報システム部は、現場から依頼される「このデータを抽出してほしい」、「この条件で分析してほしい」といった作業に多くの時間を割いていました。依頼内容を確認し、必要なデータを探し、整形し、加工し、レポートとしてまとめるという一連の作業は、本来の業務とは別の大きな負担でした。
一方、ビジネス側も同じです。データを収集し、条件を合わせ、形式を整えるだけで多くの時間がかかり、肝心の分析や戦略検討に十分な時間を割けないという悩みがありました。しかし、AIエージェントが活用できる環境が手に入ると、こうした負担が大きく軽減されます。現場は、自分たちの言葉で質問し、その場で必要な情報を手にすることができます。
情報システム部は、繰り返し発生する抽出作業から解放され、より価値の高い本来の業務に時間を使えるようになります。 つまり、双方が本来注力すべき仕事に集中できるようになり、企業全体としての意思決定の質とスピードが大きく向上するのです。

例えば、以下のような活用方法が考えられます。
(1)販促担当:キャンペーンの効果測定
(2)インストラクター: 会員一人ひとりに合わせたケア計画
(3)EC事業担当:実績を固定帳票とは違う切り口で分析
(4)小売店の店⻑:固定帳票を読み解けない経験の浅いスタッフの補助
(5)顧客分析担当:顧客のRFM分析(※1)、デシル分析(※2)、店舗エリア別分析etc
(6)経営戦略部:顧客データを活用した各事業の経営戦略

※1 RFM分析⋯顧客の購買データをRecency(最終購入日)、Frequency(購入頻度)、Monetary(購入金額)の3つの指標で評価し、顧客をグループ分けして最適なマーケティング施策(優良顧客への特別オファー、離反顧客へのアプローチなど)を打つための顧客分析手法
※2 テシル分析⋯顧客の購買データをもとに、購入金額の高い順に顧客全体を10等分(デシル=10分の1)し、各グループ(デシル1~10)の売上構成比や1人あたりの購入金額を分析する手法

これまでとこれから情報システム部→AIエージェント


4.まとめ:スモールスタートで始める顧客データ活用

顧客データ活用は、大きな投資や大規模なプロジェクトが必要というイメージを持たれがちですが、実際には、サンプルソリューションを使ってまず体験してみることから始めることができます。複雑な準備や専門知識は不要で、必要なのは「やってみたい」という前向きな気持ちだけです。
アクセルユニバースでは、それぞれの小売企業が抱えている課題や状況に合わせて、サンプルソリューションのデモをご用意することができます。操作方法や仕組みについても、わかりやすい形で丁寧にご説明します。

また、「自社のデータならどう使えるのか」、「導入するとどこに効果がありそうか」といった疑問にも寄り添いながら、一緒に解像度を上げていくことができます。まずは、小さく触れてみることから始めてみませんか。顧客データ活用は、体験することで一気に実感できるようになります。気になる点や不安な点があれば、どんなことでもお気軽にご相談ください。

AUCへのお問い合わせ 

サンプルソリューションのデモ視聴希望の方はこちら 



X(旧Twitter)・Facebookで定期的に情報発信しています!

  1. 1. はじめに
  2. 2. DifyでエージェントとMCPサーバーを使ってみよう
  3.  2-1. MCPサーバーの設定
  4.  2-2. エージェントチャットでMCPサーバーを使う
  5.  2-3. ワークフローでエージェントとMCPサーバーを使う
  6. 3. まとめ
  7. 4. Difyのそれは極めて個人的な考察

1. はじめに

ブログをご覧の皆さまこんにちは。エンジニアの小川です。

前回の記事ではDifyの基本操作について解説しました。
今回はDifyでエージェントとMCPサーバーを使用して外部サービスと連携する方法を紹介します。

当ブログでは、これまでMCP(Model Context Protocol)について以下の記事で紹介してきました。
MCPサーバーやエージェントの基本概念については、こちらをご参照ください。

実体験でわかったMCPサーバー・クライアントの役割と導入メリット

2. DifyでエージェントとMCPサーバーを使ってみよう

2-1. MCPサーバーの設定

それではまずDifyから接続するMCPサーバーの設定を行っていきましょう。
今回使用するMCPサーバーは、以前も紹介したGitHubの公式MCPサーバーを使用していきます。

ヘッダーメニューにある「ツール」を選択し、ツール画面にある「MCP」タブを押下します。

tool mcp view

MCPサーバー画面が表示されたら「MCPサーバー(HTTP)を追加」ボタンを押下します。

するとMCPサーバーの設定画面が表示されますので、情報を入力していきます。

mcp setting view

サーバーURL: https://api.githubcopilot.com/mcp/ 名前とアイコン: GitHub MCP (※何でも可) サーバー識別子: github-mcp (※何でも可) ヘッダー:  ヘッダー名: Authorization  ヘッダー値: Bearer <Github Personal Access Token>

※「認証」からGithubのOAuth2を使用して認証することも可能ですが、今回は簡単なのでPersonal Access Tokenを使用します。
※ 設定している権限の詳細は割愛します。

上記のように入力したら、「保存」ボタンを押下して設定を保存します。

接続が成功したらMCPサーバー内のツール一覧が表示されます。

mcp server list

これでMCPサーバーの登録が完了しました!

次にエージェントを使用する為の設定を行いましょう。
ヘッダーメニューにある「プラグイン」を選択し、プラグイン画面にある「マーケットプレイスを探索する」タブを押下します。
次に「エージェント戦略」を選択し、「Dify Agent Strategies」の「インストール」ボタンを押下します。

add plugin

「Dify Agent Strategies」はDifyのワークフローでのエージェント機能で使用するためのプラグインで、Difyにエージェント戦略を追加します。
個人的にこれなぜ最初から標準で入れていないのか謎なのですが、ともあれ、これでエージェントを使用する準備が整いました。

2-2. エージェントチャットでMCPサーバーを使う

それでは実際にDifyからMCPサーバーに接続し、外部サービスと連携してみましょう。

まずはすぐに試せるDifyのエージェントチャットでMCPサーバーを使用していきます。
ダッシュボードに戻り、「最初から作成」から「エージェント」を選択します。

menu

agent chat

エージェント画面が表示されました!

ではエージェントを使ってMCPサーバーに接続する設定を行っていきましょう。
画面右上にあるモデル選択ドロップダウンメニューを押下し、使用するモデルを選択します。今回は前回と同様に一定量まで無料枠で使用できる「Gemini 2.5 Flash」を使用します。

次にプロンプトに以下を入力します。

      貴方はGithubリポジトリ「McpBlogSample」の管理者です。

      [McpBlogSampleリポジトリ]
      https://github.com/t-ogawa-dev/McpBlogSample

      ユーザから与えられたリポジトリへの指示を適切に行ってください。
    
最後に画面下にある「ツール」右にある「+」ボタンを押下し、「MCP」タブを選択します。
すると先程設定した「GitHubMCP」サーバーが表示されていますので、こちらを押下すると、MCPサーバー内のツールが表示されます。

全て登録しても構いませんが、今回はひとまずIssue関連のみ登録します。

登録するツール一覧:
・list_issues
・issue_read
・issue_write

※豆情報: ツールを個別に登録すると最大10までですが、「すべてを追加する」ボタンを押すと制限を超えてMCP内の全てのツール(GitHubだと40)を登録することもできます。

agent tool list

これでエージェントチャットでMCPサーバーを使用する準備が整いました。

では実際にエージェントチャットでMCPサーバーを使用してみましょう。
今回対象とするプロジェクトは、以前の記事で使用したGitHubリポジトリ「McpBlogSample」です。

github project

次にチャット欄に以下の指示を入力してみましょう。

      新しいIssue「デザインを赤基調から緑基調に変更」を作成してください。
      またコメント欄には必要と思われる内容を記載してください。
    
さて、エージェントはどのように動作するでしょうか

dify agent chat
エージェントの動き

github issue
作成されたIssue

Issueが作成されましたね!

以上の様に、エージェントの「ツール」にはMCPサーバーから取得したツールを登録することで、MCPサーバーを介してDifyのエージェントが外部サービスと連携できるようになりました。
またこの「ツール」はMCPに限らず、Difyの標準ツールやプラグイン、カスタム機能等で追加したDify上のツールも同じ様にエージェントで使用することが可能です。

次はワークフローでMCPサーバーを使用する方法を紹介します。

2-3. ワークフローでエージェントとMCPサーバーを使う

次にワークフローでMCPサーバーを使用する方法を紹介します。

ダッシュボードに戻り、「最初から作成」から「ワークフロー」を選択します。この辺りは前回記事で行っておりますので説明は割愛します。

前回は「LLM」ブロックを使用しましたが、今回は「エージェント」ブロックを使用します。

agent block description

「エージェント」ブロックをワークフローキャンバスにドラッグ&ドロップし、ブロックを押下して設定画面を開きます。

画面右側にある「エージェンティック戦略」ドロップダウンメニューを押下すると、「Agent」がリスト内に表示されています。この「Agent」が先に追加した「Dify Agent Strategies」プラグインによって追加されたエージェント戦略です。
ここから「Agent」→「Function Calling」と選択します。

agent block function calling selection

次にモデル選択ドロップダウンメニューを押下し、使用するモデルを選択します。もちろん「Gemini 2.5 Flash」を使用していきます。

次に下部にあるツールセクションから、エージェントチャットと同様にMCPサーバーから取得したツールを登録していきます。
今回は以下を設定します。

・issue_read

agent block setting image

次にエージェントブロックの「INSTRUCTIONS」にエージェントの役割を入力します。

      あなたは GitHub リポジトリ「McpBlogSample」の管理者兼メンテナーです。

      対象リポジトリ:
      https://github.com/t-ogawa-dev/McpBlogSample

      ユーザーから渡された Issue ID の Issue情報を取得し、
      内容を要約してください。
    

次にQUERYに、ユーザ入力で入力させるIssue IDを指定します。
      Issue ID: {{input.issue_id}} ←※ 「/」を入力すると変数選択メニューが表示されますので、そこから選択する
    

setting image



これでエージェントブロックの設定は完了です。早速テスト実行してみましょう!



workflow
ワークフロー全体図

result
ワークフロー実行結果

ワークフローが正常に完了しましたね!
以上の様に、ワークフロー内のエージェントブロックでMCPサーバー内のツールを使用することで、Difyのワークフローから外部サービスと連携できるようになりました。

もっと複雑なことをさせたければ、エージェンティック戦略で「ReAct」を使用することで、ツールの呼び出しと結果の活用を組み合わせて、より複雑なタスクを実行可能です。

[エージェンティック戦略の違い]
Function Calling: LLMが必要なツールを選択して呼び出し、結果を一度に処理
ReAct: 思考→行動→観察のサイクルを繰り返し、段階的に問題を解決

要は「Function Calling」はツールを呼び出して結果を得るというシンプルな処理に適しており、「ReAct」は何度も推測しながらツールを複数回呼び出してその結果を活用しながらタスクを進めることに適した用途になっています。

react description 各エージェンティック戦略イメージ。Geminiさんに依頼したらめっちゃ分かりやすいイラスト作ってくれました。

しかしやらせたいことがはっきりと決まっている場合、「ReAct」で都度推測させて処理させるよりは、「Function Calling」ブロックを複数組み合わせて使用する方が安定して動作する様に思います。

また以前の「公式GitHub MCPサーバーを使ってみた」で紹介した様な「Issueからコード作成」をやらせてみた所、プロジェクトファイルを取得してはLLMに渡して解析させて...、といったことを行っているのでトークン使用量が膨大になります(なりました(泣))
こういった場合はVS CodeやCursor等のコード特化型エージェントを使用した方が効率的ですので、用途に応じて使い分けると良いでしょう。

以上、DifyでエージェントとMCPサーバーを使用する方法の紹介でした。

3. まとめ

今回はDifyでエージェントとMCPサーバーを使用して外部サービスと連携する方法を紹介しました。

DifyでMCPサーバーを使用すると、サーバー内のツール一覧を目で見て直接確認することができたり、Difyのエージェントやワークフローと簡単に連携できる等、非常に便利です。

またこれらのワークフローはDifyのAPI経由で実行することも可能な為、他のシステムやアプリから呼び出して自動化することも可能です。以前は無かったスケジュール機能も実装され、かなり用途は広がってきている印象です。

一方で今回の様なプログラミング周りを自動化する用途に関してはあまり向いていないと思います。まぁそもそもDifyでコーディングを自動化する意味があるのか?という根本的な疑問もあります。
今回は前回のMCPサーバーの紹介時と比較しやすい様にということでGitHubのMCPサーバーを例として使用しましたが、プログラミングするならIDE上で実行すればいいですし、また今ならGitHub画面上でCopilotを実行してIssueの内容を元にコードを生成させることも可能になってきています。正直Difyで動かすメリットは無さそうです。うーん選定ミス

この様にAIを使用するにあたって、これをさせるのにはどのツールを使用するのが最適か?というのは非常に重要なポイントになってきます。別にどれでも頑張ればできなくはないのですが、その「できなくはない」のお陰で無理に動かそうとしてしまい、結果的に無駄なコストや時間を浪費してしまうことも多々あります。
ですのでAIツールを使用する際は、「これをさせるのに最適なツールは何か?」を常に意識して選定していきたいですね。

4. Difyのそれは極めて個人的な考察

今回紹介したDifyですが、使っていて楽しく、また非常に可能性を感じるツールだとは思いました。
ただし一方でMCPもDifyも出たての技術ということもあり、今は進化の過程にあると感じます。

Difyのワークフローの機能としては、標準のブロックだけでは対応が難しい箇所があり、その為拡張プラグイン/ツールとの組み合わせを前提とした設計になっている印象です。とはいえコードブロックを使用してPythonコード等を使って処理させることも可能ですので、現時点では一定のプログラミング知識があると、活用の幅は広がりそうです。

Dify内のマーケットプレースではコミュニティが作成した拡張プラグイン/ツールが充実していますが、特にサードパーティ製のツール等については、メンテナンス状況やセキュリティ面を考慮した上での選定が重要です。

MCP関連機能に関しても、MCPは本来「tool」「prompt」「resource」の3つのコンポーネントで構成されるプロトコルですが、Difyで対応しているのは現状「tool」のみです。「prompt」「resource」は恐らくDifyでは使われていません。
またエージェントでMCPサーバーのツールを使用する際には、使用するツールを手動で登録する必要があります。
「どのツールを使用するか」を人間が選択することには、以下のようなメリットとデメリットがあります。

メリット:
・トークン量を減らしてコストを抑えられる
・「必要以上のことをさせない」という規制を付けられる為、意図しない操作を防げる

デメリット:
・どのツールが必要かを人間が正しく認識して選択する必要がある
・タスクに応じて都度ツールを追加・削除する手間がかかる

個人的な考えとして、コスト管理や安全性の観点から現状の手動選択方式も理解はできますが、やはり理想的には使用するMCPサーバーを登録しておくだけで、LLM側で最適なツールを自動選択してくれる事が最終目的地なのではないかと思います。ここは特に今後の進化に期待したい所です。

個々の機能に関しては上記の様に感じることはありますが、しかしDifyは単なるワークフローツールでなく「AI機能を使う為のプラットフォーム」を称していることからも、今回紹介したワークフロー/エージェント/MCPサーバー連携は1つの側面であり、他にもRAG(情報検索)機能等の紹介していない機能も搭載されています。
目的をしっかりと定めた上で、Difyが得意不得意なこと、他のツールとの組み合わせなどを考えて構築し、必要な機能を呼び出して使用していくことで、例えば自社開発のシステムにAI機能と連携させたい時等に十分に活用できるのではないかと思います。

以上、個人的な考察でした。今後もっとDifyが面白いツールに進化していくことを期待しています。

dify last image

  1. 1. はじめに
  2. 2. Difyとは
  3. 3. Difyの基本操作
  4.  3-1. Difyの種類
  5.  3-2. アカウント作成
  6.  3-3. シンプルなワークフローを作ってみる
  7. 4. Dify実践: LLMとの連携
  8.  4-1. 初期設定(LLM設定)
  9.  4-2. ワークフローでLLMを使ってみる
  10. 5. まとめ

1. はじめに

山根さん「小川くん、Difyディフィって知ってる?」
ボク「海賊王になるやつですかね」
山根さん「じゃあ調べてブログ書いてね。」
ボク「はい。」

そんなやり取りがあったとか無かったとか



ブログをご覧の皆さまこんにちは。エンジニアの小川です。

今回はAIツール「Dify」について、入門編として基本的な使い方を解説します。

2. Difyとは

Dify公式サイト
https://www.dify.ai/

Difyとは、プログラミング知識がなくてもAIアプリケーションを開発できるオープンソースのプラットフォームです。
大規模言語モデル(LLM)を利用し、チャットボットやコンテンツ生成ツールなどを直感的な操作(ノーコード/ローコード)で開発できます。
(Google 要約より引用)

まとめるとDifyはAIアプリケーションを簡単に作成できるプラットフォームです。
GUIで操作できるため、プログラミングの知識がなくてもAIツールを作成できます。

ええそうです。ごくごく簡単なものであれば。

実際はコードを書かないといけない場面が多々ありますし、そもそもやりたいことのワークフローの設計自体が難しいケースもあります。

つまりは謳われている程には「プログラミング知識がなくても良い」ことはなく、あった方が断然良いかと思われます。まぁ「ノーコード」を名乗るサービスの多くは大体そんな感じかと思いますが。

一方で経験がある方からすると、DifyはLLMを使ったアプリケーションをとても手軽に作成できる便利なツールと言えます。

そこで本記事では、Difyの基本的な使い方と、LLMやMCPサーバーとの連携方法について、2部構成で紹介します。

・はじめてのDify - エージェント&ワークフロー実践: 第1部 入門編
・はじめてのDify - エージェント&ワークフロー実践: 第2部 応用編


本記事は主に

 ・初級〜中級エンジニアの方
 ・Difyを初めて使う方
 ・DifyでLLMを使ったアプリケーションを作成したい方
 ・DifyとMCPサーバーの連携に興味がある方

を対象としています。

3. Difyの基本操作

3-1. Difyの種類

Difyには大きく分けて2つの提供形態があります。

Dify Cloud:Dify社が提供するクラウドサービス
Dify Self-Hosted:Difyのオープンソースコードを自分で構築・ホスティングする

今回はCloud版を使用します。Self-Hosted版はGitHubでコードが公開されていますので、興味がある方はそちらも試してみてください。実際に使ってみましたが、Docker経験者であればとても簡単に構築できるかと思います。

またEnterprise版もありますが、こちらは大規模組織向けの有料プランとなっており、今回は割愛します。

3-2. アカウント作成

まずはDifyのアカウントを作成します。
特に難しい点はありません。

Dify公式サイト(https://www.dify.ai/)にアクセスし、画面右上の「Get Started」ボタンをクリックします。

dify login

GitHubアカウント、Googleアカウント、またはメールアドレスで登録/ログインできます。

dify top

ログイン後、Difyのダッシュボード画面が表示されます。

3-3. シンプルなワークフローを作ってみる

それでは実際にワークフローを作成してみましょう。
画面内のメニューにある「最初から作成」リンクを押下します。

dify top menu

作成内容の選択画面が表示されます。
ここでは「ワークフロー」を選択し、アプリ名とアプリ説明を入力して「作成する」ボタンを押下します。

dify new menu

現在(2025/11/26)の最新バージョン(v1.10.0)では、開始ノードを選択する機能が追加されていました。
今回は「ユーザー入力」を選択します。

dify select start

開始ノードが作成され、ワークフロー編集画面が表示されます。

dify start

次にワークフローのキャンバス上で右クリックし、表示されるメニューから「ブロックを追加」を選択します。
次に「HTTPリクエスト」を選択します。

dify right clieck menu

次にワークフローのキャンバス上で右クリックし、表示されるメニューから「ブロックを追加」を選択します。
次に「HTTPリクエスト」を選択すると、マウスにHTTPリクエストブロックが追従しますので、それをキャンバス内に配置します。

http request menu.

この中に通信したい先を設定していきます。
今回は例として「livedoor 天気予報API(https://weather.tsukumijima.net/)」を使用しましょう。

API欄でメソッドを「GET」に設定し、URL欄にはAPIのエンドポイントを入力します。
次にこのAPIでは「city」というクエリパラメータが必要となりますが、折角なのでこちらは実行時にユーザが入力できる様にしていきます。

まず「ユーザー入力」ブロックを選択し、「入力フィールド」横の「+」ボタンを押下します。

dify user input block

押下すると入力フィールドが追加されますので、以下に設定します。

 ・フィールドタイプ: 短文
 ・変数名:input_city
 ・ラベル名: input_city
 ・最大長: 48(デフォルト)
 ・初期値: 130010(東京)
 ・必須: チェック有り

input menu

入力できたら次は入力ブロックとHTTPリクエストブロックを接続します。
ユーザー入力ブロックにマウスオーバーすると、右側に小さな丸が表示されますので、それをドラッグしてHTTPリクエストブロックに接続します。
これでユーザが入力した値をHTTPリクエストブロックで使用できる様になります。

次にHTTPリクエストブロックを選択し、「パラメータ」フィールドに以下を設定します。
入力欄で「/」を最初に入力すると、変数を指定できる様になります。

 ・キー: city (文字列を入力)
 ・値: input_city (変数から設定)


これでユーザが入力した都市IDがHTTPリクエストのクエリパラメータとして設定されます。

dify http request block setting

最後に結果を出力するための「出力」ブロックを追加します。
先程と同様にキャンバス上で右クリックし、表示されるメニューから「ブロックを追加」から「出力」を選択して配置します。
配置したら先程と同様にHTTPリクエストブロックと出力を接続します。
接続したら、出力ブロックを選択し、「出力内容」フィールドに以下を設定します。

 ・result: {{HTTPリクエスト.body}}

これでHTTPリクエストのレスポンスボディが出力される様になります。

dify output block

それでは最後に「テスト実行」ボタンを押下して動作確認をしてみましょう。 入力欄は初期値か、または
全国の地点定義表から都市IDを参照して入力してください。

test run input

実行すると実行結果が表示されます。
正常に動作していれば指定した都市の天気予報データがJSON形式で表示されます。

dify result output

以上でシンプルなワークフローの作成と実行が完了です。

4. Dify実践: LLMとの連携

ワークフローの基本操作が理解できたところで、次はDifyのコア機能と言えるLLMとの連携を試してみましょう。

4-1. 初期設定(LLM設定)

まずは使用するLLMの設定を行います。

ヘッダーのアカウントメニューから「設定」を選択します。

dify-1-image15.webp

次に設定メニューから「モデルプロバイダー」を選択します。
すると使用できるLLMを提供するサービス一覧が表示されます。

今回は「Gemini」を使用しますので、「Gemini」カードにマウスオーバーし、「インストール」ボタンを押下します。

ここで注意してほしいのが、インストールしたモデルプロバイダーはアンインストールできません(謎仕様)。
その為無駄にインストールしない様に注意してください。「消させろー!」ってなります(なりました)。

model list

インストールが完了したら、次にAPIキーを設定します。
「Gemini」カードの「セットアップ」ボタンを押下し、表示されたモーダル内にGeminiのAPIキーを入力します。
APIキーが正しければ使用できるモデル一覧が表示される様になります。
※GeminiのAPIキーの取得方法については本記事では割愛します。公式ドキュメント等を参照してください。

install complete インストール完了時の表示

setup complete Geminiセットアップ画面

setup gemini セットアップ完了時のGeminiサービス内モデル一覧

以上でLLMを使う準備ができました!

4-2. ワークフローでLLMを使ってみる

それでは実際にLLMを使ったワークフローを作成してみましょう。
先程作成したワークフロー編集画面に戻り、キャンバス上で右クリックし、表示されるメニューから「ブロックを追加」を選択します。
次に「LLM」を選択してLLMブロックをワークフロー内に配置します。

dify-1-image20.webp

配置したら先程と同様にLLMブロックを編集します。
「AIモデル」欄に先程セットアップしたGeminiモデルを選択します。
今回は一定量まで無料枠で使用できる「Gemini 2.5 Flash」を選択します。

また今回やりたいこととして、現在のワークフローでは1次細分区定義表内の都市IDを入力させていますが、ここからいちいちIDを調べるのは面倒です。
そこでLLMに都市名から都市IDを調べてもらい、そのIDを使用して天気予報APIに問い合わせる様にしてみましょう。

SYSTEMプロンプト欄には以下を設定します。

https://weather.tsukumijima.net/primary_area.xml に定義されている、入力された地名に一番近い1次細分区域の都市IDを取得してください

USERプロンプト欄には先頭に「/」を入力し、変数選択モードに切り替えた上で、「input_city」変数を選択して設定します。

最後にこのLLMブロックの実行結果を見る為、出力ブロックにLLMブロックを接続し、出力変数にLLMブロックの出力「text」を設定します。
全ての設定ができましたら、「テスト実行」ボタンを押下して動作確認をしてみましょう。

dify test

実行すると実行結果が表示されます。
正常に動作していれば指定した都市名に対応する都市IDが表示されますが、余計なテキストが大量に含まれてしまっていますね。

dify test result 1

この結果を天気予報のAPIにそのまま渡してもエラーになってしまいます。
そこでLLMブロックのSYSTEMプロンプトを以下の様に修正してみましょう。
「出力形式を明示的に指定する」ことで、LLMの出力をコントロールします。

https://weather.tsukumijima.net/primary_area.xml に定義されている、入力された地名に一番近い一次細分区域の都市IDを取得してください。
出力は都市IDのみとし、他のテキストは一切含めないでください。

そして再度「テスト実行」ボタンを押下して動作確認をしてみます。

dify test result 2

しっかりIDのみが取得できていますね!
あとはLLMブロックの出力をHTTPリクエストブロックのパラメータに設定すれば、都市名から天気予報を取得できるワークフローが完成します。

dify work flow compete 完成したワークフロー

dify result complete 最終実行結果

ばっちり東京の天気情報が取得できましたね!
以上でLLMを使ったワークフローの作成と実行が完了です!

5. まとめ

本記事ではDifyの基本的な使い方と、LLMとの連携方法について紹介しました。

Difyはノーコード/ローコードでAIアプリケーションを作成できる便利なツールですが、ご覧の通りある程度のプログラミング知識が必要となるかと思います。
更に複雑なことをやろうとすると、通常のブロックだけでは実現できず、コードブロックを使用してJavaScriptやPythonで処理を書く必要が出てきます。

また今回は触れていませんでしたが、今回のワークフローの場合、LLMが返す都市IDが不正確な場合があり、その場合は天気予報APIからエラーが返ってしまいます。
こういったケースに対応するには、エラーハンドリングやリトライ処理を実装するなどの工夫が必要となってきます。AIによる不確実性を考慮した設計が求められる点は、他のLLM連携ツールと同様です。
ちなみに今回は数回の試行の内、1回謎のIDを出力していました。

しかしプログラムを理解している人が、複数サービスのAPIを組み合わせてAIアプリケーションを手軽に作成するツールとしては非常に有用であるとは感じます。
以前も「Yahoo Pipes」の様な複数のAPIを組み合わせることができるマッシュアップサービスが数多くありましたが、そのAI対応版でしょうか。
※残念ながらYahoo Pipesは2015年にサービス終了しました。当時は「マッシュアップ」という言葉と共に流行ったんですけど一緒に廃れましたね。

また冒頭に出てきましたが、少し前までスケジュールトリガ機能がありませんでしたが、現在では実装された模様ですので、より多様なユースケースに対応できる様になっているかと思います。
今後もDifyの機能追加や改善が進むことが期待されますので、興味がある方は是非試してみてください。

次回は「DifyとMCPサーバーの連携」について紹介します。

     
  1. 1. はじめに
  2. 2. OSS MCPサーバーを使ってみよう
  3.  2-1. 準備フェーズ
  4.   ①OSS MCPサーバーをGitHubからダウンロード
  5.   ②OSS MCPサーバーを構築
  6.   ③VS CodeにMCPサーバー情報を設定
  7.   ④動きませんでした。そしてその対策。
  8.  2-2. 実行フェーズ
  9.   ①Agentを実行しよう
  10.   ②実行ログを見て、通信の動きを確認しよう
  11. 3. まとめ
  12. 4. MCPサーバーのそれは極めて個人的な考察

1. はじめに

ブログをご覧の皆さまこんにちは。エンジニアの小川です。

前回の記事ではZapier社が提供するSaaS型のMCPサーバーのVS Codeでの使用方法をご紹介しました。
本記事ではOSSとして公開されているMCPサーバを使用するケースをご紹介します。

以前の記事で紹介しましたが、OSSのMCPサーバーは以下で公開されています。

AI Base : https://mcp.aibase.com/ja/explore

mcp-use3-image1.webp (※他にもあるかもしれませんが、今のところここしか見つけられていません)

今回はこちらで公開されているGoogle スプレッドシート連携のMCPサーバーを使用してみます。

2. OSS MCPサーバーを使ってみよう

この項では以下の流れを行っていきます。

[準備フェーズ]
①OSS MCPサーバーをGitHubからダウンロード
②OSS MCPサーバーを構築
③VS CodeにMCPサーバー情報を設定

[実行フェーズ]
①Agentを実行しよう
②実行ログを見て、通信の動きを確認しよう

2-1. 準備フェーズ

①OSS MCPサーバーをGitHubからダウンロード

まずは使用したいMCPサーバーをGitHubからダウンロードします。今回はこちらを使用したいと思います。

Googlesheet MCP

Google Sheets MCP Page

画面右上にあるGitHubアイコンをクリックするとGitHubリポジトリに移動しますので、ローカルにプロジェクトをダウンロードします。

ちなみにこちらが良い物かどうかはこの時点では分かりません。この時点でできることは、評価とDL数、それと説明文内に使いたい機能がありそうなのを選ぶしかできません。
できればDocker上で動作するものを選ぶと比較的楽ですが、対応しているものはあまり多くないようです。ただDockerFile/compose.yamlが入っていても動かないものもあります。落とし穴ばかりですね...。


今回紹介しているMCPサーバーは、このブログ用に構築してみた3番目に試した物になります。先に試した2つはREADMEが滅茶苦茶で止めました。(※ファイル構成/起動方法がREADMEの内容と全く違うという...。)
ちなみにこちらのプロジェクトも元のままではVS Codeで動きませんでしたので、少し手を加えています。READMEにはCursorの説明が記載されていてるので、もしかしたらCursorならそのまま動くのかもしれません。

また念の為、使用前にはコードをチェックしておきましょう。悪意のあるコードが混入している可能性もゼロではありません。

copilot check! 良かった

②OSS MCPサーバーを構築

それではプロジェクトに添付のマニュアルに従ってMCPサーバーを構築していきます。
Pythonの実行環境は整っている前提で進めます。

1. 使用するPythonライブラリをインストールします。

pip install google-auth-oauthlib google-auth-httplib2 google-api-python-client curl -LsSf https://astral.sh/uv/install.sh | sh ※ ← 書いていませんが実行にはuvのインストールが必要です

2. Google Cloud Platformでプロジェクトとサービスアカウントを作成し、「APIとサービス」からGoogle スプレッドシートAPIの権限設定を行った後、「IAMと管理」からcredentials.jsonをダウンロードします。

gcp top
GCPの詳細説明は割愛していますが、ここが一番大変かも。

3. credentials.jsonをプロジェクトのルートに配置します。

vs code directory

4. Googleスプレッドシートを開き、共有設定でサービスアカウントのメールアドレスを追加します。

google spread sheet sharing setting

5. 以下のコマンドを実行してMCPサーバーをインストール

uv run mcp install main.py

ここまでで一旦MCPサーバーの構築は完了です。
早速ドキュメントに記載していない手順もありましたが、恐らくこれで良い・・・ハズです。

③VS CodeにMCPサーバー情報を設定

前々回の記事で作成した .vscode/mcp.jsonファイルに記載します。記載の内容はREADMEに書いてある通りです。

{ "mcpServers": { "GoogleSheets": { "command": "python", "args": [ "main.py" ] } } }

今までと書き方が変わっていますね。今まではHTTPで接続していましたが、今回は直接Pythonのコマンドで実行する形になっています。
これでVS CodeからMCPサーバーに接続できるようになります。なっているはずです...!

④動きませんでした。そしてその対策。

結論がタイトルになってしまいましたが、残念ながら動きませんでした。ほんとこんなのばっかり

ここでログに出ているエラーをGitHub Copilotと相談しながら行った対応を以下に記載します。
このMCPサーバーは使う予定がない方はスキップしてください。

1.vscode/mcp.jsonを修正します

{ "servers": { "GoogleSheets": { "command": "/Users/xxxxx/.local/bin/uv", # ← ここをuvコマンドのパスに変更 "args": [ # ← ここを以下に変更 "--directory", "/Users/xxxxx/project/mcp-sever-google-sheets", "run", "main.py" ] } } }

2.main.pyを修正します

# main.pyの末尾に以下を追加 if __name__ == "__main__": mcp.run()

3. 起動はREADMEの起動コマンドでなく、IDEのMCPサーバー起動ボタン、またはAgentが実行時に自動で起動して使用します

mcp-use3-image9.webp

以上でMCPサーバーの修正が完了です。
これでVS CodeからMCPサーバーに接続できるようになります。

ちなみにこの修正はあくまで私の環境で動かすためのものであり、他の環境で動作する保証はありません。もしかしたらCursor環境では動くのかもしれません。

そういうの止めて欲しいですけど...。

2-2. 実行フェーズ

①Agentを実行しよう

それでは実際にAgentを実行してみましょう。
まずは試験的に、Googleスプレッドシートにデータを追加する依頼を実行します。

agent start

実行した所、どのスプレッドシートにデータを追加するかの指示が不足している旨のエラーが発生しました。
そこで対象のスプレッドシートのURLを渡して再度実行します。

agent execution result

登録に成功しました!

ログを見ると途中思っていたより手間取っていますが、無事にMCPサーバーを使用してGoogleスプレッドシートにデータを追加することができました。

実際にスプレッドシートを確認してみます。

spread sheet view

登録されているのを確認できました!次はシート内のデータを読み込んでみます

mcp-use3-image13.webp

正しく読み込みが確認できましたね!

それでは次は少し複雑なことをやらしてみましょう。
こちらのサイトで配布されている日次セールス レポート フォームを使用して、対象のデータを取得させてみます

report view

mcp-use3-image15.webp
全体読み込みはOK

mcp-use3-image16.webp
細かな内容の指定もOK

レポートの表の内容も正しく認識できていますね!

以上でMCPサーバーを使用したGoogleスプレッドシートの読み書きができることが確認できました。

ただ途中で発生した問題として、実は何度かAgent内の学習データを消してスクリーンショット撮影用にと最初からやり直しをしていたのですが、

 ・スプレッドシートへの書き込みに失敗する様になってしまい、何度も繰り返した結果、「送信するパラメータが分かりません」とAgentが途中で処理を諦めた
 ・書き込んだデータの前後に変な記号が入っていた。

等と、同じ命令文でも挙動が安定しませんでした。
これらはもしかしたらMCPサーバー側の問題かもしれませんし、Agent側の問題かもしれません。
このあたりやはりAIによる不確実性が否めず、信用性の面で課題がありそうです。

②実行ログを見て、通信の動きを確認しよう

最後に実行時のログを見てみましょう。
元のプロジェクトではログの出力が全く行われていなかったため、main.pyにログ出力のコードを追加してみます。
以下が実行時のログになります。

「シートのデータを読み込んでください」:初回実行時のログ

2025-11-21 14:24:09,137 - INFO - MCP Server starting... 2025-11-21 14:24:09,148 - INFO - Processing request of type ListPromptsRequest 2025-11-21 14:24:09,148 - INFO - Processing request of type ListToolsRequest 2025-11-21 14:24:09,149 - INFO - Processing request of type CallToolRequest 2025-11-21 14:24:09,149 - INFO - Tool called: list_spreadsheets ... 2025-11-21 14:24:18,226 - INFO - Retrieved 23 rows from シート1 2025-11-21 14:24:18,226 - INFO - Response data: Response: 25 lines, 1324 characters 2025-11-21 14:24:18,226 - INFO - === MCP Response: get_sheet_content - Success - Response: 25 lines, 1324 characters ===

連続して2回目実行時のログ

2025-11-21 14:25:18,285 - INFO - Processing request of type CallToolRequest 2025-11-21 14:25:18,285 - INFO - === MCP Request: get_sheet_content - spreadsheet_id: 14EJcg_Bb54kkgVm67FHM94eqM7IQoSQrDBsJUvSPSxc, sheet_title: シート1 === ...

VS Codeの「New Chat」を押下し、チャット欄を初期の状態にして再度データ読み込みを実行

2025-11-21 14:38:54,588 - INFO - Processing request of type CallToolRequest 2025-11-21 14:38:54,588 - INFO - === MCP Request: list_spreadsheets === 2025-11-21 14:38:54,588 - INFO - Tool called: list_spreadsheets ...

ログを見ると、MCPサーバーがどのように動いているかが分かります。
1回目の実行時にはMCPサーバーが起動し、

・ListPromptsRequest
・ListToolsRequest

を行ってMCPサーバー内のpromptやツールの一覧を取得し、

・CallToolRequest

でツールの呼び出しを行っていることが分かります。

2回目の実行時にはList情報を保持している為か、CallToolRequestのみが処理されており、その後get_sheet_contentを実行してシート情報を取得しています。
3回目、今度はチャット履歴を消して再度実行した際には、CallToolRequestのみが処理されていますが、その後はlist_spreadsheetsでスプレッドシート一覧を取得しようとしています。list_spreadsheetsは1回目と同じ挙動です。

ここから分かることは、AgentとMCPサーバーは状態を保持しますが、チャット履歴を消すと一部消えるデータと消えないデータがあることが分かります。

・MCPツールListやPrompt List - 消えていない
・取得対象のスプレッドシートID - 消えている

これはVS Code内のチャット別に保持しているデータ、LLMとの会話セッションで保持しているデータによるものかと思われます。
またこれらはMCPクライアント(Agent)の設計によるものかと思われますので、詳細に探るのは難しいです。また使用するMCPクライアントによって挙動が変わる可能性があります。

3. まとめ

以上、OSSのMCPサーバーを使用してGoogleスプレッドシートにデータを読み書きする方法をご紹介しました。

OSSのMCPサーバーはSaaS型のMCPサーバーと比べて、
・使いたいサービス別にMCPサーバーが必要になる。
・自分でサーバーを構築する必要がある。
・動作が不安定な場合/そもそも動かないケースがあり、信頼性に乏しい。
・開発言語がC#/Go/Java/TypeScript(JavaScript)/Python/Rustなど多岐に渡る為、環境構築の為には各言語別の知識が求められる。

といったデメリットがありますが、

・自分でサーバーを構築するため、セキュリティ面で安心できる。
・自分でサーバーを構築するため、カスタマイズが可能。 (とはいえ今回の様な強制カスタマイズ必須はメリットではないけれど)

といったメリットもあります。

どちらを使用するかは、使用する用途や環境によって異なりますが、
セキュリティ面で不安がある場合や、外にデータを極力出したくない場合(基本外部のLLMサービス使っておいて何をという話ですけど)には
カスタマイズが必要な場合はOSSのMCPサーバーを使用する、または参考に自作するというのはありかと思います。
3つのパターンの比較を表にすると以下になります。

項目 公式 SaaS(Zapier) OSS
導入難易度
コスト 無料 有料 無料(※但しサーバー料金除く)
カスタマイズ性/拡張性
対応サービス サービス提供企業特化 多数のSaaS 実装次第
保守・運用 提供企業が管理 提供企業が管理 自己管理
信頼度

4. MCPサーバーのそれは極めて個人的な考察

MCPサーバーの導入方法3部作、いかがでしたでしょうか?

正直な所、現時点でのOSSのMCPサーバーはあまりお勧めできません。
今回の流れを見て頂いた通り、ドキュメントは滅茶苦茶、動かそうとしてもコードに手を加えなければいけない等、ヒッジョーに扱いづらいです。ダウンロードするプロジェクトが次から次へとこんな感じで、何度PCの前で雄叫びをあげたか分かりません。こんなハズじゃなかった。歴史がボクに問いかける。

趣味や個人利用の範囲であればよいですが、そのままの使用は業務利用には向かないかと思います。あくまでソースの参考程度に留めておくのが良いかと思います。

ただしこれが今後apache foundationのような大きな組織,コミュニティがベースのMCPサーバーをOSSとして公開し、継続的にメンテナンスされるようになれば話は変わってくるかと思いますので今後に期待したい所です。

しかし今回3種のMCPサーバーをガッツリと触ってみて思ったのは、MCP自体は非常に面白い技術であり、LLMと外部サービスを繋ぐ上で非常に有用であるとは感じました。
例えば今後開発するシステム内に、APIだけでなくMCP機能も合わせて組み込むことで、LLMを使用した柔軟な操作が可能になる等、応用範囲は広いかと思います。

今後もっと使いやすくなり、エンジニアぐらいしか使わないVS Code等のIDE以外からも簡単に使用できるようになれば、一般利用がもっと進むと思います。

最後までお読みいただきありがとうございました。


  • はじめに
  • 基本の確認:MCPサーバーとは何か?
  • AWS MCP Serverの核心機能
  • AWS MCP Server:何が嬉しい?!

  • はじめに

    Amazon Web Services(AWS)が2025年11月30日に「AWS MCP Server」をプレビュー版として公開しました!

    参照:AWS announces a preview of the AWS MCP Server

    「本番VPC作っておいて。」とAIエージェントに指示を出せば、AWSコンソールやCLIを触ることなく適切な設定で本番VPCがデプロイされる・・・ころころと変わる画面仕様やAPI仕様にエンジニアが右往左往する時代はもう終わり!!そんな未来が近づいているのかもしれません。

    「AWS MCP Server」は、自然言語を通じてAIアシスタントやエージェントに対し指示を出すと、安全にベストプラクティスに従った形に整形された状態でAWS APIを呼び出すことを可能にした、リモートMCPサーバーです。

    この記事では、AWSを利用する開発者、インフラエンジニア、そして技術的な意思決定者の皆様向けにAWS MCP Serverの機能と利点をざっくり解説していきます。

    基本の確認:MCPサーバーとは何か?

    AWS MCP Serverを理解するためには、まずその基盤技術である「MCP(Model Context Protocol)」および「MCPサーバー」の基本概念を整理する必要があります。

    MCPとは、「AIモデルが外部のツールやサービスと連携するための共通規格(プロトコル)」です。

    MCPの仕組みや導入メリット・デメリットに関して確認したい、という方は当社のこちらのブログ記事をぜひご覧ください。

    参照:実体験でわかったMCPサーバー・クライアントの役割と導入メリット

    AWS MCP Serverの核心機能

    「はじめに」で触れた通り、「AWS MCP Server」は、自然言語を通じてAIアシスタントやエージェントに対し指示を出すと、安全にベストプラクティスに従った形に整形された状態でAWS APIを呼び出すことを可能にした、リモートMCPサーバーです。

    実は元々「AWS Knowledge MCP」(知識を呼び出すためのMCPサーバー) および AWS API MCP(機能を呼び出すためのMCPサーバー)が存在していましたが、今回の「AWS MCP Server」により、ひとつの窓口(リモートMCPサーバー)で「知識の呼び出し」と「機能の呼び出し」を行えるようになります。

    AWS MCP Serverでは、以下の3つの機能が提供されています。


    • エージェントSOP(Agent SOPs)

    AIエージェント用の「標準作業手順書」の意味です。

    エージェントSOPが用意されていることで、AIアシスタントがAWSのベストプラクティスとセキュリティガイドラインに従って、複雑な複数ステップのタスクを完了できるようになります。

    ただ「AIエージェントがAWSのAPIを呼び出せる」だけでは「安全」とは言えません。自然言語の指示に従って無限の可能性の中からAIアシスタントがどのAPIを使うか勝手に判断するのではなく、エージェントSOPという、十分に検証された、信頼できる選択肢の中から最適なものを選択することで、セキュアでベストプラクティスに沿ったAWS上のリソース構築・運用を行うことができます。

    用意されているエージェントSOPの例としては本番環境対応VPN(マルチAZサブネットとNATゲートウェイを備えた構成)作成ワークフローやモニタリング(CloudWatchアラームとSNS)設定、Amplifyを利用したWebアプリケーションの構築・デプロイなどの例があげられていました。

    詳しくは公式ドキュメントをご参照ください。

    具体的にこうしたい、という指示ができない場合、エージェントに現在利用可能なツール(ワークフロー)を使って計画を立てて、と依頼して対話型で設計を検討することもできるそうです。心強い!

    また、どんなSOPが用意されているのかもエージェントに聞いて確認することができます。


    • ナレッジツール(Knowledge Tools)

    本番環境におけるAIの「ハルシネーション(誤った情報をそれっぽく回答してくるやつのこと)」リスクを低減させるための重要な機能です。

    最新のAWS公式ドキュメント、APIリファレンス、リージョン別のサービス提供状況などをリアルタイムで検索・参照することで、AIの応答の正確性を向上させます。参照元が確実であることから、安心度がアップしますね。


    • APIツール(API Tools)

    自然言語による指示を、適切なAWS APIコールへと変換し実行する機能です。セキュリティ・ガバナンスの点で最も重要なのが、AWS APIコールは対象のAWSアカウントのIAM認証情報を用いて実行される点です。AWS APIコールは当然CloudTrailに記録され証跡が残りますし、実行できる権限を最小権限の原則に従い制限しておくことで、安全にAIエージェントを利用することができます。


    AWS MCP Server:何が嬉しい?!

    AWSサービスは、増えたり統合されたり廃止になったりと目まぐるしく変化しています。毎日のように新情報がリリースされ、ベストプラクティスもどんどん更新されます。開発者は大量のブラウザタブを開きながらドキュメントを読み漁り、「この構成で本当に安全?」「最新のガイドラインと合ってる?」と不安を抱えつつ設計を進めなくてはいけませんでした。調べる、比べる、検証する......その繰り返しで、実装より調査に時間が吸い取られることも多いのではないでしょうか。(私はそうです・・・)

    そんな長年の悩みに対して、AWS MCP Serverはとても心強い存在になりそうです。「こういう仕組みを作りたいんだけど」と自然言語で相談すると、AIアシスタントが最新のAWSドキュメントを横断検索し、関連サービスを整理し、適切な設計方針までまとめてくれます。必要であれば具体的なAPI操作も実行してくれて、作業が一つの画面の中で完結します。人間側は適宜承認するだけでよく、迷いながら進めていたAWS設計が一気にクリアになります。

    すべてが完全自動になるわけではないかもしれませんが、「とにかく情報を追うのが大変」「正解がどれか自信が持てない」といったこれまでの大きな悩みが、かなり軽くなる未来は感じられると思います。まだPreview版のためか、re:Inventのキーノートでは触れられませんでしたが、今後のAWS管理を大きく変える可能性のある機能と感じます。ぜひ活用していきたいですね!

    最後の最後に・・・怠惰な私の願望としては、もはやMCPサーバーを呼び出すためのセットアップすら面倒なので、マネジメントコンソール上でCloudFormationあたりにチャットウィンドウが用意されていて、そこから相談や作成指示ができたりしたらもっと嬉しいです!!



    はじめに

    今年もラスベガスにて、世界最大級のクラウドカンファレンス「AWS re:Invent 2025」が開催されました。
    今年のre:InventではAIに関するサービスのアップデートが中心となっており、「AWS AI Factories」という新サービスが発表されました。
    生成AIがビジネスのあらゆる領域に浸透する一方で、企業が直面している課題は「どのように安全かつ継続的に AI を運用していくか」という点に移っています。
    この課題を解決するための新しいコンセプトが、AWS AI Factories です。

    AWS AI Factories は、AIモデルの開発・運用・継続改善を、まるで工場の生産ラインのように統合的に管理できる"AI ライフサイクル基盤"と位置づけられています。従来の AI/ML パイプラインを置き換えるものではなく、それらをさらに高度化・運用最適化した仕組みと捉えると理解しやすいかと思います。


    1. AWS AI Factories とは:AI 運用の課題をまとめて解決する新モデル

    多くの企業が PoC では成功しながら、本番運用に移せない理由がいくつかあります。
    代表的な例として、

    • モデルの更新が属人化し、継続改善できない
    • データの扱いにガバナンスが追いつかない
    • セキュリティ・監査要件に対応できない
    • 複数部門での AI 利活用が標準化されていない
    • ツールやプロセスが分断し、効率が悪い

    この"AI運用の壁"を取り払うために設計されているのがAWS AI Factories です。


    2. AWS AI Factories を構成する要素

    AWS AI Factories は、以下のような要素で構成されます。

    ● データ管理(Data Factory)
    データの収集、前処理、品質管理を自動化し、モデル改善につながるデータ基盤を整備。

    ● モデル運用(Model Factory)
    モデル学習、評価、デプロイ、ドリフト検知を自動化し、継続的な高品質運用を実現。

    ● ガバナンス & セキュリティ(Guard Factory)
    アクセス管理、監査ログ、コンプライアンスチェックなど、企業が求める統制を一元化。

    ● 利活用フロント(App Factory)
    開発者・業務ユーザーが AI/アプリを安全に利用できる環境を整え、現場でのスピード活用を後押し。


    これらの要素が連携することで、AIの価値を継続的に引き出せる"循環型AI基盤"が構築されます。


    3. AWS AI Factories がもたらす企業メリット

    ① AIの運用を標準化し、スケール可能にする
    企業全体で同じ基盤を使うことで、部門ごとにバラバラだった AI 活用を統合できる。

    ② 安全性・コンプライアンスを担保
    生成AI導入の最大の懸念であるデータ漏えい・アクセス管理・監査要求に対応しやすい。

    ③ 継続的改善(Continuous Learning)が自動化
    データ流入 → モデル改善 → 再デプロイまでのサイクルが回り続け、AIが常に最新状態を保つ。

    ④ 業務部門でも AI 活用が可能に
    ローコード化/プロンプト管理/アプリ統合により、エンジニア不足でもAI活用が進む。


    さいごに

    生成AIが進化を続ける一方で、企業が求められるのは単なる技術導入ではなく「どうAIを安全かつ継続的に運用し、価値を最大化するか」です。AWS AI Factories はまさにその解答となるアーキテクチャです。
    AIは一度導入して終わりではなく、改善を続けることで真価を発揮します。AWS AI Factories は、AIを企業の"当たり前の基盤"として育てるための仕組みであり、今後のAI戦略を考える上で重要な役割を担うことが予測されます。

    1. 1. はじめに
    2. 2. Zapier MCPサーバーを使ってみよう
    3.  2-1. 準備フェーズ
    4.   ①Zapierでアカウントを作成
    5.   ②ZapierでMCPサーバーを構築
    6.   ③VS CodeにMCPサーバー情報を設定
    7.  2-2. 実行フェーズ
    8.   ①Agentを実行しよう
    9.   ②Zapierの実行履歴(History)を確認しよう
    10. 3. まとめ

    1. はじめに

    ブログをご覧の皆さまこんにちは。エンジニアの小川です。

    前回の記事ではGitHubが提供する公式のMCPサーバーを使用したMCPサーバーのVS Codeでの使用方法をご紹介しました。

    本記事ではZapier社が提供するSaaS型のMCPサーバを使用するケースをご紹介します。

    Zapier MCPサーバーは、GitHub MCPとは異なり「コード不要」で外部サービスのAPIを扱えるのが最大の特徴です。利用者はトークン等の接続情報を設定するだけでMCPサーバーとして扱える点が大きなメリットです。

    本記事は主にVS Code、またGitHub Copilot、Claude Code等のAIエージェントの使用経験があるエンジニアの方を対象としています。

    2. Zapier MCPサーバーを使ってみよう

    この項では以下の流れを行っていきます。

    [準備フェーズ]
    ①Zapierでアカウント作成
    ②ZapierでMCPサーバーを構築
    ③VS CodeにMCPサーバー情報を設定

    [実行フェーズ]
    ①Agentを実行しよう
    ②Zapierの実行履歴(History)を確認しよう

    2-1. 準備フェーズ

    ①Zapierでアカウント作成

    まずはZapierのアカウントを作成します。https://zapier.com/mcpにアクセスしてSign upからアカウント作成画面に遷移しますので、サイト内の記載の通りに作成します。

    Zapier top

    アカウントが作成できたら早速ログインします。
    ここで注意していただきたいのが、ヘッダーのLoginボタンからログインを行うと別のサービス画面に遷移しますので、https://zapier.com/mcpのTOP画面の「Start Building」からログインしてください。いやほんと謎仕様...。

    zapier login

    zapier mcp top 「Start Building」から入った場合のMCPサーバー画面

    zapier main service top ヘッダーからログインした場合のZapierのメインサービス画面
    ちなみにこの画面からはMCP画面に遷移できないので、入ってしまったらやり直し。

    ②ZapierでMCPサーバーを構築

    まずは画面内にある「+ NEW MCP Server」ボタンを押下します

    NEW MCP Server Button

    モーダルが表示されるので、「MCP Client」のセレクトボックスで、MCPサーバーに接続するクライアントツールを選択し、Nameには適当な識別名を付けます。

    view mcp modal

    サイドバーに追加されたMCPサーバーを選択すると、現在のMCPサーバーの設定情報が表示されますので、こちらで「+ Add tool」ボタンを押下します。

    server settings

    追加できるWebサービス一覧が表示されます。先頭には恐らくよく使われるサービスが表示されておりますので、一覧に無い場合は検索ボックスから検索します。
    今回は「Slack」を選択します。

    web services

    Slackで使用できるTool(API)一覧画面が表示されます。この中から使いたいSlackの機能を選択します。

    zapier tool list

    Toolの選択が完了すると、サービスへの接続設定が求められます。今回はSlackを選択している為、Slackへの接続設定を行うボタンが表示されます。

    mcp slack connect

    mcp slack connect setting

    今回は合わせてGoogle Calendarも追加しました。

    mcp settings

    ③VS CodeにMCPサーバー情報を設定

    最後にVS Codeとの接続設定を行います。
    接続設定はヘッダにある「Connect」リンクを押下します。すると選択したMCP Clientへの接続設定と、接続用に発行されたURLが一部隠された状態で表示されます。

    server connect guide

    「Server URL」の右にある「Copy URL」ボタンを押下すると、クリップボードにMCPサーバーのURLがコピーされます。

    そして今度は取得したサーバーのURLを、前回の記事で作成した .vscode/mcp.jsonファイルに記載します。記載の内容は以下です。

    mcp-use2-image15.webp

    { "servers": { "zapier": { "url": "https://mcp.zapier.com/api/mcp/s/xxxx==/mcp" } } }

    以上でMCPサーバーへの接続が完了です!今回もとても簡単でしたね!

    2-2. 実行フェーズ

    ①Agentを実行しよう

    それでは早速使ってみましょう!今回GitHub Copilot Agentが連携している対象は「Slack」と「Google Calendar」の2つのサービスと連携できているハズ!です!

    今回テスト用に、Slackに「#notify」チャンネルを作成し、Googleカレンダーには「お茶を買いに行く」という日程を追加しました。

    go to buy the tea

    Slack notify Channel preview

    さて、それではCopilot Agentにお茶を買いに行く日付を調べさせて、分かったらSlackの#notifyチャンネルに通知させる動作確認を実用性はさておき行ってみたいと思います。

    vs code agent log 1 途中でSlackにメッセージを投稿して良いのか?という確認が入りますのでOKします。

    mcp-use2-image19.webp

    完了したみたいですので、Slackチャンネルを見てみます。

    view slack channel

    問題なく投稿できていますね!

    以上、とても簡単に Google Calendarから検索→Slack通知という、複数のサービスと連携した動作が実現できました!

    ②Zapierの実行履歴(History)を確認しよう

    最後にZapier側で実際にMCPサーバーがどのように動作したかを確認してみます。
    Zapier MCPサーバーの画面に戻り、ヘッダーの「History」リンクを押下します。

    header history button

    history screen

    History画面ではMCPサーバーが受け取ったリクエストが一覧で表示されています。
    ここで先程のSlack通知の際に送信されたリクエストを選択してみます。

    mcp-use2-image23.webp

    アコーディオンを展開すると、MCPサーバーが受け取ったリクエストの詳細情報が確認できます。
    ここではMCPサーバーが受け取った指示内容や、Slackに投稿するために解決したパラメータ情報、最終的な出力結果などを確認することができます。
    これにより、MCPサーバーがどのように動作したかを把握できます。

    3. まとめ

    以上、SaaS提供MCPサーバーであるZapier MCPサーバーを使って複数のサービスと連携した動作がとても簡単に実現できることを紹介しました。

    前回の公式GitHub MCPサーバーと比べ、今回のSaaS型 MCPサーバーは

    ・アプリやアプリ内のToolsの追加が画面上で簡単に行える。
    ・どういうToolが使えるかが一覧で把握できる。
    ・外部サービスの認証設定も画面上で簡単に行える。

    といったメリットがあることがわかりました。
    また今回紹介はしておりませんが、WebhookやカスタムAPIを使用して独自のサービスと連携することも可能です。

    一方でZapier MCPサーバーでは

    ・日本のサービスはあまり対応していない。
    ・社内システムなどの外部に公開されていないAPIとは連携できない。
    ・使用の都度コストがかかる(無料プランもありますが、利用制限が厳しい)。

    といった点にも注意が必要です。

    次回はOSS MCPサーバーを構築して使用する例を紹介します。

    1. 1. はじめに
    2. 2. 公式GitHub MCPサーバーを使ってみよう
    3.  2-1. 準備フェーズ
    4.   ①GitHubでPersonal Access Tokenを作成
    5.   ②VS CodeにMCPサーバ情報を設定
    6.   ③作業対象のサンプルプロジェクトを作成
    7.  2-2. 実行フェーズ
    8. 3. まとめ

    1. はじめに

    ブログをご覧の皆さまこんにちは。エンジニアの小川です。

    前回の記事ではMCPサーバーの概要と導入時の注意点について書きましたが、 今回はVS CodeやClaudeCodeから実際にMCPサーバーを使用して外部サービスと連携する方法を実践形式で解説します。

    MCPサーバーには現在、大きく分けて3つの提供形態があります。

    公式MCPサーバー:Anthropic社など、サービス提供会社が提供,公開しているMCPサーバー
    SaaS型MCPサーバー:Zapier社等が提供するクラウドサービス
    OSS MCPサーバー:GitHub等で公開されているオープンソースのコードを自分で構築・ホスティングする

    これら3つの方法を実際に試してみて、それぞれの特徴と使い方を比較していきます。

    本記事は第1部としてGitHub公式のMCPサーバーを使用した例を紹介します。
    また本記事は主にVS CodeやClaude Codeの使用経験があるエンジニアの方を対象としています。

    2. 公式GitHub MCPサーバーを使ってみよう

    この項では以下の流れを行っていきます。

    [準備フェーズ]
    ①GitHubでPersonal Access Tokenを作成
    ②VS CodeにMCPサーバ情報を設定
    ③作業対象のサンプルプロジェクトを作成

    [実行フェーズ]
    ・GitHub Copilot Agentを使用してIssue情報を取得し、対応作業を実行して完了後にPRを出す。

    2-1. 準備フェーズ

    ①Personal Access Tokenの作成
    まずはGitHubでPersonal Access Token(PAT)を作成します。
    今回は「Fine-grained personal access tokens」を使用しています。

    github pat 作成

    GitHub MCPサーバーを使用するにあたり、PATに以下の権限を付与します。

    ・Repository permissions
      └ Contents: Read and write
      └ Issues: Read and write
      └ Pull requests: Read and write
      └ Metadata: Read-only

    ②MCPサーバーの接続情報ファイルをVS Codeに設定
    VS Codeのワークスペースに.vscode/mcp.jsonファイルを作成し、以下の内容を記述します。

    VSCode MCP設定

    { "servers": { "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/", "headers": { "Authorization": "Bearer <Enter your GitHub personal access token here>" } } } }

    これでGitHub CopilotからGitHub MCPサーバを使用する準備は完了です。とても簡単ですね!

    ③作業対象のサンプルプロジェクトを作成
    実際に操作する対象のサンプルプロジェクトを作成します。
    今回は以下のような簡単なWEBページを(GitHub Copilotが)作成しました。

    ・GitHubリポジトリ: index.htmlのみ作成
    GitHub Project

    ・作成したWEBページ: ユニバース不動産 トップページ
    sample webページ

    2-2. 実行フェーズ

    実行フェーズでは以下の操作を行っていきます。

     ① GitHubにIssueを登録
     ② VS CodeのGitHub Copilot AgentでIssue情報を取得
     ③ Issueの対応作業を実行し、PRを作成する
     ④ PRの確認

    ①GitHubにIssueを登録

    GitHubに行わせたい作業のIssueを登録します。
    ここではデザインを青から赤に変更し、TOP画面のメッセージを変更する内容のIssueを登録しました。

    GitHub Issue

    ② VS CodeのGitHub Copilot AgentでIssue情報を取得

    それではGitHub Copilot Agentを起動し、MCPサーバー経由でIssue情報を取得させてみます。

    VS Code GitHub Copilot Agent

    正しくIssue情報が取得できました。出力からMCPサーバーを経由していることがわかります。

    ③ Issueの対応作業を実行し、PRを作成する

    それでは実際にIssueの対応作業を実行させ、完了後にPRを作成させてみます。

    copilot chat

    出力されたメッセージは以下の通りです。

    Issue #4の対応を開始します。まず現在のファイルを確認して、変更を適用します。 ToDo 項目が 5 件作成されました index.html の読み取り 開始 (デザインを青から赤に変更/2) 5 index.html+7-7 開始 (スナップショットを撮影/4) 5 ページをブラウザで開いてスナップショットを撮影してください。変更が完了しましたので、次にブランチを作成してPRを作成します。 git checkout -b feature/change-design-to-red cd /Users/takahisaogawa/Downloads/ブログ記事用/McpBlogSample && git add index.html && git commit -m "デザインを青基調から赤基調に変更し、メインキャッチコピーを変更 - ヘッダーの背景色を青系から赤系に変更 - ヒーローセクションの背景色を青系から赤系に変更 - セクションタイトルの色を青から赤に変更 - 特徴カードの見出し色を青から赤に変更 - コンタクトセクションの背景色を青から赤に変更 - メインキャッチコピーを「あなたの理想の住まいを見つけよう」から「あなただけのユニバースを見つけよう」に変更 Fixes #4" git push -u origin feature/change-design-to-red 変更をプッシュしました。次に、スナップショットを準備してからPRを作成します。 ブラウザで index.html を開いて、変更後のページのスクリーンショットを撮影し、画像ファイルとして保存してください。保存が完了したら、ファイル名を教えてください。PRにその画像を添付します。
    >> [入力]画像はなしで 了解しました。画像なしでPRを作成します。 開始 (PRを作成/5) 5 完了 (PRを作成/5) 5 完了しました! PR #5 を作成しました: https://github.com/t-ogawa-dev/McpBlogSample/pull/5 実施した変更内容: デザインを青基調から赤基調に変更(ヘッダー、ヒーローセクション、タイトル、コンタクトセクションなど) メインキャッチコピーを「あなたの理想の住まいを見つけよう」から「あなただけのユニバースを見つけよう」に変更 PRには Fixes #4 を含めているため、マージすると自動的にIssue #4がクローズされます。

    以上の出力からGitHub Copilot AgentがIssueの内容を理解し、対応作業を実行してPRを作成したことがわかります。

    またGitHub Copilot Agentの処理途中に何度か操作確認のメッセージが表示されました。
    データの読み取りには確認がありませんが、追加/変更系の処理、またターミナルの実行時には確認が入る仕様となっている様です。

    ④ PRの確認

    最後にGitHub上でPRが作成されていることを確認します。

    GitHub PR

    fix after

    PRと修正後の画面を確認すると、Issueで指定した内容が正しく反映されているようです。

    ただし画面のスクリーンショットは正しく作成・アップロードできませんでした。
    今回はチャットの途中で画像URLの入力を求められましたが、別のケースではPR内に存在しないURLを指定することもあり、このあたりはまだ正確さに欠けるようです。
    これはGitHub Copilot Agentの現時点での制限事項と思われます。

    3. まとめ

    以上、GitHub CopilotのMCPサーバーを経由してIssue情報を取得し、作業を実行してPRを作成する例を紹介しました。

    実は今回の内容に関しては、MCPサーバーを使用しなくてもGitHub CLIやgitコマンドで実現可能です。
    実際MCPサーバーが利用できない場合、GitHub Copilot Agentは自動で処理方法を切り替えて動作します。

    しかし、それでもMCPサーバーを使用することで以下のようなメリットがあります。

    ・統一されたインターフェースで複数のサービスと連携できる
    ・手元にGitHub CLIなどのツールをインストールする必要がない
    ・認証情報を一元管理できる
    ・今後のアップデートにより、MCPサーバーでしか実現できない機能が追加される可能性がある

    特に複数の外部サービスを統合して利用する場合、MCPサーバーの真価が発揮されると考えられます。

    今回はGitHub MCPサーバーを使って、MCPサーバーの基本的な使い方とGitHub Copilot Agentでどのように活用されるかを紹介しました。
    次回はSaaS型MCPサーバーのZapier MCPを使用した例を紹介します。

    1. 1. はじめに
    2. 2. MCPとは(一般論)
    3. 3. 実際に触ってわかったこと: よくある誤解
    4.  3-1. MCPサーバーの誤解
    5.  3-2. MCPクライアントの存在
    6. 4. MCPを導入する前に知っておくべきこと
    7.  4-1. 実現できること
    8.  4-2. リスクと注意点
    9. 5. まとめ
    10. 6. おまけ:現状と今後の展望についての極めて個人的な考察
    11. 7. 参考資料

    1. はじめに

    山根さん「小川くん、MCPって知ってる?」
    ボク「あー、アレですよね。最近よく聞くアレ、AIの、あのー・・・アレです。」
    山根さん「じゃあ調べてブログ書いてね。」
    ボク「はい。」

    ブログをご覧の皆さまこんにちは。エンジニアの小川です。

    昨今目覚ましい進展を見せているAIに合わせ、「MCP」なるものを随所で目にする機会が増えました。
    ボクも普段は目にするばかりで強く調べたりはしていなかったのですが、最近業務でMCPについて関わることになりました。 その中で調査したこと、実際に利用していった中で分かったこと、何となく認識していたもので誤解していたこと等をブログをご覧の皆さまと共有できればと思います。

    本記事は入門説明+実体験レポート の2部構成で進めていきます。
    また今回の記事は主にMCPの導入を考えている非エンジニア、ならびにMCPの海に漕ぎだそうとしているエンジニアの方を対象としています。

    2. MCPとは(一般論)

    MCPとは?

    MCPは「Model Context Protocol(モデル・コンテキスト・プロトコル)」の略で、AIモデル(LLM)が外部のツールやデータベースと連携するための共通規格(通信プロトコル)です。
    Anthropic社によって提唱され、様々なAIサービス間で情報をやり取りする際の「連携コスト」を削減し、開発を容易にすることを目指しています。これは「AIのUSBポート」とも呼ばれ、AIの活用をさらに広げるための重要な基盤技術として注目されています。
    (Google 要約より引用)

    ここまでの説明だと少し抽象的ですが、次にMCPに関する記事や図を見ると、多くの人がこの規格をどのようにイメージしているのかが分かります。 以下の図は、MCPの仕組みを説明する際に、多くの記事で引用されている図の一例です。

    mcp-image

    よく見るMCP説明図① (引用: https://zhuanlan.zhihu.com/p/29301066811)

    このイラストはとてもわかり易いですね。

    ふんふんなるほど、MCPというのはAIを異なる複数のサービスと連携できる様にするハブ的なものなのかな。
    で、MCPサーバーは名前通りだとそのMCPが動いているサーバーなのかなと。




    ...でも「Protocol」って言っているのになんでUSBハブになるの?
    何かおかしい気がする...と思いながらも、他の記事を見てみても大体以下の様な図が出てきます。

    mcp-image.jpg

    よく見るMCP説明図②(作:ChatGPT)

    これらの説明から、とりあえず「MCPを使えばAIと各システムを繋ぐことができるんだな」と、 そしてそれはきっと「MCPサーバーを立てれば実現できるんだね」と。

    当初はその様にかなりざっくりと理解していたのですが、実際に触ってみたら概ねその通りではありましたが、認識が色々と違っていました。
    こちら周囲に聞いてみた所、結構な人が同じ誤った認識をしていました

    3. 実際に触ってわかったこと: よくある誤解

    3-1. MCPサーバーの誤解

    MCPは実体のない「通信仕様」であり、USBポートやハブではありません。 またMCPサーバーは「MCPルールに従ってリクエスト/レスポンスを各サービス用に変換する中継サーバー」になります。

    そして「MCPサーバー」を例えるならば、"基本的には"「USBの変換アダプタ」です。
    (変換アダプタ以外の使い方もできますが、ここでは割愛します)

    サーバーがMCPルールに則ったリクエストを受信した際、リクエスト構造を各連携先のサービス/アプリケーションのリクエスト構造に変換してAPIを実行し、レスポンスを再度MCPルールに則ったレスポンス構造に変換して送信元へ返却する中継サーバーになります。

    MCP通信イメージ

    あれ、なんだ「間違ってました」とか言っておいて大して元々と変わんないじゃないか。
    いやいやむしろ「AIと各サービスを接続する」というイメージそのものなんじゃないのと言っていい内容ですね。

    それではMCPサーバーを用いて複数のサービスに接続してみましょう

    大量のMCPサーバー

    !?

    Q.「1台MCPサーバーを立てればそこから全てのサービスに接続にいけるんじゃないの?」

    A. できません (※現状は)

    現在のところ、世の中では"基本的な"MCPサーバーは1サービスにつき1つ必要になっており、AIから複数サービスに接続したければサービス分のMCPサーバーが必要になります。

    この点が恐らく「よく見るMCP説明図①」と大きな違いになっており、また多くの認識違いを起こしてしまっている点ではないでしょうか。

    ちなみに「基本的な」としたのは一部のSaaSで簡単に複数サービスに接続する設定が行えるサービスが存在しています。また現在配布されているOSSのMCPサーバーでも、もしかしたら探せばどこかで誰かが作っているのかもしれませんが、基本的にはサービス単位でMCPサーバーが存在しているのが現状になっています。 (「7. 参考資料」に記載)

    ※ただし、これは既存サービスの多くがRestAPIなどMCP以外のインターフェースで提供されているためです。
     将来的にサービス側が直接MCPプロトコルに対応すれば、中継用のMCPサーバーは不要になります。
     現状ではほとんどのサービスがMCPに対応していないため、変換用のMCPサーバーが必要という状況です。

    3-2. MCPクライアントの存在

    前項でAIから直接MCPに通信を行っている図を載せておきながらアレなんですが、実際はAIがMCPサーバーと直接通信するわけではありません。(※現状は)

    MCPサーバーを使用する際には以下の様な通信が行われています。

    MCPクライアント

    MCPサーバーへの通信を担当するのは「MCPクライアント」です。例としてClaudeCode のようなツールでは、AI(エージェント)が意思決定し、その指示をエージェント内部のMCPクライアントが受けてMCPサーバーに通信します。

    ただしこのMCPクライアント部分は説明の図では省かれることが多い様に思います。この点を誤解していると「AIにどうやってMCP情報を渡すの?」と悩むことになります。(※なりました)

    4. MCPを導入する前に知っておくべきこと

    ここまでしてMCP/MCPサーバーを導入するメリットって何かあるのでしょうか。

    ChatGPTは登場当初、学習済みの情報から返答を作成していましたが、 現在では質問によってWeb上を検索し、そこで得た情報から回答を作成することができる様になっています。

    その様にAIを閉じた状態から外へ出られる状態にすることでできることの可能性は大きく広がりますが、 しかしその一方で、デメリットや注意点をしっかりと認識した上で使わないと大変なことになりえます。

    ここでAIにMCPを導入することで実現できること、そして起こりうる問題の可能性について考えてみます。

    4-1. 実現できること

    ・今まで:新しく社員が入社した際、社内システムのアカウントを個別で登録する
     → AIと各システムのAPIとMCPでつなげることで「新しくアカウント作って」とAIに依頼を投げるだけで作成させる。

    ・今まで:毎月の売上レポートを管理画面からデータを出力してまとめる
     → AIに「◯月の売上レポート作って」と依頼することで売上管理システムにアクセスしてデータを取得してレポートを作成させる。

    ・今まで:EC サイトの売上が急に下がった際、どのページが原因か毎回調査していた
     → MCP でアクセスログ・CVR・検索ワード API を取得し、
       「カートページのエラー率が前週比 40% 上昇しています」
       「検索ワード '在庫' が急増しており、欠品が原因の可能性があります」
      といった "傾向分析+原因推定"をAIが実施。

    ・今まで:セキュリティ確認を人手でやっていた
     → MCP で勤怠・入退室ログ・監視カメラ(サマリデータ)にアクセスし、
       「通常勤務しないはずの深夜帯に A さんの入室が連続しています」
       「直前に退勤しているため、カードの貸し出しの可能性があります」
      など異常なパターンを AI が発見。

    このように、従来は担当者が個別に対応していたルーチンワークから、ログデータを横断的に分析して原因を推測するような高度な判断まで、AIがMCPを介して調査・分析を行い、その結果を提示できるようになります。

    4-2. リスクと注意点

    ・AIの不確実性による問題
     与えた指示に対して指示者が想定していた動作を必ず行うかどうかは実行してから出ないと分からない。
     DBやシステムへの登録,更新,削除などの権限を与えていた場合、指示を出していなくても実行される可能性がある。

    ・AI使用料金問題
     MCP通信では、AIに渡す情報量(トークン数)が増えるため、通常より課金が高くなります。
     最近ではトークンを減らすテクニックがAnthropic社から提供されましたが、まだこの仕様が標準では
     ない為、個別に努力する必要があります。
     (参考資料:Anthropic公式のMCPサーバー設計術!98.7%のトークン削減を実現)

    ボクはこの不確実性にやや危険を感じています。

    例としてボクは普段Amazon Echoを家で使用しているのですが、 「朝9時にアラーム」と告げると翌朝9時にアラームがセットされます。
    しかし1度だけ何故か翌々日の朝9時にセットされたことがありました。 原因は未だ不明ですが、以降はセットした後に必ずセットされた日時の表示を見る様にしています。

    その他にも例えば「新入社員情報を登録して」と伝えても、AIが無関係な情報を削除することも起こり得ます。
    データ取得系のAPIであれば問題ありませんが、登録/更新系のAPIの操作権限をどこまで渡すものか?
    AIによる間違った対応が起こった時はどう対応すべきか、などは考慮して使用する必要がある様に思います。

    5. まとめ

    ◯MCPとは
    ・AIが外部と連携する為の通信仕様のこと。
    ・実体はない。

    ◯MCPサーバーとは
    ・AIと外部サービス(主にAPI)を連携させる為の中継サーバーのこと。
    ・基本的に1サービス毎に1サーバー必要になる。

    ◯ MCPクライアントとは
    ・AI(エージェント)が外部機能を利用する際に、MCPサーバーとの通信を担当するコンポーネント。
    ・Claude Code などのツールに内蔵されていることが多い。
    ・AIの指示を受けて、MCPサーバーにリクエストを送る仲介役。

    ◯ MCP導入のメリット
    ・作業の自動化:アカウント登録やレポート生成など、人が行う業務をAI経由で一括処理できる。
    ・拡張性の高さ:同じプロトコル上で新しいツールやサービスを簡単に追加できる。

    ◯ MCP導入時の注意点
    ・AIの不確実性:誤ったAPI呼び出しでデータ破壊のリスクがある。
    ・コスト増加:MCP通信に必要なトークン量が多く、課金額が跳ね上がる可能性。
    ・セキュリティリスク:第三者製MCPサーバ利用時にはコードレビューが必須。

    次回は「実際にMCPを使ってみた」という記事を投稿する予定です。それではまた!

    6. おまけ:現状と今後の展望についての極めて個人的な考察

    MCPは2024年11月にClaudeを開発したAnthropic社が提唱したAIとサービスを連携させるための標準ルールで、今もどんどんMCPサービスを提供している会社が増えてはいますが、MCPに関してボクはまだ発展途上感が否めません。

    特に現在の主な用途はエンジニア向けなのか、ローカル上でMCPサーバーを動作させて同じくローカルのVsCodeやClaudeCodeから接続して使用する様な例ばかりを多く見ます。

    MCP対応しているワークフローツールの「Dify」を見てみますと、あえてそうしているのか、こちらMCPに対応はしているものの「これMCPの使い方として正しい?」と疑問に思う機能となっています。

    また各種WEBサービスと連携する為のOSSのMCPサーバーを公開しているサイトがありますが、こちらで公開されていたMCPサーバーを利用してみた所、起動はしますがMCPサーバーとのリクエスト/レスポンスの構造が違っていて、正しく連携できなかった事がありました。

    これは元のアプリが間違った作りをしたままリリースしているのか、または途中でMCPの仕様が変わってしまい動かなくなったのか。

    こうした規格は今後もアップデートしていくのでしょうが、過渡期の現在それがどれほどの頻度で発生するのか、開発としては悩ましい所です。

    7. 参考資料: 公開されているMCPサーバ

    ◯Zapier MCP (https://zapier.com/mcp)
     ・有料
     ・約8000のWebAppに接続できるMCPサーバーを提供するSaaS

    ◯CData MCP(https://jp.cdata.com/solutions/mcp/)
     ・2025年末まで無料
     ・APIキーを取得して使用する
     ・Windows Installerが配布されている
     ・機能制限版のコードはGithubで公開されている
      https://github.com/CDataSoftware/cdata-jdbc-mcp-server
     ・主にローカル環境のClaude Code等から接続して使用を目的としていると思われる

    ◯AI Base (https://mcp.aibase.com/ja/explore)
     ・OSSで公開されている個人開発のMCPサーバーをリストアップしているサイト
     ・各画面からGithubへの遷移リンクがある
     ・そのままではろくに使えないものも存在する
     ・セキュリティ面は自分でコードを見て安全か確認する必要がある

    ◯AI Base (https://mcp.aibase.com/ja/explore)
     ・OSSで公開されている個人開発のMCPサーバーをリストアップしているサイト
     ・各画面からGithubへの遷移リンクがある
     ・そのままではろくに使えないものも存在する
     ・セキュリティ面は自分でコードを見て安全か確認する必要がある

    ◯MCP Hub (https://hub.docker.com/mcp/explore)
     ・docker社が管理するMCPサーバーのDockerイメージ配布サイト
     ・主にサービス提供企業が作成した公式Imageが配布されている

    ◯Github MCP Registry (https://github.com/mcp)
     ・企業が開発した自社サービスのMCPサーバーがリストアップされている


    目次

    1. はじめに
    2. 環境構築
    3. AI に実装を依頼する
    4. 所感
    5. まとめ





    1. はじめに

    こんにちは。エンジニアの齋藤です。

    昨今のSNSでは、ChatGPTやClaudeを使ってアプリを作ったという報告を目にすることがあります。一方で、「どんな手順で進めればいいのか」「どこまでAIに任せて、どこから自分で考えるべきか」 といった具体的なプロセスについては、まだ体系的な情報が少ないように感じます。

    本記事では、Apple が Xcode 26 で導入した Claude統合機能 を活用し、実際にTODO管理アプリを作る過程を通じて、AIを使った開発の実態を具体的に解説 します。非エンジニアの方でも実践できるよう、環境構築から完成まで、すべてのステップを詳細に記載しました。

    AI開発の可能性を体感していただくことで、チームの生産性向上や新規事業の迅速な検証といった、新しいアプローチのヒントを得ていただければ幸いです。


    1-1. この記事で分かること

    • Claude統合機能を利用したiOSアプリ開発環境の構築手順
    • 非エンジニアでも理解できる開発フロー
    • 実際に使えるTIPS

    1-2. この記事では割愛すること

    • Swift/SwiftUIの詳細な文法説明
    • UIデザインの詳細
    • App Storeへの公開手順
    • CLAUDE.mdなどを利用したチーム開発での運用

    1-3. 対象読者

    • 非エンジニア: 自分でもアプリ開発してみたい方
    • iOS開発初心者: AI支援機能を利用してiOS開発を学習したい方
    • iOSエンジニア: 最新のAI支援開発を体験したい方
    • プロジェクトマネージャー: AI開発の実態を把握したい方

    1-4. 今回作成するアプリ

    シンプルなTODO管理アプリを作成します。

    主な機能

    • TODO の作成・編集・削除
    • 完了/未完了の切り替え
    • 期日設定と期限アラート(色分け表示)
    • ステータス管理(未着手/処理中/作業完了/完了)
    • ドラッグ&ドロップでの並び替え
    • データの永続化(アプリを閉じても保存)

    所要時間
    約 2〜3 時間(環境構築含む)





    2. 環境構築

    今回の検証に利用したMac、およびツールのスペックは以下の通りです。

    macOS Tahoe 26.1
    チップ Apple M1 Pro
    メモリ 32GB
    Xcode 26.1

    2-1. Xcode のインストール

    1. App Storeアプリ を開く
    2. 検索で「Xcode」を入力
    3. 「入手」をクリック
    4. ダウンロード完了まで待つ (10GBほどあるため、回線速度によっては30分ほどかかる場合があります)


    2-2. Claude統合機能 の設定

    Xcodeを起動して、設定画面を開く

    1. メニューバーから Xcode > Settings... をクリック(⌘,)
    2. 設定ウィンドウが開きます
    3. 左メニューのIntelligenceを選択

    Claudeアカウントでログイン

    1. 「Sign In...」をクリックして、お手持ちのClaudeアカウントで認証してください
    2. 接続要求の画面が表示されたら、「承認する」をクリック


    2-3. プロジェクトの作成

    新規プロジェクトを作成

    1. Xcode を起動
    2. "Create New Project" をクリック
    3. テンプレート選択画面で:
      • iOS を選択
      • App を選択
      • Next をクリック

    プロジェクト設定

    以下の項目を入力します:

    項目 設定内容 説明
    Product Name SampleTodoApp アプリの名前
    Team (自分の Apple ID) 開発者アカウント
    Organization Identifier com.yourname 任意の識別子
    Interface SwiftUI UI構築用のフレームワークを選択します。
    SwiftUIかStoryboardを選択可能。
    Language Swift そのまま
    Testing System None 今回は不要
    Storage None 今回は不要

    ※ Organization Identifier は逆ドメイン形式(com.会社名.アプリ名)が一般的ですが、個人開発なら jp.yourname.SampleTodoApp のような形式で問題ありません。

    プロジェクトの保存先を選択

    1. 任意のフォルダを選択
    2. "Create Git repository" にチェック(バージョン管理用、推奨)
    3. Create をクリック

    これでプロジェクトが作成され、Xcode のメイン画面が開きます。





    3. AI に実装を依頼する

    ここから実際に実装していきます。直接コードを書かずに アプリを完成させます。


    3-1. 開発フロー

    下記の開発フローで進めます。
    肝は、要件定義をもとに全体を一括実装したあとに、個別に細かい部分を修正していくというところになります。

    1. 要件定義(必要に応じて設計レベルまで)を作成する
    2. 前段で作成した要件定義をXcodeのCoding Assistantに読み込ませる
    3. Coding Assistantがコードを自動生成
    4. シミュレータで実行
    5. エラーや想定と異なる箇所があれば、個別にCoding Assistant経由でコードを修正


    3-2. 要件定義の作成

    まずは、作りたいアプリの要件を整理します。これが最も重要なステップです。

    ※ 重要: 要件定義の作成自体も、生成AI(ClaudeやChatGPT)を積極的に活用しましょう。アイデアを箇条書きで伝えるだけで、AIが構造化された要件定義を作成してくれます。

    要件定義の作り方

    アイデアを簡単に箇条書きする

    まず、作りたいアプリのイメージを箇条書きで整理します:

    作りたいアプリ: TODO管理アプリ
    
    基本的な機能:
    - TODOの追加・編集・削除
    - 完了/未完了の管理
    - 期限の設定
    - 並び替え
    
    欲しい機能:
    - ステータス管理(未着手、処理中など)
    - 期限が近いTODOを色分け表示
    - データはアプリを閉じても保存される
    

    AIに要件定義の作成を依頼

    上記の箇条書きを Claude に渡して、要件定義書を作ってもらいます:

    以下のアイデアをもとに、iOSアプリ開発用の詳細な要件定義書を作成してください。
    
    【要件定義書に含めてほしい項目】
    - アプリ概要
    - 機能要件(画面ごとに整理)
    - UI/UX仕様
    - データ管理(データモデル、永続化方法)
    - 技術仕様
    - 画面フロー
    - ファイル構成
    
    【アイデア】
    [上記の箇条書きを貼り付け]
    
    SwiftUIを使用したネイティブiOSアプリとして実装したいです。
    

    生成された要件定義を確認・修正

    AIが生成した要件定義を確認し、必要に応じて修正を依頼します:

    要件定義ありがとうございます。
    以下の点を修正してください:
    
    - ステータスは4段階(未着手/処理中/作業完了/完了)にしたい
    - 期限が過ぎたTODOは赤、3日以内は橙色で表示したい
    - ドラッグ&ドロップで並び替えできるようにしたい
    

    このように、対話しながら要件定義を磨き上げることで、非エンジニアでも実装可能なレベルの詳細な仕様書が完成します。

    完成した要件定義のサンプル

    上記のプロセスで作成された要件定義の例を以下に示します:

    # SampleTodoApp 要件定義書
    
    ## 1. 概要
    
    ### 1.1 アプリケーション名
    SampleTodoApp
    
    ### 1.2 目的
    日々のタスクを効率的に管理するためのTODO管理アプリケーション。作成、編集、削除、ステータス管理などの基本機能を備えたiOSネイティブアプリケーション。
    
    ### 1.3 対象プラットフォーム
    - iOS(SwiftUI使用)
    
    ---
    
    ## 2. 機能要件
    
    ### 2.1 TODO一覧表示機能
    
    #### 2.1.1 基本表示
    - TODOアイテムをリスト形式で表示
    - 各アイテムに以下の情報を表示:
      - タイトル
      - 完了/未完了チェックボックス
      - ステータスバッジ(カラー付き)
      - 作成日
      - 期日(設定されている場合)
    
    #### 2.1.2 空状態
    - TODOが0件の場合、空状態画面を表示
    - メッセージ:「TODOがありません」
    - システムアイコン:checklist
    - 説明文:「右上の + ボタンで新しいTODOを追加してください」
    
    #### 2.1.3 期日表示の色分け
    - **赤色**:期日超過
    - **オレンジ色**:期日まで3日以内
    - **グレー色**:通常(4日以上先)
    
    #### 2.1.4 完了済みアイテムの表示
    - タイトルに取り消し線を表示
    - チェックマークアイコンを緑色で表示
    - テキストカラーをセカンダリカラーに変更
    
    ### 2.2 TODO追加機能
    
    #### 2.2.1 入力項目
    **基本情報セクション:**
    - タイトル(必須):テキストフィールド
    - ステータス:ピッカー(デフォルト:未着手)
    
    **日付セクション:**
    - 作成日:日付ピッカー(デフォルト:現在日時)
    - 期日設定トグル
    - 期日:日付ピッカー(トグルON時のみ表示、作成日以降の日付のみ選択可能)
    
    **説明セクション:**
    - 説明:テキストエディター(複数行入力可能、高さ150〜200pt)
    
    #### 2.2.2 バリデーション
    - タイトルが空の場合、保存ボタンを無効化
    - 保存ボタンの背景色を変更(無効時:グレー、有効時:ブルー)
    
    #### 2.2.3 UI構成
    - ナビゲーションタイトル:「新規TODO」
    - キャンセルボタン(左上)
    - 保存ボタン(画面下部固定、フルワイド)
    - スクロール可能なフォーム部分
    
    ### 2.3 TODO編集機能
    
    #### 2.3.1 編集可能項目
    - タイトル
    - ステータス
    - 期日(設定/解除/変更)
    - 説明
    
    #### 2.3.2 編集不可項目
    - 作成日(表示のみ、グレーアウト)
    
    #### 2.3.3 UI構成
    - ナビゲーションタイトル:「TODOを編集」
    - キャンセルボタン(左上)
    - 削除ボタン(右上、赤色のゴミ箱アイコン)
    - 保存ボタン(画面下部固定)
    
    #### 2.3.4 削除機能
    - 削除ボタンタップ時、確認アラートを表示
    - アラートメッセージ:「『[タイトル]』を削除しますか?この操作は取り消せません。」
    - ボタン:「キャンセル」「削除」(破壊的アクション)
    
    ### 2.4 TODO操作機能
    
    #### 2.4.1 完了/未完了切り替え
    - チェックボックスタップで即座に状態を切り替え
    - アニメーション付きで表示を更新
    
    #### 2.4.2 並び替え
    - 編集モード時にドラッグ&ドロップで順序変更可能
    - 変更内容は自動保存
    
    #### 2.4.3 削除
    - スワイプ削除に対応
    - 編集モード時の削除ボタンにも対応
    
    #### 2.4.4 詳細表示
    - リストアイテムタップで編集画面へ遷移
    
    ### 2.5 データ管理機能
    
    #### 2.5.1 データ永続化
    - UserDefaultsを使用してデータを保存
    - JSON形式でエンコード/デコード
    
    #### 2.5.2 自動保存タイミング
    - TODO追加時
    - TODO更新時
    - TODO削除時
    - TODO並び替え時
    - 完了状態変更時
    
    ---
    
    ## 3. データモデル
    
    ### 3.1 TodoItem構造体
    
    ```swift
    struct TodoItem: Identifiable, Codable {
        let id: UUID                // 一意識別子
        var title: String           // タイトル(必須)
        var isCompleted: Bool       // 完了フラグ
        let createdAt: Date         // 作成日時
        var dueDate: Date?          // 期日(オプショナル)
        var description: String     // 説明
        var status: TodoStatus      // ステータス
    }
    ```
    
    ### 3.2 TodoStatus列挙型
    
    4つのステータスを定義:
    
    | ステータス | 表示名 | カラー | 
    |-----------|--------|--------|
    | notStarted | 未着手 | グレー |
    | inProgress | 処理中 | ブルー |
    | workCompleted | 作業完了 | オレンジ |
    | completed | 完了 | グリーン |
    
    ---
    
    ## 4. UI/UX要件
    
    ### 4.1 画面構成
    
    #### 4.1.1 一覧画面(ContentView)
    - NavigationView構造
    - ツールバー:
      - 左側:編集ボタン(日本語表示)
      - 右側:追加ボタン(+アイコン)
    - リスト表示エリア
    - 上部セーフエリアに16ptのスペーシング
    
    #### 4.1.2 追加/編集画面
    - NavigationStack内でシート表示
    - ScrollView + Form構造
    - 固定された下部ボタンエリア
    - フォーム最小高さ:700pt
    
    ### 4.2 カラースキーム
    - システムカラーを使用(ダークモード対応)
    - ステータスバッジの背景:対応カラーの10%透明度
    - 保存ボタン有効時:ブルー
    - 保存ボタン無効時:グレー
    - 削除ボタン:レッド
    
    ### 4.3 アクセシビリティ
    - EditButtonにロケール設定(ja_JP)を適用
    - 日付フォーマットは日本語形式(yyyy/MM/dd)
    
    ---
    
    ## 5. 技術要件
    
    ### 5.1 開発環境
    - 言語:Swift
    - フレームワーク:SwiftUI
    - アーキテクチャ:MVVM
    - 非同期処理:Swift Concurrency(MainActor使用)
    
    ### 5.2 使用技術
    - **データバインディング**:@Published, @StateObject, @ObservedObject
    - **ナビゲーション**:NavigationView, NavigationStack
    - **モーダル表示**:Sheet
    - **状態管理**:@State, @Environment
    - **データ永続化**:UserDefaults + Codable
    
    ### 5.3 ViewModel(TodoViewModel)
    - @MainActorで宣言(UIスレッドで実行)
    - ObservableObjectプロトコル準拠
    - 提供メソッド:
      - `addTodo()` - TODO追加
      - `updateTodo()` - TODO更新
      - `deleteTodo()` - TODO削除
      - `moveTodo()` - TODO並び替え
      - `toggleCompletion()` - 完了状態切り替え
    
    ---
    
    ## 6. 制約事項
    
    ### 6.1 データ保存
    - UserDefaultsを使用するため、大量データには不向き
    - データ容量制限に注意
    
    ### 6.2 日付選択
    - 期日は作成日以降の日付のみ選択可能
    - 作成日は編集不可
    
    ### 6.3 バリデーション
    - タイトルが空の場合は保存不可
    
    ---
    
    ## 7. 今後の拡張可能性
    
    ### 7.1 検討される機能
    - カテゴリー/タグ機能
    - 検索・フィルター機能
    - 優先度設定
    - 通知機能(期日アラート)
    - iCloudによるデータ同期
    - SwiftDataへの移行(より高度なデータ管理)
    - ウィジェット対応
    - 添付ファイル機能
    
    ### 7.2 改善案
    - オフライン対応の強化
    - パフォーマンス最適化(大量データ対応)
    - アニメーション強化
    - アクセシビリティの向上(VoiceOver対応など)
    
    ---
    
    ## 8. 非機能要件
    
    ### 8.1 パフォーマンス
    - リスト表示:スムーズなスクロール
    - データ保存:同期的に実行(データ量が少ないため許容)
    
    ### 8.2 ユーザビリティ
    - 直感的な操作性
    - 即座のフィードバック
    - エラー時の適切なメッセージ表示
    
    ### 8.3 保守性
    - MVVMアーキテクチャによる責務分離
    - Codableプロトコルによるシリアライズ処理
    - プレビュー機能による開発効率化
    
    ---
    
    ## 9. ファイル構成
    
    ```
    SampleTodoApp/
    ├── SampleTodoAppApp.swift      # アプリケーションエントリーポイント
    ├── Models/
    │   └── TodoItem.swift           # データモデル定義(TodoItem, TodoStatus)
    ├── ViewModels/
    │   └── TodoViewModel.swift      # ビジネスロジックと状態管理
    └── Views/
        ├── ContentView.swift        # TODO一覧画面
        ├── AddTodoView.swift        # TODO追加画面
        └── EditTodoView.swift       # TODO編集画面
    ```
    
    

    3-3. Claudeへの実装依頼

    XcodeのCoding Assistantを表示する

    左ペインのCoding Assistantをクリックします

    プロンプトを入力

    以下のプロンプトをCoding Assistant経由で Claude に送信すると、必要なファイルが自動生成されます。

    以下の要件定義に基づいて、SwiftUIでiOS TODO管理アプリを実装してください。
    
    【重要な指示】
    1. すべてのファイルを完全な形で出力してください
    2. 各ファイルのパス(例: Models/TodoItem.swift)を明示してください
    3. 実装の際、適切なフォルダ構成を提案してください
    4. すべてのコードにコメントを付けてください(日本語で)
    5. エラーハンドリングを適切に実装してください
    
    【要件定義】
    
    [上記の要件定義をそのまま貼り付け]
    
    

    3-4. ビルドと動作確認

    ファイルが生成されたら、いよいよ実行しましょう。

    ビルド

    ⌘ + B (Command + B) を押してビルドします。

    エラーが出た場合:

    1. Coding Assistantで、Claude に以下のように伝える:
    発生しているビルドエラーを解消して。
    
    1. 該当ファイルが修正される
    2. 再度ビルドを実行する

    ※ Coding AssistantがXcode上のエラー情報などを直接読み取るため、エラー内容の添付は不要です


    シミュレータで実行

    1. Xcode ツールバーでデバイスを選択(例: iPhone 16e)
    2. ⌘ + R (Command + R) を押す
    3. シミュレータが起動

    動作確認

    シミュレータが起動すると、自動的にアプリが立ち上がります。
    要件定義の仕様をもとに、動作確認を行いましょう。


    TODO一覧
    (ブランク)
    TODO一覧 TODO一覧
    (編集)
    TODO一覧画面(ブランク) TODO一覧画面 TODO一覧画面(編集)
    TODO新規作成画面 TODO編集画面
    TODO新規作成画面 TODO編集画面


    3-5. 細かい調整

    動作確認後、気になる点があれば、Coding AssistantからClaudeに伝えます。

    調整例:

    現在のアプリでは、期日が表示される位置が少し窮屈です。
    TODORowのレイアウトを調整して、期日を右端に表示するように変更してください。
    

    指摘をClaudeへ送信 → Coding Assistantが自動修正 → 確認

    このサイクルを繰り返すことで、理想のアプリに近づけます。





    4. 所感

    今回の開発を通しての所感をまとめます。

    4-1. 要件定義が8割

    曖昧な要件だと、AIは「推測」で埋めます。後から「これも欲しい」と追加すると、既存コードとの整合性が取れず大幅な修正が必要になる場合もあります。

    本記事でも言及しているように、要件定義の作成自体もAIに任せることができます。ぜひ有効活用してください。

    悪い例:

    TODO管理アプリを作ってください

    良い例:

    [詳細な要件定義を提示]
    - 画面構成(一覧、追加、編集)
    - 各画面の具体的な機能
    - データ構造(どんな情報を持つか)
    - UI/UXの仕様(色分け、アニメーションなど)
    

    4-2. 開発方針と実装規模

    今回実装したアプリは比較的小さい規模だったため、「一括実装→修正」の方針を採用しました。
    それでは、実装規模が大きくなったときは、どのような開発方針を採るべきでしょうか。
    規模に応じて、適切な粒度で実装スコープを分割することが重要そうです。

    アプリ規模 画面数 推奨アプローチ
    小規模 1〜5画面 一括実装
    中規模 6〜14画面 機能単位で分割
    大規模 15画面以上 機能単位分割 / 段階的実装(MVP→拡張)


    4-3. スクリーンショットの活用

    Claudeは画像解析も可能です。
    言葉で説明しづらいUIの改善も、スクリーンショットで伝えることができます。

    [アプリのスクリーンショットを添付]
    
    このUIをもっと洗練させてください。
    具体的には、余白を増やし、フォントサイズを調整したいです。
    





    5. まとめ

    本記事では、非エンジニアでもClaudeを活用すれば、わずか2〜3時間でiOSアプリを開発できることを実証しました。
    ここで重要なのは「詳細な要件定義の作成」と「AIへの適切な指示」でした。
    非エンジニアにとっても、自らアイデアを形にできる新しい可能性が開かれました。
    この機会に、ぜひ他の生成AIサービスも含めて、色々お試しいただけますと幸いです。

    1. Gartner社による生成AIのレポート
    2. 生成AI導入の進め方
    3. まとめ


    Gartner社による生成AIのレポート

    Gartner社は、データ品質の低さ、リスク管理の不十分さ、コストの増大、ビジネス価値の不明確さなどの理由で、2025年末までに生成AIプロジェクトの30%がPoC以降に中止されるだろうと発表しました。

    2024/07/29に発表されたGartner社によるレポート


    2024/7/29にシドニーで開催されたGartner Data & Analytics Summit

    Gartner Data & Analytics Summitで講演した、Gartner社のRita Sallam氏は、「今までされてきた誇大宣伝の後、各社の経営者は生成AIに実施した投資回収を待ちきれず、生成AIの価値を表明することに苦労しています。生成AIプロジェクトの範囲が広がるにつれて、システム開発・利用に必要な金銭的負担がますます大きくなっています。」と話しました。

    Gartner社によると、生成AIは生産性向上・業務効率化のために使用されることが多いですが、会社の利益に結びつけることが難しく、投資判断をしにくい背景があると述べられています。


    生成AI導入にかかる費用例

    下記はGartner社が発表した生成AI導入にかかる費用例です。プロジェクトの規模に応じてかかる費用は大幅に変動するため、参考値としてお受け取りいただきたいですが、投資に見合うためのシステム導入をするためには、新たなビジネスチャンス(コスト削減ではなく、売上増加)を目指して生成AIを導入する必要がありそうです。

    生成AI導入にかかる費用例

    「残念ながら、生成AIには万能なソリューションはなく、コストは今までのシステム開発や導入に比べて不確実性が大きいです。」とRita Sallam氏は言います。「コストは、支出額、投資するユースケース、採用する導入アプローチによって決まります。市場を大きく変えるために生成AIをあらゆるところに導入したいと考えている場合や、生産性向上や既存プロセスの拡張に重点を置く堅実な場合など、費用、リスク、変動性、戦略的影響のレベルはそれぞれ異なります。」

    生成AI導入に後ろ向きなことを書いてしまいましたが、導入の効果・成功例は多分にあります。Gartner社のレポートWhat Mature Organizations Do Differently for AI Successでは、ユース ケース、職種、従業員のスキル レベルに応じて異なるさまざまなビジネス改善を報告しています。最近の822名を対象とした調査では、回答者の平均では15.8%の収益増加、15.2%のコスト削減、22.6%の生産性向上が報告されており、使い所を適切に見極めることで、効果を得られることが分かっています。

    次の章から生成AIプロジェクトの進め方を紹介します。


    生成AI導入の進め方

    生成AI導入の進め方


    1. 生成AIの得意不得意を知る

    まず生成AIがどのようにビジネスに貢献できるかを理解することが大切です。生成AIとは、テキスト、画像、音声など、様々な形式のコンテンツを自動的に生成する技術です。下記に代表的な得意分野を記載します。

    代表的な活用分野

    • カスタマーサポートの自動化
    • 商品説明やコンテンツの自動生成
    • デザインや広告素材の生成
    • 自動テキスト要約やレポート作成


    2. プロジェクトの目的と目標を決める

    まずビジネス課題を明確にするところから始まります。どのような問題を解決したいのか、あるいはどのプロセスを効率化したいのかを具体的に定義します。

    • 目的の設定: 生成AIを導入することで達成したいゴールは何か?
    • KPIの設定: 生成AIの効果を測るための指標(例:生成されたコンテンツの量、品質、時間の短縮など)を設定します。


    3. データの収集と準備

    自社のナレッジを学習させるためには、大量のデータが必要です。データの品質が精度に大きく影響します。以下のステップを踏んで、データの質を確保します。

    • データの収集: 自社のデータや公開されているデータセットを活用します。
    • データの前処理: データのクリーニングや正規化を行い、ノイズを除去します。
    • データのアノテーション: 必要に応じて、データにラベル付けを行い、モデルが効果的に学習できるようにします。


    4. モデル選定とカスタマイズ

    生成AIモデルには、既存のオープンソースモデルやクラウドサービスで提供されているモデルを利用する方法があります。たとえば、OpenAIのGPTシリーズやDALL-Eなどの大規模言語モデルが有名です。

    • 既存モデルの活用: 既存の生成AIモデルを使用すれば、導入がスムーズで費用対効果が高いです。
    • カスタムモデルの構築: 自社のビジネスニーズに合わせてモデルをカスタマイズする場合、ファインチューニングが必要です。


    5. インフラの選定と構築

    生成AIは計算リソースを大量に使用するため、適切なインフラが必要です。クラウドサービス(AWS、GCP、Azureなど)を活用すると、スケーラビリティやコスト面で柔軟に対応できます。

    • クラウドインフラの構築: 生成AIモデルのトレーニングや推論に最適化されたインフラを用意します。
    • コストの最適化: 必要に応じてオンデマンドリソースを活用し、コストを管理します。


    6. テストとパイロット運用

    AIモデルの導入前には、十分なテストとパイロット運用を行う必要があります。生成AIの出力品質を確認し、ビジネス要件に合致しているかどうかを評価します。

    • 生成結果の検証: 出力されたコンテンツが期待通りか、ユーザーが満足できる品質かを確認します。
    • パイロット運用: 小規模なプロジェクトでまず運用を開始し、実際の運用に耐えられるかテストします。


    7. 生成AIの運用と改善

    生成AIは、導入した後も継続的な改善が可能です。運用中に得られたフィードバックをもとに、微調整を行います。

    • パフォーマンスモニタリング: モデルの出力やパフォーマンスを監視し、問題があれば対応します。
    • 継続的な改善: 新しいデータや技術を取り入れて、AIモデルを進化させ続けます。

    • まとめ

      生成AIが「既存のデータを活用し、新たなコンテンツ(文章・画像・音声など)などまだ得られていないものを作る技術」であるため、その技術を作ることも正解のないプロジェクトです。

      正解のない、つまり生成AIプロジェクトは場当たり的になってしまうのか?とご質問いただくことが多いのですが、それは違います。ここは他のシステム開発プロジェクトと同じで、適切な準備と計画が成功の鍵を握ります。目標を明確にし、データを整備し、生成AIを段階的に導入することで、途中で頓挫してしまう・システム構築したけれど使えない・想定より費用がかかる、などの失敗へのリスクを低減します。

      当社では、生成AIの活用にむけて無料相談会を実施しています。みなさんが考えていることを具体化させる、次のタスク・ステップを明確にする、生成AIでできるか回答する、などのようなご相談も大歓迎です。ぜひお気軽にお問い合わせください。




      X(旧Twitter)・Facebookで定期的に情報発信しています!

    このアーカイブについて

    このページには、過去に書かれた記事のうち生成AIカテゴリに属しているものが含まれています。

    次のカテゴリはデータ分析です。

    最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。