2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「週報書くの面倒…」を解決!Teams会議のAI議事録から週報を自動生成してみた話

2
Last updated at Posted at 2026-04-06

1.はじめに

Microsoft Teamsでのオンライン会議が日常的になった今、会議後の議事録作成や週報の作成に時間を取られていませんか?
特に、複数の会議をこなすマネージャーやプロジェクトリーダーにとって、会議内容を整理し、関係者に共有する作業は大きな負担になりがちです。

そこで本記事では、Microsoft 365 Copilot の「インテリジェント要約(Intelligent Recap)」機能と Power Automateを活用し、Teams 会議の内容から自動的に週報を作成する仕組みを構築する方法を紹介します。
対象読者は、Power Platform や Microsoft 365の基本的な知識を持つ技術者です。

Microsoft 365 ライセンスに加え、Microsoft 365 Copilot ライセンスが必要になりますが、Copilot のAI 要約機能を API 経由で取得し、Word 形式の週報として出力するまでの一連の流れを、実際の構成図フローのスクリーンショットを交えて解説します。

「1週間の会議の内容を、自動的に週報としてまとめたい」
そのようなニーズに応える、実践的な自動化ソリューションを一緒に作っていきましょう。

【参考】会議 AI 分析情報 API を使用して AI で生成された会議の概要を取得する
https://learn.microsoft.com/ja-jp/microsoftteams/platform/graph-api/meeting-transcripts/meeting-insights

「本記事の情報は執筆時点のものです。最新の仕様はMicrosoft公式ドキュメントをご確認ください」

2.実装の流れ

本ソリューションの大まかな流れを示します。
Power Automate Premium(旧:ユーザーごとのプラン) を使用します。
ここが重要です。
投稿案にある 「カスタムコネクタ」と「AI Builder(プロンプト実行)」 はプレミアム機能であるため、Office 365に標準付属している無料版Power Automateでは動作しません。

image.png

上記の前提条件を満たした上で、Power Automateを使った週報自動作成の手順を以下にまとめます。

image.png

以下、各ステップの詳細を順に説明します。

3.実装の詳細

Step 1: Entra ID (Azure AD) にアプリを登録してGraph APIのアクセス許可を構成

最初に、Microsoft Graph API および Copilot の Meeting Insights API にアクセスするためのアプリケーション登録を行います。
これにより、Power Automate から Graph API を呼び出すためのクライアント認証情報(クライアント ID やシークレット) を取得できます。

Entra ID 管理センター(旧:Azure Active Directory管理センター) で、次の手順に従ってください。

  • アプリの新規登録: Entra ID の「アプリの登録」から新しいアプリケーションを登録します。任意の名前(例: Teams Weekly Report App)を付け、用途に応じて マルチテナント または 自テナント内アカウント向けに登録します。
  • リダイレクト URI の設定: 「リダイレクト URI」は、後でカスタムコネクタから指定するコールバック URLです。Power Automate のカスタムコネクタでは、既定のリダイレクト先として https://global.consent.azure-apim.net/redirect を使用します。
    そのため、アプリ登録時または後から構成画面で、この URI を Web リダイレクト URI として追加してください。
  • API パーミッション(権限)の追加: 続いて、アプリの「API のアクセス許可」で Microsoft Graph の委任されたアクセス許可を追加します。週報作成に必要な主な権限は以下のとおりです。
    • Calendars.Read(必要に応じて Calendars.Read.Shared): ユーザーの Outlook カレンダーから予定を読み取るため。
    • OnlineMeetings.Read: ユーザーが主催または参加している Teams 会議情報(オンライン会議オブジェクト)を取得するため。
    • OnlineMeetingAiInsight.Read.All: Teams 会議の AI 要約(Meeting Insights)データを取得するため。管理者同意が必要になる場合があります。

image.png

後述する Word ファイル出力や会議出席者レポート取得を Graph API 経由で行う場合は、Files.ReadWrite.AllOnlineMeetingArtifact.Read.All など、シナリオに応じた追加権限が必要になることがあります。必要最小限の原則に従い、目的に応じた権限のみを付与してください。

  • 管理者による同意 (admin consent): テナント管理者としてアプリの API 権限を追加した場合は、「管理者が{テナント名}に対して同意する」ボタンをクリックし、全ユーザー分の同意を与えます。
    そうでない場合は、後述するコネクタ接続時に各ユーザーが権限に同意する必要があります。
  • クライアントシークレットの生成: 「証明書とシークレット」からクライアントシークレットを発行し、値をコピーして安全な場所に保管します。
    後で Power Automate のコネクタ設定時に クライアント ID とクライアントシークレットを使用します。

