Power Appsでカメラコントロールを使って写真撮影・添付ファイルとして保存する方法

Power Appsのカメラコントロールで写真を撮ってSharePointに保存する

Power Appsのカメラコントロールを使えば、スマホやタブレットのカメラで撮影した写真をそのままSharePointに添付ファイルとして保存できます。現場で写真を撮ってすぐ記録に残せるので、点検・巡回・施設管理などのアプリで重宝します。

私が最初に作ったカメラ連携アプリは配送現場の荷物破損記録用でした。スマホで撮ってボタン1つで記録完了、という流れにしたところ「これは便利」と現場から喜ばれました。実装自体はそこまで複雑ではないので、この記事で仕組みをまとめます。

カメラコントロールの基本

カメラコントロールをキャンバスに追加すると、実行時にデバイスのカメラ映像がリアルタイムで表示されます。Photoプロパティに現在のカメラ映像(またはスナップショット)が入るので、これを使って画像を取り扱います。

Streamと静止画の違い

カメラコントロールには2つの重要なプロパティがあります。

プロパティ内容用途
Streamカメラのリアルタイム映像プレビュー表示
Photoシャッターを押した瞬間の静止画保存・送信に使う

StreamはImageコントロールのImageプロパティに入れるとリアルタイムプレビューとして機能します。撮影後の確認画面を作るには、撮影後にCamera1.PhotoをImageコントロールに表示する構成にします。

撮影ボタンとプレビューの実装

シャッターはCamera1のOnSelectプロパティに処理を書くことで実装します。

// 撮影ボタンのOnSelect
Set(varPhoto, Camera1.Photo)

varPhotoに撮影した画像を保存して、ImageコントロールのImageプロパティにvarPhotoをセットすれば、撮影後の確認プレビューが表示されます。

撮影した写真をSharePointに保存する

撮影した写真をSharePointリストの添付ファイルとして保存するには、Power Automateを経由する方法が確実です。Power Apps単体ではSharePointの添付ファイルAPIに直接アクセスするのが難しいためです。

Automateを使う場合の流れ

  1. Power AutomateでPower Appsトリガーのフローを作成
  2. AppsからBase64文字列に変換した画像データをフローに渡す
  3. フロー内でSharePointの「添付ファイルの追加」アクションで保存する

Apps側で画像をBase64に変換する数式はこうなります。

// 保存ボタンのOnSelect
FlowName.Run(
    Text(Today(), "yyyy-mm-dd"),
    Mid(varPhoto, Find(",", varPhoto) + 1)
)

varPhotoはデータURIスキーム(data:image/png;base64,……)の形式になっているので、カンマ以降のBase64部分だけを切り出してフローに渡します。Mid関数とFind関数の組み合わせでこれが実現できます。

ファイル名の設定

SharePointの添付ファイルとして保存するとき、ファイル名はフロー側で設定します。撮影日時をファイル名に含めると後から管理しやすくなります。フロー内で「添付ファイルの追加」アクションに次のように入力します。

  • ファイル名:@{triggerBody()?['text']}_photo.png
  • ファイルコンテンツ:base64ToBinary(triggerBody()?['base64'])

SharePointのAddAttachmentで直接保存する方法

Automateを使わず、Power AppsのPatch関数とAddAttachment関数を組み合わせてSharePointリストの添付ファイルを直接操作する方法もあります。ただしAddAttachmentはレコードが既に存在していないと動かないため、先にPatchで新規レコードを作成してからAddAttachmentで添付する、という手順になります。

// まずレコードを作成
Patch(記録リスト, Defaults(記録リスト), {タイトル: TextInput1.Text});

// 作成したレコードのIDを取得してから添付
AddAttachment(
    記録リスト,
    Last(Sort(記録リスト, ID, Descending)).ID,
    "photo.png",
    varPhoto
)

このやり方は処理がシンプルですが、最後のレコードIDを取る部分がやや不安定です。Automateを経由するほうが確実なケースが多いので、個人的にはAutomate経由を選びがちです。

実装時の注意点

カメラ権限の確認

スマホやタブレットでカメラを使うには、アプリにカメラへのアクセス権限を付与する必要があります。初回実行時にOSからカメラ使用の許可を求めるダイアログが表示されます。企業のモバイル管理(MDM)環境では事前に権限設定が必要なこともあります。

画像のサイズに注意

スマホのカメラで撮影すると数MBの画像になることがあります。SharePointの添付ファイルの上限は既定で250MBですが、大きすぎるとフローのタイムアウトやAppsの動作遅延の原因になります。カメラコントロールのResolutionプロパティを下げるか、Medium程度に設定しておくと扱いやすくなります。

SharePointへの書き込み全般については、こちらの記事も参考にしてください。

Power AppsでSharePointリストのデータを読み書きする——基本のCRUDパターン

まとめ

Power Appsのカメラコントロールは、Camera1.PhotoにBase64の画像データが入ります。SharePointへの保存はAutomate経由が確実で、Base64データをフローに渡してSharePointの「添付ファイルの追加」アクションで保存する流れが定番です。

写真撮影→即記録という流れは、点検や現場業務のアプリに特に効果的です。紙の記録票をなくしてスマホ1台で完結できるようになると、現場からの反響が大きいですよ。ぜひ試してみてください。

Xでフォローしよう