はじめに
この記事は、Zenn の次の記事の番外編2です。
- 本編: 「UiPathのXAMLから仕様を取得する——AIプロンプトで解析・Mermaid化する手順」 (
uipath-xaml-mermaid) - 番外編1: 「UiPathのXAMLをAIに読ませてみた実録ログ——Claude Sonnet 4.5で解析〜Mermaid化まで」 (
uipath-xaml-mermaid-case-sonnet45)
同じ3つのプロンプト(解析用 → 深掘り用 → Mermaid生成用)を、今度は Gemini 3(高速版) に投げてみた結果をまとめます。
- プロンプトを投げるだけの作業で 3分もかかっていない
- Claude Sonnet 4.5 より 粒度が細かく 出てきた
という点を中心に、解析結果のダイジェストと番外編1との比較を書きます。
対象ワークフロー(本編・番外編1と同じ)
対象は次の3つの .xaml です。
Main.xaml顧客データ取得フローチャート.xaml顧客データ登録フローチャート.xaml
役割の概要は番外編1と同様です(config 読み込み → 取得フロー Invoke → 登録フロー Invoke、取得フローは Web スクレイピング+Excel 出力、登録フローは Excel 読み込み+Web へ1行ずつ登録)。
1. 解析用プロンプト → 構造化された表(Gemini 3 の出力)
本編で紹介した「解析用プロンプト」をそのまま Gemini 3 に渡しました。出力はアクティビティ単位で細かく分解されています。
Main.xaml(7ノード)
| ユニーク番号 | 処理の内容 (DisplayName) | 処理の種類 (Activity Type) | つながるユニーク番号 | 備考/使用変数 |
|---|---|---|---|---|
| M01 | Main Sequence | Sequence | M02 | 変数 dt_config (DataTable) を定義 |
| M02 | Excel プロセス スコープ | ExcelProcessScopeX | M03 | Excel操作のコンテキストを開始 |
| M03 | 範囲を読み込み (ワークブック) | ReadRange | M04 | 読み込み先: config.xlsx / 出力: dt_config |
| M04 | 顧客データ取得 | Sequence | M05 | 内部でワークフロー呼び出し |
| M05 | 顧客データ取得フローチャートを呼び出し | InvokeWorkflowFile | M06 | 呼び出し先: 顧客データ取得フローチャート.xaml / 引数: argument_config ← dt_config |
| M06 | 顧客データ登録 | Sequence | M07 | 内部でワークフロー呼び出し |
| M07 | 顧客データ登録フローチャートを呼び出し | InvokeWorkflowFile | (End) | 呼び出し先: 顧客データ登録フローチャート.xaml / 引数: argument_config ← dt_config |
顧客データ取得フローチャート.xaml(15ノード)
| ユニーク番号 | 処理の内容 (DisplayName) | 処理の種類 (Activity Type) | つながるユニーク番号 | 備考/使用変数 |
|---|---|---|---|---|
| G01 | 設定ファイルをdicに | Sequence | G02 | 設定情報をDictionary形式に変換 |
| G02 | 複数代入 (configDict) | Multiple Assign | G03 | configDict = argument_config.AsEnumerable().ToDictionary(...) |
| G03 | 複数代入 (保存先パス) | Multiple Assign | G04 | str_inputfileSavepath = configDict("inputFile保存先") |
| G04 | 営業獲得データを取得 | Sequence | G05 | WebアプリAからのデータ抽出 |
| G05 | ブラウザを使用 (WebアプリA) | NApplicationCard | G06 | Edgeで営業獲得管理システムを表示 |
| G06 | クリック '獲得データを表示' | NClick | G07 | データの表示ボタンをクリック |
| G07 | 表データを抽出 | NExtractData | G08 | 顧客名、獲得日、金額等を抽出。出力: dt_kakutoku |
| G08 | 営業獲得Excelファイル作成 | Sequence | G09 | 抽出データの加工とファイル出力 |
| G09 | データ テーブルを構築 | BuildDataTable | G10 | 出力用 dtOutput を定義(オプション有無/品名列を含む) |
| G10 | 繰り返し (データテーブルの各行) | ForEachRow | G11 | dt_kakutoku の各行を処理 |
| G11 | データ行を追加 | AddDataRow | G12 | 備考を分割して「オプション品名」等を抽出。式: If(CurrentRow("備考").ToString.Contains("なし"), "なし", "あり") 等 |
| G12 | 複数代入 (ヘッダー除去) | Multiple Assign | G13 | dtOutput = dtOutput.AsEnumerable().Skip(1).CopyToDataTable() |
| G13 | Excel プロセス スコープ | ExcelProcessScopeX | G14 | ファイル出力準備 |
| G14 | 複数代入 (出力パス生成) | Multiple Assign | G15 | excelfullpath = Path.Combine(..., Now.ToString("yyyyMMdd") & "_営業獲得データ_rpa用inputFile.xlsx") |
| G15 | 範囲に書き込み (ワークブック) | WriteRange | (End) | 出力先: excelfullpath / シート: 営業獲得データ |
顧客データ登録フローチャート.xaml(14ノード)
| ユニーク番号 | 処理の内容 (DisplayName) | 処理の種類 (Activity Type) | つながるユニーク番号 | 備考/使用変数 |
|---|---|---|---|---|
| R01 | 設定ファイルをdicに、登録データ読み込み | Sequence | R02 | 設定変換と入力ファイルの読み込み |
| R02 | 複数代入 (configDict / パス) | Multiple Assign | R03 | 設定Dic化と excelInputFullpath の生成 |
| R03 | 範囲を読み込み (ワークブック) | ReadRange | R04 | excelInputFullpath から dt_Exceldata を取得 |
| R04 | データ登録 | Sequence | R05 | WebアプリBへの登録開始 |
| R05 | ブラウザを使用 (WebアプリB) | NApplicationCard | R06 | 登録用Webシステムを開く |
| R06 | クリック 'データを登録する' | NClick | R07 | 新規登録画面へ遷移 |
| R07 | 繰り返し (各行の登録) | ForEachRow | R08 | dt_Exceldata の全行をループ |
| R08 | データ登録を実施 | Sequence | R09 | 入力項目へのセット |
| R09 | 項目入力 (顧客名/獲得日/金額) | NTypeInto | R10 | 各 CurrentRow の値を入力 |
| R10 | 項目選択 (担当/商品/オプション) | NSelectItem | R11 | ドロップダウンから値を選択 |
| R11 | 入力内容の確認と登録 | Sequence | R12 | 登録確定操作 |
| R12 | クリック '確認' | NClick | R13 | 確認ボタンを押下 |
| R13 | クリック '✅ 登録' | NClick | R14 | 最終登録ボタンを押下 |
| R14 | クリック 'データを登録する' | NClick | R07(次行) | 次のデータの入力画面へ戻る(ループ) |
2. 深掘り用プロンプト → 要確認ステップ(Gemini 3 の出力)
同じ「深掘り用プロンプト」を、上記の表に対して投げました。Gemini 3 は表のユニーク番号に合わせて、次の5つを挙げています。
| ユニーク番号 | 該当する観点 | 深掘りすべき理由 |
|---|---|---|
| G02 / R02 | 複雑なVB式・代入 | DataTable を1行で Dictionary 化しており、設定ファイルに空行や重複キーがあるとエラーになるため。 |
| G07 | 画面要素(セレクター) | NExtractData でブラウザ上のテーブルを抽出しており、Webサイトの構造変化に最も影響を受けやすいため。 |
| G11 | 複雑なVB式・分岐 | 備考欄の文字列から If 文と Split 関数で値を判定・抽出しており、イレギュラーな入力値に弱いため。 |
| G14 / R02 | 動的なファイルパス生成 | 実行時の日付(Now)を用いて保存・参照パスを生成しており、日を跨ぐ処理やファイル不在時の挙動確認が必要なため。 |
| R09 / R10 | 画面要素(セレクター) | NTypeInto や NSelectItem が多数あり、WebアプリB側のIDが動的な場合、操作に失敗するため。 |
番外編1(Sonnet 4.5)では「G03」「R04」「R01」「G01」「R05」のようにまとまったブロックで挙がっていましたが、Gemini 3 では G02/G03、R09/R10 のようにより細かいステップ番号で出てきます。実装時に「どのアクティビティを直すか」を特定しやすい印象です。
3. Mermaid 生成用プロンプト → フロー図コード(Gemini 3 の出力)
表をそのまま Mermaid 用プロンプトに渡したところ、以下の graph TD が得られました。Invoke ノードにスタイルを付けてあり、ループ(R14 → R07)も明示されています。
graph TD
%% Main Workflow
subgraph Main_Process [Main.xaml]
M01[Main Sequence] --> M02[Excel プロセス スコープ]
M02 --> M03[範囲を読み込み config.xlsx]
M03 --> M04[顧客データ取得 シーケンス]
M04 --> M05[[顧客データ取得フローチャートを呼び出し]]
M05 --> M06[顧客データ登録 シーケンス]
M06 --> M07[[顧客データ登録フローチャートを呼び出し]]
end
%% Data Acquisition Workflow
subgraph Acquisition_Process [顧客データ取得フローチャート.xaml]
G01[設定ファイルをdicに] --> G02[複数代入 configDict]
G02 --> G03[複数代入 保存先パス]
G03 --> G04[営業獲得データを取得]
G04 --> G05[ブラウザを使用 WebアプリA]
G05 --> G06[クリック 獲得データを表示]
G06 --> G07[表データを抽出 dt_kakutoku]
G07 --> G08[営業獲得Excelファイル作成]
G08 --> G09[データ テーブルを構築 dtOutput]
G09 --> G10[繰り返し 各行処理]
G10 --> G11[データ行を追加 オプション判定含む]
G11 --> G12[複数代入 ヘッダー除去]
G12 --> G13[Excel プロセス スコープ]
G13 --> G14[複数代入 出力パス生成]
G14 --> G15[範囲に書き込み 営業獲得データ]
end
%% Data Registration Workflow
subgraph Registration_Process [顧客データ登録フローチャート.xaml]
R01[設定ファイルをdicに、登録データ読み込み] --> R02[複数代入 configDict / パス]
R02 --> R03[範囲を読み込み dt_Exceldata]
R03 --> R04[データ登録 シーケンス]
R04 --> R05[ブラウザを使用 WebアプリB]
R05 --> R06[クリック データを登録する]
R06 --> R07[繰り返し 各行の登録]
R07 --> R08[データ登録を実施]
R08 --> R09[項目入力 顧客名/獲得日/金額]
R09 --> R10[項目選択 担当/商品/オプション]
R10 --> R11[入力内容の確認と登録]
R11 --> R12[クリック 確認]
R12 --> R13[クリック ✅ 登録]
R13 --> R14[クリック データを登録する]
R14 -- "次の行へ" --> R07
end
%% Inter-workflow connections
M05 == "Invoke" ==> G01
M07 == "Invoke" ==> R01
%% Styling(塗りつぶしノードは文字を黒に)
style M05 fill:#f9f,stroke:#333,stroke-width:2px,color:#333
style M07 fill:#f9f,stroke:#333,stroke-width:2px,color:#333
style G07 fill:#bbf,stroke:#333,color:#333
style G11 fill:#fff4dd,stroke:#d4a017,color:#333
style R09 fill:#bbf,stroke:#333,color:#333
Mermaid Live Editor や Zenn のプレビューに貼ると、Main → 取得/登録フローの呼び出しと、登録フロー内のループが一覧できます。
4. 番外編1(Sonnet 4.5)との比較
同じプロンプトで、Claude Sonnet 4.5(番外編1) と Gemini 3 高速版(本記事) を比べたときの違いです。
| 観点 | Sonnet 4.5(番外編1) | Gemini 3 高速版(本記事) |
|---|---|---|
| ノード数 | Main 3 / 取得 4 / 登録 5(計12) | Main 7 / 取得 15 / 登録 14(計36) |
| 粒度 | シーケンス・スコープ単位で「まとめ」寄り | アクティビティ単位で細かく分解 |
| 深掘り候補 | G03, R04, R01, G01, R05 などブロック単位 | G02, R02, G07, G11, G14, R09, R10 などステップ単位 |
| Mermaid | シンプルで全体把握しやすい | ノード数多く、スタイル付きで「どこが重要か」が図で分かる |
| 作業時間 | — | プロンプトを投げるだけなので 3分未満 |
プロンプトの文言は「シーケンスやスコープ単位で大きな流れを」としていますが、Gemini 3 はより細かい粒度で解釈しています。設計レビューや移行時の「どのアクティビティを確認するか」を切り出すには Gemini 3 の出力が使いやすく、全体の流れをざっと見るには Sonnet 4.5 のまとまり方が見やすい、という住み分けになりそうです。
5. やってみて分かったこと
- 同じプロンプトで別エンジンに投げるだけなので、試すコストはとても低い(3分未満で一通り完了)。
- 粒度の差はエンジンによる解釈の差として受け止められ、どちらも「間違い」ではなく用途で選べる。
- 深掘り候補は 観点は同じで、番号の細かさが違う 程度なので、本編のプロンプトがエンジンに依存せず機能していると言えそう。
- 今後、別モデル(例: 他の高速版や大型モデル)でも同じ3プロンプトを試すと、「プロンプトの汎用性」の検証としてさらに説得力が増す。
おわりに
本記事では、本編の同じ3つのプロンプトを Gemini 3(高速版) に渡した結果を整理し、番外編1(Sonnet 4.5)との粒度の違いを比較しました。
- 解析 → 深掘り → Mermaid の流れはそのまま再現できた
- 粒度が細かく、実装・レビュー時に参照しやすい
- プロンプトを投げるだけの作業で 3分もかかっていない
本編のプロンプトが「エンジンが違っても概ね同じ構造で結果が出る」ことを、番外編1・2で確認できました。別エンジンで試すときの参考になれば幸いです。