【物語】

その日、僕は部長である太田先輩に向かって叫んでいた。

「忙しい時に限って、どうして急ぎの仕事というのは重なるのでしょうか?」
「こういうときは、口ではなく手を動かすの!」

律儀に僕の問いに答えながら、太田先輩も高速でパソコンのキーをタイプしていた。今日は部署の誰もが、必死の形相で働いていた。

そして、トラブルというのは、そんな時に起きるものだ。先ほど、僕がお客さんから預かった書類をスキャンしたのだが、お客さんが帰ってから改めてスキャンした書類を確認してみると・・・。

スキャナーに書類をセットする向きを間違えて、90度回転したまま取り込んでしまったのだ。そのことに気付いた時には、もうお客さんは帰ってしまった後だった。しかも取り込んだのは、1枚の画像ではなく、連続で取り込んだ100枚もの画像だ。

  • 100枚の書類を間違えて全部横向きに取り込んでしまった

    100枚の書類を間違えて全部横向きに取り込んでしまった

僕は真っ青の顔で太田先輩に駆け寄った。

「すみません、この後、役所に提出予定の書類なんですが、全部横向いているんです!どうしましょう?」 太田先輩が、僕を睨んで言った。 「そんな時こそ、Power Automateの出番よ!」 僕は青い顔のまま、頼りない返事をした。 「えぇぇ!Power Automateって画像の回転もできるんですか?うぅぅ、試してみます。」

連載の前回でも紹介した通り、最近、我が部署では、プログラムを組むことなく自動処理が可能なRPAツール「デスクトップ向けPower Automate」をフル活用している。僕はすぐにアプリを起動してフローを組み始めた。

しかし、すぐにつまづいてしまった。Power Automateの画面左側にあるアクション一覧を見ても、「画像の回転」といううアクションは存在しない。やはり、Power Automateでは画像を回転させることはできないのではないか・・・。

トラブルに遭った時こそ冷静さが必要だ。一度、頭をクールダウンするべくコーヒーを飲む。その時、ササッと太田先輩が来てくれてヒントをくれた。

「Power Automateでアクションが見つからない時は、どうすると良いのだったった?」

そうだ、Power AutomateではPowerShellスクリプトで機能不足を補助してもらうことができるんだった。すぐに席に戻ってネット検索すると、画像を回転させる簡単なPowerShellスクリプトを見つけることができた。PowerShellとPower Automateの連携技を使えば可能性が広がる。

そして、数分でPower AutomateにPowerShellスクリプトを組み合わせたフローを作成することができた。そして、フローを実行してみる。

実行ボタンを押すと、もの凄い勢いで、フローが動き出した。そして、暫く待っていると、問題なく、横向きの画像を縦向きに戻すことができたのだった。

  • Power Automateが高速に画像を回転処理を実行しているところ

    Power Automateが高速に画像を回転処理を実行しているところ

  • 完成! - 間違って取り込んだ画像を縦向きに戻すことができた

    完成! - 間違って取り込んだ画像を縦向きに戻すことができた

このようにして、無事に仕事を片付けることができた。慌ただしい一日が終わり、帰宅しようとする僕を、太田先輩が追いかけて来てくれた。

「田中君、お疲れ様。誰の助けも借りず、よく頑張ったね。」
「そんなことないです。太田先輩がヒントくれたからこそ、トラブルを乗り切れたんですよ。」

そして、わいわいと雑談をした後、太田先輩は笑顔でしみじみと言った。

「私は君の成長が嬉しいよ。」

人から褒められるというのは、何と心地よいものなのだろう。僕は有頂天になって帰宅した。そして、先輩の一言をつまみに、ビールを飲むのだった。改めて、慌てているときこそ、冷静になって考えることが大切だと学んだ一日だった。

しかし、この翌日、僕の身に人生に最大の危機が訪れるのだが、有頂天になって酔っ払っている僕はまだ知るよしもなかった。(続く)

プログラム - Power Automateのフロー

ここで、物語の中で登場人物達が作成したプログラムを実際に紹介します。

今回、物語で田中君が利用したのは、Windows10以降のOSで、無料で利用できるツール「デスクトップ向けPower Automate(Power Automate for Desktop)」です。こちらから誰でもインストールして利用できます。

なお、今回作成したフローを素早く使うには、こちらにあるプログラムをコピーしましょう。このプログラムはPower Automateを自動で構築するためのコードなので、内容は分からなくても大丈夫です。

デスクトップ向けPower Automateを起動したら、新しいフローを作成します。それから、画面中央のキャンバスをクリックした後、右クリックして「貼り付け」ます。すると、自動的にフローを貼り付けることができます。

しかし、コピー&ペーストでは、Power Automatの使い方が身につかないと思いますので、一つずつ手順を確認していきましょう。

【手順1】ダイアログを表示するアクションを貼り付けよう

まず、画面左にあるアクション一覧から「メッセージボックス > フォルダーの選択ダイアログを表示」アクションを貼り付けましょう。

  • アクションを貼り付けよう

    アクションを貼り付けよう

すると設定ダイアログが表示されます。ここでは、そのまま「保存」ボタンを押しましょう。

  • そのまま保存ボタンを押そう

    そのまま保存ボタンを押そう

【手順2】ユーザーが選んだフォルダにあるファイルを取得しよう

続けて、手順1と同様に、アクション一覧から「フォルダー > フォルダー内のファイルを取得」アクションを探して貼り付けましょう。設定ダイアログが表示されたら、次のように、フォルダーの部分に「%SelectedFolder%」と入力し、ファイルフィルターの部分は「*.jpg」と入力します。

  • JPEGファイルを列挙するように設定しよう

    JPEGファイルを列挙するように設定しよう

なお、この設定画面の「フォルダー」の入力ボックスで、画面右側にある[x]を押すと、一覧から変数を選べるので活用しましょう。

【手順3】繰り返しファイルを処理しよう

続いて、「ループ > For each」アクションを貼り付けましょう。設定ダイアログが出たら、次のように「%Files%」を入力して「保存」ボタンを押しましょう。

  • 変数%Files%の内容を繰り返すよう設定

【手順4】PowerShellスクリプトを入力しよう

次に、アクション一覧から「スクリプト > PowerShellスクリプトの実行」アクションを挿入しましょう。なお、このアクションは、「For each」から「End」までの間に配置しましょう。

  • 変数%Files%の内容を繰り返すよう設定

    PowerShellスクリプトの実行を貼り付け

そして、PowerShellスクリプトには、以下のようなプログラムを入力します。これは、画像を右方向に270度(90度×3回)回転させるスクリプトです。

[void][Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$im = New-Object System.Drawing.Bitmap("%CurrentItem%")
$im.RotateFlip("Rotate270FlipNone") 
$im.Save("%CurrentItem%", [System.Drawing.Imaging.ImageFormat]::Jpeg)
$im.Dispose()

ここで作成したフローの全体は次のようになります。

フローを実行すると、フォルダーの選択ダイアログが出ます。ここで、回転したい画像が入ったフォルダーを選びます。すると、画像を270度右回転させます。

ちなみに、処理の簡略化のため、画像を回転させて上書きする仕様になっています。実際に実行する前に、念のため画像のバックアップをとってからお試しください。

今回の例のように、Power Automateだけでは実現できない処理も当然あります。しかし、Power Automateは拡張性に優れています。手軽に、外部アプリを操作したり、PowerShellスクリプトを組み合わせたりと、連携技が可能になるように設計されています。今回は、PowerShellスクリプトを使いましたが、画像編集を自動化する手法として、画像編集アプリを自動処理させることもできます。いろいろ試してみると良いでしょう。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。