会計システムの設計・開発に関するケーススタディプロジェクトです。
- 会計システムの要件定義から実装までの開発プロセスを学ぶ
- ドメイン駆動設計(DDD)とテスト駆動開発(TDD)の実践
- クリーンアーキテクチャに基づくシステム設計の習得
| ソフトウェア | バージョン | 備考 |
|---|---|---|
| Node.js | 24.x | ドキュメントビルド用 |
| Docker | latest | 開発環境コンテナ |
| Python | 3.x | MkDocs 実行用 |
case-study-accounting/
├── apps/ # アプリケーションコード
├── docs/ # ドキュメント(MkDocs)
│ ├── adr/ # アーキテクチャ決定記録
│ ├── assets/ # 静的ファイル
│ ├── design/ # 設計ドキュメント
│ ├── development/ # 開発ドキュメント
│ ├── operation/ # 運用ドキュメント
│ ├── reference/ # 参照ガイド
│ ├── requirements/ # 要件定義
│ ├── template/ # テンプレート
│ └── wiki/ # Wiki
├── ops/ # 運用関連
│ ├── docker/ # Docker 設定
│ └── scripts/ # ユーティリティスクリプト
├── .claude/ # Claude Code 設定
├── .devcontainer/ # Dev Container 設定
├── .github/ # GitHub Actions ワークフロー
├── CLAUDE.md # AI Agent 実行ガイドライン
├── Dockerfile # Docker イメージ定義
├── docker-compose.yml # Docker Compose 設定(開発環境)
├── docker-compose-demo.yml # Docker Compose 設定(デモ環境)
├── gulpfile.js # Gulp タスク定義
├── mkdocs.yml # MkDocs 設定
└── package.json # npm パッケージ設定
npm install
npm start| コマンド | 説明 |
|---|---|
npm start |
開発環境起動(MkDocs サーバー) |
npm run dev:backend |
バックエンド開発サーバー起動 |
npm run dev:frontend |
フロントエンド開発サーバー起動 |
npm run dev:frontend:e2e |
フロントエンド E2E テスト用サーバー起動 |
| コマンド | 説明 |
|---|---|
npm run docs:serve |
MkDocs サーバー起動 |
npm run docs:stop |
MkDocs サーバー停止 |
npm run docs:build |
MkDocs ドキュメントビルド |
npm run journal |
作業履歴(ジャーナル)生成 |
| コマンド | 説明 |
|---|---|
npm run frontend:lint |
ESLint 実行 |
npm run frontend:format |
フォーマットチェック |
npm run frontend:test |
テスト実行 |
npm run frontend:check |
lint + format チェック |
npm run frontend:build |
本番ビルド |
| コマンド | 説明 |
|---|---|
npm run backend:check |
Gradle check 実行 |
| コマンド | 説明 |
|---|---|
npm run deploy:backend |
バックエンドをデプロイ |
npm run deploy:frontend |
フロントエンドをデプロイ |
npm run deploy:all |
全アプリケーションをデプロイ |
npm run deploy:status |
デプロイ状態確認 |
npm run deploy:open |
デプロイ済みアプリをブラウザで開く |
npm run deploy:backend:open |
バックエンドをブラウザで開く |
npm run deploy:frontend:open |
フロントエンドをブラウザで開く |
npm run deploy:backend:logs |
バックエンドログ表示 |
npm run deploy:frontend:logs |
フロントエンドログ表示 |
| コマンド | 説明 |
|---|---|
npm run claude:yol |
Claude Code(権限スキップモード) |
npm run prepare |
Husky セットアップ |
バックエンドとフロントエンドを Docker Compose で起動できます。
# バックエンド・フロントエンドを起動(PostgreSQL も自動起動)
docker compose up -d backend frontend
# ログ確認
docker compose logs -f backend frontend
# 停止
docker compose down| サービス | ポート | 説明 |
|---|---|---|
| frontend | 3001 | React SPA (nginx) |
| backend | 8081 | Spring Boot API |
| postgres | 5432 | PostgreSQL データベース |
| adminer | 8888 | データベース管理ツール |
| mkdocs | 8000 | ドキュメントサーバー |
| sonarqube | 9000 | コード品質分析 |
- フロントエンド: http://localhost:3001
- バックエンド API: http://localhost:8081
- Swagger UI: http://localhost:8081/swagger-ui.html
- Adminer: http://localhost:8888
- MkDocs: http://localhost:8000
- SonarQube: http://localhost:9000
| 変数 | デフォルト | 説明 |
|---|---|---|
BACKEND_PORT |
8081 | バックエンドの公開ポート |
FRONTEND_PORT |
3001 | フロントエンドの公開ポート |
POSTGRES_PORT |
5432 | PostgreSQL の公開ポート |
SPRING_PROFILES_ACTIVE |
dev | Spring プロファイル |
-
GitHub リポジトリの Settings を開く
- リポジトリページで
Settingsタブをクリック
- リポジトリページで
-
Pages 設定を開く
- 左サイドバーの
Pagesをクリック
- 左サイドバーの
-
Source を設定
SourceでDeploy from a branchを選択Branchでgh-pagesを選択し、フォルダは/ (root)を選択Saveをクリック
-
初回デプロイ
- main ブランチにプッシュすると GitHub Actions が自動実行
- Actions タブでデプロイ状況を確認
-
ローカル環境でMkDocsサーバーを起動
docker-compose up mkdocsまたは、Gulpタスクを使用:
npm run docs:serve -
ブラウザで http://localhost:8000 にアクセスして編集結果をプレビュー
-
docs/ディレクトリ内のMarkdownファイルを編集 -
変更をコミットしてプッシュ
git add . git commit -m "ドキュメントの更新" git push
プロジェクトには以下のGulpタスクが用意されています:
-
MkDocsサーバーの起動:
npm run docs:serveまたは
npx gulp mkdocs:serve -
MkDocsサーバーの停止:
npm run docs:stopまたは
npx gulp mkdocs:stop -
MkDocsドキュメントのビルド:
npm run docs:buildまたは
npx gulp mkdocs:build
-
すべてのコミット日付の作業履歴を生成:
npm run journalまたは
npx gulp journal:generate -
特定の日付の作業履歴を生成:
npx gulp journal:generate:date --date=YYYY-MM-DD(例:
npx gulp journal:generate:date --date=2023-04-01)
生成された作業履歴は docs/journal/ ディレクトリに保存され、各ファイルには指定された日付のコミット情報が含まれます。
-
SonarQube サービスの起動:
npx gulp sonar:start -
SonarQube サービスの停止:
npx gulp sonar:stop -
SonarQube ダッシュボードを開く:
npx gulp sonar:open -
バックエンドの解析実行:
npx gulp sonar:analyze:backend -
フロントエンドの解析実行:
npx gulp sonar:analyze:frontend -
全プロジェクトの解析実行:
npx gulp sonar:analyze -
サービス状態確認:
npx gulp sonar:status
-
ER 図の生成:
npx gulp schemaspy:generate -
生成した ER 図をブラウザで開く:
npx gulp schemaspy:open -
ER 図の生成と表示(一連の流れ):
npx gulp schemaspy -
出力ディレクトリのクリーンアップ:
npx gulp schemaspy:clean -
ER 図の再生成(クリーン後に生成):
npx gulp schemaspy:regenerate
生成された ER 図は docs/assets/schemaspy-output/ ディレクトリに保存されます。
-
バックエンドのデプロイ:
npx gulp deploy:backend -
フロントエンドのデプロイ:
npx gulp deploy:frontend -
全アプリケーションの一括デプロイ:
npx gulp deploy:all -
デプロイ状態の確認:
npx gulp deploy:status -
バックエンドのログ表示:
npx gulp deploy:backend:logs -
フロントエンドのログ表示:
npx gulp deploy:frontend:logs -
アプリケーションをブラウザで開く:
npx gulp deploy:open
個別のステップを実行する場合:
deploy:login- Heroku Container Registry にログインdeploy:backend:build- バックエンドの Docker イメージをビルドdeploy:backend:push- バックエンドのイメージをプッシュdeploy:backend:release- バックエンドをリリースdeploy:frontend:build- フロントエンドの Docker イメージをビルドdeploy:frontend:push- フロントエンドのイメージをプッシュdeploy:frontend:release- フロントエンドをリリース
開発環境(docker-compose.yml)とデモ環境(docker-compose-demo.yml)を Gulp タスクで管理できます。
-
開発環境をビルドして起動:
npx gulp build:dev:start -
デモ環境をビルドして起動:
npx gulp build:demo:start -
環境を停止:
npx gulp build:down:dev # 開発環境 npx gulp build:down:demo # デモ環境 -
ログを表示:
npx gulp build:logs:dev # 開発環境 npx gulp build:logs:demo # デモ環境 -
状態を確認:
npx gulp build:status:dev # 開発環境 npx gulp build:status:demo # デモ環境
個別のステップを実行する場合:
build:dev- 開発環境をビルドbuild:demo- デモ環境をビルドbuild:up:dev- 開発環境を起動build:up:demo- デモ環境を起動
デモ環境は H2 インメモリデータベースを使用し、フロントエンドはデモモード(認証情報自動入力)で起動します。
このプロジェクトでは、GitHub Container Registry(GHCR)を使用して開発コンテナイメージを管理しています。
タグをプッシュすると、GitHub Actions が自動的にコンテナイメージをビルドし、GHCR にプッシュします。
# タグを作成してプッシュ
git tag 0.0.1
git push origin 0.0.1GHCR からイメージを取得して実行するには:
# イメージをプル
docker pull ghcr.io/k2works/case-study-accounting:latest
# または特定バージョン
docker pull ghcr.io/k2works/case-study-accounting:0.0.1
# コンテナを実行
docker run -it -v $(pwd):/srv ghcr.io/k2works/case-study-accounting:latest認証が必要な場合は、以下のコマンドでログインします:
# GitHub Personal Access Token でログイン
echo $GITHUB_TOKEN | docker login ghcr.io -u <username> --password-stdin- リポジトリの Settings → Actions → General で
Read and write permissionsを設定 GITHUB_TOKENにpackages: write権限が付与されています
VS Code で Dev Container を使用する場合:
- VS Code で「Dev Containers: Reopen in Container」を実行
- または「Dev Containers: Rebuild and Reopen in Container」で再ビルド
開発手法については CLAUDE.md および docs/reference/開発ガイド.md を参照してください。
- TDD(テスト駆動開発): Red → Green → Refactor のサイクルに従う
- 構造変更と動作変更の分離: コミットは単一の論理的作業単位で
- 品質保証: すべてのテストがパスしてからコミット
プロジェクトのドキュメントは docs/ ディレクトリで管理されています。
| ディレクトリ | 内容 |
|---|---|
requirements |
要件定義、ユースケース、ユーザーストーリー |
design |
アーキテクチャ設計、データモデル設計 |
development |
開発ガイド、コーディング規約 |
operation |
運用手順、監視設定 |
adr |
アーキテクチャ決定記録(ADR) |
reference |
参照ガイド、ベストプラクティス |
template |
ドキュメントテンプレート |
詳細は docs/index.md を参照してください。
Nix を使用して、再現可能な開発環境を構築できます。
- Nix をインストールします。
- Flakes を有効にします(
~/.config/nix/nix.confにexperimental-features = nix-command flakesを追加)。
-
デフォルト環境(共通ツール)に入る:
nix develop
-
Frontend 環境(React + TypeScript + Vite)に入る:
nix develop .#frontend -
Backend 環境(Spring Boot + Java + Gradle)に入る:
nix develop .#backend -
Node.js 環境に入る:
nix develop .#node -
Python/MkDocs 環境に入る:
nix develop .#python
環境から抜けるには exit を入力します。
| 環境 | コマンド | 用途 |
|---|---|---|
| default | nix develop |
共通ツール(git, curl, vim, tmux) |
| frontend | nix develop .#frontend |
React + TypeScript + Vite 開発 |
| backend | nix develop .#backend |
Spring Boot + Java + Gradle 開発 |
| node | nix develop .#node |
Node.js 汎用開発 |
| python | nix develop .#python |
Python + MkDocs ドキュメント作成 |
nix flake update