発行後に表示されるクライアントシークレットの「値」 は 一度しか表示されません。
本番環境や複数人で運用する場合は、Azure Key Vaultなどに保管することを推奨します。

以上でEntra ID上の準備は完了です。このアプリ登録情報(テナントID、クライアントID、クライアントシークレットなど)が、次のカスタムコネクタ設定で必要となります。

Step 2: Power Automate でカスタムコネクタを作成して Graph API を利用可能にする

続いて、Power Automate 上にカスタムコネクタを作成します。
カスタムコネクタとは、REST API を Power Automate / Power Apps から利用するための独自コネクタ定義です。標準コネクタでは対応していない API でも、HTTP ベースの REST API であれば Power Platform から扱えるようになります。

今回は、先ほど登録した Entra ID アプリを使い、Microsoft Graph APICopilot Meeting Insights API を含む)へアクセスするカスタムコネクタを作成します。

  • カスタムコネクタの新規作成: Power Automate のポータル(make.powerautomate.com)を開き、「データ > カスタムコネクタ」から新規カスタムコネクタの作成を選びます。
    **「空白から作成」**をクリックし、コネクタ名(例: Teams Meeting Insights)を入力して作成を開始します。
  • コネクタの基本情報 (General): ホストは graph.microsoft.comベース URL は / を指定します。
  • 認証 (Security):
    • 「認証の種類」は OAuth 2.0 を選択します。
    • プロバイダーには Microsoft Entra ID を指定します。
    • クライアント IDクライアントシークレットを入力します。
    • ログイン URLhttps://login.microsoftonline.com を指定します。
    • リソース URL には https://graph.microsoft.com を入力します。

image.png

カスタムコネクタを継続運用する場合は、アクセストークンの有効期限切れに備えて、リフレッシュトークンによる更新が成立するかを事前に確認しておくことを推奨します。

  • 定義 (Definition): ここで Graph API の各エンドポイントを操作として登録します。今回はコードエディタを使わず、Import from sample で追加します。

image.png

  • Outlook 予定の取得:
    • 方法: GET
    • URL:
      https://graph.microsoft.com/v1.0/me/calendar/calendarView?startDateTime={startDateTime}&endDateTime={endDateTime}&$select=id,subject,bodyPreview,onlineMeeting,onlineMeetingUrl,start,end
  • Teams 会議情報の取得(JoinWebUrl から ID 特定):
    Teams 会議の AI 要約を取得するには、対応するオンライン会議 IDが必要です。
    Graph には、会議の参加 URL(JoinWebUrl)からオンライン会議オブジェクトを検索する APIがあります。
    • 方法: GET
    • URL:
      https://graph.microsoft.com/v1.0/me/onlineMeetings?$filter=JoinWebUrl eq '{joinWebUrl}'

/me/onlineMeetings は、フィルターなしで一覧取得するのではなく、$filter を使って特定する形で利用します。

  • AI 要約オブジェクト ID の一覧取得:
    次に、オンライン会議 ID をもとに、当該会議の AI インサイト(要約)オブジェクト一覧を取得する API を追加します。
    • 方法: GET
    • URL: https://graph.microsoft.com/v1.0/copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights

Meeting Insights(aiInsights)は、/copilot/users/{userId}/... 形式のエンドポイントで取得します。
取得対象ユーザー(userId)は、会議の参加者または主催者であり、Microsoft 365 Copilot ライセンスを保有している必要があります。

  • AI 要約(会議議事録データ)の取得:
    最後に、特定した AI インサイト ID を使って詳細な会議要約データを取得する APIを追加します。
    • 方法: GET
    • URL:
      https://graph.microsoft.com/v1.0/copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights/{insightId}

このエンドポイントの応答として、会議の要約(議事録)の詳細な内容がJSON形式で取得できます。
応答JSONには、例えば以下のような項目が含まれます。

{
  "meetingNotes": [
    {
      "title": "プロジェクトの目的とステークホルダの紹介",
      "text": "各部署の代表者が出席し、開始時点でプロジェクトの目標と主要関係者について紹介されました。",
      "subpoints": [
        {
          "title": "アクション項目の検討",
          "text": "アクション項目が各担当者に割り当てられ、フォローアップ会議の日程が設定されました。"
        }
      ]
    }
  ],
  "actionItems": [
    {
      "title": "プロジェクトのタイムライン確定",
      "text": "ステークホルダーの期待とリソースを踏まえ、プロジェクトのタイムラインを精査・最終確定する。",
      "ownerDisplayName": "羽柴 秀吉"
    }
  ],
  "viewpoint": {
    "mentionEvents": [
      {
        "eventDateTime": "2025-12-08T05:30:00Z",
        "transcriptUtterance": "予算配分を進める前に、織田 信長の承認を得る必要があります。",
        "speaker": {
          "user": {
            "displayName": "柴田 勝家"
          }
        }
      }
    ]
  }
}

上記は会議のJSON出力の一例です。
meetingNotesに会議内容の要約テキスト、actionItemsに抜き出されたアクションアイテム(担当者名付き)、mentionEventsに特定の参加者が言及された発言など、会議の要点が構造化データとして取得できていることが分かります。

image.png

  • コネクタのテストと保存: 各アクションを定義したら、コネクタ編集画面の「テスト」タブで実際にGraph API呼び出しが成功するかを確認しましょう。
    アプリ登録で正しく権限が設定され、必要に応じて管理者同意が行われていれば、ユーザーアカウントでサインインすることで正常にデータが取得できるはずです。
    テストが成功したらコネクタを公開 (Update connector) して完了です。
    これでPower Automateのフローから、定義した操作(Graph API呼び出し)が使えるようになります。

Step 3: Power AutomateフローでOutlookカレンダーの会議イベントを取得

カスタムコネクタの準備ができたら、いよいよPower Automateのクラウドフローを作成し、週報作成の自動化フローを構築します。ここでは、1週間分のTeams会議の要約をまとめるフローの例を解説します。

  • フローの作成とトリガー設定: Power Automateで手動トリガーのフローを新規作成します。

週報用途として、「毎週金曜の夕方に自動実行したい」 と考える方も多いと思われます。
しかし、スケジュール トリガーで実行されるフローは、実行時にログインしているユーザーの文脈ではなく、フローに設定された接続のユーザー文脈で動作します。
そのため、自分自身の週報を、自分の接続を用いて定期生成する用途であれば利用可能ですが、複数ユーザー分の週報を各ユーザーの権限で一括生成する用途には適していません。
特に、ユーザーサインインを前提とした権限での実行では、Graph API などに正しくアクセスできない点に注意が必要です。
なお、スケジュール実行に近い運用方法については、後述で解説します。

  • 予定の取得 (カレンダー照会): フローの最初のアクションとして、Outlook カレンダーから今週の会議イベントを取得します。方法は2通りあります。
    • 方法A: 標準コネクタの使用 – 「Outlook 予定表」コネクタの 「予定を取得 (V3)」アクションを使用し、パラメーターに当週の日付範囲を指定します。例えば「開始時刻=先週月曜 00:00、終了時刻=今週日曜 23:59」の範囲で取得すると、その期間のすべての予定イベント(会議含む)が得られます。フィルター設定で「オンライン会議あり」の予定に限定することも可能です。
    • 方法B: Graph API(カスタムコネクタ)の使用 – 前ステップで作成したカスタムコネクタの 「Outlook予定の取得」アクション(Graphの calendarView API) を利用します。先ほど定義した通り、開始・終了日時をパラメータで指定して実行すると、その期間のカレンダーイベント一覧を取得できます。onlineMeetingUrl(Teams会議の参加URL)が含まれるイベントを抽出することで、オンライン会議のみを対象とします。
      どちらの方法でも、当該週に開催されたTeams会議のイベント一覧(タイトル、日時、参加URL等)が取得できます。続いて、この一覧に対して繰り返し処理を行い、各会議のAI要約を取得していきます。

Step 4: 各Teams会議のAI要約データを取得し、AI Builder で週報向けに整形

