Power Automate でファイル共有の期限付きワンタイム URL を発行し、自動削除する

2026年09月24日 木曜日


【この記事を書いた人】
古賀 勇

IIJ ネットワーク本部アプリケーションサービス2部所属。 メールサービスの運用業務とサーバ証明書関連サービスに従事し、日々世界の悪と戦う一児の父親。社内 Power Automate エバンジェリスト(自称)。M3AAWG member / openSUSE Users / WIDE Project メンバー。趣味は大喜利。はがき職人。

「Power Automate でファイル共有の期限付きワンタイム URL を発行し、自動削除する」のイメージ

Microsoft 365 を業務利用している環境で一時的にファイルを共有したいとき、だいたいの場合 Teams のチャットに貼り付けることが多いのではないでしょうか。この方法はとてもお手軽なのですが、次のような課題があります。

  • あとで削除しようと思って、だいたい忘れる。放置される。
  • グループチャットの場合、あとから追加したメンバーに共有できない。(改めて共有リンクを作成する必要がある)
  • クリーニングしようと思ったときには、もうそのファイルを特定するのが困難。
    (Teams の「共有済み」タブからファイルは探せるのに、そこから削除できないの、なんで??)

業務によっては機微なデータを保持していたり、個人情報に類するようなファイルを取り扱っていることもあります。
こうしたデータは適切に消去されていることが極めて重要です。

そんなわけで、Power Automate を使いましょう。
ガバナンスを効かせつつ、利便性を向上させることを目的として、こんな機能仕様にすることにします。

  • 特定フォルダにアップロードすると、自動的にワンタイム URL を発行して自分に通知される。
  • そのファイルは一週間すると自動的に削除され、ワンタイム URL は無効になる。
  • グループチャットに貼っても使える。(あとから参加したメンバーでも見れる)

動作サンプル

百聞は一見にしかず。言葉で説明するより動作を見ていただいたほうが分かりやすいと思いますので GIF アニメにしました。しかし、読者の皆さんに 7 日間待っていただくのは大変時間の無駄ですので、10 秒で消えるようにしたサンプルです。

前準備

まず「特定フォルダ」を OneDrive に作っておきます。

自分が分かればフォルダの名前は何でも OK ですが、この名前はパス名を含めて共有された側から見えますので、フォルダ名を上司の悪口や、見られて恥ずかしい名前にしてはいけません。私は最上位のフォルダにして、役割が分かるようにこうしました。

作成手順

何はともあれ Power Automate にログイン: https://make.powerautomate.com/

自動化は正義!

(1) 新しいフロー → 「自動化したクラウド フロー」

 

(2) 「ファイルが作成されたとき」を選ぶ

適当なフロー名を入力し、「ファイルが作成されたとき (OneDrive for Business)」を選択して、[作成] ボタンを押します。

⚠ 注意

このとき「ファイルが作成されたとき (OneDrive for Business)」を選択するのを忘れないようにしてください。無印の OneDrive は、無料でも使うことのできる個人向けのものです。

(3) 前準備で作成したフォルダ名を選択

 

(4) 次のステップに「共有リンクを作成する」を追加

※注意: ここでも手順 (2) と同様、個人向けの無印 OneDrive を選択しないように注意してください

ファイル 「動的なコンテンツ」から「ファイル識別子」を選択
リンクの種類 「View」を選択 ここで「Edit」を選択すると Word や Excel などは編集可能なリンクとして生成されます。
リンク スコープ 「Organization」を選択 M365 テナント内であればリンクを知っていれば誰でもアクセスできるようになります。

 

(5) 変数を追加

「日数」と「ファイル名」を変数で定義しておきます。

  • このアクションは必須ではありませんが、あとから編集・拡張したくなったときに便利かもしれないので定義しておきます。
  • 例えば、あとから削除までの有効期限を変更したり、ファイル名の先頭に日付を付与するなど加工しくなったときは、フローを直接編集するのではなく、この変数を編集すれば OK です。

 

