Gherkinとは?BDDとAPIテストでのGherkinの使い方

Ashley Goolam

Ashley Goolam

17 12月 2025

Gherkinとは?BDDとAPIテストでのGherkinの使い方

プロダクトマネージャーでさえ理解できるような、非常に明確でシンプルなテストケースを書きたいと思ったことはありませんか?それがGherkinの魔法です!まだ試したことがないなら、ビジネス要件と自動テストの間のギャップを埋める最も効果的な方法の一つを見逃しています。テストのためにGherkinを使う方法を学ぶことは、単に構文を学ぶことではなく、チーム全体が話せる言語を学ぶことなのです。

このガイドでは、Gherkinをテストに使う方法について知っておくべきことすべてを、基本的な構文から高度な機能まで、APIテストとApidogのような最新ツールがいかにしてテストシナリオを通常の手間なしに実行可能なテストケースに変えることができるかという点に特に焦点を当てて、説明します。

button

Gherkinとは何か、なぜ注目すべきなのか?

Gherkinは、ビジネス読解可能で、振る舞い記述のために設計されたドメイン固有言語です。キーワードのシンプルな構文を使用し、技術者と非技術者の両方の関係者が理解できる方法でソフトウェアの振る舞いを定義します。テストにGherkinを使う方法を習得すると、要件定義、テストケース設計、自動テスト実行という3つの目的を果たす生きたドキュメントを作成できます。

ガーキン

行動駆動開発(BDD)の動きから生まれたGherkinは、根本的な問題を解決します。従来のテストケースは、ビジネス関係者には技術的すぎたり、開発者には曖昧すぎたりすることがありました。Gherkinはその間の最適な点を見つけ出します。その最大の強みは、明確さを強制することです。Given-When-Then形式で機能を説明できないのであれば、おそらくそれをテストするのに十分理解できていないのでしょう。

この言語は実装に依存しません。同じGherkinシナリオで、Web UI用のSeleniumテスト、API用のRestAssuredテスト、モバイルアプリ用のAppiumテストを実行できます。この柔軟性により、**テストにGherkinを使う方法**を学ぶことは、キャリアを通して役立つ投資となります。

Gherkin構文:読みやすいテストの基盤

テストにGherkinを使う方法を理解するには、まずその構文を習得することから始まります。Gherkinファイルは.feature拡張子を使用し、いくつかのコアキーワードで構成されています。

主要なキーワード

ここに最もシンプルな例を示します。

Feature: User login
  As a registered user
  I want to log in to my account
  So that I can access my dashboard

  Scenario: Successful login with valid credentials
    Given I am on the login page
    When I enter "test@example.com" as username
    And I enter "ValidPass123" as password
    And I click the login button
    Then I should be redirected to the dashboard
    And I should see a welcome message

これがまるで平易な英語のように読めることに注目してください。それがポイントです。**テストにGherkinを使う方法**を学ぶ際の最初の目標は、巧妙さではなく明確さです。

Gherkinで初めてのAPIテストを記述する

GherkinはUIテストのために考案されましたが、APIテストには非常に強力です。その構造はHTTPリクエストとレスポンスに完璧に適合します。APIエンドポイントの**テストにGherkinを使う方法**の具体的な例を見てみましょう。

Feature: User management API
  As an API client
  I want to manage user accounts
  So that I can integrate with the user system

  Scenario: Create a new user successfully
    Given the API endpoint "/api/users"
    And I have valid authentication credentials
    When I send a POST request with:
      | field    | value            |
      | email    | test@example.com |
      | password | ValidPass123     |
      | role     | customer         |
    Then the response status should be 201
    And the response should contain "userId"
    And a new user should exist in the database

  Scenario: Attempt to create user with invalid email
    Given the API endpoint "/api/users"
    And I have valid authentication credentials
    When I send a POST request with:
      | field    | value         |
      | email    | invalid-email |
      | password | ValidPass123  |
    Then the response status should be 400
    And the response should contain "Invalid email format"

