Robot Frameworkは、テストの手順を「キーワード」の並びで書くPython製のオープンソースのテスト自動化フレームワークです。Web・API・モバイルの受け入れテストや、RPA的な定型作業の自動化に使われます。この記事では、2026年9月14日に公開された最新版7.5を前提に、インストールから.robotファイルの書き方、主要ライブラリの選び方、CIでの実行までを説明します。.robotファイルとコマンドの例は、GitHub Actionsの設定例を除き、Robot Framework 7.5とPython 3.12の環境で実行して結果を確かめたものです。
まとめ:Robot Framework 7.5の要点
- 正体:Pythonで動くキーワード駆動のテスト自動化フレームワーク。ライセンスはApache License 2.0で、開発は非営利のRobot Framework Foundationが支えている。
- 最新版:7.5(2026年9月14日公開)。Python 3.8以降で動き、7.5でPython 3.15への対応が明記された。
- インストール:
pip install robotframeworkのあとrobot --versionで確認する。テスト対象に応じてライブラリを追加する。 - Webテスト:新規ならPlaywrightベースのBrowserライブラリ(20.6.0)。既存のSelenium資産があればSeleniumLibrary(6.9.0)。
- 古い解説に注意:検索上位の日本語訳ドキュメントは3.0系(2015年)のままで、そこにある
:FOR構文は7.5ではエラーになる。 - RPAとの関係:UiPathのような画面録画型のRPA製品ではない。
*** Tasks ***で書けばテスト以外の自動化にも使える。
Robot Frameworkとは:Python製のキーワード駆動テスト自動化フレームワーク
Robot Frameworkは、受け入れテストやATDD(受け入れテスト駆動開発)向けに作られた汎用の自動化フレームワークです。本体はテストデータを読んで実行し、ログとレポートを作る役割だけを持ちます。ブラウザやAPIを実際に操作するのは、本体に組み込む「ライブラリ」です。このため対象がWebでもAPIでも、同じ書き方と同じレポートでテストをまとめられます。
キーワード駆動テストの書き方:自作キーワードと組み込みキーワードの並び
テストケースは、ライブラリが用意したキーワード(Should Be Equal など)と、自分で定義したキーワードを1行ずつ並べて書きます。区切りは2つ以上の空白です。次の例では、Build Greeting というキーワードを自作し、テストケースから呼び出しています。
*** Settings ***
Documentation 文字列操作を確かめる最小のテストスイート
Library String
Test Setup Log テスト開始
Test Teardown Log テスト終了
*** Variables ***
${GREETING} Hello
*** Test Cases ***
挨拶文を組み立てられる
[Tags] smoke
${message}= Build Greeting Robot
Should Be Equal ${message} Hello, Robot!
大文字に変換できる
[Tags] regression
${upper}= Convert To Upper Case robot
Should Be Equal ${upper} ROBOT
*** Keywords ***
Build Greeting
[Arguments] ${name}
RETURN ${GREETING}, ${name}!
テストケース名や自作キーワード名は日本語でも書けるため、テスト仕様書の手順をそのままキーワード名にできます。
RPAツールとの違いとタスクでの自動化
名前に「Robot」が入るため、ロボットによる業務自動化(RPA)の製品と混同されがちです。UiPathのような商用RPAは画面操作の録画やワークフロー設計の画面を中心にした製品ですが、Robot Frameworkはテキストファイルに手順を書き、コマンドで実行するフレームワークです。
ただし、テスト以外の自動化にも使えます。公式ユーザーガイドによると、*** Test Cases *** の代わりに *** Tasks *** で書いたファイルは汎用自動化モード(RPAモード)で実行され、--rpa オプションで明示もできます。次のタスクは、7.5で実行すると結果が「1 task, 1 passed, 0 failed」と表示されました。
*** Settings ***
Library OperatingSystem
*** Tasks ***
レポート用フォルダを用意する
Create Directory ${OUTPUT DIR}${/}work
Directory Should Exist ${OUTPUT DIR}${/}work
画面録画や管理コンソールが欲しい場合は、オープンソースのRPA製品を選ぶ方が要件に合います。比較の候補はOpenRPAとは?無料オープンソースRPAのインストール・使い方・対応OS【2026年】にまとめています。
Selenium・pytest・Cucumberとの役割の違い
SeleniumやPlaywrightはブラウザを操作する部品で、Robot Frameworkはその部品をライブラリとして呼び出す側です。
| ツール | 位置づけ | テストの書き方 | 向く場面 |
|---|---|---|---|
| Robot Framework | 実行フレームワーク | キーワードの表形式 | 受け入れテスト・E2E |
| Selenium/Playwright | ブラウザ操作の部品 | 各言語のコード | ブラウザ自動操作 |
| pytest | Pythonのテストランナー | Pythonの関数 | 単体・結合テスト |
| Cucumber | BDDフレームワーク | Gherkin(Given/When/Then) | 仕様を文章で共有 |
開発者が単体テストを書くならPythonの関数で書けるpytestの使い方と書き方|fixture・parametrize・docstringの扱いまで【9.1対応】の方が速く、Given/When/Thenの文章で仕様を合意したいならGherkinとは?構文の全キーワードと.featureファイルの書き方・実行例が合います。Robot Frameworkが強いのは、テスト担当者と開発者が同じファイルを読み書きし、Web・APIをまとめて1つのレポートに出したい場面です。
Robot Frameworkのインストール:Python 3.10以降の推奨
本体はPyPIで配布されています。PyPIのrobotframeworkのページで確認できる最新版は7.5で、必要なPythonは3.8以降です。ただしWeb系の主要ライブラリ(Browser・SeleniumLibrary)とRobocopはPython 3.10以降が必要です。これから入れるならPython 3.10以降を選んでください。
仮想環境とpipでの導入手順
プロジェクトごとに仮想環境を分けておくと、ライブラリの版がほかの環境とぶつかりません。macOS・Linuxでは次の手順です(Windowsは .venv\Scripts\activate で有効化します)。
python3 -m venv .venv
source .venv/bin/activate
pip install robotframework
robot --version
手元では Robot Framework 7.5 (Python 3.12.13 on darwin) と表示されました。robot コマンドが見つからない場合は、仮想環境の有効化を忘れているか、PythonのScriptsフォルダにPATHが通っていません。python -m robot --version でも同じ確認ができます。
なお、JavaやJython上で動かす方法は使えません。5.0のリリースノートでPython 3.6以降が必須になり、JythonとIronPythonの対応は終わりました。Javaのコードを呼びたい場合は、Java側にRemoteライブラリのサーバーを立てて呼び出します。
エディタとGUI:RobotCodeとRIDE
.robotファイルはテキストなので、どのエディタでも書けます。VS CodeやJetBrains系では、補完・定義ジャンプ・実行ボタンを追加する拡張機能 RobotCode があります。表形式の画面でテストを編集したい場合は、公式のGUIエディタRIDE(PyPIのrobotframework-ride、2026年10月時点の最新は7月公開の2.2.4)もあります。書式の検査と整形は、Robotidyが統合された Robocop の robocop check と robocop format で行えます。
最初のテスト実行と3つの結果ファイル
Robot Frameworkのファイルで主に使うセクションは、*** Settings ***(ライブラリの読み込み・セットアップ)、*** Variables ***(変数)、*** Test Cases ***(テスト本体)、*** Keywords ***(自作キーワード)の4つです(ほかにTasksとCommentsがあります)。冒頭の例を tests/greeting.robot として保存し、次のコマンドで実行します。
robot --outputdir results tests
フォルダを指定すると、フォルダが親スイート、中の各.robotファイルが子スイートとして実行されます。終わると results フォルダに3つのファイルができます。
| ファイル | 中身 | 使いどころ |
|---|---|---|
| report.html | 成否の集計 | 全体の結果を見る |
| log.html | キーワード単位の実行記録 | 失敗原因を追う |
| output.xml | 機械可読の結果 | 再実行・統合・CI連携 |
失敗したときは、log.htmlで赤くなったキーワードを開くと、引数と失敗メッセージ(期待値okに対して実際がngなら ng != ok)が並びます。
robotコマンドの主要オプション
よく使うのは次の5つです。オプションの一覧は robot --help で確認できます。
| オプション | 働き | 例 |
|---|---|---|
--include |
タグが一致するテストだけ実行 | --include smoke |
--exclude |
タグが一致するテストを除外 | --exclude slow |
--variable |
変数を外から渡す | --variable ENV:stg |
--outputdir |
結果ファイルの出力先 | --outputdir results |
--dryrun |
実行せず構文とキーワードの有無を確認 | --dryrun |
冒頭の例に --include smoke を付けると、[Tags] smoke を持つ「挨拶文を組み立てられる」だけが実行されました。
失敗テストの再実行とrebotでの結果統合
不安定なE2Eテストでは、失敗分だけを再実行し、結果を1つにまとめる運用がよく使われます。--rerunfailed に前回のoutput.xmlを渡すと失敗したテストだけが選ばれ、付属の rebot コマンドの --merge で2回分の結果を統合できます。
robot --outputdir r tests/fail.robot
robot --rerunfailed r/output.xml --output rerun.xml --outputdir r tests/fail.robot
rebot --merge --outputdir r --output merged.xml r/output.xml r/rerun.xml
2件中1件が失敗するファイルで実行すると、1回目は「2 tests, 1 passed, 1 failed」、再実行では失敗した1件だけが走ります。統合後のmerged.xmlでは、再実行で成功したテストは成功に置き換わり、再実行でも失敗したテストは失敗のまま残る仕組みです。robot の終了コードは失敗したテストの数(250件以上は250)で、CIはこれが0以外なら失敗と判定します。
7系で変わった書き方:日本語訳ドキュメント(3.0系)との違い
「robotframework」の検索で上位に出る RobotFramework和訳・日本語ドキュメント集 は、表示されている版が 3.0.1.dev20151231 です。基本の考え方は今も通用しますが、構文は2015年当時のままで、「高度な機能」の「for ループ」節にある :FOR の書き方は現行版では動きません。7.5で旧構文を実行した結果は次のとおりです。
| 旧い書き方 | 7.5での結果 | 現行の書き方 | 導入版 |
|---|---|---|---|
:FOR と \ の継続行 |
エラーで失敗 | FOR … END |
3.1(旧構文は4.0で削除) |
[Return] |
動くが非推奨の警告 | RETURN |
5.0 |
Run Keyword If |
動く | IF … END |
4.0 |
Set Test Variable |
動く | VAR |
7.0 |
:FOR を使ったテストは「Support for the old FOR loop syntax has been removed.」というメッセージで失敗します。4.0のリリースノートで旧構文の削除が告知されています。古いサンプルを写すときは、まずここを書き換えます。
VAR・GROUPによる変数作成と処理のまとまり
7.0で入った VAR は、テストの途中で変数を作る構文です。@{} でリスト、&{} で辞書を作れ、scope=SUITE のようにスコープも指定できます。7.2で入った GROUP は、複数の手順に名前を付けてまとめる構文で、output.xmlとlog.htmlにはその名前のまとまりとして記録されます。7.5のテストのメタデータ([Metadata])と合わせて、次のファイルで動作を確かめました。
*** Test Cases ***
VARとGROUPとメタデータ
[Metadata] Issue 4409
VAR ${base} https://example.com
VAR @{paths} /login /logout
GROUP URLを組み立てる
FOR ${p} IN @{paths}
Log ${base}${p}
END
END
Should Be Equal ${base}/login https://example.com${paths}[0]
7.4のSecret変数と7.5のMarkdown埋め込み
7.4(2025年12月12日公開)では、値をログに出さない Secret 型の変数が入りました。データの中では値を環境変数か別のSecret変数から作る決まりで(コマンドラインの --variable でも作れます)、ファイルに値を直書きすると Value must have type 'Secret', got string. というエラーになります。
*** Variables ***
${PASSWORD: Secret} %{APP_PASSWORD}
*** Test Cases ***
秘密の値はログに出ない
Log ${PASSWORD}
環境変数 APP_PASSWORD を渡して実行すると、log.htmlには値の代わりに <secret> と記録されました。ただし公式も注意しているとおり、これは暗号化ではありません。${PASSWORD.value} で中身を参照すれば、その行のログには値が出ます。
7.5のリリースノートにある主な新機能の1つは、Markdownファイルの robotframework コードブロックをテストとして実行できるようになった点です。拡張子を .robot.md にしたファイルは、フォルダ実行時にも自動で読み込まれます。
# 手順書
この文章は実行されません。
```robotframework
*** Test Cases ***
Markdownの中のテスト
Should Be Equal As Integers ${1 + 1} 2
```
このほか7.5では、組み込みのTestdocツールが非推奨になり、外部のrobotframework-testdocを使うよう案内されています。Telnetライブラリも非推奨で、今後は外部ライブラリに置き換わる予定です。Telnetでネットワーク機器を操作しているスイートは、移行先を確認しておく必要があります。
主要ライブラリの選び方
本体には11個の標準ライブラリが同梱されています。BuiltIn(自動で読み込まれる基本キーワード)、Collections、DateTime、Dialogs、OperatingSystem、Process、Remote、Screenshot、String、Telnet、XMLです。それ以外は公式サイトのライブラリ一覧から、テスト対象に合わせて追加します。
Webテスト:BrowserライブラリとSeleniumLibrary
Webテストのライブラリは2つあり、新規に始めるならBrowserライブラリを勧めます。BrowserはPlaywrightを裏で動かし、要素の出現を待つ処理と、期待値が一致するまでの再試行を自動で行います。SeleniumLibraryはSelenium WebDriverを使い、待機は Wait Until Element Is Visible などで自分で書く場面が多くなります。
| 項目 | Browser | SeleniumLibrary |
|---|---|---|
| 最新版 | 20.6.0(2026-10-03) | 6.9.0(2026-05-17) |
| 裏側の技術 | Playwright | Selenium 4.25.0以降 |
| Python | 3.10以降 | 3.10以降 |
| 追加で必要なもの | Node.js 22・24([bb]版は不要) | ブラウザ本体 |
| 待機 | 自動(再試行は既定1秒) | 明示的に書く |
BrowserライブラリのREADMEの手順では、pipで入れたあと rfbrowser init でNode.jsの依存とブラウザを入れます。既定ではChromium・Firefox・WebKitの3つが入り、READMEには通常700MB以上と書かれています。Chromiumだけでよければ rfbrowser init chromium と指定できます。Node.jsを入れたくない環境向けには、pip install robotframework-browser[bb] と rfbrowser install で済む方法もあります。
pip install robotframework-browser
rfbrowser init chromium
Get Text に期待値を渡すと、一致するまで再試行します。ただし再試行は既定で1秒(retry_assertions_for)までで、ボタンを押して0.8秒後に文字が出るページは成功し、1.8秒後のページは失敗しました。次の例のように retry_assertions_for=3s を指定すると、1.8秒のページでも成功します。パスワードは7.4のSecret型の変数で Fill Secret に渡すのが推奨の書き方で、output.xmlに値は残りません(Playwrightのデバッグログには平文で出ます)。
*** Settings ***
Library Browser retry_assertions_for=3s
Suite Setup New Browser chromium headless=True
Suite Teardown Close Browser
*** Variables ***
${PASSWORD: Secret} %{APP_PASSWORD}
*** Test Cases ***
ログインするとメッセージが出る
New Page http://127.0.0.1:18766/index.html
Fill Text id=user taro
Fill Secret id=pass ${PASSWORD}
Click id=login
Get Text id=msg == ようこそ taro
Seleniumで組んだテストやSelenium Gridの環境が既にあるなら、SeleniumLibraryを続ける方が移行の手間がかかりません。両者の仕組みの違いはSeleniumとは?WebDriverの仕組みと4系の実行手順・ツール選定を解説とPlaywright(プレイライト)とは?仕組み・できること・Seleniumとの違いを解説で説明しています。
APIテスト:RequestsLibrary
REST APIのテストには、Pythonのrequestsを包んだRequestsLibraryを使います。PyPIの安定版は0.9.7(2024年4月公開)で、1.0系はプレリリースのままです。Create Session で接続先を決め、GET On Session や POST On Session で呼び出します。expected_status を指定しない場合、4xx・5xxの応答はその場で失敗になります。
*** Settings ***
Library RequestsLibrary
Suite Setup Create Session api http://127.0.0.1:18765
Suite Teardown Delete All Sessions
*** Test Cases ***
ユーザーを1件取得できる
${resp}= GET On Session api /users/1
Should Be Equal As Strings ${resp.json()}[name] Taro
ユーザーを登録できる
&{body}= Create Dictionary name=Hanako
${resp}= POST On Session api /users json=${body} expected_status=201
Should Be Equal As Integers ${resp.json()}[id] 2
存在しないユーザーは404になる
GET On Session api /users/999 expected_status=404
手元に立てた検証用のAPIサーバーに対して、3件とも成功しました。画面を伴わないAPIの確認だけなら、GUIで組めるPostmanとは?APIテスト自動化とNewmanでのCI組み込みまで実装手順で解説の方が手早い場合もあります。WebとAPIを同じスイートで流したいときにRobot Frameworkを選びます。
モバイル・DB・SSHのライブラリと保守状況
モバイルアプリはAppiumLibrary(3.2.1)でAppiumサーバー経由で操作します。Appium側の現状はAppium Desktopは終了|Appium 3時代のInspector移行とモバイルテスト自動化を参照してください。データベースの値の確認にはDatabaseLibrary(2.5.0)、サーバーへのSSH操作にはSSHLibraryがあります。SSHLibraryはPyPIの最新が3.8.0(2021年11月)で更新が止まっているため、新しいPythonで動くかは導入前に確かめてください。
CI/CDでの自動実行:GitHub ActionsとJenkins
CIで回すときは、終了コード(失敗数)で合否を判定し、log.htmlとreport.htmlを成果物として保存します。GitHub Actionsなら次の設定が最小構成です。if: always() を付けておくと、テストが失敗した回でもレポートが残ります。
name: robot-tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v7
with:
python-version: "3.12"
- run: pip install robotframework robotframework-requests
- run: robot --outputdir results tests
- uses: actions/upload-artifact@v7
if: always()
with:
name: robot-results
path: results
Jenkinsでは、Robot Frameworkプラグイン(2026年10月時点の最新は9月公開の6.3.0)を入れると、output.xmlを読んでビルドごとの成否の推移とログをJenkinsの画面に表示できます。テストの層をどう分けてCIに載せるかは、テストピラミッドとは?単体・結合・E2Eの配分と実装者向けテスト戦略設計で扱っています。CIの仕組みづくりから相談したい場合は、DevOps・CI/CD導入支援でもお手伝いしています。
Robot Frameworkを選ばない方がよい場面
キーワード駆動は、テストを読む人が多いほど効きます。逆に、次の条件では別の道具の方が合います。
- 開発者だけがテストを書く:TypeScriptのフロントエンドで、テストも開発者が書くなら、Playwright Testを直接使う方がデバッグも型補完も素直です。キーワードの層は翻訳の手間になります。
- 単体テストが中心:関数単位のテストはpytestなど言語ごとのテストランナーで書きます。Robot Frameworkは何もしないテスト1,000件でも実行に約8秒かかり、結果ファイルも毎回生成されるため、数千件の単体テストには向きません。
- キーワードを整備する人がいない:自作キーワードの命名と共通化を誰も見ないと、似たキーワードが増えて保守が破綻します。導入時にキーワードの置き場所(resourceファイル)と命名の決まりを1人が持つ体制を作ってください。
よくある質問
Robot Frameworkとは何ですか?
テストの手順をキーワードの並びで書く、Python製のオープンソースのテスト自動化フレームワークです。ブラウザやAPIの操作はライブラリが担い、本体は実行とログ・レポートの生成を受け持ちます。
Robot Frameworkの最新バージョンはいくつですか?
2026年10月時点の最新版は7.5(2026年9月14日公開)です。Python 3.8以降で動きます。最新の版はPyPIのrobotframeworkのページで確認できます。
Robot FrameworkはJavaで使えますか?
Java上(Jython)での実行は5.0で終わり、現在はPythonでのみ動きます。Javaのコードは、Remoteライブラリ経由で呼び出します。
Robot FrameworkはRPAツールですか?
画面録画型の商用RPA製品とは別物です。ただし *** Tasks *** で書くか --rpa を付けると、テスト以外の定型作業を自動化するタスクとして実行できます。
BrowserライブラリとSeleniumLibraryはどちらを使うべきですか?
新規ならBrowserライブラリ、既存のSeleniumのテスト資産やSelenium Gridがある場合はSeleniumLibraryです。