(6) 「チャットやチャネルにカードを投稿する」を追加

通常のメッセージとして投稿してもよいのですが、ちょっと見かけを工夫してアダプティブカードにしてみます。
アダプティブカードのソースはこんな感じです。上から同じ手順で作成している場合は、そのまま貼り付けてください。(変数が変わっている場合は、書き換えが必要です)

{
    "type": "AdaptiveCard",
    "body": [
        {
            "type": "TextBlock",
            "size": "Medium",
            "weight": "Bolder",
            "text": "ワンタイム URL を発行しました"
        },
        {
            "type": "ColumnSet",
            "columns": [
                {
                    "type": "Column",
                    "items": [
                        {
                            "type": "Image",
                            "style": "Person",
                            "url": "https://www.example.jp/images/key.jpg",
                            "size": "Small"
                        }
                    ],
                    "width": "auto"
                },
                {
                    "type": "Column",
                    "items": [
                        {
                            "type": "TextBlock",
                            "weight": "Bolder",
                            "text": "@{variables('ファイル名')}",
                            "wrap": true
                        },
                        {
                            "type": "TextBlock",
                            "spacing": "None",
                            "text": "@{addDays(addHours(utcNow(), 9), variables('日数'), 'yyyy/MM/dd HH:mm')} まで (期限: @{variables('日数')}日間)",
                            "isSubtle": true,
                            "wrap": true
                        }
                    ],
                    "width": "stretch"
                }
            ]
        },
        {
            "type": "TextBlock",
            "text": "[@{outputs('共有リンクを作成する_')?['body/WebUrl']}](@{outputs('共有リンクを作成する_')?['body/WebUrl']})",
            "wrap": true
        }
    ],
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.2",
}
お知らせ

そのまま貼り付けてくださいと書いたものの、19 行目の “url”: に書いてあるアイコンはどこかに置いた画像を参照する必要があります。社内イントラや、画像を置いたサーバの URL に適宜書き換えてください。書き換えなかったとしても画像が出ないだけで動作はします。

(7) 「待ち時間」を追加

つまり sleep なのですが、翻訳が揺れていて、このアクションを探すのがとても分かりづらいところにあります。
「組み込み」→「スケジュール」→「遅延」を選択すると、「待ち時間」が現れます。(謎すぎる)

「動的なコンテンツ」から「日数」を入力、単位は「日」にすれば、これで 7 日になります。
上記で作った変数を編集すれば期限を変更できますし、「日」を「時間」に変更して、もっと短くすることもできます。

なお、Power Automate の注意点として、「単一のフロー実行の最大持続時間は 30 日間」という制限があります。
https://learn.microsoft.com/ja-jp/power-automate/limits-and-config

したがって、ここに「50日」とか、「2か月」という値を設定すると、一番大事な「ファイルの削除」が行われないので注意が必要です。

 

(8) 忘れずにファイルを削除

「動的なコンテンツ」から「ファイル識別子」を入力して終わりです。
フロー全体を見渡すとこんな感じになっています。仕様を見て難しそうに見えたかもしれませんが、じつはシンプルでとってもカンタンです。

ちなみに削除されたファイルは、実際には OneDrive の「ごみ箱」に移動されています。
あとから「やっぱり欲しかった!」と気づいたときでも、削除された日から最大 90 日間 (個人用の場合は 30 日間) は復元できます。

 

古賀 勇

2026年09月24日 木曜日

IIJ ネットワーク本部アプリケーションサービス2部所属。 メールサービスの運用業務とサーバ証明書関連サービスに従事し、日々世界の悪と戦う一児の父親。社内 Power Automate エバンジェリスト(自称)。M3AAWG member / openSUSE Users / WIDE Project メンバー。趣味は大喜利。はがき職人。



・掲載されている情報は公開日時点の情報です
・記事に書かれている意見は、筆者個人の意見が含まれる場合があります
・記事の正確性には細心の注意をはらっておりますが、正確性・有用性につき保証するものではありません

Related
関連記事