1. はじめに
1.1 背景
近年、生成AIは単なるチャットツールとしての利用にとどまらず、既存の業務フローやツールに生成AIを組み込み、業務を支援することが重要になってきました。特にバックオフィス業務では、過去のナレッジを参照しながら問い合わせ内容に応じて表現や判断を調整します。
こうした業務は、生成AIとRAG(Retrieval Augmented Generation:検索結果を参照して回答を生成する手法)の相性が良いと感じています。一方で、生成AIの活用を検討する中で、「既存の業務ツールの中で完結させたい」という声を聞くことも少なくありません。日々の業務の流れに自然に組み込めるかどうかは、実際の活用を進める上で一つのポイントになります。
本記事では、そうした背景を踏まえた 生成AI活用の一例として、問い合わせ業務を生成AIで効率化する:Outlookアドイン活用事例を紹介します。
本記事を通して、生成AIをどのように業務へ組み込むかを検討している方の一助になればと思います。
1.2 本記事で扱う内容
本記事では、メールクライアントとしてOutlookを利用していることを前提に進めます。
問い合わせ業務は、メールが中心となることが多いです。問い合わせ内容の確認、過去ナレッジの参照、回答文の作成までを考えると、Outlookは問い合わせ業務の起点であり、最終的なアウトプット先でもあります。
そこで今回は、新しいチャットUIや専用アプリを用意するのではなく、Outlookに生成AIを組み込む構成を紹介します。
具体的には、Outlookのアドインに追加したカスタムボタンを起点として、
- 問い合わせメール本文を読み取る
- Power Automateを介してCopilot Studioのエージェントを呼び出す
- Azure AI Searchに登録した過去の問い合わせナレッジを参照して回答文を生成する
- 回答の「下書き」をOutlook上に追記する
という一連の流れを実現しています。
本記事は、こうした生成AI活用の「事例紹介」でありつつ、主眼はどのような構成・アーキテクチャで実装しているかにあります。Outlookアドイン、Power Automate、Copilot Studio、Azure AI Searchをどのように組み合わせ、役割分担させているのかを中心に、構成図や設計の考え方、実装時のポイントを解説していきます。
2. 前提
本記事で紹介する構成は、Microsoft 365とMicrosoft Azureを中心としたサービスを組み合わせて実現しています。
本記事は 2026年4月時点の仕様・UIをもとに検証しています。
2.1 前提条件
Microsoft 365環境
以下のMicrosoft 365サービスを利用します。
- Outlook(新しいOutlook for Windows / Outlook on the Web)
- Power Automate(クラウドフロー)
Outlookアドインを利用するため、Microsoft 365テナント上でOffice Add-insを利用できる環境が前提です。また、Power Automateのフローを作成・実行できる環境が必要です。
※クラシックOutlook for Windowsでの動作はサポートされていないのでご注意ください。
Copilot Studio
生成AIの実行部分には、Copilot Studioで作成したカスタムエージェントを使用します。
そのため、Copilot Studioが利用可能なライセンスを保有していること、もしくは検証環境として利用できる状態であることを前提とします。
Azure AI Search
RAG構成の検索基盤としてAzure AI Searchを使用します。
社内ナレッジ(問い合わせ履歴、FAQ、ドキュメントなど)がAzure AI Searchに登録されていることを前提とします。
Outlookアドイン(Office Add-ins)の基本理解
Outlookアドインを起点とするため、以下のような基本的な知識があることを前提とします。
・Office Add-insの概要
・カスタムボタンの追加方法
・アドインからメール本文を取得する流れ
3. 全体アーキテクチャ
本章では、今回の問い合わせ対応フローを支える全体アーキテクチャについて説明します。
ポイントは、ユーザーが操作するのはOutlookのみであり、生成AIやRAGに関する処理はすべて裏側で実行される点です。
本アーキテクチャでは、「UI = Outlook」「オーケストレーション = Power Automate」「知能 = Copilot Studio」 という責務分離を明確にしています。
処理の流れは、以下のとおりです。
- ユーザーがOutlook上で問い合わせメールを開き、アドインのボタンを押下
- Outlookアドインがメール本文を取得し、Power Automateを起動
- Power AutomateからCopilot Studioのエージェントを呼び出す
- エージェントがAzure AI Searchを参照して回答文案を生成
- Outlookアドインが生成結果を下書きに反映
3.1 構成要素
本構成は、主に以下のコンポーネントで構成されています。
- Outlookアドイン(カスタムボタン)
- Power Automate
- Copilot Studio(カスタムエージェント)
- Azure AI Search
- Outlook(下書き作成)
Outlookアドインは Azure App Service上でホスティングしており、アドインのマニフェスト(manifest.xml)には、そのWebサーバーのURLを指定しています。
3.2 各コンポーネントの役割
それぞれのコンポーネントの役割は以下のとおりです。
- Outlookアドイン
ユーザー操作の起点となるコンポーネントです。
Outlook上に追加したカスタムボタンを押下することで、選択中のメール本文を取得し、後続の処理を開始します。 - Power Automate
処理全体をつなぐオーケストレーターの役割を担います。
Outlookアドインから受け取ったメール本文を入力として、Copilot Studioのエージェントを呼び出します。 - Copilot Studio(カスタムエージェント)
生成AIを用いた回答生成を担当します。
システムプロンプトやロジックを定義し、Azure AI Searchをデータソースとして参照しながら、問い合わせ内容に応じた回答文案を生成します。 - Azure AI Search
RAG構成における検索基盤です。
過去の問い合わせ履歴やFAQ、ドキュメントなどの社内ナレッジを検索対象とし、Copilot Studioが参照します。 - Outlook(下書き)
生成された回答文案の出力先です。
生成AIが生成した内容をそのまま送信するのではなく、Outlookの下書きとして挿入し、人が最終確認・調整します。
4. 実装手順
本章では、今回の構成をどのような手順で実装しているかを、コンポーネントごとに説明します。
4.1 Outlookアドインの作成
ここではOutlookアドイン側の実装概要について説明します。
Outlookアドインのひな型は、Yeoman Generator(yo office)で作成します。
本記事では、詳細手順は割愛し、ひな型作成ができることを前提に進めます。
・manifest.xml:Outlookにボタンを追加し、commands.jsの関数を起点にする
・commands.js:メール本文を取得して、Power Automateを呼び出す
本記事のコードは構成理解のためのサンプルであり、実際の認証情報やエンドポイントは含まれていません。
-
カスタムボタンの追加
ボタンの追加はmanifest.xmlの拡張ポイントに定義します。
本構成では、返信(Compose)画面で動作するOutlookアドインを前提とし、ボタン押下で本文へ下書きを挿入します。ここでは、変更箇所のみを抜粋します(※名前やアイコン、ActionIdは環境に合わせて調整してください)。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- 省略 -->
<Permissions>ReadWriteItem</Permissions>
<Rule xsi:type="RuleCollection" Mode="Or">
<Rule xsi:type="ItemIs" ItemType="Message" FormType="Edit" />
</Rule>
<DisableEntityHighlighting>false</DisableEntityHighlighting>
<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
<Requirements>
<bt:Sets DefaultMinVersion="1.3">
<bt:Set Name="Mailbox" />
</bt:Sets>
</Requirements>
<Hosts>
<!-- 省略 -->
</Hosts>
<Resources>
<bt:Images>
<!-- 省略 -->
</bt:Images>
<bt:Urls>
<bt:Url id="Commands.Url" DefaultValue="https://your-domain.com/commands.html" />
</bt:Urls>
<bt:ShortStrings>
<bt:String id="GroupLabel" DefaultValue="Generate Draft"/>
<bt:String id="ActionButton.Label" DefaultValue="Generate Draft"/>
</bt:ShortStrings>
<bt:LongStrings>
<bt:String id="ActionButton.Tooltip" DefaultValue="AIでメール下書きを作成します"/>
</bt:LongStrings>
</Resources>
</VersionOverrides>
</OfficeApp>
-
選択中メール本文の取得
ボタン押下によって呼ばれるaction関数で、選択中のメール本文を取得します。Outlookのメール本文は、HTML/Textなどの表現があるため、本文タイプを確認したうえで取得しています。
function action(event) {
//実装例(抜粋)として整理
const item = Office.context.mailbox.item;
// 元本文を取得(指定の getAsync を使用)
item.body.getAsync(
Office.CoercionType.Text,
{ bodyMode: Office.MailboxEnums.BodyMode.FullBody },
async (bodyResult) => {
if (bodyResult.status === Office.AsyncResultStatus.Failed) {
console.log(`Failed to get body: ${bodyResult.error.message}`);
event.completed();
return;
}
const originalBodyHtml = bodyResult.value || "";
}
);
}
}
列挙型の引数である{ bodyMode: Office.MailboxEnums.BodyMode.FullBody }は、Outlook on the web、モバイル デバイス (バージョン 4.2538.0 以降)、および新しい Outlook on Windows でのみサポートされます。
- Power Automate呼び出し
本文を取得したら、Power Automate(クラウドフロー)を起動します。フロー側を「HTTP要求を受信したとき」をトリガーにして、アドインからWebhookとして呼び出す形にしています。
/** Power Automate呼び出し(HTTPトリガー) */
async function callPowerAutomateFlow(payload) {
const res = await fetch(FLOW_URL, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
if (!res.ok) {
const text = await res.text().catch(() => "");
throw new Error(`HTTP ${res.status} ${res.statusText} ${text}`);
}
const data = await res.json().catch(() => ({}));
const draft = data?.draft;
if (!draft || typeof draft !== "string") {
throw new Error("Flow応答に draft がありません。{ draft: string } 形式で返してください。");
}
return draft;
}
FLOW_URLはPower AutomateのHTTPトリガーURLを指します。セキュリティおよび運用の観点から、コード内にハードコードせず、環境変数で管理することを推奨します。
4.2 Power Automateフロー
Outlookアドインから受け取ったメール本文を起点に、Copilot Studioのエージェントを呼び出して回答文案を生成するのが、Power Automateの役割です。
フロー全体の考え方
- Power Automateはオーケストレーションとして機能
- メール本文を受け取る → エージェントを呼ぶ → 結果を返す
- RAGや生成処理の詳細はCopilot Studio側に集約する
変数の設定
- message:
Outlookアドインから受け取った問い合わせ内容(メール本文)を格納するための変数 - draft:
Copilot Studioから帰ってくる回答文案を格納するための変数
4.3 Copilot Studio / Azure AI Search
Copilot Studio
Copilot Studioは、本構成における生成AIとRAGの中核となるコンポーネントです。Power Automateで渡された問い合わせ内容を入力として受け取り、Azure AI Searchに登録された社内ナレッジを参照しながら、回答の下書きを生成します。
Azure AI Search
Copilot Studioでは、データソースとしてAzure AI Searchを接続します。
過去の問い合わせ履歴をもとにしたFAQデータを検索対象とし、RAG構成として回答生成に利用します。
4.4 Outlook下書きへの反映
Copilot Studioで生成した回答文案は、そのまま送信せず、Outlookの下書きとして本文に挿入します。
function action(event) {
//省略
// Power Automateにメール本文を送信し、下書き(要点)を受け取る
const draftText = await callPowerAutomateFlow({
messageHtml: originalBodyHtml
});
// 返信文(テンプレ)を組み立てる:draftText を差し込む
const replyHtml = buildReplyHtml({
closing: "以上、よろしくお願いいたします。",
draftText: draftText
});
// 本文へ反映(カーソル位置に挿入)
item.body.setSelectedDataAsync(
replyHtml,
{ coercionType: Office.CoercionType.Html, asyncContext: { scenario: "reply-draft" } },
(setResult) => {
if (setResult.status === Office.AsyncResultStatus.Failed) {
console.log(setResult.error.message);
event.completed();
return;
}
event.completed();
}
);
//省略
}
実装上のポイント
- callPowerAutomateFlow関数の実行結果として、Copilot Studioによって作成された下書きを取得
- 文面の最終調整は人が行うことを前提に、HTML形式で下書き中のカーソル位置に挿入
5. 動作確認
本章では、実際の業務データを用いた効果測定ではなく、構成通りに処理が連携し、想定した動きをするかを確認した検証結果を紹介します。
5.1 確認内容
以下の観点で動作確認を行いました。
- Outlookアドインのカスタムボタンが正しく表示されるか
- 生成された文案がOutlookの下書きとして挿入されるか
いずれも「ユーザーはOutlook以外のUIを操作しない」ことを前提とします。
5.2 結果
6. 学び・Tips
本章では、Outlookアドイン × Power Automate × Copilot Studio × Azure AI Searchという構成を実装・検証する中で得られた学びや、設計上意識してよかったポイントを整理します。
6.1 RAGは「どこで使うか」が重要
RAGというと、専用のチャットUIやWebアプリで使うイメージを持たれがちですが、今回の検証を通じて「どの業務の、どのタイミングで使うか」の方が重要だと感じました。
問い合わせ対応の場合、
・問い合わせはOutlookに届く
・回答もOutlookから返す
という前後関係が明確です。(そうでない場合もありますが)
この流れの中にRAGを組み込むことで、検索・生成のために業務コンテキストを切り替える必要がなくなります。
6.2 Copilot Studioは業務フローに組み込むことで真価を発揮する
Copilot Studio単体でもチャットベースの検証は可能ですが、Power Automateと組み合わせることで、
・既存業務フローの一部として呼び出せる
・入力・出力の役割が明確になる
・他システムとの連携が容易になる
といったメリットが得られました。
特に今回のように「問い合わせメール本文」という明確な入力ケースでは、エージェントを部品として扱える点が有効でした。
6.3 下書き生成はCopilot Studioではなくアドイン側で行う
当初は、Copilot Studio側で回答生成からOutlookの下書き作成までを完結させる構成も検討しました。しかし、Copilot StudioからOutlookの下書きを直接操作する場合、Microsoft Graph API を利用する必要があります。その場合、
・Entra IDでのアプリケーション登録
・ユーザー委任権限による認証フローの実装
・トークン管理を含む認証/権限設計
といった対応が必要になり、検証や軽量な業務支援ツールとしては、オーバーヘッドが大きくなります。
そこで本構成では、
- Copilot Studio:
過去のナレッジを参照し、回答文案(テキスト)を生成する - Outlookアドイン:
生成された文案をOutlookの本文(下書き)に挿入する
という役割分担にしました。
7. まとめ
本記事では、社内からのMicrosoft 365に関する問い合わせ対応業務を題材に、Outlookアドインを起点とした生成AI活用の一例を紹介しました。ポイントは、生成AIやRAGを「専用アプリ」として切り出すのではなく、業務フローの一部に組み込む構成を選択した点です。
今回は、検証として構成通りに処理が連携し、Outlook上で下書き生成までが完結できることを中心に確認しました。
今後は、実際の問い合わせ業務の中に本構成を組み込み、効果測定を行っていきたいと考えています。生成AIの活用は、導入すること自体が目的ではなく、業務の中でどれだけ自然に使われ、価値を出せるかが重要です。
本記事で紹介した構成が、そうした検討の一助になれば幸いです。
We Are Hiring
BIPROGYでは一緒に働く仲間を募集しています。ご興味ある方は下記をご参照ください。




