TagUIは、シンガポールの国家AIプログラムであるAI Singapore(AISG)がGitHubで公開してきた、無料のオープンソースRPAツールです。click や type といった命令を並べたテキストファイル(フロー)を書くだけで、Chrome・Edgeのブラウザ操作、画像認識によるデスクトップ操作、Excelの読み書きを自動化できます。Windows・macOS・Linuxで動き、ライセンスはApache License 2.0です。名前の似た「TagGUI」は画像データセットにタグやキャプションを付ける別のソフトで、RPAではありません。
ただし、AISGは2024年8月までにTagUIの保守とサポートを終えており、日本語の解説記事の多くが前提にしているTagUI 4.0〜6.110のころとは状況が変わっています。この記事では、v6.114をmacOS(Intel)上のPHP 8.5.8とChromeで実際に動かした結果をもとに、仕組み、インストール手順、フローの書き方、よくあるエラー、そして今からTagUIを選ぶべきかの判断までを解説します(Windows版とExcel連携は手順の紹介のみで、実行はしていません)。2026年10月24日には、cronと同じ最小の環境変数で動かしたときの挙動も確かめました。
まとめ:TagUIの現状と使いどころ
- TagUIはテキストで書くタイプの無料RPA。Web画面はChrome・EdgeのDOMやXPathで、デスクトップアプリは画像認識(SikuliX)とOCRで操作する
- AISGは2023年3月に保守終了を予告し、2024年8月にREADMEを「終了した」に更新。現在はコミュニティによる修正のみで、最後の修正は2026年9月20日(PHP 8.4以降の非推奨警告への対応)
- GitHub Releasesの最新はv6.110(2022年6月)のまま。インストール後に
tagui updateを実行するとv6.114に上がり、PHP 8.5で出る警告も消える - フローは英語のほか日本語を含む22言語で書ける。日本語は設定ファイルの1行を変えるだけで使える
- 定期実行は
-deployで作った起動ファイルをcronやタスクスケジューラに登録する。PHPやpythonコマンドが見つからないと終了コード0のまま止まるため、成否は終了コードでなくログで判定する - 新規に部署の業務基盤として入れるなら選ばない。個人の定型作業や既存フローの延命には使え、Pythonで書けるなら後継の「RPA for Python」(
pip install rpa)へ移るのが現実的
TagUIの概要と開発の経緯
TagUIは、作者のKen Soh氏が個人プロジェクトとして始めたツールで(v3.0までは個人のリポジトリ)、その後AISGへ移り、シンガポール国立研究財団(NRF)のAI Singapore Programme(AISG-RP-2019-050)の支援で開発が進められました。リポジトリは github.com/aisingapore/TagUI で、スター数はGitHubのリポジトリ画面で確認できます。READMEのスポンサー欄は「previously supported(以前は支援を受けていた)」と過去形に書き換えられています。
TagUIの標準構成は、利用者が管理するPC上で動くオンプレミス型です。クラウド上の環境で動かす方法も公式に案内されています。READMEのセキュリティの項では、TagUI自体がデータを保持しないためPCI DSSやHIPAAのような業界認証は対象外だと説明されています。RPAそのものの仕組みや主要製品の位置づけは「RPAとは?仕組み・できること・主要ツールと導入判断」で整理しています。
AISGの保守終了と現在のメンテナンス状況
TagUIを今から使うなら、まず次の経緯を押さえておく必要があります。日付はすべてGitHubのコミット・リリースの記録です。
| 日付 | 出来事 |
|---|---|
| 2022-06-20 | v6.110.0をGitHub Releasesで公開(現在も最新) |
| 2023-03-07 | READMEに保守終了を予告(2023年第4四半期で停止) |
| 2024-08-08 | READMEを「保守とサポートを終了した」に更新 |
| 2025-03-02 | telegramステップを非推奨化 |
| 2026-09-20 | PHP 8.4以降の非推奨警告への対応(PR #1443)をマージ |
現在のREADMEは「AISGは保守とサポートを終了したが、オープンソースの貢献者とコミュニティによる支援は続いている」と案内しています。GitHub Releasesの更新は2022年で止まっていますが、masterブランチへの修正は続いています。後述の tagui update は、手元とmasterのバージョン表記が違う場合にだけmasterの内容を取得し、同じ場合は「already using the latest version」と表示して終了します。そのため、2026年9月20日より前にv6.114へ上げた環境には、その後masterに入ったPR #1443の修正は tagui update では入りません。設定とフローを退避したうえでPR #1443の修正対象ファイルを差し替えるか、配布zipから別フォルダへ入れ直して tagui update を実行します。
TagUIの仕組み:フローの変換とChrome・SikuliXの操作
TagUIは、拡張子 .tag のフローをPHPのスクリプト(tagui_parse.php)で解釈し、CasperJS用のJavaScriptに変換して実行します。Chrome・EdgeにはWebSocketで命令を送り、画像認識・OCR・キーボード操作はJavaで動くSikuliXが担当します。このため、Web操作にはChromeとPHPを使い、macOS・LinuxではCasperJSの起動用に python コマンドも必要です。画像を使う操作には、さらにJava(OpenJDK)が必要です。
操作する対象の指定方法(識別子)は次の5種類です。
| 識別子 | 書き方の例 | 使える対象 |
|---|---|---|
| DOM属性・テキスト | click Getting started |
Chrome・Edge |
| XPath | click //a[@class="icon"] |
Chrome・Edge |
| 画面座標 | click (500,300) |
画面全体 |
| 画像 | click button.png |
画面全体(Java必須) |
| OCRの範囲 | read (300,400)-(500,550) to v |
画面全体(Java必須) |
DOM属性の指定では、id・name・class・titleのいずれかが一致する要素を探し、見つからなければ最後の手段として表示テキストで探します。デスクトップアプリは、Windowsのボタンや入力欄を部品として認識する方式(UIAutomationとはで解説しているUI Automation)ではなく、保存した画像と画面を照合する方式で操作します。画面の解像度や拡大率が変わると一致しなくなるのはこのためで、画像照合の考え方は「テンプレートマッチングとは?」が参考になります。
TagUIのインストール手順(Windows・macOS・Linux)
公式の手順は、GitHub Releasesからv6.110のzipを入手し、展開してから tagui update で最新に上げる流れです。どのOSでもChromeが必要で、画像認識やOCRを使うならOpenJDK(公式手順のリンク先はAmazon Corretto 8)も入れます。
Windowsでのインストール
TagUI_Windows.zip(v6.110)をダウンロードし、C:\直下に展開する(展開できなければデスクトップでも可)- OpenJDKとChromeをインストールする
- 環境変数PATHの先頭に
c:\tagui\srcを追加する - コマンドプロンプトでサンプルを実行し、続けて更新する
tagui c:\tagui\flows\samples\1_google.tag
tagui update
Word・Excelのプラグイン(Word用V3.18、Excel用v3.06)は別のインストーラーで、Windows版のみ提供されています。
macOS・Linuxでのインストール
TagUI_macOS.zip または TagUI_Linux.zip を展開し、tagui コマンドへのシンボリックリンクを作ります。macOSはMonterey以降、LinuxはUbuntuなどPHPを同梱しないディストリビューションで、PHPを別途インストールする必要があります。
sudo ln -sf /your_tagui_path/tagui/src/tagui /usr/local/bin/tagui
tagui /your_tagui_path/tagui/flows/samples/1_google.tag
tagui update
Linuxでは画像認識・OCR・keyboardステップを使うためにSikuliXの追加設定(SikuliXのLinux向け手順)が必要です。
Web操作だけの場合も、PHPとChromeに加えて python という名前のコマンドが必要です。公式の手順には書かれていません。フローを実行するCasperJSの起動スクリプト(src/casperjs/bin/casperjs)の1行目が #!/usr/bin/env python のためで、python3 しか無い環境では env: python: No such file or directory と表示され、フローは1行も実行されません(Issue #1280 にも同じ症状の報告があります)。python3 の実体を指す python という名前のシンボリックリンクをPATHの通った場所に置けば動きます。macOSでは /usr/bin/python3 はコマンドライン・デベロッパツールの呼び出し口なので、リンク先にすると xcode-select: Failed to locate 'python' で失敗しました。Homebrewなどで入れたPython本体を指定します。casperjs の1行目を #!/usr/bin/env python3 に書き換える方法もあり、後述のRPA for PythonはmacOSでこの書き換えを初回に自動で行います(tagui.py の _patch_macos_py3)。
tagui updateでv6.114に上げる理由
zipに入っているv6.110をPHP 8.5.8で動かすと、フローは最後まで動くものの、実行のたびに次のような非推奨警告が7行出ました。
PHP Deprecated: Non-canonical cast (boolean) is deprecated, use the (bool) cast instead in .../tagui/src/ws/Base.php on line 147
PHP Deprecated: Creation of dynamic property WebSocket\Client::$options is deprecated in .../tagui/src/ws/Client.php on line 25
tagui update を実行すると「Downloading and updating to latest version of TagUI (v6.114)」と表示されてmasterの内容に置き換わり、同じフローで警告は0行になりました。PR #1443によると、PHP 8.5では fgetcsv() の警告がフローのログに書き込まれて実行が途中で止まる場合もあるため、新しいPHPの環境では更新を先に済ませます。なお tagui update は手元のファイルを上書きするので、独自に書き換えた設定やフローは先に退避しておきます。
TagUIの基本的な書き方:フロー・制御構文・実行オプション
ここからのフローは、入力欄・ボタン・表だけのテストページ(http://127.0.0.1:8799/form.html)に対して、v6.114で実行したものです。テストページは次のHTMLです。
<html><body>
<input id="name" name="name">
<button id="submit" onclick="document.getElementById('result').innerText='Hello '+document.getElementById('name').value">Send</button>
<p id="result"></p>
<table><tr><th>pair</th><th>rate</th></tr><tr><td>USD/JPY</td><td>148.2</td></tr><tr><td>EUR/JPY</td><td>173.5</td></tr></table>
</body></html>
このHTMLを site/form.html として保存し、site の1つ上のフォルダで次のコマンドを実行してテストサーバーを起動します。サーバーを動かしたまま、別のターミナルでフローを実行してください。後半のRPA for Pythonの例も同じページを使います。
python3 -m http.server 8799 --bind 127.0.0.1 -d site
Web操作の最小フロー
1行目にURLを書くとそのページを開き、以降の行が1ステップずつ実行されます。
http://127.0.0.1:8799/form.html
type name as Taro
click submit
read result to msg
echo msg is `msg`
table 1 to rates.csv
dump `msg` to out.txt
tagui demo.tag -h で実行した結果です(2026年10月24日・v6.114。-h はブラウザを表示しないheadless実行)。
START - automation started - Sat Oct 24 2026 07:42:47 GMT+0900 (JST)
http://127.0.0.1:8799/form.html -
type name as Taro
click submit
read result to msg
msg is Hello Taro
table 1 to rates.csv
dump Hello Taro to out.txt
http://127.0.0.1:8799/form.html -
FINISH - automation finished - 10.1s
type 〇〇 as 値 で入力、read 〇〇 to 変数 で値の取得、table 1 to rates.csv でページ内の1番目の表をCSVに保存します。保存されたCSVは "pair","rate" の見出し行に続いて表の2行がそのまま書き出されていました。変数をステップの中で使うときは `msg` のようにバッククォートで囲みます。
繰り返し・条件分岐・Pythonの呼び出し
制御構文はJavaScriptに近い書き方で、ブロックは { } で囲みます。py ステップはPCにインストール済みのPythonを呼び出し、標準出力を py_result に入れます。
http://127.0.0.1:8799/form.html
names = ['Taro', 'Hanako']
for n from 0 to names.length-1
{
name = names[n]
type name as [clear]`name`
click submit
read result to msg
if msg contains 'Hanako'
echo found `msg`
else
echo skip `msg`
}
py print(6 * 7)
echo py says `py_result`
skip Hello Taro
found Hello Hanako
py says 42
[clear] は入力欄を空にしてから入力する指定です。これを付けないと、2回目のループで前の値の後ろに文字が追記されます。
日本語でフローを書く設定
フローは英語のほか、日本語・中国語・韓国語など22言語で書けます。日本語にするには、tagui/src/tagui_config.txt の1行を書き換えます。
var tagui_language = 'japanese';
対応語は src/languages/japanese.csv に定義されており、click=クリック、type=入力する、read=読む、as=として、to=に、といった対応です。
http://127.0.0.1:8799/form.html
入力する name として 花子
クリック submit
読む result に msg
出力する `msg`
このフローは「Hello 花子」を出力して完了しました。設定ファイルは全フロー共通ですが、日本語設定でも英語の命令をそのまま解釈できるため、英語フローを実行するたびに設定を戻す必要はありません。前述の英語の demo.tag を日本語設定のまま実行すると、処理は同じように完了し、ログの表示だけが「入力する name として Taro」のように日本語になりました。
TagUIの実行オプションと動作の違い
| オプション | 動作 |
|---|---|
-headless(-h) |
ブラウザを表示せずに実行(画像認識は不可) |
-edge(-e) |
ChromeではなくEdgeで実行 |
-report(-r) |
結果を tagui_report.csv に記録し、実行ログをHTMLで保存 |
-deploy(-d) |
ダブルクリックで動くショートカットを作成 |
-turbo(-t) |
待機時間を短縮(公式は使用非推奨) |
-turbo について公式ドキュメントは、PCの性能差で動いたり動かなかったりする問題が起きやすく、使用を勧めないと明記しています。オプションの後ろに値を並べると、フロー内で p1〜p8 として受け取れます。
フローを定期実行する:-deployとcron・タスクスケジューラ
公式FAQ(Running flows on a fixed schedule)は、Windowsではタスクスケジューラ、macOS・Linuxではcrontabで実行する方法を案内しています。登録する起動ファイルは -deploy で作ります。macOSで tagui demo.tag -h -deploy を実行すると、フローは実行されずに demo.command だけが作られ、中身は次の2行でした。
cd "/Users/…/sched"
"/Users/…/tagui/src/tagui" "/Users/…/sched/demo.tag" -h
作成時に付けたオプション(ここでは -h)が起動ファイルに固定され、フローのファイルを移動したら作り直しが必要です。cronに登録するなら、この起動ファイルを指定します。次の例は平日9時に実行し、/Users/…/bin に python のリンク、/usr/local/bin にPHPがある前提です。
0 9 * * 1-5 PATH=/Users/…/bin:/usr/local/bin:/usr/bin:/bin /bin/sh /Users/…/sched/demo.command > /Users/…/sched/cron.log 2>&1
注意点はPATHです。cronと同じ最小のPATH(/usr/bin:/bin)で起動ファイルを動かすと、次のように表示されて何も実行されませんでした。
.../tagui/src/tagui: line 326: php: command not found
env: python: No such file or directory
このとき終了コードは0でした。PHPと python コマンドの場所をPATHに入れて同じ起動ファイルを動かすと、フローは最後まで実行され(FINISH - automation finished - 10.1s)、終了コードは0です。一方、画面に無い要素をクリックさせたフローは ERROR - cannot find no_such_button を出して終了コード1で終わりました。つまり、要素が見つからない失敗は終了コードで分かりますが、PHPやPythonが見つからない失敗は分かりません。cronやタスクスケジューラの「正常終了」だけを見ず、終了コードが0で、かつ今回の実行のログに FINISH - automation finished の行があることを確かめます。上のcronの例でログを > で毎回上書きしているのはこのためで、>> で追記すると前回の成功時の FINISH が残り、今回の失敗を見落とします。
Windowsでは、-deploy を付けて実行するとダブルクリックで動く .cmd ファイルが作られます(tagui.cmd のヘルプ表示に「generate .cmd file」とあります)。タスクスケジューラの「基本タスクの作成」で、トリガーに実行時刻、操作の「プログラムの開始」にこの .cmd を指定します。画像認識や画面表示ありのブラウザ操作を使うフローは、デスクトップが無いと動かないため、「ユーザーがログオンしているときのみ実行する」を選びます。Windowsでの終了コードの挙動は確かめていないため、こちらも .cmd の出力をファイルに書き出し、FINISH の行で成否を判定するのが安全です。
ExcelとWordの連携方法
Excelのセルは、Excelの参照式と同じ [ファイル名]シート名!範囲 の形で読み書きします。WindowsとMacのExcelアプリに対応しており、TagUIがExcelを裏で起動して処理します(この節は実行していません)。
top_salesman = [Monthly Report.xlsx]August!E11
[exceltest.xlsx]Sheet2!A1 = data
範囲は A:A(A列)や 3:5(3〜5行目)のように指定できますが、シート全体を表す書き方は無いため、実際の範囲を指定します。パスワード付きのファイルは excel_password = 'パスワード' を先に設定します。Windowsでは、Word文書にステップを書いてそのままロボットとして実行するWordプラグインと、実行時のパラメーターをExcelで管理するExcelプラグインも使えます。
TagUIでよく出るエラーと対処
| 症状 | 主な原因 | 対処 |
|---|---|---|
ERROR - cannot find 〇〇 |
要素名の不一致・ページ未表示 | XPathで指定・URLを確認 |
MSVCR110.dll is missing |
Visual C++ ランタイム不足 | 公式手順のx86版(vcredist_x86.exe)を導入 |
PHP Deprecated が大量に出る |
v6.110とPHP 8.4以降の組み合わせ | tagui update |
php: command not found |
Monterey以降のmacOSやUbuntuにPHPが無い | PHPを別途インストール |
env: python: No such file or directory |
python コマンドが無い |
python の名前でリンクを作る |
| 画像クリックが効かない | -h で実行している |
headlessを外す |
| LinuxでOCR・keyboardが動かない | SikuliXの追加設定が未了 | SikuliXのLinux向け手順を実施 |
cannot find は、要素の指定ミスだけでなく、その前のページ読み込みが失敗したときにも出ます。今回の検証でも、テストページのポートが別のプロセスに使われていて表示に失敗した回では、エラーが出たのはURLの行ではなく次の type name as Taro の行でした。エラーの行だけでなく、直前のページが開けているかを先に確かめます。失敗時はフローと同じフォルダに demo_error.png のようなスクリーンショットが保存されるので、それを見るのが早道です。
macOSでは、セキュリティ設定によってPhantomJSやJavaの実行がブロックされることもあり、公式のトラブルシューティングはGitHubのIssue #601・#598を案内しています。
保守終了後にTagUIを選ぶ判断とOSS RPAの比較
部署の業務基盤として新規に導入するなら、TagUIは選びません。公式の保守が終わっているうえ、フローの実行に使うCasperJSとPhantomJSはどちらもGitHubのリポジトリがアーカイブ(読み取り専用化)されており、ChromeやPHPの仕様変更で動かなくなったときに直す責任者がいないためです。止まったら業務が止まる処理には、サポートのある製品を選ぶべきです。
一方、次のような使い方なら今でも選択肢になります。
- 個人のPCで、1日1回の転記やCSV取得のような小さな定型作業を自動化する
- すでに動いている
.tagフローを、移行するまでの間だけ動かし続ける - Pythonを書ける人が、RPA for Pythonへ移る足場として使う
RPA for Python(pip install rpa)への移行
READMEとAISGの告知は、移行先としてTagUIの作者が保守するPythonパッケージ「RPA for Python」を案内しています。PyPIの最新は rpa 1.50.0(2023年7月7日公開)で、同じ内容が tagui という名前でも登録されています。リポジトリ(tebelorg/RPA-Python)の最新コミットは2026年7月25日(ドキュメントの更新)です。
import rpa as r
r.init(visual_automation=False, chrome_browser=True, headless_mode=True)
r.url('http://127.0.0.1:8799/form.html')
r.type('name', '[clear]Taro')
r.click('submit')
print('result:', r.read('result'))
r.table(1, 'rates_py.csv')
r.close()
[RPA][INFO] - setting up TagUI for use in your Python environment
[RPA][INFO] - downloading TagUI (~200MB) and unzipping to below folder...
[RPA][INFO] - TagUI now ready for use in your Python environment
result: Hello Taro
初回の r.init() でTagUI本体(約200MB)がダウンロードされます。既定の保存先はmacOS・Linuxではホームディレクトリ内の .tagui、Windowsでは %APPDATA%\tagui です。中身はTagUIなので依存は同じですが、変数・繰り返し・例外処理・ログ出力をPythonの文法で書けるため、TagUI独自の構文で書くより保守しやすくなります。ステップ名はほぼ同じ(type・click・read・table)なので、.tag の行を関数呼び出しに置き換える形で移せます。
Linuxでも動くOSS・無料RPAとの比較
| ツール | 書き方 | 対応OS | デスクトップ操作 | ライセンス |
|---|---|---|---|---|
| TagUI | テキストのフロー | Windows・macOS・Linux | 画像認識・OCR | Apache-2.0 |
| RPA for Python | Python | Windows・macOS・Linux | 画像認識・OCR | Apache-2.0 |
| OpenRPA | GUIデザイナー | Windowsのみ | UI Automation | MPL-2.0 |
| Robot Framework | キーワード記法 | Windows・macOS・Linux | ライブラリ次第 | Apache-2.0 |
| Power Automate Desktop | GUIデザイナー | Windowsのみ | UI要素・画像 | プロプライエタリ・一部無償 |
Power Automate Desktopの無償範囲は、PCの前で人が起動するローカルの有人実行です。無人実行には別途ライセンスが必要です。
この表の中でLinuxに対応するのは、TagUI、RPA for Python、Robot Frameworkです。Robot Frameworkはテスト自動化のフレームワークですが、タスク記法でRPAにも使えます(Robot Frameworkとは?)。OpenRPAはサーバー機能のOpenFlowこそLinuxで動くものの、ロボット本体はWindows専用です(OpenRPAとは?)。WindowsのPCで完結する業務なら、Microsoftが保守するPower Automate Desktopを保守体制を重視する場合の導入候補にします。TagUIで作ったフローをPower Automateへ移す作業は、弊社のPower Automate導入支援・RPA移行でも請け負っています。商用製品も含めた選び方は「RPAツール比較」にまとめています。
よくある質問
TagUIは無料で商用利用できますか?
できます。TagUIはApache License 2.0で公開されており、無料で商用利用でき、改変や再配布も可能です。ただしAISGによる保守とサポートは終了しているため、不具合はGitHubのIssueやコミュニティで自分で解決する前提になります。
TagUIの公式サイトやGitHubはどこですか?
ソースコードとREADMEは github.com/aisingapore/TagUI、使い方のドキュメントは tagui.readthedocs.io にあります。ドキュメントの表記はv6.110のままですが、内容は現行のv6.114とほぼ同じです。ダウンロードはGitHub Releasesのv6.110から行い、展開後に tagui update で最新にします。
TagUIはPythonから使えますか?
使えます。pip install rpa でRPA for Pythonを入れると、import rpa as r からTagUIの機能を呼び出せます。また、TagUIのフローの中から py ステップでPythonのコードを実行することもできます。
TagUIはLinuxで動きますか?
動きます。Linux版のzipを展開し、PHPとChromeを導入したうえで、PATH上で python コマンドを実行できるようにすると、Web操作のフローを実行できます。画像認識・OCR・keyboardステップを使う場合は、SikuliXのLinux向けの追加設定とJavaが必要です。
TagUIに操作を記録する機能はありますか?
Web操作を記録してステップに変換するChrome拡張機能「TagUI RPA Web Recorder」が公式ドキュメントで紹介されていますが、2026年10月1日と10月24日に掲載URL(拡張機能ID gjdajlcpkkjgjjokkekiniengajiamnk)を取得すると、拡張機能名の入らない empty-title のページへ転送され、本文にTagUIの記載はありませんでした。記録機能には頼らず、フローを手で書く前提で考えるのが確実です。