DEV Community

Cover image for Apidog Spec-First モード体験:ビジュアルデザイナーだけではない開発の進化
Akira
Akira

Posted on • Originally published at apidog.com

Apidog Spec-First モード体験:ビジュアルデザイナーだけではない開発の進化

私がこれまで関わってきたAPIチームには、だいたい2つの運用パターンがありました。

今すぐApidogを試す

1つ目は、OpenAPI仕様を手で書き、specs/ ディレクトリにコミットし、Gitを唯一の信頼できる情報源として扱うチームです。2つ目は、ビジュアルデザイナーで仕様を作り、CIで問題が出たタイミングで仕様をエクスポートし、UI上の定義とリポジトリ上の定義の差分を後から修正するチームです。

どちらの運用も経験しました。前者は初動が遅い一方で、90日後には速くなります。後者はその逆です。Apidogは長く後者寄りのツールでした。ビジュアルデザイナーは使いやすいものの、YAMLとの往復変換はコードレビューで説明が必要な運用になりがちでした。

しかし4月中旬、新規プロジェクト作成画面にスペックファーストモード(ベータ)が追加されました。ローンチ直後ではなく、実際のサイドプロジェクトのOpenAPI仕様で半日ほど試してから判断しました。この記事では、チームで導入する前に確認すべきポイント、セットアップ手順、向いているケースと向いていないケースを整理します。

スペックファーストモードで変わること

Apidogには現在、性質の異なる2つのプロジェクトモードがあります。

デフォルトの一般モードでは、「+ 新規プロジェクト」からプロジェクトを作成し、フォルダーとフォームベースのUIでエンドポイントを定義します。OpenAPI仕様は内部的に生成されます。YAMLに慣れていないチームや、非エンジニアもAPI定義に関わるチームには引き続き有効です。

一方、スペックファーストモードでは、中心になるのはフォームではなく、実際の .yaml / .json ファイルです。Gitリポジトリとの双方向同期があり、OpenAPI仕様そのものをディスク上のファイルとして扱います。

主な違いは次の通りです。

  • .yaml / .json を直接編集する
  • OpenAPIスキーマに基づく補完が使える
  • 構文ハイライトがある
  • 入力中にパス一覧がサイドバーへ反映される
  • Gitリポジトリと双方向同期できる
  • UIは仕様ファイルのラッパーではなく、仕様ファイルを見るためのビューになる

特に重要なのは、リアルタイムのアウトライン表示です。YAMLの問題は「難しい」ことよりも、構造が長いファイルの中に埋もれやすいことです。Apidogのスペックファーストモードでは、ファイルを直接編集しながら、左側のアウトラインでエンドポイントを移動できます。

ペットストアプロジェクトの編集中であるスペックファーストモードのワークスペース。左サイドバーは自動生成されたパスの概要 — 上部にPaths (224)があり、その後、/store/auth/{email}、/admin/auth、/store/tokenのような個々のルートがファイルから直接生成されていることに注目。右上: Changes (1)インジケーターと緑色のCommit & Pushボタン。左下: Synced just now — 後述の同期ステータスインジケーター。

スペックファースト開発の本質は、テキストエディタが好きかどうかではありません。成果物をどこで管理するかです。スペックファーストモードでは、リポジトリ内のOpenAPIファイルが成果物になります。ApidogのUIは、そのファイルを編集・確認するための作業環境です。

セットアップ手順

実際に試したセットアップ手順は次の通りです。Git認証を含めても、10分程度で完了しました。

1. スペックファーストモードでプロジェクトを作成する

プロジェクト画面から、次の順に進みます。

+ 新規プロジェクト
→ 一般
→ スペックファーストモード
Enter fullscreen mode Exit fullscreen mode

注意点として、一般モードには「推奨」ラベルが付いています。普段どおりにプロジェクトを作ると、スペックファーストモードのタイルを見落としやすいです。OpenAPIファイルをGit中心で管理したい場合は、必ずスペックファーストモードを選びます。

2. Gitリポジトリに接続する

次に、Gitリポジトリと接続 セクションでGitプロバイダーを認証します。

設定する項目は次の3つです。

Organization
Repository
Main branch
Enter fullscreen mode Exit fullscreen mode

私はGitHubで試しました。選択したブランチ内の .yaml / .json ファイルが、Apidog側の作業対象として同期されます。

