開発が停滞した認証基盤を、 顧客に提案できる製品へ。
独自仕様で開発が停滞したDID/VC基盤をゼロから再設計。仕様駆動開発、AIセッションの並行実行、GANループによる相互レビューを取り入れ、6名・約6か月の初期開発に対して、2名・約3か月でベータ版を再構築しました。
- 開発リソース:6名 → 2名
- 1/3
- 開発期間:約6か月 → 約3か月
- 1/2
- PoC顧客への提案・検証へ
- ベータ版
プロジェクト概要
さまざまな業種で使えるデジタル証明書の発行基盤を、SaaSとして提供するプロジェクトです。DIDは証明に関わる人や組織などを識別する仕組み、VCは発行元や改ざんの有無を検証できるデジタル証明書です。
- 対象
- DID/VCを発行するSaaSプラットフォーム
- 担当範囲
- 規格調査、アーキテクチャ設計、DID/VCの発行・検証、スマートコントラクトの実装、開発体制の再編
- 参画時点
- 初期開発の設計段階からバックエンドエンジニアとして参画。その後、事業責任者と相談し、再構築を担当。
機能を追加する前に、 構成から見直す必要があった。
初期開発は予定から3か月以上遅れ、約6か月をかけても不安定なベータ版にとどまっていました。DIDとVCにはW3C規格に準拠しない独自仕様を採用。さらに、組織の権限管理や証明書の発行権限までスマートコントラクトに持たせ、機能を拡張しにくい構成になっていました。
ネイティブアプリやウォレット連携も必要になり、デプロイ時にはコントラクトのアドレスを手作業で更新していました。既存の構成を引き継ぐ修正では解決が難しいと判断し、事業責任者と協議のうえ、別システムとして作り直しました。
再構築で変えたこと
| 見直した項目 | 初期開発 | 再構築後 |
|---|---|---|
| 証明書の仕様 | 独自仕様のDID/VC | W3Cの文書と規格をもとに実装。外部ツールでDIDの解決やVCの形式を確認。 |
| 利用方法 | ネイティブアプリのインストールとウォレット連携 | Webアプリに変更し、LINEミニアプリでも利用できる構成へ。 |
| システム構成 | Next.js、NestJS、Go、React Nativeなどに処理が分散 | Next.jsとNestJSを中心に整理。スマートコントラクトの役割を限定。 |
| スマートコントラクト | 組織の権限管理やVCの発行権限にも利用 | 改ざん検知を補うVCのアンカリングをオプションとして提供。 |
| 更新作業 | デプロイのたびにアドレスを手作業で更新 | UUPS Proxy Patternを採用し、コントラクト更新時も参照先アドレスを維持。 |
AI開発の手法を組み合わせ、 DID/VC基盤を2名・約3か月で再構築。
DID/VCのような専門性の高い領域でも、設計と開発の進め方を整えることで、須永とジュニアエンジニアの2名で再構築を進めました。担当できる範囲を広げるアーキテクチャ、AIによる並行実装、自動テストと相互レビューを組み合わせ、約3か月でベータ版を開発しました。
- ジュニアも担当できるアーキテクチャへ
- 必要な技術を絞り、経験の浅いエンジニアでもフロントエンドを担当できる構成に刷新しました。DID/VCの発行・検証やスマートコントラクトなど、専門知識が必要な部分は須永が担当しました。
- 仕様駆動開発とGit worktreeで並行実装
- 須永が作成した仕様駆動開発のスキルを共有。セッションごとに細かな指示を繰り返すバイブコーディングから、仕様と開発手順に沿ってAIが実装を進める方式へ切り替えました。Git worktreeで作業環境を分け、複数のAIセッションに並行して実装を進めさせました。
- CI/CDとGANループ(敵対的ループ)で品質を検証
- CI/CDに品質ゲートを設け、ユニットテストで動作を検証しました。さらに、CodexとClaude Codeを併用したGANループ(敵対的ループ)を採用。互いの実装の問題を指摘させ、修正と再レビューを繰り返しました。実装を並行して進めながら、テストとAI同士の相互レビューでコードの問題を検出・修正しました。
初期開発はPM、エンジニア3名、須永、テスターの開発側6名と事業責任者の体制でした。
外部サービスが組み込みやすい基盤に。
外部ベンダー向けにAPIリファレンスなどの開発者ポータルを用意しました。また、MCP経由でAIエージェントがDIDやVCを発行できる仕組みも構築し、Web画面以外からも利用できるようにしました。
- Webアプリ / LINEミニアプリ
- 外部サービス / API
- AIエージェント / MCP
連携方法と役割を示す概念図です。実際の構成を簡略化しています。
規格と外部ツールによる確認
W3Cの文書と規格を参照し、did:key、did:web、did:ethrに対応しました。開発時にはUniversal ResolverでDIDの解決を、ParadymのSD-JWT VCツールで対象形式の内容を確認しました。
顧客への提案を 進められる状態へ。
初期開発では開発側6名で約6か月をかけていた製品を、2名で約3か月をかけてゼロから再構築しました。開発リソースは3分の1、開発期間は2分の1です。すでにPoCの顧客がいるなか、開発が停滞していた状態から、顧客に提案し、具体的な利用を相談できるベータ版へ進めました。