Step 3 で取得した会議イベント一覧を、Power Automate の Apply to each(各要素に適用) アクションでループ処理します。各イベントについて以下の処理を実施します。

  • オンライン会議IDの取得: イベントが Teams 会議であれば、イベントデータから参加 URL(JoinWebUrl) を取得します。
    カスタムコネクタの 「JoinWebUrl から OnlineMeeting を取得」アクションを使い、この URL に対応するオンライン会議 ID を取得します。
    取得した OnlineMeeting オブジェクトの id を、次のアクションに渡します。

image.png

  • AIインサイトIDの取得: オンライン会議 ID をパラメータとして、カスタムコネクタの「AI Insights 一覧取得」アクションを呼び出します。
    これにより、その会議に関連付けられた AI インサイト ID の一覧が返されます。通常は 1 件ですが、複数存在する場合は createdDateTimeendDateTime が最も新しい ID を選択します。

image.png

  • 会議要約データの取得: 特定した AI インサイト ID を用いて、「AI Insight 詳細取得」アクションを実行します。
    /copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights/{insightId} を呼び出すことで、会議の AI 要約内容(議事録の JSON データ)を取得できます。
    この JSON から、会議の要約テキスト、アクション項目、出席者言及などを取り出し、必要に応じて整形します。

image.png

  • AI Builder のカスタムプロンプトで週報向けに整形: 取得した AI 要約データをそのまま使うのではなく、より読みやすく、上司や関係者に提出しやすい「週報形式」に整形するために、Power Automate の AI Builder の「カスタムプロンプト」機能を活用します。

    • Power Automate ホームの「プロンプト」セクションから、以下の手順でカスタムプロンプトを作成します。
      プロンプト名:例)「WeeklyReportFormatter」 プロンプトの内容(例):
あなたは当社社員として、Teams会議のAI要約をもとに週報を作成します。

# 前提理解(必ず守る)
・AI要約には「決定事項」「検討中」「個人意見」「宿題」が混在している
・発言内容 ≠ 決定事項 である点を考慮する
・曖昧な表現は業務週報として再整理・正規化する

# 目的
・上長が短時間で「何が決まり/何が進み/何が課題か」を把握できる週報を作成する
・会議内容を行動・成果・課題に再構成する

# 会社の文体・表現ルール(厳守)
・敬体(です・ます調)
・断定的・簡潔な業務文体
・感情表現・評価語は禁止
・結論 → 根拠 → 補足 の順
・一文60字以内
・箇条書き中心
・社内正式名称を使用

# AI要約特有の処理ルール(重要)
・「決定」「合意」「実施する」等の表現 →【決定事項】
・「検討」「可能性」「案」等の表現 →【検討中】
・担当者・期限が明示されているもの →【ToDo】
・不明確な主語は文脈から補完。ただし推測はしない
・判断できない場合は「決定事項ではない」と明示

# 出力フォーマット(厳守)
■ 今週のサマリ(結論3行)
■ 会議からの決定事項
■ 実施内容・進捗(事実)
■ 課題・リスク
■ 来週の予定(行動ベース)
■ 上長への確認・判断依頼

以下の【入力データ】は、Microsoft Teamsの会議AI要約です。
{meetingSummary}  
  • 入力パラメータ:meetingSummary(文字列)
    このプロンプトは、Teamsの AI 要約(JSON の meetingNotes や actionItems など)から抽出したテキストを meetingSummary に渡すことで、週報向けの構成に整形してくれます。

image.png

  • Power Automate フロー内で「AI Builder > カスタムプロンプトを呼び出す」アクションを追加し、上記のカスタムプロンプトを設定します。取得した会議要約テキスト(meetingNotes + actionItems など)を meetingSummary パラメータとして渡します。
  • AI Builder から返された整形済みの週報テキストを、次のステップで使用するために変数やコレクションに保存します。

image.png

このプロセスにより、Copilot の AI 要約をさらに洗練された週報形式に変換することができ、読み手にとっても分かりやすい内容になります。

  • 週報用データへ整理: 上記の処理を各会議イベントに対して繰り返し、週報に掲載する複数会議分のデータを蓄積します。
    例えば、変数「WeeklyReportContent」に整形済みテキストを追記していく、あるいは後続の Word テンプレートにマッピングできるようにオブジェクト形式で構築するなど、出力形式に応じたデータ構造を準備します。

