本文へスキップ
hdknr blog
戻る

金融系システムで BDD が効く理由──Gherkin 構文で仕様とテストを一致させる開発手法

金融系システムの開発現場で BDD(Behavior-Driven Development:振る舞い駆動開発)が広く使われているのは事実です。金融システムは、次のような特徴を持つため BDD の仕組みがうまく噛み合います。

実際の現場では、BDD を単なるテスト手法としてではなく、**「ビジネスの要求を、そのまま自動テストのコードに直結させる仕組み」**として運用しています。本記事では、金融システムにおける BDD の具体的な使われ方を整理します。Gherkin 構文の書き方から現場の開発フロー、そして近年注目される AI エージェントとの相性まで扱います。

1. 最大の特徴:Gherkin 構文による「仕様の共通言語化」

金融開発における最大の敵は、**「ビジネス部門(銀行員・証券アナリストなど)と、開発エンジニアの間の認識のズレ」**です。これを解消するために、BDD では自然言語(日本語や英語)に近い Gherkin(ガーキン)構文で仕様を書きます。

Gherkin は主に次の 3 つのキーワードで構成されます。

金融システムでの具体例(口座振替の仕様)

フィーチャ: 口座振替による出金処理

  シナリオ: 残高が十分にある場合の正常な出金
    前提   ユーザーAの口座残高が 50,000円 である
    かつ   その口座は「アクティブ(有効)」である
    もし   ユーザーAが 30,000円 の出金をリクエストした
    ならば 出金処理が成功すること
    かつ   ユーザーAの口座残高が 20,000円 になっていること

  シナリオ: 残高不足によるエラー判定
    前提   ユーザーAの口座残高が 10,000円 である
    もし   ユーザーAが 30,000円 の出金をリクエストした
    ならば 出金処理が「残高不足エラー」で拒否されること
    かつ   ユーザーAの口座残高は 10,000円 のままであること

Gherkin は英語キーワード(Feature / Scenario / Given / When / Then / And)だけでなく、日本語を含む多言語のローカライズに対応しています。上記のように日本語で書けば、非エンジニアであるビジネス担当者が見ても「仕様が正しいか」を一目で確認できます。

2. 現場での実際の開発フロー(3 つのステップ)

現場では、Cucumber(Ruby / Java / JavaScript など)や SpecFlow(.NET 系。開発終了しており、後継の Reqnroll への移行が進んでいる)といった BDD フレームワークを使い、以下の流れで開発を進めます。

ステップ①:3 者(Three Amigos)による仕様定義

開発を始める前に、「ビジネス担当者(PO)」「開発者」「テスター(QA)」の 3 者が集まり、Gherkin 構文でシナリオを確定させます。この場で例外パターンや境界値(例:残高がちょうど 0 円のときはどうするか?)を徹底的に洗い出します。この 3 者会議は BDD の世界で Three Amigos と呼ばれます。

ステップ②:仕様書がそのまま「自動テストコード」に変身する

確定した Gherkin のテキストファイル(.feature ファイル)をテストツールに読み込ませると、各ステップ(前提もしならば)に対応するテストコードの「枠組み(メソッド)」の雛形が自動生成されます。

開発者は、その枠組みの中に「実際にデータベースの数値を書き換える処理」や「API を叩く処理」といった裏側のロジックを実装します。この接着剤にあたるコードは Glue Code(グルーコード)、あるいは**ステップ定義(Step Definition)**と呼ばれます。

# Cucumber (Ruby) のステップ定義例
前提('ユーザーAの口座残高が {int}円 である') do |balance|
  @account = Account.create!(owner: 'A', balance: balance)
end

もし('ユーザーAが {int}円 の出金をリクエストした') do |amount|
  @result = @account.withdraw(amount)
end

ならば('ユーザーAの口座残高が {int}円 になっていること') do |expected|
  expect(@account.reload.balance).to eq(expected)
end

ステップ③:Red → Green と回帰テストの自動化

最初はプログラムが未実装なので、テストは当然「Red(失敗)」になります。ここが起点です。

その後、エンジニアが本番コードを実装し、テストが「Green(成功)」になれば開発完了です。このシナリオはそのまま「仕様書であり、同時にいつでも実行できる自動テスト(回帰テスト)」としてシステムに残り続けます。

3. なぜ金融システムで BDD が効果的なのか?

金融システムで BDD が重宝される理由は、主に次の 3 つです。

「動く仕様書」になり、ドキュメントの陳腐化を防げる

