実際のプロジェクトにおける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つの方法が検討されます:
- Swagger/OpenAPI: ドキュメント作成には最適ですが、このインターフェース上で自動テストスクリプトを書くのはかなり煩雑です。
- VS Code REST Client: 非常に優れた拡張機能で、APIを
.httpファイルに保存できます。しかし、数百もの複雑なAPIを管理する場合、テキストベースのインターフェースでは限界があります。 - 現状を受け入れる: 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を管理できる便利さを一度知ってしまうと、もう元のツールには戻れなくなるはずです。
