jpskill.com
🛠️ 開発・MCP コミュニティ

bruno

オープンソースのAPIクライアントであるBrunoを活用し、APIリクエストの作成やテスト、コレクションの整理、Git連携による共同作業など、API開発における様々な作業を効率的に支援するSkill。

📜 元の英語説明(参考)

Test and debug APIs with Bruno, the open-source API client. Use when a user asks to create API requests, organize collections, write test scripts, use environments and variables, or collaborate on API workflows stored in Git.

🇯🇵 日本人クリエイター向け解説

一言でいうと

オープンソースのAPIクライアントであるBrunoを活用し、APIリクエストの作成やテスト、コレクションの整理、Git連携による共同作業など、API開発における様々な作業を効率的に支援するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o bruno.zip https://jpskill.com/download/14705.zip && unzip -o bruno.zip && rm bruno.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/14705.zip -OutFile "$d\bruno.zip"; Expand-Archive "$d\bruno.zip" -DestinationPath $d -Force; ri "$d\bruno.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して bruno.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → bruno フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

Bruno — GitフレンドリーなAPIクライアント

概要

あなたは、コレクションをGitリポジトリ内のプレーンテキストファイルとして保存する、オープンソースのAPIクライアントであるBrunoのエキスパートです。Postman(クラウド同期、プロプライエタリな形式)とは異なり、Brunoは人間が読める形式(Bru)を使用し、コードと一緒に存在します。つまり、バージョン管理、レビュー可能、そしてGit経由で共有可能です。

手順

コレクションの構造

api-collection/
├── bruno.json                    # コレクションの設定
├── environments/
│   ├── dev.bru
│   ├── staging.bru
│   └── production.bru
├── auth/
│   ├── login.bru
│   ├── register.bru
│   └── refresh-token.bru
├── users/
│   ├── list-users.bru
│   ├── get-user.bru
│   ├── create-user.bru
│   └── update-user.bru
└── orders/
    ├── list-orders.bru
    ├── create-order.bru
    └── process-refund.bru

Bruファイルの形式

# auth/login.bru — 人間が読める、Gitで差分可能な形式

meta {
  name: Login
  type: http
  seq: 1
}

post {
  url: {{baseUrl}}/api/auth/login
  body: json
  auth: none
}

headers {
  Content-Type: application/json
}

body:json {
  {
    "email": "{{testEmail}}",
    "password": "{{testPassword}}"
  }
}

script:post-response {
  // 後続のリクエストのためにトークンを保存
  if (res.status === 200) {
    bru.setVar("authToken", res.body.token);
    bru.setVar("userId", res.body.user.id);
  }
}

tests {
  test("should return 200", () => {
    expect(res.status).to.equal(200);
  });

  test("should return token", () => {
    expect(res.body.token).to.be.a("string");
    expect(res.body.token.length).to.be.greaterThan(0);
  });

  test("should return user", () => {
    expect(res.body.user.email).to.equal("{{testEmail}}");
  });
}

環境

# environments/dev.bru
vars {
  baseUrl: http://localhost:3000
  testEmail: test@example.com
  testPassword: testpass123
}

vars:secret [
  stripeKey,
  dbPassword
]

スクリプト

// Pre-request script — 送信する前に実行
const crypto = require("crypto");
const timestamp = Date.now().toString();
const signature = crypto
  .createHmac("sha256", bru.getVar("apiSecret"))
  .update(timestamp)
  .digest("hex");

bru.setVar("timestamp", timestamp);
bru.setVar("signature", signature);

// Post-response script — レスポンスを処理
if (res.status === 200) {
  const users = res.body.data;
  bru.setVar("firstUserId", users[0].id);
  console.log(`Found ${users.length} users`);
}

// リクエストのチェーン — 前のリクエストの変数を使用
// login.bru は {{authToken}} を設定
// create-order.bru は auth ヘッダーで {{authToken}} を使用

CI/CDのためのCLI

# CLIをインストール
npm install -g @usebruno/cli

# コレクション全体を実行
bru run --env dev

# 特定のフォルダーを実行
bru run auth/ --env dev

# カスタム環境変数で実行
bru run --env production --env-var apiKey=sk_live_xxx

# CIのためにJUnit XMLを出力
bru run --env dev --output results.xml --format junit

インストール

# デスクトップアプリ (GUI)
# https://www.usebruno.com/downloads からダウンロード

# CLI
npm install -g @usebruno/cli

例1:ユーザーがbrunoのセットアップを依頼

ユーザー:「プロジェクトのためにbrunoをセットアップするのを手伝ってください」

エージェントは以下を行う必要があります。

  1. システム要件と前提条件を確認
  2. brunoをインストールまたは設定
  3. 初期プロジェクト構造をセットアップ
  4. セットアップが正しく動作することを確認

例2:ユーザーがbrunoで機能を構築することを依頼

ユーザー:「brunoを使用してダッシュボードを作成してください」

エージェントは以下を行う必要があります。

  1. コンポーネントまたは構成をスキャフォールド
  2. 適切なデータソースに接続
  3. 要求された機能を実装
  4. 出力をテストおよび検証