Step 5: 取得した要約を週報(Wordファイル)として出力

週報には通常、各会議の要点が時系列でまとめられます。そこで前ステップで蓄積したデータを用いて、Wordファイルのテンプレートに差し込みを行います。具体的な方法として、以下の2つが考えられます。

  • 方法A: Wordテンプレート+「Word Online (Business)」コネクタ – 予め週報の書式に合わせたWordファイル(例えば「週報テンプレート.docx」)をSharePointやOneDrive上に用意し、「Word テンプレートの差し込み」アクションで内容を埋め込みます。
    会議タイトルや日時、要約テキスト、箇条書きのアクション項目などをテンプレートのプレースホルダーにマッピングすることで、書式の整った週報Wordファイルを生成できます。最後に「ファイルをコンテンツとして取得」アクションで完成したdocxファイルを取得し、必要に応じて共有先(メール送信やSharePoint保存など)へ配布します。
  • 方法B: HTMLからPDF/Word構成 – または、フロー内でHTML形式で週報の内容(見出しや段落、リスト等)を組み立て、「HTML を PDF に変換」アクション等でPDF化する方法もあります。PDFではなくWord形式(DOCX)で出力したい場合は、少々テクニカルですがPower AutomateからMicrosoft Graphの /beta/me/drive APIを用いてHTMLファイルをDOCXに変換する、という手も考えられます。しかしシンプルには、前者のWordテンプレート差し込みを用いる方法が分かりやすく再利用も容易です。

image.png

image.png

今回はWordテンプレートを用いる方法(方法A)を推奨します。この方法ならノーコードで書式デザイン済みのテンプレート(会社指定の週報フォーマット等)にデータを流し込むだけで完了します。 (Wordテンプレートを作成する手順は割愛しますが、Qiita内で検索すれば、たくさん見つかると思います。)

フロー実行結果の確認: フローを実行すると、指定した週のTeams会議について、各会議の要約やアクションアイテムを含む週報Wordファイルが自動生成されます。例として、会議ごとに「会議名・日時」「出席者」「報告内容」「アクション」などのセクションを設けたWordドキュメントを出力できます。あとは必要に応じて人手で補足や修正を加えれば、週報の完成です。

Step 6: ユーザー委任(各ユーザーの権限)でフローを実行する方法

前述のとおり、本記事では Meeting Insights API を**ユーザー委任権限(Delegated permission)**で利用する前提で説明します。
そのため、Power Automate のカスタムコネクタで実行される Graph API 呼び出しは、コネクタの接続にサインインしたユーザーの資格情報で実行されます。

フローの「作成者」そのものではなく、「どの接続(Connection)で実行されるか」が重要です。

  • 手動実行:
    フローを手動で実行する場合、実行者自身がコネクタにサインインしていれば、そのユーザーの予定表や会議要約を取得できます。
    他ユーザーがこのフローを利用する場合は、各自がコネクタにサインインし、個別の接続を作成する必要があります。

  • スケジュール実行したい場合:
    スケジュールトリガーで実行されるフローは、実行時にサインインしているユーザーではなく、設定された接続のユーザー権限で動作します。
    そのため、複数ユーザーがそれぞれ自分の会議要約を取得する運用には、そのままでは適しません。

    このような場合は、スケジュール実行 + ユーザー操作を組み合わせる運用が現実的です。
    例えば、毎週金曜 17:00 にユーザーの Teams チャットへアダプティブカードを送信し、ユーザー本人がボタンを押してフローを実行する構成にします。
    これにより、各ユーザーが自分の接続で実行できるため、ユーザー委任の前提を維持できます。

なお、Meeting Insights API 自体は Application 権限でも利用可能ですが、その場合は application access policy の設定が必要になります。
本記事では、利用者ごとに安全に実行しやすい Delegated 権限を前提としています。

4.おわりに

以上、Power Automate を活用して Teams 会議の AI 要約から週報を自動生成する手順を説明しました。
Microsoft 365 Copilot の Meeting Insights API を使うことで、会議の内容を週報に素早く変換し、報告書作成を大幅に効率化できます。

特に、複数ユーザーで利用する場合は、誰の権限で Graph API を実行するのかを最初に整理しておくことが重要です。
ぜひ本記事の内容を参考に、自社の業務自動化に役立ててみてください。

We Are Hiring!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?