金融システムは長期間運用されるため、**「ドキュメントと実際のコードの乖離(ドリフト)」**が致命傷になります。BDD なら、コードを変更してもテストが通っている限り、仕様書(Gherkin ファイル)と実装が一致していることが継続的に検証されます。仕様書が「読むだけの資料」ではなく、CI で毎回実行される「動く仕様書(Living Documentation)」になるのが最大の価値です。

MkDocs で .feature をドキュメントとして公開する

この「動く仕様書」は、ドキュメントサイトジェネレーターの MkDocs と組み合わせると、ビジネス部門が読める Web ドキュメントとして公開できます。主に 2 系統のアプローチがあります。

「今この仕様が通っている証拠」を監査で求められる金融の文脈では mkdocs-gherkin-plugin、まず仕様を読める形で公開したいだけなら gherkin2mkdocspymdownx.snippets、という使い分けになります。いずれも仕様書・テスト・公開ドキュメントを 1 つの .feature に一本化できる点が本質です。

膨大な「計算パターン(マトリクス)」を網羅できる

金融では「金利」「手数料」「税金」など、条件の組み合わせが膨大になります。BDD ツールには Scenario Outline(シナリオアウトライン)という機能があり、「条件データの一覧表」を流し込むだけで、何十パターンものテストを 1 つのシナリオで一気に実行できます。

  シナリオアウトライン: 出金可否の判定マトリクス
    前提   口座残高が <残高> 円 である
    もし   <出金額> 円 の出金をリクエストした
    ならば 結果が <判定> となること

:
      | 残高   | 出金額 | 判定         |
      | 50000 | 30000 | 成功         |
      | 10000 | 30000 | 残高不足エラー |
      | 30000 | 30000 | 成功         |
      | 0     | 1     | 残高不足エラー |

境界値(残高ちょうど = 出金額のケースや、残高 0 円のケース)を表形式で並べられるため、金融特有の「網羅性の証明」が読みやすい形で残せます。

AI エージェントとの相性が良い

「Given / When / Then」という構造化されたテキストは、LLM(AI エージェント)が解釈しやすい形式です。AI に「この Gherkin の仕様を満たすプログラムを書いて」と指示したり、逆に「このコードから Gherkin の仕様書を起こして」と依頼したりする際の精度が上がります。

曖昧な自然文で AI に指示を出すと、解釈のブレやハルシネーション(もっともらしい嘘)、実装のドリフトが起きやすくなります。これを「前提・もし・ならば」の形式に落とし込むことで、入力と期待出力の境界を明示でき、AI の暴走を抑えやすくなります。

4. Gherkin 以外にも記法はある──それでも Gherkin が選ばれる理由

BDD/仕様記述の記法は Gherkin だけではありません。それでも金融をはじめ現場で Gherkin が事実上の標準になっているのは、「自由な自然言語」と「コード」という 2 つの極の“ちょうど中間”に位置しているからです。

主な代替記法と、それぞれの弱点

記法・ツールスタイルGherkin に負ける点
RSpec / Jasmine / Spockコード内 DSL(describe/itgiven:/when:/then:BDD の源流だがコードそのもの。開発者しか読めず、ビジネス部門との共通言語にならない
ConcordionHTML/Markdown の自由な散文に検証を埋め込む表現力は高いが文法の縛りがなく、レビュー基準やステップ再利用を標準化しづらい
FitNesse / FitWiki 上の判定テーブル(決定表)計算表とは相性が良いが、業務フロー(振る舞い)を語るのが苦手。Wiki 基盤が重い
Robot Frameworkキーワード駆動の表形式QA 自動化・RPA では強力だが、キーワード表はビジネスが読む散文ほど直感的でない
Gauge(ThoughtWorks)Markdown ベースGherkin の正当な対抗馬。柔軟だがエコシステム/コミュニティが Cucumber より小さい

なぜ Gherkin なのか

要するに Gherkin の本質は、**「自由すぎず・厳密すぎない、ビジネスと開発とツールの三者が同時に扱える最小公倍数の文法」**である点にあります。

まとめ

実際の金融プロジェクトにおける BDD は、「テストの技法」というよりも、**「ビジネスの言葉(要件)を、途中で翻訳ミスすることなく、そのままコードとテストに落とし込むための共通言語システム」**として機能しています。

昨今の AI 開発においても、AI に曖昧な指示を出すのではなく「Given / When / Then」の形式で要求を渡すことで、ハルシネーションやドリフトを最小限に抑えられます。BDD の価値は、AI 時代になって改めて見直されていると言えるでしょう。



前の記事
メモリ株バブルはなぜ終わったのか──キオクシア急落と『銀行株』への資金シフト【2026年7月】
次の記事
AIに設計から任せて株式ファクター分析ツールを作る──Claude Fable 5 × J-Quants API のプロンプト実例【2026年】