さらばPostman:なぜAPI管理とテストにおいてBrunoが新たな「本命」なのか?

Development tutorial - IT technology blog
Development tutorial - IT technology blog

実際のプロジェクトにおけるAPI共有の悩み

以前、5人体制のチームで銀行向けのマイクロサービスプロジェクトに参加したことがあります。当時はチーム全員でPostmanを使用してAPIテストを行っていましたが、非常に面倒なシナリオに直面しました。新しいエンドポイントを追加したりJSON構造を変更したりするたびに、数MBもある重いJSONファイルをエクスポートし、Slackで送信したりJiraに添付したりして、他のメンバーにインポートし直してもらう必要があったのです。

本当の悪夢は、2人が同時に一つのコレクションを編集した時に起こりました。ファイルを送るとデータが上書きされ、重要なテストスクリプトがすべて消えてしまったのです。当時のバージョン管理(version control)はまさに悲惨な状況でした。また、多くの金融系企業では、APIデータをサードパーティのクラウドにアップロードすることを禁止しています。一方で、Postmanはユーザーにログインを強要し、データを自社サーバーに同期させようとし続けていました。

なぜPostmanやInsomniaは肥大化してしまったのか?

問題は機能そのものではありません。Postmanは元々非常に強力なツールです。不満の種は、その設計思想にあります。Postmanは純粋な開発ツールから、複雑なSaaSプラットフォームへと変貌を遂げようとしているのです。

  • Gitとの競合: Postmanのエクスポートファイルは、巨大な1行のJSONの塊です。これをGitに含めると、merge conflict(マージ競合)は避けられません。手動でこれらの競合を解決するのはほぼ不可能です。
  • クラウド利用の強制: 高度な機能を使用するためにログインが必須となったことは、セキュリティ上の懸念を引き起こします。機密性の高いプロジェクトにおいて、これは大きなマイナス要因です。
  • リソース消費: Postmanは通常、500MBから1GB以上のRAMを占有します。不要な機能が多すぎるため、起動速度も遅くなっています。

よくある代替案

この状況から脱却するために、開発者コミュニティでは通常3つの方法が検討されます:

  1. Swagger/OpenAPI: ドキュメント作成には最適ですが、このインターフェース上で自動テストスクリプトを書くのはかなり煩雑です。
  2. VS Code REST Client: 非常に優れた拡張機能で、APIを.httpファイルに保存できます。しかし、数百もの複雑なAPIを管理する場合、テキストベースのインターフェースでは限界があります。
  3. 現状を受け入れる: Postmanを使い続け、不便さと共存する道です。エクスポートやインポートのたびに、細心の注意を払う必要があります。

Bruno — API管理への異なるアプローチ

JSONファイルの競合解決に何度も頭を悩ませた後、私はBrunoに出会いました。これは「Git-friendly(Git親和性)」という考え方に基づいたオープンソースのAPIクライアントです。すべてを一つのファイルにまとめるのではなく、Brunoは各リクエストを個別の.bruファイルとして保存します。これらのファイルは、YAMLに近い形式でプロジェクトのディレクトリ内に直接保存されます。

Brunoのクイックインストール

インストールは非常に軽量です。公式サイトからWindows、macOS、Linux用のインストーラーをダウンロードできます。MacユーザーでHomebrewを使用している場合は、コマンド一つで完了します:

brew install bruno

コレクションの作成とGitへの直接統合

最大の違いは、Brunoではコレクションを作成する際に、ローカルコンピューター上のフォルダを選択する必要がある点です。私は通常、プロジェクトのソースコード内にある/api-testsフォルダを選択します。GETリクエストを作成すると、Brunoは以下のような内容のファイルを生成します:

get {
  url: https://api.itfromzero.com/v1/posts
  body: none
  auth: none
}

query {
  page: 1
  limit: 10
}

この構造は非常に読みやすいです。プレーンテキストなので、同僚はgit pullするだけでテスト用のAPI一式を揃えることができます。手動で何かをインポートする必要はありません。万が一競合が発生しても、通常のコード修正と同じようにVS Codeを使って簡単に比較・修正が可能です。

環境変数(Environments)の管理

BrunoはLocal、Staging、Productionなどの環境をフルサポートしています。環境ファイルを作成してURLやトークンを保存できます。特に「Secret」機能を使えば、機密性の高い変数を隠すことができ、誤ってGitHubにコミットしてしまうのを防げます。変数の呼び出し方は、従来通り{{base_url}}/usersという形式です。

標準JavaScriptによるテストスクリプトの作成

私は以前、5万行以上のコードをリファクタリングしたことがあります。その時の教慶は、開始前に十分なテストカバレッジ(test coverage)を確保しておくことでした。Brunoでは、「Tests」タブ内にJavaScriptスクリプトを記述してレスポンスを検証できます。例えば、APIがステータス200を返し、idフィールドを持っているか確認するには次のように書きます:

test("ステータスコードが200であること", function() {
  expect(res.getStatus()).to.equal(200);
});

test("レスポンスにユーザーIDが含まれていること", function() {
  const data = res.getBody();
  expect(data.id).to.be.a('number');
});

なぜ長期プロジェクトにBrunoを選ぶのか?

チーム開発において、最高のツールとは「最もスムーズな連携を可能にするツール」です。Brunoに移行してから、私たちのチームのワークフローは劇的に変わりました。

  • Pull Request上でAPIをレビュー: バックエンド担当が新しいAPIを追加した際、.bruファイルをプッシュするだけで済みます。私はGitHub上で直接、APIの構造やヘッダーをレビューできます。
  • 100%オフライン動作: Brunoはログインを必要としません。ネット環境のない飛行機の中でも、アプリを開いてテストスクリプトを書くことができます。
  • 圧倒的なスピード: アプリケーションが非常に軽量で、開いてすぐに使えます。以前のように「Syncing…(同期中)」というローディング画面を見てイライラすることはありません。

JSONファイルの管理に疲れたり、セキュリティに不安を感じたりしているなら、今すぐBrunoを試してみてください。最初は保存ボタンがない(自動保存される)ことに違和感を覚えるかもしれません。しかし、GitでAPIを管理できる便利さを一度知ってしまうと、もう元のツールには戻れなくなるはずです。

Share: