
resterm v0.49.1
HTTP/GraphQL/gRPC向けのターミナルAPIクライアント。SSHトンネル、WebSocket、SSE、ワークフロー、プロファイリング、OpenAPI、Kubernetesポートフォワーディング、ヘッドレスAPIをサポート。
Resterm
ターミナルネイティブな REST・GraphQL・gRPC・WebSocket・SSE 対応の API クライアント兼ワークベンチ。
Resterm は API-as-code ワークベンチ、つまりもう少し馴染みのある言い方をすれば API クライアントであり、diff・レビュー・バージョン管理が可能なプレーンな .http ファイルと .rest ファイルを中心に構築されています。対話的なリクエスト編集と、宣言型ワークフロー、アサーション、モックサーバー、トレーシング、プロファイリング、ヘッドレス自動化を組み合わせます。すべてはお使いのマシン上に留まります。アカウント不要、クラウド同期なし、テレメトリなし。
GUI コレクション中心の Postman 風クライアントをお探しなら、Resterm はおそらく 向いていません が、それでも試してみてください!
[!NOTE] Resterm は v1 になりました! 新機能と破壊的変更については v1.0.0 リリースノート を参照してください。
クイックリンク: スクリーンショット、インストール、クイックスタート、ドキュメント。
スクリーンショットツアー
UI の動作を見る(クリックで展開)
ワークフロー
トレースとタイムライン
プロファイラー
Explain
RestermScript
ライトテーマ
OAuth ブラウザデモ(旧 UI デザイン)
Resterm の特長
- HTTP、GraphQL、gRPC、WebSocket、SSE を標準でサポート。
- 自動化はリクエストファイルの中に: 条件分岐(
@when、@if/@elif/@else、@for-each)、複数ステップのワークフロー(@workflow/@step)、キャプチャ、変数、アサーション(@capture、@var、@assert)。 - RestermScript は Resterm のために作られた小さな式言語で、必要に応じて JavaScript フックも使えます。
- Vim スタイルの操作。コンテキストに応じた下部バーのヒント、検索可能なオフラインヘルプ、カーソル位置での
Kヘルプ、/検索、:w、:q、:help、:docsなどのコマンドを備えます。 - 認証とトンネリングを内蔵: OAuth 2.0(client credentials、password、PKCE 付き auth code)、既存の CLI を利用した認証、SSH トンネル、Kubernetes port-forward。追加ツールは不要です。
- CLI ランナー: スクリプト実行と CI のための
resterm run。JSON と JUnit 出力に対応。 - モックサーバー は、模倣対象のリクエストの隣に宣言します。マッチングルール、シーケンス、呼び出し検証、ホットリロードに対応。
- 環境をまたいだ タイムラインのトレーシング、プロファイリング、実行結果の比較。
- WebSocket と SSE のための ストリーミングのトランスクリプト と対話型コンソール。
- AI 連携は 一切ありません。
クイックスタート
-
Resterm をインストールします(スクリプト、Windows、手動インストールについては インストール を参照)。
brew install resterm -
ワークスペースを初期化します。
mkdir my-api && cd my-api resterm initresterm initは、インターネット接続なしで動作する小さなプロジェクトを生成します。生成されるrequests.httpには、ローカルモックシナリオと、相互に連携するいくつかのリクエストが含まれます。これらは、アサーション、ベアラー認証、JSON マッチング、json-rules、@for-eachをカバーしています。 -
起動して最初のリクエストを送信します。
restermエディタで
Ctrl+Enterを押すと、ハイライトされたリクエストを送信できます。
まだファイルがない? その場合は resterm を実行して URL を入力し、Ctrl+Enter を押すだけです。curl コマンドの貼り付けもそのまま使えます。
CLI
resterm run は TUI を開かずに .http / .rest ファイルを実行します。CI で実行されるのはこちらです。
resterm run --request CreateUser requests.http
生成されたプロジェクトはローカルモックサーバーと通信します。先に別のターミナルで起動してください:
resterm mock requests.http
TUI では、代わりに g Shift+M を押すと、ワークスペースから同じモックサーバーを起動できます。
CLI ドキュメント では、セレクタ、出力形式、その他の例を説明しています。
モックサーバー
リクエストを格納しているのと同じファイルで HTTP モックを提供できます。
- クエリ、ヘッダー、JSON ボディで受信リクエストをマッチングし、名前付きまたはデフォルトのレスポンスを選択します。
- レスポンスのシーケンスを使ってポーリングやリトライのフローをモデル化できます。リソースや呼び出し元ごとの独立したカーソルにも対応します。
- レスポンスを固定時間遅延させたり、
random、normal、jitterを使ってリクエストごとに異なる遅延を設定したりできます。 - パス、クエリ、ヘッダー、ボディの値からレスポンスを構築でき、動的データ用のジェネレータも用意されています。
@expectで呼び出し回数を検証したり、RestermScript から受信トラフィックを検査したりできます。- ソースファイルとフィクスチャをホットリロードできます。TLS もオプションで利用可能です。
1 つのルートに 2 つのシナリオ:
### Payment accepted
# @mock method=POST path=/payments name=accepted default=true latency=150ms
HTTP/1.1 202 Accepted
Content-Type: application/json
{"id":"pay_123","status":"pending"}
### Payment declined
# @mock method=POST path=/payments name=declined
# @match query={"mode":"decline"} headers={"X-Tenant":"demo"} json={"amount":0}
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
{"error":"amount must be positive"}
1 つのファイルでもディレクトリ全体でも配信できます:
resterm mock ./requests.http
resterm mock --recursive --addr 127.0.0.1:9090 ./requests
詳細は モックサーバーリファレンス、resterm mock CLI ガイド、動作例 を参照してください。
ヘッドレス
headless パッケージは、TUI と CLI を支えるのと同じエンジンの公開 Go API です。独自の Go コードや CI から、リクエスト、ワークフロー、アサーション、実行比較、プロファイルを実行できます。
自分でランナーを構築したくない場合は、resterm-runner があります。
キーボード早見表
- ペインのフォーカスとレイアウト
Tab/Shift+Tab: サイドバー、エディタ、レスポンスの間を移動します。g+r、g+i、g+p: リクエスト、エディタ、レスポンスへジャンプします。g+h/g+l: 水平方向にリサイズします。サイドバーにフォーカスがあるときはサイドバーの幅を、それ以外のときはエディタ/レスポンスの分割幅を変更します。g+j/g+k: スタック表示時はエディタ/レスポンスの高さをリサイズし、ナビゲータではブランチを折りたたみ/展開します。g+v/g+s: レスポンスペインをインラインとスタックレイアウトの間で切り替えます。g+1、g+2、g+3: サイドバー、エディタ、レスポンスを最小化または復元します。g+z/g+Z: フォーカス中のペインをズーム、ズームを解除します。
- 環境とグローバル変数
Ctrl+E: 環境を切り替えます。Ctrl+G: キャプチャされたグローバル変数を確認します。
- ヘルプとコマンド
?: 検索可能なオフラインヘルプの索引を開きます。K(エディタのノーマルモード): カーソル位置のディレクティブ、テンプレート、キーワードのヘルプを開きます。:help <topic>/:man <topic>: 組み込みトピックを開きます。:docs <topic>はバージョン対応の完全マニュアルを開きます。Ctrl+O: ファイル/ワークスペースのポップアップを開きます。入力してフィルタリングし、Up/Downでスクロール、Tabでディレクトリに入ります。:: コマンドラインを開きます。Up/Downで候補を選択、Tabで補完、Enterで選択を確定して実行します。:mock start --sourceや:editなどのパス引数は、同じポップアップ内でファイルシステムを閲覧します。
- レスポンス
Ctrl+V/Ctrl+U: レスポンスペインを分割して並べて比較します。Ctrl+Shift+Cまたはg y(レスポンスにフォーカス時): Pretty、Raw、Headers タブ全体をコピーします。g x: 送信せずに、アクティブなリクエストの Explain プレビューを表示します。g e: 現在のファイルを外部エディタで開きます。
[!TIP] 3 つだけ覚えるなら:
Ctrl+Enterでリクエストを送信Tab/Shift+Tabでペインを切り替えg+pでレスポンスへジャンプ
インストール
Linux / macOS(Homebrew)
brew install resterm
[!NOTE] Homebrew でインストールした場合は Homebrew で更新してください(
brew upgrade resterm)。組み込みのresterm --updateコマンドは、GitHub リリースまたはインストールスクリプトからインストールしたバイナリを対象としています。
Linux / macOS(シェルスクリプト)
[!IMPORTANT] プリビルドの Linux バイナリは glibc 2.32 以降に依存しています。古いディストリビューションでは、新しい glibc ツールチェーンでソースからビルドするか、リリースアーカイブを使用する前に glibc をアップグレードしてください。
curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
または wget の場合:
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash
Windows(PowerShell)
iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex
スクリプトはお使いのアーキテクチャを検出し、最新リリースをダウンロードしてバイナリをインストールします。
手動インストール
[!NOTE] 手動インストールのヘルパーは
curlとjqを使用します。jqはパッケージマネージャでインストールしてください(brew install jq、sudo apt install jqなど)。
Linux / macOS
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)
# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"
# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm
Windows(PowerShell)
$latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest
$asset = $latest.assets | Where-Object { $_.name -like 'resterm_Windows_*' } | Select-Object -First 1
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe
# Optionally relocate to a directory on PATH, e.g.:
Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"
ソースからビルド
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest
アップデート
resterm --check-update
resterm --update
最初のコマンドは新しいリリースが利用可能かどうかを報告します。2 番目のコマンドはダウンロード、検証、その場でのインストールを実行します。Windows では、古いバイナリは resterm.exe.old として新しいバイナリの隣に残り、次回のアップデート時に削除されます。
設定
- 環境は JSON ファイル(
resterm.env.json)で、リクエストディレクトリ、ワークスペースルート、または CWD から検出されます。1 つのファイルで、api、app、credentials などの名前付き環境や独立したグループを定義でき、それらが 1 つの環境に結合されます。Dotenv ファイル(.env、.env.*)は--env-fileによるオプトインで、単一ワークスペース向けです。グループ化された環境 と_examples/grouped/にある実行可能なサンプルを参照してください。 - 設定は OS ごとに保存され、
RESTERM_CONFIG_DIRで上書きできます:- macOS:
~/Library/Application Support/resterm - Windows:
%APPDATA%\resterm - Linux/Unix:
~/.config/resterm
- macOS:
コレクション
ワークスペースを Git フレンドリーなバンドルとしてエクスポートし、別のワークスペースにインポートできます。バンドルにはチェックサム付きの manifest.json が含まれるため、インポート時はまずファイルの整合性が検証されます。環境値は REPLACE_ME プレースホルダーとしてエクスポートされるため、シークレットがマシンの外に出ることはありません。
resterm collection export --workspace ./my-api --out ./shared/my-api-bundle
resterm collection import --in ./shared/my-api-bundle --workspace ./my-local-api
--dry-run を付けるとインポートをプレビューでき、--force で既存ファイルを上書きできます。ドキュメント: コレクションの共有。
Curl インポート
curl コマンドをエディタに貼り付けて Ctrl+Enter を押すと、構造化されたリクエストに変換されます。Resterm は一般的なフラグを理解し、繰り返されるデータセグメントをマージし、マルチパートアップロードをそのまま保持します。sudo や $ などのシェルプレフィックスは無視されます。CLI でも --from-curl で同じ変換ができます。
次のコマンド:
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
--user demo:secret \
-d '{"user":"demo"}'
は次のようになります:
### POST https://api.example.com/login
# @auth basic demo secret
POST https://api.example.com/login
Content-Type: application/json
{"user":"demo"}
ドキュメント: インラインリクエスト と インポート例。
RestermScript
RestermScript(RTS)は Resterm のために作られた小さな式言語です。リクエスト形式、ワークフロー、ディレクティブを直接対象とするため、スクリプトは簡潔で予測可能です。さらに必要な場合に備えて JavaScript フックも利用できます。
簡単な例(RTS モジュール + リクエスト):
// rts/helpers.rts
module helpers
export fn authHeader(token) {
return token ? "Bearer " + token : ""
}
# @use ./rts/helpers.rts
# @when env.has("feature")
# @assert response.statusCode == 200
GET https://api.example.com/users/{{= vars.get("user") }}
Authorization: {{= helpers.authHeader(vars.get("auth.token")) }}
完全なリファレンス: docs/restermscript.md。
詳細解説
OAuth 2.0
client credentials、password grant、PKCE 付き authorization code に対応しています。auth code フローでは、Resterm がブラウザを開き、127.0.0.1 上でローカルコールバックサーバーを実行して、リダイレクトを捕捉し、コードを交換します。トークンは環境ごとにキャッシュされ、期限切れになると更新されます。ドキュメント: docs/resterm.md#oauth-20-directive と _examples/oauth2.http。
ワークフローとスクリプティング
@workflow と @step でリクエストを連結し、ステップ間でデータを受け渡し、必要に応じて JS フックを追加できます。ドキュメントとサンプル: docs/resterm.md#workflows と _examples/workflows.http。
実行結果の比較
@compare または --compare を使用して同じリクエストを複数の環境で実行し、g+c でレスポンスを並べて差分を確認できます。ドキュメント: docs/resterm.md#compare-runs。
トレーシングとタイムライン
予算付きの @trace を追加すると、DNS、connect、TLS、TTFB、転送のタイミングを取得できます。Resterm は超過をハイライトし、スパンを OpenTelemetry にエクスポートできます。ドキュメント: docs/resterm.md#timeline--tracing。
ストリーミング(WebSocket と SSE)
@ws ステップ付きの @websocket または @sse を使用して、ストリームのスクリプト化と記録ができます。Stream タブにはトランスクリプトが保持され、対話型コンソールも含まれます。ドキュメント: docs/resterm.md#streaming-sse--websocket。
gRPC
トランスクリプト、メタデータ、ボディ展開に対応した Unary 呼び出しとストリーミング呼び出し。ドキュメント: docs/resterm.md#grpc。
OpenAPI インポート
--from-openapi を使用して、ローカルファイルまたは http(s) URL から OpenAPI 3 仕様を .http コレクションに変換できます。生成するブロックは --openapi-mode requests、mocks、both で選択します。リモート取得時はグローバルの --insecure と --proxy フラグが尊重されます。ドキュメント: docs/cli.md#import-examples。
SSH トンネル
@ssh プロファイルを使用して、HTTP、gRPC、WebSocket、SSE のトラフィックを踏み台サーバー経由でルーティングできます。ドキュメント: docs/resterm.md#ssh-tunnels と _examples/ssh.http。
Kubernetes port-forward
同じ考え方を @k8s プロファイルで実現し、Pod、Service、Deployment、StatefulSet を対象にできます。ドキュメント: docs/resterm.md#kubernetes-port-forwards と _examples/k8s.http。
テーマとキーバインド
設定ディレクトリ内の themes/*.toml と bindings.toml または bindings.json で、色とキーバインドをカスタマイズできます。ドキュメント: docs/resterm.md#theming と docs/resterm.md#custom-bindings。
ドキュメント
docs/resterm.mdは、リクエスト構文、ディレクティブ、スクリプティング、トランスポートを解説しています。docs/cli.mdは、resterm run、インポーター、コレクション、履歴を解説しています。- 互換性 は、v1 における Resterm の互換性保証を説明しています。
TUI 内では ? を押すか、:help を実行してください。インストールしているリリースの完全な Web マニュアルが必要な場合は :docs を使用してください。