Power Automate

[Power Automate]OneDriveにアップした画像ファイルを自動的にPhotoshopで加工するUIフロー

下記記事で、“UIフローで任意のアプリケーションやスクリプトを呼び出すハック”を紹介しましたが、具体例が無いと中々便利さが伝わらないと思います。

今回は具体的な例として、“OneDriveに画像ファイルがアップロードされたら、自動的にローカルのPhotoshopを使って画像加工するUIフロー”を紹介します。

処理内容

概要は下記の通りで、今回はフローを2つに分けました。

  1. トリガー(フロー1):OneDriveに画像ファイルをアップロードします。
  2. 1.のファイルをローカルフォルダに保存します。
  3. UIフロー:Photoshopを操作するスクリプトを実行し、2.の画像ファイルを加工します。
  4. トリガー(フロー2):加工が終わったファイルをローカルフォルダに保存します。
  5. 4.のファイルをOneDriveにアップロードします。
フロー1

最初のフローは、OneDriveへのファイルのアップロードをトリガーとするフローです。

前回の記事で紹介している、“UIフローで任意のスクリプトやコマンドを実行するスクリプト”(run.vbs)を経由して、下記のPhotoshopを操作して画像加工を行うスクリプトを呼び出します。

Option Explicit

Dim f
Const InputFolderPath = "C:\OneDrive\in"
Const OutputFolderPath = "C:\OneDrive\out"

With CreateObject("Scripting.FileSystemObject")
  If .GetFolder(InputFolderPath).Files.Count > 0 Then
    For Each f In .GetFolder(InputFolderPath).Files
      Select Case LCase(.GetExtensionName(f.Path))
        Case "png"
          ApplyPhotoshopFilter f.Path, .BuildPath(OutputFolderPath, f.Name)
          Exit For
      End Select
    Next
  End If
End With

Private Sub ApplyPhotoshopFilter(ByVal InputFilePath, ByVal OutputFilePath)
  Dim optPng
  Const psDoNotSaveChanges = 2
  Const psLowercase = 2
  
  Set optPng = CreateObject("Photoshop.PNGSaveOptions")
  optPng.Interlaced = True
  With CreateObject("Photoshop.Application")
    .Visible = True
    With .Open(InputFilePath)
      .ArtLayers.Item(1).ApplyOceanRipple 10, 20
      .SaveAs OutputFilePath, optPng, , psLowercase
      .Close psDoNotSaveChanges
    End With
    .Quit
  End With
End Sub

フロー2

2番目のフローは、スクリプトによって出力されたファイルをトリガーにして、OneDriveにファイルをアップロードするフローです。

ファイルパスからファイルコンテンツを取得する処理を挟むのがポイントですね。

今回は安定して処理を実行させるため、また、動作確認を簡単にするためにフローを分けましたが、内容を工夫すれば一つにまとめられるかもしれません。

実行結果

上記フローの実行結果が下記動画になります。
OneDriveをトリガーにしているので、折角なのでスマートフォン(エミュレーター)からファイルをアップして、動作確認を行っています。

イベントを起点とするフローは即時実行できないのが難点ですね。
処理が開始されるまで、しばらく待つ必要があります。

なぜスクリプトを使うのか?

上記フローでは、UIフローで「Photoshopを操作して画像加工するスクリプト」を実行しています。

何故わざわざスクリプトで処理を行っているかというと、それはずばり、“安定して処理できるから”です。

たしかにUIフローでは、レコーダーによってキーボードやマウスによる操作を記録・再生できますが、それらの動作は不安定で、複雑な処理を行えば行うほど失敗する確率は高まってしまいます。

VBAやVBSを触ったことがある人であれば、SendKeysでアプリケーションを操作するのと似た感じ”、そう思っていただければイメージしやすいかもしれません。

そこで活用するのがスクリプト(あるいは類するマクロやプログラム)です。
例えばPhotoshopやIllustratorでは、外部から自動処理を行うためのスクリプト機能がサポートされています。

形式変換、リサイズ、回転、色調補正等々、スクリプトによって様々な処理を自動化できる上、アクションの呼び出しも行えます。

簡単な処理であればキーボードやマウスの操作だけでも大きな問題はありませんが、複雑な処理を安定して行いたいときは、スクリプトは非常に有効な手段だと言えます。

@nori790822さんは下記記事で“現状のUIフローの限界”について言及されていますが、スクリプトはUIフローの限界を突破する手段です。

おわりに

今回紹介したフローは、Power Automateで行わずに自力で実装することもできます。
OneDriveのフォルダを見に行って、ファイルがあればダウンロードしてPhotoshopで処理、終わったらOneDriveにファイルをアップロード、こんな処理をタスクを組んで定期的に実行すれば良いだけです。

ただし面倒くさい!!特にOneDrive周りの処理。
認証やファイル・フォルダ操作等、APIでゴリゴリ書くのは実に面倒くさいです。
これがさらに、結果をSlackに通知、加工後のファイルをGmailで送信等の処理が追加されると、ウザさ倍増です。

この面倒なクラウド周りの処理を担ってくれるのがPower Automateです。
ちょちょいと必要事項を入力するだけですぐに完成、通知先が増えようがOneDriveがGoogle ドライブに変わろうが、何の問題もありません。

それにUIフロー+スクリプトを組み合わせることで、クラウド・ローカル間の連携は自由自在、最小限のコーディングで思うがままに処理できます。

これこそがUIフローの真価、強みだと個人的には思っているのですが、何故にUIフローが注目されないのかが疑問です。単にRPA製品の一つとしてしか捉えられていないのは実にもったいない!

いずれUIフローが注目されることを願いつつ、今回の記事は終了です。

Photoshop APIがリリースされるってよ

現在、Adobe I/OPhotoshop APIのβ版テスターを募集中らしいです。

なるほど。
下記デモページを見る限り、今回紹介したフロー内のスクリプトでやっているレベルであれば、APIで簡単に処理できそうです。

“じゃあ、UIフロー使わんでもエエやん!”

そう思ったりもしますが、それは早計。
ローカルPhotoshopを操作した方ができることは多いはず!
Illustrator連携もできるし!!(強がり)

まあ、とりあえず、Photoshop APIもそれはそれで気になるので、後で登録しておきます。

[Power Automate]UIフローで指定したパスのアプリケーションを実行しようと試行錯誤した件前のページ

2019年12月の人気記事次のページ

関連記事

  1. Excel

    Power Automate経由でTwitterに投稿するVBAマクロ

    Hiro( @mofumofu_dance )さんがVBAとPower…

  2. Office Scripts

    [Office Scripts]Power Automateからスクリプトを実行する

    下記Webサイトにある通り、Office Scriptsのスクリプトは…

  3. Power Automate

    Google Apps ScriptとPower Automateの連携事例紹介

    今回の記事は、ガイアックスさん主催のイベント「Google Apps …

  4. Office Scripts

    [Power Automate]Formsで回答があったときに質問を動的に変更するフロー

    アンケートや投票を行う際に非常に役立つMicrosoft Formsに…

  5. Power Automate

    AppSheetとPower Automateとの連携について

    AppSheet Automationでは、Webhookによって他サ…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP