300 Views
December 22, 25
スライド概要
このプロジェクトでの取り組みをプレゼンテーションしたいです。
qiskitや量子コンピュータを知らない人を相手にプレゼンします。Claude Codeのノウハウ共有会です。
ほとんどこれはClaude Codeでコーディングしました。はじめに、既にOSSになっているClientライブラリのレポジトリの上にプロトタイプを作って
、このプロジェクトにはプロトタイプも渡しましたが、あんまり参照してくれませんでした。
ドキュメントやgitの履歴をもとに、素敵なプレゼンスライドをHTMLで書いてください。ultrathink
Claude Codeで 量子コンピュータシミュレ ーション サーバーを開発した話 Claude Codeノウハウ共有会 2025年
プロジェクト概要 Qiskit Runtime Server IBM Qiskit Runtime互換の セルフホスト型REST APIサーバー CPU/GPU対応のマルチエグゼキュータ 59種類の仮想量子バックエンド 完全なAPI互換性 ローカル開発環境での量子アルゴリズム実験
量子コンピュータとは? 通常のコンピュータ ビット(0 or 1)で計算 順番に処理 量子コンピュータ 量子ビット(0 かつ 1の重ね合わせ) 並列に大量の計算を同時実行 特定の問題で圧倒的に高速
Qiskitとは? IBMが提供する量子コンピューティングフレームワーク from qiskit import QuantumCircuit from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 量子回路を作成 # circuit = QuantumCircuit(2) circuit.h(0) # circuit.cx(0, 1) # circuit.measure_all() 重ね合わせ状態を作る 量子もつれを作る の実機またはシミュレータで実行 # IBM Cloud service = QiskitRuntimeService(channel="ibm_cloud") backend = service.backend("ibm_brisbane") sampler = SamplerV2(mode=backend) job = sampler.run([circuit]) result = job.result()
なぜ作ったのか? 課題1: IBM Cloudへの依存 開発にインターネット接続が必須 課題2: GPU加速が使えない 大規模シミュレーションが遅い 課題3: テスト環境の制約 CI/CDパイプラインで使いづらい → ローカルで動く互換サーバーを作ろう!
Claude Codeとの開発の旅 12日 開発期間 コミット数 1,904 2,386 ソースコード行数 55 テストコード行数 2025年12月5日 〜 12月16日
開発の流れ 2025-12-05 Phase 1: 設計ドキュメント作成 アーキテクチャ設計、API仕様策定 2025-12-05〜06 Phase 2: コア実装 Executor、JobManager、FastAPI統合 2025-12-08〜09 Phase 3: セッション管理 SessionManager、統合テスト 2025-12-14〜16
プロトタイプとの関係 最初にクライアントライブラリの上に プロトタイプを作成 既存のOSSライブラリを拡張 動作確認とAPI理解が目的 しかし... Claude Codeにプロトタイプコードを渡したが ほとんど参照されず、ゼロから設計・実装 → 結果的にクリーンなアーキテクチャに!
アーキテクチャのハイライト 仮想バックエンドシステム メタデータと実行エンジンの分離 <metadata>@<executor> 型5量子ビット × CPU 型5量子ビット × GPU 59種類のメタデータ × N個のエグゼキュータ = 59N個の仮想バックエンド fake_manila@aer fake_manila@custatevec ← Manila ← Manila メタデータ: トポロジー、ノイズパラメータ エグゼキュータ: CPU/GPU実行エンジン
システムアーキテクチャ ┌─────────────────────────────────────┐ │ QiskitRuntimeService (Client) │ └──────────────┬──────────────────────┘ │ HTTP/REST ▼ ┌─────────────────────────────────────┐ │ FastAPI REST API Server │ ├──────────────┬──────────────────────┤ │ Backend │ JobManager │ │ Metadata │ │ │ │ Provider │ ▼ │ │ │ ┌──────────────┐ │ │ │ │ Executors │ │ │ │ ├──────────────┤ │ │ │ │ Aer (CPU) │ │ │ │ │ CuStateVec │ │ │ │ │ (GPU) │ │ │ │ └──────────────┘ │ └─────────────────────────────────────┘ FastAPI: 高速、型安全、自動ドキュメント生成 Executor抽象化: プラグイン可能な実行エンジン 依存性注入: テスタブルで拡張可能
技術スタック フレームワーク 量子コンピューティング 開発ツール CI/CD FastAPI (REST API) Pydantic v2 (バリデーション) uvicorn (ASGIサーバー) uv (パッケージ管理) ruff (リント/フォーマット) mypy --strict (型チェック) qiskit-aer (CPUシミュレータ) cuQuantum (GPUシミュレー タ) qiskit-ibm-runtime (クライア ント) GitHub Actions pre-commit hooks 自動リリース
Claude Code活用のノウハウ 1. CLAUDE.mdの威力 💡プロジェクト構造、コーディング規約を明記 💡Python 3.12+の型ヒント規約を強制 💡開発コマンド、よくある問題の解決法 # Type Annotations **This project targets Python 3.12+** - `list[str]` instead of `List[str]` - `dict[str, int]` instead of `Dict[str, int]` - `int | None` instead of `Optional[int]` Only import from `typing` for special types
Claude Code活用のノウハウ 2. 詳細なドキュメント作成 💡ARCHITECTURE.md - システム設計 💡API_SPECIFICATION.md - API仕様 💡DESIGN_DECISIONS.md - 設計判断の記録 💡BACKEND_EXECUTOR_CONFIG.md - 設定ガイド → Claude Codeが文脈を理解し、一貫性のある実装を生成
Claude Code活用のノウハウ 3. pre-commitフックで品質保証 repos: - repo: local hooks: - id: ruff-format name: ruff format entry: uv run ruff format - id: ruff-check name: ruff check entry: uv run ruff check --fix - id: mypy name: mypy entry: uv run mypy src --strict → Claudeが生成したコードも自動で品質チェック
Claude Code活用のノウハウ 4. テストファーストの徹底 💡テストコード2,386行 > ソースコード1,904行 💡統合テストでAPI互換性を保証 💡pytest + FastAPI TestClient 125% テストコード比率
Claude Code活用のノウハウ 5. Pull Requestベースの開発 💡Claude Codeが自動でPR作成 💡明確な変更履歴 💡レビュー可能な単位で実装 例: claude/implement-sessionmanager-01HVFk... → 機能ごとにブランチが切られ、PRでマージ
学んだこと ✓ プロトタイプは無駄じゃない 自分の理解が深まり、要件が明確になる ✓ ドキュメントが鍵 詳細なドキュメント = 高品質な実装 ✓ Claude Codeは設計パートナー 単なるコード生成ツールではなく、 アーキテクチャを一緒に考える相棒 ✓ 品質はツールで担保 型チェック、リント、テストを自動化
ハマったポイント 1. プロトタイプの扱い Claudeに渡したが参照されず → 要点を抽出してドキュメント化が必要 2. QPYバージョン互換性 量子回路のシリアライズ形式の違い → バージョンパッチで解決 3. GPU環境のセットアップ cuQuantum + CUDA 12.xの組み合わせ → Dockerコンテナで環境統一
使い方デモ サーバー起動 サーバー起動 # uv run uvicorn app:app --host 0.0.0.0 --port 8000 クライアント from local_service_helper import local_service_connection from qiskit_ibm_runtime import SamplerV2 with local_service_connection("http://localhost:8000") as service: # CPU backend_cpu = service.backend("fake_manila@aer") 実行 実行 # GPU backend_gpu = service.backend("fake_manila@custatevec") sampler = SamplerV2(mode=backend_cpu) result = sampler.run([circuit]).result()
今後の展望 💡より多くのバックエンドメタデータ対応 💡分散実行のサポート 💡永続化ストレージ対応(現在はインメモリ) 💡WebUIの追加 💡カスタムエグゼキュータの例を増やす github.com/gyu-don/qiskit-runtime-server
まとめ 開発期間 12日 💡Claude Codeは強力な開発パートナー 💡ドキュメントが成功の鍵 💡自動化で品質を担保 💡プロトタイプで理解を深める 完全なAPI実装 ✓
ありがとうございました 質問・ディスカッション Repository: github.com/gyu-don/qiskit-runtime-server
Appendix: 開発履歴 2025-12-05 2025-12-05 2025-12-05 2025-12-06 2025-12-06 2025-12-08 2025-12-08 2025-12-14 2025-12-16 2025-12-16 設計ドキュメント作成 Executor実装(Aer、cuStateVec) Backend Metadata Provider実装 Job Manager実装 FastAPIアプリケーション統合 SessionManager実装 統合テスト追加 GPU Executor (cuStateVec) 実装 Python 3.11対応 CI/CD改善
Appendix: コード統計 1,904 2,386 ソースコード (src/) テストコード (tests/) 59 100% 仮想バックエンド種類 API互換性