この例は、リクエストペイロード用のデータテーブルを使用してAPIの**テストにGherkinを使う方法**を示しています。Given-When-Then構造は、セットアップ、アクション、アサーションというAPIテストの概念に直接マッピングされます。

複雑なシナリオのためのGherkinの高度な機能

基本を習得すれば、これらの高度な機能によってGherkinのフィーチャはより保守しやすく、強力になります。

Background: 繰り返しを避ける

Backgroundキーワードはフィーチャファイル内の各シナリオの前に実行され、重複するセットアップ手順を排除します。

Feature: Shopping cart API

  Background:
    Given I have a valid authentication token
    And the API endpoint "/api/cart"

  Scenario: Add item to empty cart
    When I send a POST request with item "123" and quantity "1"
    Then the cart should contain 1 item

  Scenario: Add duplicate item to cart
    Given the cart already contains item "123" with quantity "2"
    When I send a POST request with item "123" and quantity "1"
    Then the cart should contain item "123" with quantity "3"

大規模な**テストにGherkinを使う方法**を検討する場合、BackgroundはDRY(Don’t Repeat Yourself)原則にとって不可欠です。

シナリオアウトライン:データ駆動テスト

シナリオアウトラインを使用すると、複数のデータセットで同じシナリオを実行できるため、**テストにGherkinを使う方法**がはるかに効率的になります。

Scenario Outline: Login with various credentials
  Given I am on the login page
  When I enter "<username>" as username
  And I enter "<password>" as password
  And I click the login button
  Then I should see "<expected_result>"

  Examples:
    | username          | password     | expected_result         |
    | test@example.com  | ValidPass123 | Welcome to dashboard    |
    | invalid@email.com | ValidPass123 | Invalid credentials     |
    | test@example.com  | wrongpass    | Invalid credentials     |
    |                   | ValidPass123 | Username is required    |
    | test@example.com  |              | Password is required    |

この単一のシナリオアウトラインは、5つの異なるテストを実行します。**テストにGherkinを使う方法**を学ぶ際、これは保守の悪夢なしに包括的なカバレッジを実現するための秘密兵器です。

タグ:テストスイートの整理

タグはシナリオの分類とフィルタリングに役立ちます。

@regression @login
Scenario: Successful login
  Given I am on the login page
  When I enter valid credentials
  Then I should be logged in

@smoke @api @critical
Scenario: API health check
  Given the API endpoint "/health"
  When I send a GET request
  Then the response status should be 200

タグを使用すると選択的な実行が可能になります。迅速な検証には@smokeテストのみを実行し、完全なカバレッジには@regressionを実行します。

行動駆動開発(BDD)とGherkin

**テストにGherkinを使う方法**を理解することは、その発祥の地であるBDDを理解することを意味します。BDDは、開発者、テスター、ビジネス関係者がGherkinシナリオを使用して要件を共同で定義する協力的なアプローチです。

ワークフローは次のようになります。

  1. 発見 (Discovery): チームは集まって新機能について議論し、質問を投げかけ、例を収集します。
  2. 定式化 (Formulation): 実世界の例がGherkinシナリオとして記述されます。
  3. 自動化 (Automation): 開発者はシナリオを実行可能にするステップ定義を実装します。
  4. 検証 (Validation): 自動化されたシナリオは回帰テストとして実行されます。

魔法は発見段階で起こります。プロダクトオーナーが「ユーザーはパスワードをリセットできるべきだ」と言ったとき、チームは「リセットトークンが期限切れになったらどうなるか?」と尋ねます。この会話は、コードが書かれる前にGherkinシナリオになります。

BDDは、**テストにGherkinを使う方法**が、技術的な検証だけでなく、ビジネス価値の提供と一致するように保証します。

BDD
行動駆動開発

Gherkinテストスクリプト:シナリオから実行へ

