【物語】
その日、僕は部長である太田先輩に向かって叫んでいた。
「忙しい時に限って、どうして急ぎの仕事というのは重なるのでしょうか?」
「こういうときは、口ではなく手を動かすの!」
律儀に僕の問いに答えながら、太田先輩も高速でパソコンのキーをタイプしていた。今日は部署の誰もが、必死の形相で働いていた。
そして、トラブルというのは、そんな時に起きるものだ。先ほど、僕がお客さんから預かった書類をスキャンしたのだが、お客さんが帰ってから改めてスキャンした書類を確認してみると・・・。
スキャナーに書類をセットする向きを間違えて、90度回転したまま取り込んでしまったのだ。そのことに気付いた時には、もうお客さんは帰ってしまった後だった。しかも取り込んだのは、1枚の画像ではなく、連続で取り込んだ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のフロー
ここで、物語の中で登場人物達が作成したプログラムを実際に紹介します。
今回、物語で田中君が利用したのは、Windows10以降のOSで、無料で利用できるツール「デスクトップ向けPower Automate(Power Automate for Desktop)」です。こちらから誰でもインストールして利用できます。
なお、今回作成したフローを素早く使うには、こちらにあるプログラムをコピーしましょう。このプログラムはPower Automateを自動で構築するためのコードなので、内容は分からなくても大丈夫です。
デスクトップ向けPower Automateを起動したら、新しいフローを作成します。それから、画面中央のキャンバスをクリックした後、右クリックして「貼り付け」ます。すると、自動的にフローを貼り付けることができます。
しかし、コピー&ペーストでは、Power Automatの使い方が身につかないと思いますので、一つずつ手順を確認していきましょう。
【手順1】ダイアログを表示するアクションを貼り付けよう
まず、画面左にあるアクション一覧から「メッセージボックス > フォルダーの選択ダイアログを表示」アクションを貼り付けましょう。
すると設定ダイアログが表示されます。ここでは、そのまま「保存」ボタンを押しましょう。
【手順2】ユーザーが選んだフォルダにあるファイルを取得しよう
続けて、手順1と同様に、アクション一覧から「フォルダー > フォルダー内のファイルを取得」アクションを探して貼り付けましょう。設定ダイアログが表示されたら、次のように、フォルダーの部分に「%SelectedFolder%」と入力し、ファイルフィルターの部分は「*.jpg」と入力します。
なお、この設定画面の「フォルダー」の入力ボックスで、画面右側にある[x]を押すと、一覧から変数を選べるので活用しましょう。
【手順3】繰り返しファイルを処理しよう
続いて、「ループ > For each」アクションを貼り付けましょう。設定ダイアログが出たら、次のように「%Files%」を入力して「保存」ボタンを押しましょう。
【手順4】PowerShellスクリプトを入力しよう
次に、アクション一覧から「スクリプト > PowerShellスクリプトの実行」アクションを挿入しましょう。なお、このアクションは、「For each」から「End」までの間に配置しましょう。
そして、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(マイナビ出版)」など。