Insomnia

GitHub概要

Kong/insomnia

The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.

スター36,727
ウォッチ250
フォーク2,094
作成日:2016年4月23日
言語:TypeScript
ライセンス:Apache License 2.0

トピックス

apiapi-clientapi-designcurlelectron-appgraphqlgrpchttp-clientrest-apiwebsockets

スター履歴

Kong/insomnia Star History
データ取得日時: 2025/7/15 07:45

API開発ツール

Insomnia

概要

Insomnia(インソムニア)は、Kong社が開発するシンプルかつ強力なAPIクライアントです。美しく直感的なUIとGraphQL、REST、WebSocket、gRPC、SSEなど幅広いプロトコル対応が特徴で、開発者体験を重視した設計により、API開発とテストのワークフローを大幅に改善できます。

詳細

Insomnia は2016年にGregory Schier氏によって開発された、オープンソースのクロスプラットフォームAPIクライアントです。2019年にKong社が買収し、Kong StudioとしてKongエコシステムの一部として提供されています。Insomniaの最大の特徴は、複数のAPIプロトコルを統一的にサポートしていることです。REST APIはもちろん、GraphQLクエリ、WebSocketリアルタイム通信、gRPCサービス、Server-Sent Events (SSE)まで、現代のAPI開発で必要なあらゆるプロトコルに対応しています。特にGraphQL対応においては、スキーマイントロスペクション、クエリ補完、構文ハイライト、レスポンス検証など、GraphQL開発に特化した機能が充実しています。ストレージオプションとして、ローカル保存、クラウド同期、Gitリポジトリ連携を選択でき、チーム開発での柔軟性を提供しています。Kong買収後は、OpenAPIエディタ、モックサーバー機能、Kong Gatewayとの連携など、エンタープライズ向け機能が大幅に拡張されました。

メリット・デメリット

メリット

  • 多様なプロトコル対応: REST、GraphQL、WebSocket、gRPC、SSEまで幅広くサポート
  • 優れたGraphQL体験: スキーマ探索、クエリ補完、構文ハイライトが充実
  • 美しいUI: 直感的で視覚的に分かりやすいインターフェース設計
  • 柔軟なストレージ: ローカル、クラウド、Git連携から選択可能
  • オープンソース: 無料で利用でき、カスタマイズも可能
  • Kong ecosystem: Kong GatewayやKong Studioとのシームレスな連携
  • プラットフォーム対応: Windows、macOS、Linuxで利用可能

デメリット

  • 学習コスト: 多機能なため初心者には習得に時間が必要
  • メモリ使用量: Electronベースのため動作が重い場合がある
  • エンタープライズ機能: 高度な機能は有料プランが必要
  • プラグイン少なさ: Postmanと比較するとプラグインエコシステムが限定的

参考ページ

書き方の例

基本的なRESTリクエスト

# GET リクエストの設定
GET https://api.example.com/users/{{userId}}
Authorization: Bearer {{accessToken}}
Content-Type: application/json

# 環境変数の設定例
{
  "baseUrl": "https://api.example.com",
  "accessToken": "your-jwt-token",
  "userId": "12345"
}

GraphQLクエリの実行

# GraphQLクエリ例
query GetUserProfile($userId: ID!) {
  user(id: $userId) {
    id
    name
    email
    posts {
      id
      title
      content
      createdAt
    }
  }
}

# Variables
{
  "userId": "user123"
}

# Headers
{
  "Authorization": "Bearer {{graphqlToken}}",
  "Content-Type": "application/json"
}

WebSocketリアルタイム通信

// WebSocket接続の設定
URL: wss://api.example.com/chat
Headers: {
  "Authorization": "Bearer {{wsToken}}"
}

// 送信メッセージ例
{
  "type": "message",
  "content": "Hello WebSocket!",
  "channel": "general"
}

// サブスクリプション例
{
  "type": "subscribe",
  "channel": "notifications"
}

gRPCサービス呼び出し

// Proto定義ファイルの読み込み
// user.proto の内容例
syntax = "proto3";

service UserService {
  rpc GetUser(UserRequest) returns (UserResponse);
  rpc CreateUser(CreateUserRequest) returns (UserResponse);
}

message UserRequest {
  string user_id = 1;
}

message UserResponse {
  string id = 1;
  string name = 2;
  string email = 3;
}

// gRPCリクエスト例
Method: UserService/GetUser
Message: {
  "user_id": "12345"
}

環境とスクリプトの活用

// Pre-request Script例
const timestamp = Date.now();
request.setVariable("timestamp", timestamp);

// JWTトークンの自動取得
if (!request.getVariable("accessToken")) {
  const authResponse = await request.send({
    url: "{{baseUrl}}/auth/login",
    method: "POST",
    data: {
      username: request.getVariable("username"),
      password: request.getVariable("password")
    }
  });
  
  const token = authResponse.getBody().access_token;
  request.setVariable("accessToken", token);
}

// Post-response Script例
const response = insomnia.response.getBody();
if (response.user_id) {
  insomnia.environment.set("currentUserId", response.user_id);
}

// レスポンス検証
expect(response.status).to.equal(200);
expect(response.data.email).to.include("@");

Kong Gateway連携

# Kong Service設定例
services:
  - name: user-api
    url: https://api.example.com
    
routes:
  - name: user-route
    service: user-api
    paths:
      - /api/users

# Insomnia での Kong Gateway経由テスト
GET http://kong-gateway:8000/api/users/{{userId}}
Host: api.example.com
Kong-Debug: 1