Gherkinシナリオは、コードと接続されるまで単なるテキストです。ステップ定義がこのギャップを埋めます。**テストにGherkinを使う方法**がどのように実行可能になるかを示します。

// Cucumber.js step definition for the login scenario
const { Given, When, Then } = require('@cucumber/cucumber');
const { expect } = require('chai');
const apiClient = require('./api-client');

Given('I have valid authentication credentials', async function() {
  this.authToken = await apiClient.getAuthToken('test@example.com', 'ValidPass123');
});

When('I send a POST request with:', async function(dataTable) {
  const requestData = dataTable.rowsHash();
  this.response = await apiClient.post('/api/users', requestData, this.authToken);
});

Then('the response status should be {int}', function(statusCode) {
  expect(this.response.status).to.equal(statusCode);
});

各Gherkinステップは関数にマッピングされます。その関数は、選択した自動化フレームワークを使用して実際のテストロジックを実行します。この関心の分離こそが、**テストにGherkinを使う方法**が保守可能である理由です。Gherkinのビジネスロジックはめったに変わらない一方で、実装コードは自由にリファクタリングできます。

ApidogがAPIテストを自動化する方法

手動によるAPIテストは時間の浪費です。各エンドポイントのリクエスト作成、認証管理、レスポンス検証、結果のドキュメント化は、すぐに持続不可能になります。Apidogは、AIを活用した自動化により、API仕様を数分で完全なテストスイートに変換し、この負担を解消します。

OpenAPI仕様をインポートするだけで、ApidogのAI(独自のClaude、OpenAI、またはGeminiキーに接続)が、ポジティブ、ネガティブ、境界、セキュリティシナリオにわたる包括的なテストケースを自動的に生成します。各テストには、事前設定されたペイロード、予期されるステータスコード、およびレスポンスアサーションが含まれます。ゼロから記述するのではなく、レビューと洗練を行うことで、テスト作成者からテストキュレーターへと役割がシフトします。

AIをApidogに接続する

実行は統一されたビジュアルインターフェースを通じて行われます。コードは不要です。個別に、または一括でワンクリックでテストを実行でき、Apidogは認証、データ管理、環境切り替え、リアルタイム検証を自動的に処理します。CI/CDパイプラインとの統合により、すべてのスイートがビルドごとに実行され、回帰を即座に検出します。かつては手作業で何日もかかっていた作業が、わずか数分で完了し、チームは反復的なタスクではなく、戦略的な品質決定に集中できるようになります。

button
ApidogでAPIエンドポイントをテストする

効果的なGherkinテストを記述するためのベストプラクティス

**テストにGherkinを使う方法**を習得することは、これらの実績あるプラクティスに従うことを意味します。

  1. まず人間が理解できるように記述する: 非技術的な関係者がシナリオを理解できない場合は、書き直してください。Gherkinのステップで技術的な専門用語を避けます。
  2. シナリオを独立させる: 各シナリオは独自のデータを設定し、実行後にクリーンアップするべきです。依存関係は壊れやすいテストスイートを生み出します。
  3. 命令形ではなく宣言形を使用する: 何をテストしているのかを書き、どうテストしているのかを書かない。「ユーザーを作成するとき」は、「新規ユーザーボタンをクリックし、フォームに入力して、送信をクリックするとき」よりも優れています。
  4. シナリオの長さを制限する: シナリオが7〜8ステップを超える場合、おそらくテストしすぎです。複数の集中的なシナリオに分割してください。
  5. 戦略的にタグ付けする: シナリオ記述に属するメタデータではなく、整理のためにタグ(@smoke、@regression、@api)を使用します。
  6. ステップの再利用性を維持する: 「/api/usersにPOSTリクエストを送信する」ではなく、「{string}にPOSTリクエストを送信する」のような汎用的なステップを記述します。再利用可能なステップは、メンテナンスを劇的に削減します。

よくある質問

Q1: Gherkinテストを記述するためにプログラミングの知識は必要ですか?

