Power Automateで自動ファイルバックアップ(OneDrive)
Power Automateで自動ファイルバックアップ(OneDrive)
突然ですが、皆さんはファイルのバックアップをどうやって取っていますか?
今は色々な方法があり、クラウドにあずけていたり、エンジニアならGitHubなどにソースコードをアップしていると思います。しかし、仕事などでそういったサービスの利用ができない場合もあると思います。
また、ただのバックアップではなく、更新前の状態のファイルも管理したいなんてときは大いにあると思います。私がまさにそれで、更新前の情報を保存しておく必要があり、毎回更新する際にバックアップファイルをコピーする作業を行っています。
これがかなりの手間で、バックアップ忘れて更新してしまったりした際に、コピーして片方を元の状態まで戻したりと色々な追加作業が入ります。。
なのでこの手間を事前に解決するために、Power AutomateでOneDrive上に自動バックアップを作成するフローを作成していきたいと思います。
なお、このフローはYouTubeにもあがっているので参考にしてください。
フロー作成
さっそくフローの作成を行っていきます。
ただファイルのバックアップを取るだけならシンプルなフローなのですが、今回はバックアップファイルの名前に日付を加えるので、やや複雑になります。
下記の順番でフローを作成していきます。
- 空白から作成
- スケジュール設定
- 現在の日付を取得
- 拡張子用の変数用意
- その他変数の用意
- バックアップ対象のファイルリストを取得
- 取得したリストで繰り返し処理
- もとのファイル名を格納
- 条件分岐
- パスからファイルコンテンツを取得
- 拡張子の取得
- バックアップファイル名を確定
- ファイルの作成
左のリストから「作成」、「スケジュール済みクラウドフロー」を選択します。
下記画像のように、各項目を入力します。
「スケジュール済みのクラウドフロー」でデフォルトで作成されているフローの設定値を修正します。
下記のように値を入力します。基本的には先程の工程での設定値をが反映されています。
※詳細オプションを表示するを選択しています。
バックアップファイル名に使用するために現在の日付を取得します。フローとしては2フローで構成します。
どちらも「日時」で検索するすれば候補に出てきますので、下記のように設定します。
バックアップ用のファイル名を変更する際に拡張子も合わせて必要になりますので、拡張子を取得するための変数を用意してきます。
詳細は後述するためここでは特に内容は記載しません。
・ExtensionStart:もとのファイル名から拡張子の開始位置を格納する(整数)
・ExtensionLength:拡張子部分の文字列の長さを格納する(整数)
・Extension:拡張子の文字列を格納する(文字列)
先程のバックアップファイル用の変数以外で使用する変数を用意していきます。
今回用意する変数は2つの文字列のです。
・FileName:バックアップファイルにつけるファイル名を格納する(文字列)
・DefaultName:バックアップ対象のファイル名を格納する(文字列)
実際にバックアップを取る対象のファイルのリストを取得します。
ここでは、対象のファイルがあるフォルダパスを入力することでファイルの一覧を取得することができます。今回はサンプルとして「/PowerAutomate/copyFile」を指定します。
先程取得したリストは複数の可能性があるため、Apply to eachで処理をします。
設定する値は「value」ですが、「フォルダ内のファイルのリスト」の動的なコンテンツを変数などに格納すると自動的に設定されます。なので後述する変数格納を先に実施して自動的にこの繰り返し処理を作成する事もできます。
事前に用意している変数DefaultNameに「拡張子なしのファイル名」を格納します。
このフローはバックアップのフォルダを別に作成(/PowerAutomate/copyFileの配下)していない場合は、この条件分岐は不要です。
今回私は、PowerAutomate/copyFile/backupにバックアップファイルを配置するので、バックアップ対象からbackupフォルダを除外する必要があります。
なので下記のうように条件を設定し、以降のステップは「はいの場合」に作成していきます。
ここのステップではパスを指定してファイルのコンテンツを取得します。
方法は簡単で、「パスによるファイルコンテンツの取得」を選択肢、先程の「フォルダ内のファイルのリスト」で取得した「パス」を指定するだけです。
使用するステップはすべて「変数の設定」です。
拡張子を取り出すためにまずはlastIndexOf関数を利用し、拡張子の文字列開始位置の取得を行います。
・ExtensionStart:lastIndexOf(items('Apply_tp_each')?['name'],'.')
次に拡張子文字列の長さを取得します。使用する関数はsub関数とlength関数です。
・ExtensionLength:sub(length(items('Apply_tp_each')?['name']),variables('ExtensionStart'))
最後にsubstring関数と上記2つの変数を使用し、拡張子文字列を取得します。
・Extension:substring(items('Apply_tp_each')?['name'],variables('ExtensionStart'),variables('ExtensionLength'))
上記の3ステップでファイル名から拡張子部分の取得を行うことができます。
先程取得したファイル名や拡張子、日付を用いてバックアップファイルの名称を変数に格納します。
・FileName:「拡張子なしの名前」_「formatDateTime(body('タイム_ゾーンの変換'),'yyyyMMdd')」「Extension」
いよいよ最後のステップでバックアップファイルを保存します。
「OneDrive」の「ファイルの作成」を選択し、下記の項目を入力します。
・フォルダーのパス:PowerAutomate/copyFile/backup
・ファイル名:FileName
・ファイルコンテンツ:パスによるファイルコンテンツの取得
少し難しいのは「拡張子の取得」の部分で、ここの実装に苦戦しました。
ただ、文字列の部分取得などは他のフローでも活用できるスキルだと思うので、覚えておくに越したことはないです!!
後日、この文字列部分取得だけピックアップして記事にしようかと思います。
テストしてみる
今回のフローはスケジュールでの実行なので、その時を待つのが一番ですが、フローが正しく機能しているかを確認するためにテストボタンを押して確認してみます。
私は既に作成してから数日おいているので、バックアップファイルがいくつか作成されています。それぞれファイル名に日付を付けてバックアップ作成できていますね!!成功です。
最後に
ということで今回はOneDrive上でファイルのバックアップを自動で取るフローを作成しました。
正直リネームの部分をこだわらなければそこまで複雑なフローではないです。しかし、ファイル名に日付をつけてバックアップを取りたかったので今回はチャレンジしてみました。
今後ほかのフローにも活用できるスキルが身についたと思うので、結果的にはチャレンジして正解だったと思います。
このような感じでPower Automateでは手動だと手間になるものを自動化して便利にする事ができます。ぜひ皆さんもフローを作成して自動化をしてみてください。
今回はこの辺で、ではまた!