3. プロジェクト名と権限を設定する

続いて、次を設定します。

Project Name
Team permissions
Enter fullscreen mode Exit fullscreen mode

作成すると、初回同期が走り、リポジトリ内のOpenAPI仕様ファイルがApidogのワークスペースに取り込まれます。

ステップ1〜3は同じダイアログに表示されます。上部: 2つのモードタイル。一般モードには「推奨」のフラグが付いており、スペックファーストモードタイル(右、ベータバッジ、紫色のハイライト)が見逃されやすい理由です。スペックファーストタイルには、その下で変更される内容がリストされています: OpenAPI Spec Editor (Supports Visualization) と Two-way sync with Git repository。下部: Organization、Repository (pet-store)、Main branch (main) のドロップダウンと、Project Nameフィールドがある「Connect with Git Repository」パネル。1つの画面で3つの決定。

4. OpenAPI仕様をファイルとして編集する

同期後、任意のYAMLファイルを開きます。ここでは、フォームではなく実ファイルを編集します。

たとえば、次のようなOpenAPI定義をそのまま編集できます。

openapi: 3.0.3
info:
  title: Pet Store API
  version: 1.0.0

paths:
  /pets:
    get:
      summary: List pets
      responses:
        '200':
          description: A list of pets
Enter fullscreen mode Exit fullscreen mode

編集中は、OpenAPIスキーマに基づく補完が効きます。さらに、paths に追加したエンドポイントはサイドバーのアウトラインに反映されます。アウトライン上のエンドポイントをクリックすると、該当する行へ移動できます。

VS CodeでOpenAPI拡張を使っている人には近い操作感ですが、Apidogではエンドポイント一覧や同期状態も同じ画面で確認できます。

5. 変更をコミットしてプッシュする

変更後は、右上の Commit & Push をクリックします。

ダイアログには次の要素があります。

  • 変更されたファイル一覧
  • コミットメッセージ入力欄
  • Push
  • Discard all changes
  • Cancel

個別にステージングするステップはありません。変更一覧に含まれるものがコミット対象になります。仕様ファイル中心の編集であれば、この簡略化は十分実用的です。

Gitリポジトリへのプッシュダイアログ。構造に注目: 1つのコミットメッセージフィールド、ファイルごとのチェックボックスがある変更点(1ファイル)リスト、そして下部に3つのボタン — すべての変更を破棄(左、破壊的)、キャンセル(中立)、プッシュ(主要なアクション、紫色)。背景には、このダイアログを開いたワークスペースの右上にあるコミット&プッシュボタンが見えます。

6. 同期インジケーターを確認する

左下に同期状態が表示されます。

図では Synced just now と表示されています。これは、Apidog上の編集内容とリモートリポジトリの状態が一致していることを示します。

実運用では、次のように確認するとわかりやすいです。

Synced just now     → 同期済み
Changes available   → リモート側に変更あり
Changes pending     → ローカル側に未プッシュ変更あり
Enter fullscreen mode Exit fullscreen mode

インジケーターが緑であれば、Apidogとリポジトリは一致しています。複数人で編集する場合は、この表示を常に確認するのがよさそうです。

使ってわかった実装上のポイント

半日使って、特に重要だと感じた点は3つあります。

1. アウトラインの更新が速い

過去に使ったライブOpenAPIエディタの多くは、保存時に再解析する仕組みでした。そのため、エンドポイントを追加してからサイドバーに表示されるまでに遅延がありました。

Apidogのスペックファーストモードでは、入力中にアウトラインが更新されます。ほぼ即時に反映されるため、アウトラインを「確認用」ではなく「ナビゲーション用」として使えます。

長いOpenAPIファイルを扱う場合、この差は大きいです。

2. Git同期は実際に双方向で動く

Apidogを開いたまま、ローカルクローン側で同じ仕様ファイルを編集し、ターミナルからプッシュしてみました。

git add openapi.yaml
git commit -m "Update pet schema"
git push origin main
Enter fullscreen mode Exit fullscreen mode

Apidog側ではリモート変更が検知され、同期インジケーターが変化しました。その後、ワンクリックで変更をエディターに取り込めました。

つまり、チーム内で次のような混在運用ができます。

  • 一部のメンバーはApidogで編集する
  • 一部のメンバーはVS CodeやVimで編集する
  • どちらも同じGitリポジトリ上のOpenAPIファイルを編集する