回答: もはや必要ありません。従来のGherkinでは開発者がステップ定義をコーディングする必要がありましたが、Apidogのような最新ツールが状況を変えました。ApidogのAIは、API仕様からGherkinスタイルのシナリオを自動的に生成でき、そのビジュアルインターフェースを使用すれば、一行のコードも書かずに実行できます。シナリオをレビューし洗練するためにはドメイン知識が依然として必要ですが、APIテストにおける技術的な障壁は実質的に解消されました。

Q2: Apidogは本当にGherkinシナリオを自動生成できますか?

回答: はい、ただし少し補足があります。ApidogはAI(独自のClaude、OpenAI、またはGeminiキーに接続)を使用してOpenAPI仕様を分析し、構造化されたテストケースを生成します。ワンクリックで「Gherkinにエクスポート」するボタンはありませんが、AIにそれらのテストケースをGiven/When/Then構文にフォーマットするよう指示できます。AIはエンドポイント、メソッド、リクエストスキーマ、および仕様からの期待されるレスポンスをすでに知っているため、生成された出力はGherkin構造に完璧にマッピングされます。

Q3: Gherkinシナリオを生成するのに適したOpenAPI仕様とはどのようなものですか?

回答: 仕様が豊富であればあるほど、より良いGherkinが生成されます。明確な操作記述、詳細なフィールド制約(最小/最大長、パターン、列挙型)、例示値、および記述的なエラーレスポンスを含めてください。ApidogのAIはこれらの詳細を使用して、より正確なシナリオを作成します。例えば、シンプルな「email: string」を、有効な形式、メールアドレスの欠落、無効な形式、最大長違反など、特定のテストケースに変換します。

Q4: GherkinはPostmanのようなツールにおける従来のAPIテストケースとどう異なりますか?

回答: 従来のAPIテストケースは命令形であることが多いです(「ヘッダーXを設定し、YにPOSTを送信し、ステータスZをアサートする」)。Gherkinは宣言形であり、ビジネス言語で振る舞いを記述します(「有効なユーザーがいて、登録すると、確認を受け取るはずだ」)。**Apidog**は、ビジネス読解可能なGherkinを生成しつつ、その下で技術的な実行エンジンを提供することで、両方の世界を橋渡しします。自動化を犠牲にすることなく、明確さを得ることができます。

Q5: AIが生成したGherkinシナリオがチームのスタイルに合わない場合はどうなりますか?

回答: その点でプロンプトが強力になります。ApidogのAIに「厳密なGherkin構文を使用する」、「共通のGivenステップをBackgroundセクションに結合する」、または「Examplesテーブル付きのシナリオアウトラインを生成する」といった具体的な指示を与えることができます。AIはあなたの指示に基づいて出力を調整し、最終化する前に常に結果を編集できます。それは、シニアテスターがあなたがレビューし磨き上げるためのシナリオを草稿していると考えることができます。

まとめ

**テストにGherkinを使う方法**を習得することは、品質をチームスポーツにする共有言語を生み出します。テストが平易な英語のように読めるようになれば、開発者からプロダクトオーナーまで、誰もが参加できます。しかし、真のブレークスルーは、その明確さとインテリジェントな自動化を組み合わせたときに起こります。

**Apidog**は、これまでAPIテストのボトルネックとなっていた面倒な手作業を排除します。API仕様から包括的なテストケースを生成し、それらを自動的に実行することで、テストを単なる雑用から戦略的優位性へと変えます。ステップ定義やメンテナンスコードを記述することなく、Gherkinの読みやすさと完全な自動化の力を手に入れることができます。

OpenAPI仕様をインポートし、最初のAI駆動型テストスイートを生成することから始めてください。数分で、開発のあらゆる段階で自信をもたらす実行可能なテストが手に入ります。品質はバグを見つけることだけでなく、品質が必然となるプロセスを構築することにあると証明するでしょう。

button

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる