2025年7月

2025年7月15日 (火)

今年の2月ごろ、Power Apps の研修でいつものようにモバイルアプリにカメラ機能を搭載してそこからPower Automate 経由で SharePoint に画像を保存するという演習をやろうとするとうまくいかないというトラブルが。

結果的には、一時的な不具合だったようで現在は修正されていますが、それだけでなく画像の取り扱いの仕様が少し変わったところもあるようなので改めて画像についての取り扱いを整理しておきたいと思います。
※あくまでも2025年7月現在の話であり、今後はまた変更されることもあると思いますのでご注意ください

Power Apps での画像の取り扱い

Power Apps では画像データは Base64形式で保持します。ですから、Power Automate に渡して画像を SharePoint や OneDrive(Business)にファイルとして保存する場合、Base64であることを考慮した処理が必要となります。

参考: そもそも Base64 とは?

ここでBase64 (ベース ロクジュウヨン) とは何かというのを補足しておきましょう。

Base64 とはバイナリデータ(0か1かで表現されたデータ) を文字データに変換するエンコーディング方式の一つです。画像やファイルのようなバイナリデータをアルファベット(A-Z, a-z)、数字(0-9)、特殊文字(+,/) の64種類の文字で表現します。Base 64の “64” はこれに由来しています。便利な反面、テキスト化すると、元データより多少膨らむ(約1.37倍)点には注意が必要です。

この仕組みはもともとデータを文字形式に変換して電子メールなどのテキストベースのプロトコルで送信できるようにするために設計されました。

さて、Power Apps のカメラコントロールの Photo プロパティでは撮影した画像が直接 Base64でエンコードされます。ラベルなどに Photo プロパティを割り当てると値を簡単に確認できます。

20250712_155343

ちなみに、Base64 には次の2つの形式があります。

  • Data URI
  • プレーン Base64

Data URI は接頭辞に "data:image/png;base64;iVBORw0..." のように実データ以外にファイルの種類などを示す文字列が追加されます。先ほどのカメラコントロールの Photo プロパティは Data URI です。

Power Automate にData URIを渡すと自動的にこの接頭辞は除去されプレーンな Base64 が渡されるようになっています。←これは実は、以前とは仕様が異なっているところ

ちなみに、画像コントロールや画像の追加コントロールに含まれるUploadedImageコントロールのImage プロパティはユーザーが画面に画像を追加すると Data URI ではなく appres://... という形式の値が格納されます。

20250712_121621

コントロール プロパティ 値の例
画像 Image appres://resources/P3293125
画像の追加 (UploadedImage1) Image appres://blobmanager/85db1f7390a34828b5d2f4f5e2cef0c3/1
画像の追加 (AddMediaButton1) Media appres://blobmanager/85db1f7390a34828b5d2f4f5e2cef0c3/1
カメラ Photo / Stream data:image/png;base64,iVBORw0…(中略)…K5CYII=

appres:// で始まるのは Power Apps 内の内部リソース参照となっていて、「埋め込み画像」または「一時参照URI」などと呼ばれたりもします。各形式の意味と用途は次の通りです。

値の形式 意味 取得元コントロール例 特徴

appres://resources/xxxxx...

アプリに事前に埋め込まれた静的リソースへの参照 画像コントロールImage 誰が見ても同じ画像

appres://blobmanager/xxxxx....

実行時にアップロードまたは選択された一時Blob参照

UploadedImage.Image

AddMediaButton.Media

一時的な画像、ユーザーごとに異なる

と、ここまでは PC ブラウザー上の話で、Power Apps のモバイルアプリの場合は異なります。埋め込み画像以外のカメラコントロールや画像の追加コントロールの画像は格納先のパスが表示され、それぞれ "/SessionStorage/" 配下に格納されているのがわかります。Screenshot_20250714_214205_power_ap

Power Automate のクラウドフローに画像を渡す場合は、 Power Apps V2 コネクターのトリガーの引数として「ファイル」を追加しておきます。

20250712_155851

20250712_155908_2

20250712_160342

Power Apps 側ではカメラコントロールで撮影した画像をプレビューするために画像コントロールのImageプロパティに割り当てることがよくあります。そのため、この場合の画像コントロールの Image プロパティにはData URIの Base 64 が格納されます。

20250712_223641

20250712_223428

ところで、画像の拡張子はカメラコントロールのPhotoプロパティから取得する場合は PNG形式ですが、その他の画像形式などもあり得ます。汎用的に拡張子を判定するためには次のように式を構成することも可能です。これをフローの呼び出し時などに使うといいでしょう。

//PCブラウザーかモバイル化の判定
Set(_IsMobile,If(Host.OSType="Android" || Host.OSType="iOS",true,false));