重要なのは、Apidog内の状態とGit内の状態を別々に管理しなくてよいことです。

3. 同じプロジェクト内で一般モードには戻れない

スペックファーストモードで作成したプロジェクトは、スペックファースト用のプロジェクトになります。途中で一般モードのビジュアルデザイナーへ切り替えることはできません。

これは、内部のデータモデルが異なるためです。

もし同じ仕様を両方の操作方法で扱いたい場合は、次のような運用になります。

Gitリポジトリ
├── OpenAPI仕様ファイル
│
├── Apidog スペックファーストプロジェクト
│   └── Git同期で編集
│
└── Apidog 一般モードプロジェクト
    └── 同じ仕様からインポート
Enter fullscreen mode Exit fullscreen mode

完全にシームレスではありませんが、Git上の仕様を中心に据えれば運用は可能です。

向いているチーム

スペックファーストモードが特に向いているのは、次のようなチームです。

  • OpenAPI仕様をすでに手書きしている
  • OpenAPI仕様をGitでレビューしたい
  • spectral lint などをCIで実行している
  • 仕様からSDKや型定義を生成している
  • Pull Request上でAPI変更をレビューしたい
  • Apidog上の仕様とリポジトリ上の仕様のズレをなくしたい
  • エンジニアがVS CodeやVimでも編集できる状態を保ちたい

たとえば、CIで次のようなチェックをしている場合には相性がよいです。

name: OpenAPI Lint

on:
  pull_request:
    paths:
      - "specs/**/*.yaml"

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm install -g @stoplight/spectral-cli
      - run: spectral lint specs/openapi.yaml
Enter fullscreen mode Exit fullscreen mode

この場合、Apidogで編集した仕様も通常のGitフローに乗ります。レビュー、CI、生成処理をすべて同じファイルに対して実行できます。

向いていないチーム

一方で、次のようなチームには一般モードのほうが向いています。

  • OpenAPIをほとんど書いたことがない
  • YAMLを直接編集するメンバーが少ない
  • 非エンジニアがフォームUIでAPI定義を作る必要がある
  • ビジュアルデザイナーが参加の前提になっている
  • 同じプロジェクト内でフォーム編集とファイル編集を切り替えたい

スペックファーストモードは、オンボーディングの簡単さよりも、仕様ファイルの忠実性を優先するモードです。APIスペシャリスト以外のメンバーが多いチームでは、一般モードのほうが導入しやすいです。

また、同じプロジェクト内で一般モードとスペックファーストモードを混在させたい場合も、現時点では向いていません。この点はベータ版らしい制約です。

導入する場合のおすすめワークフロー

チームで試すなら、いきなり全APIを移行するより、1つの仕様ファイルから始めるのが安全です。

おすすめの流れは次の通りです。

1. 既存のOpenAPI仕様をGitに置く
2. CIでlintを設定する
3. Apidogでスペックファーストプロジェクトを作成する
4. Gitリポジトリを接続する
5. 小さなエンドポイント変更をApidog上で行う
6. Commit & Pushする
7. Pull RequestとCIで差分を確認する
8. チームメンバーに編集手順を共有する
Enter fullscreen mode Exit fullscreen mode

最初に確認すべき観点は次の3つです。

  • Apidog上の編集差分が期待通りGitに出るか
  • CIのOpenAPI lintが通るか
  • ローカルエディタで編集した変更をApidogが取り込めるか

この3点が問題なければ、日常的な仕様編集には十分使えます。

まとめ

これまでスペックファースト開発は、APIデザインツールを諦めることとほぼ同義でした。YAMLで作業してGitを信頼する代わりに、モックサーバーやテストランナーとの統合を諦める。あるいは、ビジュアルデザイナーを使う代わりに、Gitを唯一の情報源にすることを諦める。そのどちらかでした。

Apidogのスペックファーストモードでは、この分断がかなり小さくなっています。

リポジトリ内のファイルが、エディター内のファイルです。アウトラインは状態ではなくビューです。Git同期はエクスポート機能ではなく、作業フローの一部です。

新規プロジェクト作成時にスペックファーストモードを選び、既存のGitリポジトリを接続すれば、最初のコミットまでは10分程度で到達できます。継続利用するかどうかは、1週間ほど実際のAPI変更で試せば判断できます。

Top comments (0)