Gemini CLI連携:AI自動化の探求(Power Fxフロー対象✅)
Power Automate for Desktopは日々のルーティンワークを自動化できる強力なRPAツールだが、時にはそのロジックベースのRPAの枠を超えた高度な知能をフローに組み込みたくなることがあるだろう。特に近年目覚ましい進化を遂げているGenerative AIの能力をローコードのPower Automate for Desktopと連携させることは自動化の可能性を大きく広げてくれる。
今回はその新たな可能性を探るべくGoogleが提供する「Gemini CLI」をPower Automate for Desktopに導入する方法について最近の試行錯誤を交えながら紹介したい。
Gemini CLIの概要と事前準備
Googleが開発したGeminiは、テキスト生成、要約、翻訳、コード生成など幅広いタスクに対応できる最先端のGenerative AIモデルである。そのコマンドラインインターフェース(CLI)版であるGemini CLIはAIモデルにコマンドラインから直接アクセスして手軽にアプリケーションにAI機能を組み込める。
何より驚きなのはこれが無料であるということだ。現時点では、日常的に利用する上で何ら問題がない毎分60回、1日1,000 回のリクエストを無料で提供している。Gemini CLIを無料でお試しして、従来のロジックベースでは実質不可能であったインテリジェントな自動化フローを構築していこう。
その事前準備としてPCにGemini CLIとNode.jsをインストールする必要がある。インストールの方法についてはその他ブログ等に多数情報があるためここでは割愛する。
PowerShellスクリプトでGemini CLIにアクセス
改めて、Gemini CLIの機能をフローに取り込むことは可能だ。アクション「PowerShell スクリプトの実行」を特に推奨する。
フロー上は意外とあっけなく、Gemini CLIの利用という意味では簡潔なたった一行のアクションだけで実現できる。具体的には「gemini -p」コマンドを用いたプロンプト入力となる。このコマンドによりプロンプトをGeminiモデルに送信して生成された応答を取得できる。
ただ、適切に処理するために考慮しないといけないこともあり、例えば「PowerShell スクリプトの実行」の出力結果を変数に入力するとどうしても文字化けしてしまう。現在まだ試行錯誤中であるが、暫定的には以下のようにクリップボードを経由すると文字化けせずにGemini CLIの応答を取得することができた。
文字化け解消暫定フロー

PowerShellスクリプト例
「PowerShell スクリプトの実行」アクション内で(Power Fxフローの場合)以下のような記述をしてクリップボードに結果を保存できる。「prompt」はPower Automate for Desktopの変数であり、ここに予め自然言語のプロンプト文章を入力しておく。変数の設定で prompt ="明日の天気は?" といった形だ。
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 gemini -p "${prompt}" --model gemini-2.5-flash | Set-Clipboard

正規表現で改行を検索する(Power Fxフロー対象✅)
正規表現の「.」(ドット)は任意の一文字を表す、と説明される場合があるが実は改行にはマッチしない。
例えば改行が含まれるテキストに対して、すべてのテキストを取得するつもりで正規表現「.+」を使いマッチを試みる。しかし「.」(ドット)は改行に該当しないため、1回以上の繰り返しである「+」の効力が一番最初の改行の箇所で失われる。結果、改行を含めたすべてのテキストは取得できない。
改行含めたすべての文字は、とにかく全部入っていれば良いと発想すれば、空白文字「\s」または非空白文字「\S」、と考えることができ、下記の正規表現にてマッチできる。
[\s\S]
あるいは同じ発想で、単語構成文字「\w」または非単語構成文字「\W」、と考えて下記でもよい。
[\w\W]
フロー例1 - 改行のあるテキストを「.+」でマッチ:

各ステップの中身:


実行結果:
「最初の出現箇所のみ」を有効にせずにすべて取得してみると、3回マッチして、マッチした3つの値がリストに格納されることがわかる。テキストを改行で区切って各行の内容をリストにする、という目的であればこの方法も使える。

フロー例2 - 改行のあるテキストを「[\w\W]+」でマッチ:


実行結果:

(フローを一時停止中に限り)上記0行目をクリックすると以下のように内訳が確認できる。3回ではなく1回だけマッチし、改行含めたテキスト全体を取得していることがわかる。

また、改行そのものを検索するには下記の正規表現となる。(注:OS等の環境によって改行のコードは異なる。ここではWindows環境のPower Automate Desktopで利用することを想定して記載する。)
改行は「\r」とその直後の「\n」のセットであるので「\r\n」にてマッチできる。
\r\n
改行以外の文字は上記の否定となるので、文字クラス内の否定を使って「[^\r\n]」となる。
[^\r\n]
フロー例3 - 改行を「, 」(カンマとスペース)に置換する:
改行のあるテキストを1行のテキストに変換するなどができる。


実行結果:

リスト変数から値を取り出すにはIndex関数(Power Fxフロー対象✅)
リスト変数からひとつの値を取り出したいとき、従来のRobinのみフローでは例えば「List[2]」 のように角カッコとその中の数字で位置を指定して取得できたのだが、Power Fxフローでは利用できない。Power FxフローではIndex関数を使う。
例えば「テキストの解析」で複数マッチしたPositionsのうちのひとつの値を取得する:

(「テキストの解析」の中身)

上記の3アクションを実行するとリスト変数Positionsには以下の値が格納される

以下のようにIndex関数を使って2番目の値を取得
=Index(Positions,2)

