はじめに
ごきげんよう、百合宮桜(Miyu)です(*'▽')
チームの定例会議や商談などで「議事録を OneNote にまとめて、関係者に共有しよう」と思った時、毎回開催日や出席者を手入力していませんか?
1回なら大した作業ではありませんが、毎日のように会議があると意外と手間がかかります。特に出席者が多い会議では、出席者を確認しながら転記するだけでも時間が取られますよね(´・ω・`)
そこで本稿では Outlook の予定表に登録されている会議情報 を利用して、OneNote に議事録テンプレートを 自動作成 する方法を紹介します。
やりたいこと
今回はPower Automateで会議の開始5分前に出席者や開催日など会議の基本情報が記入された議事録テンプレートを OneNote へ追加します。
このフローを作ると、会議の直前に自動で会議の基本情報が入った議事録テンプレートを作成できるため、会議の準備時間を大幅に削減することができます。
本フローは自分の Outlook 予定表に登録された会議でのみ動作します。
自分の Outlook 予定表にない会議では動きません。
また、自分の予定表にあったとしても、ゲスト(自社テナントユーザー以外の方)が出席する会議ではうまく動作しない可能性があります。ご注意ください。
事前準備
議事録を保管するノートブックに以下を予め作っておいてください。
- 議事録を保管するセクション
フローの概要
今回は以下のステップで実装しました。
- 議事録作成時間の設定
- 開始・終了日時を日本時間に変換
- 主催者の氏名を取得
- 出席者のユーザープリンシパルネーム(メールアドレス)の取得
- 出席者の氏名を文章化
- 会議データ入り議事録の作成
1つずつ説明します。
実装方法
議事録作成時間の設定
トリガーは Office 365 Outlook コネクタ の 「予定しているイベントがまもなく開始されるとき」 を利用しています。詳細については以下の Microsoft Learn をご確認ください。
設定はスクリーンショットの通りです。
CalendarID はトリガーでどの予定表を使用するかという設定です。利用できる Outlook 予定表が表示されますので、選択してください。 Calendar が普段使いしている予定表である場合が多いです。
ルックアヘッドタイムは会議の開始何分前に実行するかという設定です。
本稿では 5分前 に設定しました。しかしフローの実行完了に10分以上かかることもあったので、確実に会議開始前に議事録ページを作成するなら 15分前 くらいにした方が無難かもしれません。
開始・終了時間を日本時間に変換
トリガーで取得できる会議の開始・終了日時は 世界協定時 なので、日本時間に変換しています。
開始日時は 2026年08月05日09時36分 という日時フォーマットで出力します。
会議が日をまたぐことは無いので、終了日時では年月日を除外し、10時36分 というような時間だけのフォーマットで出力します。
どちらも TimeUnit はカスタム値を手入力しています。
-
開始日時の TimeUnit
yyyy年MM月dd日 HH時mm分 -
終了日時の TimeUnit
HH時mm分
主催者(開催者)の氏名取得
トリガーでは主催者のデータは以下のような形で取得できます。
AAA@example.com
ユーザープリンシパルネーム(メールアドレス)だけが議事録に載っていても誰だか分からないので、Office 365 ユーザーコネクタの「ユーザープロフィールの取得(V2)」アクションを利用して、氏名を取得します。
ユーザープロフィールの取得(V2)アクションで取得できる氏名データは 姓 と 名 に分かれています。1つにまとめたいので 変数の初期化 アクションで文字列変数「Organizer」に入れています。
出席者のユーザープリンシパルネーム(メールアドレス)の取得
Outlook 予定表の出席者の種類は必須出席者と任意出席者の2種類あります。
トリガーではどちらも以下のようにユーザープリンシパルネーム(メールアドレス)がセミコロン(;)で区切られた状態のテキストで取得できます。
AAA@example.com;BBB@example.com;CCC@example.com
主催同様、このままだと誰だか分からないので、氏名に変換する必要があります。しかし、複数のメールアドレスが1つの文章のように繋がっているので、これをそのまま Office 365 ユーザーコネクタの「ユーザープロフィールの取得(V2)」アクションに入れ込んで、氏名を取得することはできません。
また、必須出席者と任意出席者、それぞれで処理するのは非効率なので、どうにか1つにまとめたいです。
その為、文字列を結合させる Cocat 関数で必須出席者と任意出席者と1つのテキストデータにし、そのテキストデータを Split 関数で配列にするという処理を行います。
この処理は作成アクションに入れています。
split(
concat(
triggerOutputs()?['body/requiredAttendees'],
triggerOutputs()?['body/optionalAttendees']
),
';'
)
図で示した通り、セミコロン区切りで配列を作っている為、最後が空白の配列になる場合があります。空白の配列は氏名取得時にエラーになるので除外したいです。また必須出席者に主催者が入っていますが、主催者の氏名は既に取得済なので、こちらも除外したいです。
この2つの要素を除外する為に アレイのフィルター処理 アクションで Filter Query に以下の式を入れています。
and(
not(empty(trim(item()))),
not(
equals(
trim(item()),
trim(triggerOutputs()?['body/organizer'])
)
)
)
出席者の氏名を文章化
いよいよ出席者1人1人の氏名を取得し、議事録に入れられる形に整形します。
取得した氏名は配列変数「MeetingAttendees」に格納します。変数の初期化アクションは繰り返し処理(それぞれに適用する)の中では使えないので予め変数を用意しておく必要があります。
氏名の取得は Office 365 ユーザーコネクタの「ユーザープロフィールの取得(V2)」アクションで行います。
取得した氏名は配列変数「MeetingAttendees」に追加します。
最後に結合アクションを利用して、HTMLで改行を表す <br> で配列変数「MeetingAttendees」の値を結合し、配列を改行ありのテキストに変換します。
会議データ入り議事録の作成
会議情報を入れ込んだ議事録のテンプレートを作ります。OneNote ページでは HTML と CSS での表現が可能ですので、HTML を利用して、議事録に必要な要素(例 決定事項の一覧や見出しなど)を作ります。
OneNote コネクタのセクションにページを作成アクションに直書きすることもできますが、作成アクションに入れておくことで議事録テンプレートのメンテナンスが容易になります。
どのコードが議事録テンプレートのどの部分を表すかについては下図をご確認ください。
各項目の動的なコンテンツや式は以下の通りです。
-
ページタイトル
-
ページ作成日時
concat( convertTimeZone( utcNow(), 'UTC', 'Tokyo Standard Time', 'yyyy-MM-ddTHH:mm:ss' ), '+09:00' ) -
開催概要のテーブル
最後に OneNote コネクタの「セクションにページを作成」アクションで OneNote に議事録テンプレートを追加する設定を行います。
ページコンテンツには前段で作った 作成 アクションを入れます。
そのあと、 コードビューの切り替え を押して、中に入っているコードをすべて削除してください。
これですべて完了です。保存してフローを実行してみましょう。
おわりに
今回は OneNote に会議の基本情報入りの議事録テンプレートを追加する方法を説明しました。配列や HTML の利用もあり、かなり難しいフローではありますが、このような小さな効率化の積み重ねで大きなゆとりができます。ぜひ挑戦してみてくださいね。それではごきげんよう(*'▽')


























