Windowsアプリケーションを操作するCLIツール(flaui-cli)を作ってみた

playwright-cliのWindowsアプリケーション版

playwright-cliは、Playwrightを使ってブラウザをコマンドラインから操作できるツールです。合わせてSkillsも提供されていてAIエージェントからブラウザを操作するのに使えます。すごいね。

同じようなことがWindowsアプリケーションでもできるかな~と思い作ってみたというのが以下です。

zzzkan/flaui-cli: CLI for Windows apps automation using FlaUI

何ができる?

たとえばなんですが、

/flaui-cli メモ帳を開いて"Hello, World!"と書いてからファイル名を"hello-world.txt"としてデスクトップに保存してください。

みたいにAIエージェントに指示すると、メモ帳を開いてテキストを書いて保存してくれます。意外といけるもんですね。実際には以下のようなコマンドを実行することでアプリケーションを操作しています。

flaui-cli launch notepad.exe # メモ帳を起動
flaui-cli fill e3 "Hello, world" # メモ帳のテキストエリアに"Hello, world"と入力
flaui-cli click e15 # メモ帳の「ファイル」メニューをクリック
...

flaui-cliは.NETツールとして作ったので以下だけでインストールできます。

dotnet tool install --global flaui-cli

また、playwright-cliと同様にSkillsも提供しています。

gh skill install zzzkan/flaui-cli flaui-cli

正直いまのところは「メモ帳」とか「電卓」くらいしか動き見てないんですが簡単なアプリならそこそこ動くかも?もしよければ試してみてください。詳しい使い方はREADMEを参照ください。

中身の話

FlaUI

名前の通り、WinsowsアプリケーションのUI操作には(つまりplaywright-cliにおけるPlaywrightの部分には)FlaUIを使っています。FlaUIは、UI Automationをラップして使いやすくした.NETライブラリです。Windowsアプリケーションの自動化について調べているとMicrosoft公式のWinAppDriverなんかも出てきますが、これはもうメンテされてないようなのでおそらく避け方が無難でしょう。

スナップショット

アプリの状態をAIエージェントに伝える手段は、Playwright同様にアクセシビリティツリーのスナップショットを取る方法をとっています。たとえば、「電卓」アプリにアタッチすると自動的にスナップショットが取られてローカルに保存されます。

❯ flaui-cli attach "電卓"
### Started Daemon Process
- PID: 19376
- Start Time: 2026/04/22 1:33:45
### Attached Window
- Title: 電卓
- Process Name: ApplicationFrameHost
### Snapshot
[Snapshot](.flaui-cli/snapshot-2026-04-21T16-33-46-937Z.yml)

スナップショットの中身は以下のような感じ。

- window "電卓" [ref=e1]:
    - window "電卓" [ref=e2] [readonly]:
        - menubar "システム" [ref=e3]:
            - menuitem "システム" [ref=e4] [collapsed]
        - button "電卓 の最小化" [ref=e5]
        - button "電卓 を最大化する" [ref=e6]
        - button "電卓 を閉じる" [ref=e7]
...

これをAIエージェントが読み取ることで操作対象を見つけて操作します。たとえば、「電卓を最大化」という操作をしたい場合は"e6"が該当のIDなので、

flaui-cli click e6

といったコマンドで操作できます。ようするに、Playwrightと(たぶんだいたい)同じような感じです。

作ってみての所感みたいなもの

たぶん簡単なアプリケーションで簡単な操作であればそこそこ動くんじゃないかな~というのが所感です。

ただ、Windowsアプリケーションならではの難しさもある気がしていて、たとえば「メモ帳でファイルを保存する」という簡単な操作をするだけでも、

  1. メニューを開く
  2. 保存をクリック

というステップを踏む必要があります。このメニュー表示が、たとえばOSレベルのフォーカス状態によってすぐに消えてしまうことがあります。当初、エージェントにflaui-cliのコマンド実行について確認を挟むようにしていたのですが、その確認によってフォーカスが移ってしまい、メニューが閉じてうまく動作しないことがありました。つらいね。こういうのはおそらく他にもいろいろあるんじゃないかな~と思います。アプリケーションや操作が複数になってくると難しそう…

アプリ自体に"コマンドパレット"のようなものが組み込まれていれば、(ファイル保存などの)やりたい操作を直接呼び出しやすくなりそうです。なので、今後はAIエージェント向けにそういった機能を提供するアプリが増えていくのかも?しれません。しないのかもしれません。