LLM時代のQA再設計──自動化ツール群で考えた「品質保証の再定義」
ポートフォリオ解説 – QA/SDET向け自動化ツールの全体像
LLM時代における「品質保証」を再設計する試み
GitHub:
RNA4219/portfolio
はじめに
このポートフォリオは、**「LLMが存在する時代にQAをどう再定義するか」**という問いから始まりました。
もともとはQA/SDETとして、仕様・実装・テストが分断された開発フローに課題を感じており、
そこに生成AIが加わったとき、品質保証の概念そのものが変わると感じたのが出発点です。
私は当時、以下のような問題意識を抱えていました。
- 仕様書どおりに作っても、あるいは作るからこそ、実際の挙動が想定外になる
- E2Eテストを人手で保守するのが非効率すぎる
- CIでFlakyテストを検出しても、原因追跡が属人化する
- LLMを導入しても「品質をどう測るか」が曖昧
このような課題を整理し、「QAを自動化・構造化するためのPoC群」として開発したのが以下の4つのツールです。
開発当時は純粋なQAツールとして構想していましたが、振り返ると**“LLM品質管理の原型”**になっていました。
1. Spec2Cases CLI – 仕様書からテストケースを生成
目的
仕様書から実装やテストケースが自動的に作られるべきフローを模索する中で、
「仕様破綻に気づくのが遅れる」「検収時に追加工数が発生する」といった問題がありました。
それなら仕様書を直接構造化データ化して、早期に破綻を検知できないかという実験です。
概要
Markdown/テキスト仕様から構造化テストケース(JSON)を生成するCLI。
LLMによるドラフト生成+ルールベース整形・検証を前提としたパイプラインを想定しています。
主要コマンド
-
npm run spec:generate:仕様書(Markdown)→JSONケースに変換 -
npm run spec:validate:スキーマ検証 -
npm run spec:run:タグ/ID指定で擬似実行
特徴
-
scripts/spec2cases.mjsが入力ファイル拡張子を判定し、parseSpecTextで仕様を構文解析。 - Markdown見出しをID・タイトルに変換し、
pre:,steps:,expected:などを自動抽出。 - 欠落フィールドを検出して具体的に報告。
再現例
npm run spec:generate -- spec.sample.md
npm run spec:validate -- cases.generated.json
npm run spec:run -- cases.generated.json --tag smoke
開発背景
仕様が曖昧なまま実装に入る現場を見てきた中で、
「人間が読む仕様」と「機械が理解できる仕様」を繋ぐ装置が必要だと感じていました。
Spec2Casesはその“橋渡し”を形にした最初の試みです。
2. LLM → Playwright Pipeline – LLM補完からE2Eテスト生成
目的
バイブコーディングを実践していた頃、
「E2Eテストも自然言語で生成・実行できたら楽だろう」という発想から生まれました。
受け入れ基準をLLMが補完し、Playwright互換のテストコードを自動生成・実行・可視化するPoCです。
主要コマンド
-
npm run e2e:gen:ブループリントからPlaywrightテストコードを生成 -
npm test:スタブランナーで実行
特徴
-
scripts/blueprint_to_code.mjsがブループリントJSONから.spec.tsを生成 - 各シナリオで重複ID検出・正規化を実施
-
waitForLoadState('networkidle')挿入などの安定化処理 -
url:,text:などのプレフィックスでアサーション種別を自動展開
再現例
npm install
npm run generate -- blueprint.sample.json
npx playwright test
開発背景
コードを書くと同時にテストが生成される「双方向性」を求めた結果、
このパイプラインは**「E2EテストをLLMが書く」**というコンセプトに進化しました。
当時は“実験”のつもりでしたが、今見ると自然言語駆動開発の原型です。
3. CI Flaky Analyzer – Flakyテストの検出とレポート生成
目的
継続的なテスト運用の中で、Flakyテスト(再現率が低い不安定なテスト)の監視は地味ながら重大な課題です。
この負担を自動化するため、JUnit形式のテスト結果を解析し、Flaky度をスコア化・可視化するCLIを実装しました。
主要コマンド
-
flaky parse:JUnit XMLをストリーム解析しJSONLへ追記 -
flaky analyze:履歴からスコア集計・HTMLレポート生成 -
flaky issue:閾値を超えたテストをMarkdownテンプレートに出力 -
flaky weekly:週次サマリを生成
特徴
- ストリーミング解析によりメモリ消費を最小化
- HTML/CSV/JSON出力をサポート(
out/index.htmlをCI Artifact化可能) - Dry-runモードでIssueテンプレート確認が可能
再現例
flaky parse -- junit/results.xml
flaky analyze --config projects/03-ci-flaky/config/flaky.yml
flaky issue --top-n 10
開発背景
CIの品質向上を定量的に測る仕組みが乏しかった当時、
**「テスト結果を“点”ではなく“傾向”として見る」**という発想で設計しました。
Flaky Analyzerはそのまま週次レポートに繋げられるため、
QAチームのフィードバックループを短縮する実験基盤にもなっています。
4. LLM Adapter – 複数プロバイダの比較と計測
目的
複数のLLMプロバイダ(OpenAI, Gemini, Ollama, OpenRouterなど)を統一インタフェースで呼び出し、
応答品質・コスト・速度を比較しながらベンチマークを取るアダプタです。
本来は「LLMオーケストレーター」を作る予定でしたが、
開発の過程で“LLMの品質を計測するツール”へと変化しました。
主要コマンド
llm-adapter --provider [config] --prompt "..." --out outpython adapter/run_compare.py --prompts datasets/golden/tasks.jsonl-
just report(Python/Node統合の簡易レポート生成)
特徴
-
adapter/core/metrics/update.pyがRunMetricsを集計し、
トークン使用量・エラー・リトライ回数を記録 - 並列/順次実行を選択でき、シャドウラン比較にも対応
- 失敗リクエストもメトリクスに残すため、後続分析に有用
再現例
pip install -e .
llm-adapter --provider openai.yaml --prompt "日本語で1行、自己紹介して" --out out
python adapter/run_compare.py --prompts datasets/golden/tasks.jsonl
開発背景
複数LLMを併用する開発ではAPIコストが課題でした。
「開発時に呼び出さなくても比較できる仕組み」があれば
**テストと推論の“事前評価”**が可能になると考え、
実験的にメトリクスを記録する仕組みを作りました。
結果的に、今の自分が取り組んでいるLLM開発R&Dの土台になっています。
GitHub Pages & Weekly Summary
このリポジトリはGitHub Pagesによるドキュメントサイトも構築しています。
docs/en/index.md に各プロジェクトの概要を掲載し、
週次のQA活動を自動要約して公開するワークフローを実装しました。
単体でも使えるツールですが、**全体で「自動化されたQAライフサイクル」**を再現します。
総括 – 「LLMを品質管理する」という発想
これら4つのツール群を通して、私は次のことを確信しました。
QAとは「仕様と実装の整合性」を守る仕事ではなく、
**「生成過程そのものの品質を観測し、制御する仕事」**になる。
Spec2Casesは仕様整合の自動検出、
Playwright Pipelineは自然言語によるテスト生成、
Flaky Analyzerは運用品質の可視化、
LLM AdapterはAI出力の信頼性評価——
それぞれの要素が今、私のR&D開発思想の根底を成しています。
このポートフォリオはもはや現行の開発方針とは異なります。
しかし、**“自動化の限界線を押し広げようとした軌跡”**として、
いま振り返ってもひとつの重要な通過点でした。
おわりに
当時はQAの延長として作ったこれらのツールも、
いま思えば「LLMを品質保証の対象とする」最初の布石でした。
コード品質・応答安定性・人間との協調性をどう定義するか。
それを考え続けることが、いまの自分の開発軸に繋がっています。
関連リンク
- GitHub: RNA4219/portfolio
Discussion