ガイドライン

  1. Gitファーストのワークフロー — アプリケーションコードの隣のレポにBrunoコレクションを保存します。PRでAPIの変更をレビューします。
  2. 設定のための環境ファイル — ベースURLとクレデンシャルに環境を使用します。vars:secretとしてマークされたシークレットはコミットされません。
  3. テストアサーション — すべてのリクエストでテストを記述します。CIでそれらを実行して、APIの回帰をキャッチします。
  4. スクリプトのチェーンbru.setVar()をpost-responseスクリプトで使用して、リクエスト間でデータ(トークン → 後続の呼び出し)を渡します。
  5. フォルダーの整理 — API構造(auth/、users/、orders/)を反映します。各フォルダーは、独自のpre-requestスクリプトを持つことができます。
  6. CI/CDの統合 — デプロイ後にbru run --env stagingを実行して、APIコントラクトを検証します。テストの失敗時にパイプラインを失敗させます。
  7. クラウド依存性なし — Postmanとは異なり、コレクションがマシンまたはレポから離れることはありません。同期、クラウド、アカウントは不要です。
  8. リクエストとしてのドキュメント — Brunoコレクションは、生きたAPIドキュメントとして機能します。新しいチームメンバーはリクエストを実行して、APIを理解します。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Bruno — Git-Friendly API Client

Overview

You are an expert in Bruno, the open-source API client that stores collections as plain text files in your Git repository. Unlike Postman (cloud-synced, proprietary format), Bruno uses a human-readable format (Bru) that lives alongside your code — versioned, reviewable, and shareable via Git.

Instructions

Collection Structure

api-collection/
├── bruno.json                    # Collection config
├── environments/
│   ├── dev.bru
│   ├── staging.bru
│   └── production.bru
├── auth/
│   ├── login.bru
│   ├── register.bru
│   └── refresh-token.bru
├── users/
│   ├── list-users.bru
│   ├── get-user.bru
│   ├── create-user.bru
│   └── update-user.bru
└── orders/
    ├── list-orders.bru
    ├── create-order.bru
    └── process-refund.bru

Bru File Format

# auth/login.bru — Human-readable, Git-diffable

meta {
  name: Login
  type: http
  seq: 1
}

post {
  url: {{baseUrl}}/api/auth/login
  body: json
  auth: none
}

headers {
  Content-Type: application/json
}

body:json {
  {
    "email": "{{testEmail}}",
    "password": "{{testPassword}}"
  }
}

script:post-response {
  // Save token for subsequent requests
  if (res.status === 200) {
    bru.setVar("authToken", res.body.token);
    bru.setVar("userId", res.body.user.id);
  }
}

tests {
  test("should return 200", () => {
    expect(res.status).to.equal(200);
  });

  test("should return token", () => {
    expect(res.body.token).to.be.a("string");
    expect(res.body.token.length).to.be.greaterThan(0);
  });

  test("should return user", () => {
    expect(res.body.user.email).to.equal("{{testEmail}}");
  });
}

Environments

# environments/dev.bru
vars {
  baseUrl: http://localhost:3000
  testEmail: test@example.com
  testPassword: testpass123
}

vars:secret [
  stripeKey,
  dbPassword
]

Scripting

// Pre-request script — runs before sending
const crypto = require("crypto");
const timestamp = Date.now().toString();
const signature = crypto
  .createHmac("sha256", bru.getVar("apiSecret"))
  .update(timestamp)
  .digest("hex");

bru.setVar("timestamp", timestamp);
bru.setVar("signature", signature);

// Post-response script — process responses
if (res.status === 200) {
  const users = res.body.data;
  bru.setVar("firstUserId", users[0].id);
  console.log(`Found ${users.length} users`);
}

// Chain requests — use variables from previous responses
// login.bru sets {{authToken}}
// create-order.bru uses {{authToken}} in auth header

CLI for CI/CD

# Install CLI
npm install -g @usebruno/cli

# Run entire collection
bru run --env dev

# Run specific folder
bru run auth/ --env dev

# Run with custom environment variables
bru run --env production --env-var apiKey=sk_live_xxx

# Output JUnit XML for CI
bru run --env dev --output results.xml --format junit

Installation

# Desktop app (GUI)
# Download from https://www.usebruno.com/downloads

# CLI
npm install -g @usebruno/cli

Examples

Example 1: User asks to set up bruno

User: "Help me set up bruno for my project"

The agent should:

  1. Check system requirements and prerequisites
  2. Install or configure bruno
  3. Set up initial project structure
  4. Verify the setup works correctly

Example 2: User asks to build a feature with bruno

User: "Create a dashboard using bruno"

The agent should:

  1. Scaffold the component or configuration
  2. Connect to the appropriate data source
  3. Implement the requested feature
  4. Test and validate the output

Guidelines

  1. Git-first workflow — Store Bruno collections in your repo next to application code; review API changes in PRs
  2. Environment files for config — Use environments for base URLs and credentials; secrets marked as vars:secret are never committed
  3. Test assertions — Write tests in every request; run them in CI to catch API regressions
  4. Script chaining — Use bru.setVar() in post-response scripts to pass data between requests (token → subsequent calls)
  5. Folder organization — Mirror your API structure (auth/, users/, orders/); each folder can have its own pre-request scripts
  6. CI/CD integration — Run bru run --env staging after deployment to verify API contract; fail the pipeline on test failures
  7. No cloud dependency — Unlike Postman, your collections never leave your machine or repo; no sync, no cloud, no account required
  8. Documentation as requests — Bruno collections serve as living API documentation; new team members run requests to understand the API