//Base64の先頭からmime typeを抽出する
Set(_mimeType,
//PCブラウザーの場合
If(!_IsMobile,Mid(Camera1.Photo,6,Find(";",Camera1.Photo)-6),
//モバイルの場合
Right(Camera1.Photo,4)
));

//ファイルの拡張子を決める
Set(_fileExtension,
    If(_IsMobile,
        _mimeType,
        Switch(_mimeType,
            "image/jpeg", ".jpg",
            "image/png", ".png",
            "image/gif", ".gif",
            "image/bmp", ".bmp",
            // Default case (optional)
            Blank()
        )
    )
);

20250714_220753

さて、先述した通りPower Automateに送信するときにはData URI(data:image/xxx;base64,) のヘッダー部分を自動的に除去し、contentBytes にはプレーンBase64のみが格納されます。実際のフローの実行結果からもcontentBytesのフィールドで確認できます。

20250712_163309

そのため、SharePoint にファイルを保存する場合は、SharePoint コネクターの「ファイルの作成」アクションのファイルコンテンツ プロパティでは base64ToBinary 関数を使い、次のように式を指定します。以上で SharePoint に画像をファイルとして保存することができます。

base64ToBinary(triggerBody()?['file']?['contentBytes'])

20250712_224510

従来からの仕様変更の注意点

長らく(昨年の2024年のおそらく後半までは) Power Apps のカメラコントロールから Power Automate に渡した画像はData Uri 形式であったため、Power Automate 側で画像を受け取った後は dataUriToBinary() を使っていました。ですが、内部的な使用変更があったようでプレーンなBase64が渡されるようになっているため base64ToBinary() を使う必要があるので注意しましょう。

2025年7月14日 (月)

SharePoint のページおよびニュースに「推定読み取り時間(Estimated read time)」の表示機能が追加されています。一般提供は2025年6月下旬が予定されていたのですでに使えるようになっていると思います。

20250714_191945

この表示はバナーWebパーツのオプション設定で指定します。「推定読み取り時間を表示する」という項目をオンにするだけです。なお、このオプションは新規に作るときにページ作成だと既定でオフ、ニュース作成だと既定でオンになります。

20250714_192309

2025年7月13日 (日)

SharePoint の Webパーツに新たに “FAQ” Webパーツが投入されました。FAQ Webパーツは、Microsoft 365 Copilot を使って指定したファイルからFAQ を生成できるWebパーツです。

2025年7月現在パブリック プレビューです。

20250709_145047

[関連情報]

次のビデオでは Power Platform のライセンスガイド(2025年5月日本語版)を読み込みせてFAQを生成しています。日本語でも問題ありません。

利用方法

最初にWebパーツにFAQのもととなるソースファイルを追加します。複数のファイルを指定できます。

サポートされるファイルは最初はWord, PowerPoint,PDF, Loop, 会議(?) が予定されており、将来的にはもっと種類を増やす予定だとのこと。

20250709_145542

必要に応じて「目的」を次の中から選びます。

  • イベント
  • 製品
  • ポリシー
  • General

そのほか、その他の詳細も必要に応じて追記します。

20250713_221301

[開始]ボタンをクリックすると最初にFAQカテゴリのドラフトを生成します。

20250709_145606

生成されたカテゴリは、手動で順序の変更、編集や削除、追加などを行い微調整できます。次に「Draft questions」をクリックし、カテゴリごとに質問の案を生成します。

20250709_145636


各カテゴリごとに質問案が生成されることがわかります。この内容も順番の変更、編集、追加、削除などを手動で行い微調整できます。

20250709_145820

20250709_145843

最後に「Draft answers」ボタンをクリックし回答案を生成します。生成後は「Keep it」ボタンをクリックして確定させます。

20250709_150135

※確定後は回答の調整も可能です。単に SharePoint のテキスト Webパーツが配置されているだけであるため表の追加やハイパーリンクの追加、画像の追加なども可能です。Copilot による文言の調整もできます。

20250713_222126

回答の生成後はWebパーツのプロパティを確認してみると、既定では折りたたみアイコンがシェブロンになっていますが、これをプラス/マイナスで置き換えることも可能です。

20250709_151609

ライセンス

作る側は Microsoft 365 Copilot の有償ライセンスが必要ですが、閲覧するだけのユーザーには Copilot のライセンスは不要です。

ロールアウト

2025年6月下旬~7月末までにロールアウトが完了する予定です。

お陰様で、今期も Microsoft MVP Award を受賞することができました(このアワードは毎年贈られるもので、去年一年間の活動が評価されます)。

受賞したテクニカルエリアは昨年同様に SharePoint と Microsoft 365 です。

Ai Hirano | Most Valuable Professionals

今年で21年連続受賞となりました。

今期も引き続きコミュニティへ貢献するよう精進しますのでよろしくお願いいたします。

20250711_121055