========================================================================
Pixel Paint War - 環境構築ガイド (Environment Setup Guide)
========================================================================
1. 事前準備 (Prerequisites)
------------------------------------------------------------------------
1-0. 目的
本ドキュメントは,「Pixel Paint War」のMonorepo構成による開発環境を構築
するための手順書である.
※ 本プロジェクトは Node.js v20 LTS 以上を必須とする.
1-1. 必須ツールのインストール
開発を開始する前に,以下のツールをインストールしバージョンを確認する.
1. Node.js (v20.x LTS)
・Nodesource リポジトリを使用してインストールする.
# リポジトリのセットアップとインストール
$ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
$ sudo apt-get install -y nodejs
・確認コマンド:
$ node -v # v20.x.x と表示されること
2. pnpm (Package Manager)
・Node.js 標準の npm ではなく pnpm を使用する.
・Corepack (Node.js同梱) を有効化してインストールする.
$ sudo corepack enable
$ corepack prepare pnpm@latest --activate
・確認コマンド:
$ pnpm -v
2. プロジェクト初期化 (Project Initialization)
------------------------------------------------------------------------
2-1. ディレクトリ作成と初期化
1. プロジェクトルートの作成
任意の場所にプロジェクトフォルダを作成し,移動する.
$ mkdir SkillSemiWebGame
$ cd SkillSemiWebGame
2. Gitの初期化
$ git init
3. pnpm の初期化
$ pnpm init
2-2. ワークスペース設定 (Monorepo Setup)
ルートディレクトリに以下の設定ファイルを作成し,モノレポ構成を定義する.
1. pnpm-workspace.yaml
・packages/shared を共通ライブラリとし,apps 配下にアプリを配置する.
・内容:
packages:
- 'apps/*'
- 'packages/*'
2. .npmrc
・依存関係解決の設定を行う (shamefully-hoist=true 推奨).
・内容:
shamefully-hoist=true
2-3. ディレクトリ構造の構築
以下の構成になるようにディレクトリを作成する.
root/
├── apps/
│ ├── client/ # フロントエンド (Browser)
│ └── server/ # バックエンド (Node.js)
└── packages/
└── shared/ # 共通ロジック (Shared Library)
・作成コマンド例:
$ mkdir -p apps/client apps/server packages/shared
2-4. Git除外設定 (Git Ignore Setup)
不要なファイル(依存ライブラリやビルド成果物)がGit管理下に置かれないよう,
除外設定を行う.
1. 設定ファイルの作成
プロジェクトルートディレクトリに `.gitignore` ファイルを作成する.
$ touch .gitignore
2. 除外ルールの記述
以下の内容をファイルに記述し保存する.
・node_modules: 依存ライブラリフォルダ.
・dist, build: ビルド生成物.
・.env: 環境変数ファイル(セキュリティ保持のため).
# Dependencies
node_modules/
.pnpm-store/
# Build Outputs
dist/
build/
out/
# Logs
*.log
npm-debug.log*
pnpm-debug.log*
# Environment Variables
.env
.env.local
.env.*.local
# Editor / OS
.vscode/*
!.vscode/extensions.json
!.vscode/settings.json
!.vscode/launch.json
.idea/
.DS_Store
Thumbs.db
# Testing
coverage/
# Unignore packages (Fix for parent gitignore)
!packages/
3. 設定の反映確認
Gitのステータスを確認し,`node_modules/` 等が含まれていないことを確認する.
$ git status
2-5. 初回コミット (Initial Commit)
環境構築の区切りとして,現在の状態をリポジトリに保存する.
1. ステータス確認
`.gitignore` が正しく適用されているか確認する.
$ git status
※ `node_modules/` が表示されていないことを確認する.
2. ステージング
変更された全てのファイルをコミット対象に追加する.
$ git add .
3. コミット実行
構築内容を示すメッセージを付与してコミットする.
$ git commit -m "chore: Project initialization (Monorepo, pnpm, Vite)"
3. パッケージ・ライブラリ導入 (Dependency Installation)
------------------------------------------------------------------------
3-1. 共通ライブラリ (packages/shared)
共通ロジック用のパッケージ設定を行う.
1. 初期化とビルドツール導入
$ cd packages/shared
$ pnpm init
$ pnpm add -D typescript tsup
2. 設定ファイルの調整 (package.json)
・name: "@repo/shared" と命名する(推奨).
・main: "./dist/index.js", types: "./dist/index.d.ts" を指定する.
・scripts: "build": "tsup src/index.ts --format cjs,esm --dts" を追加する.
3. エントリーポイントの作成
tsupがビルド対象とするファイルを作成する.
$ mkdir src
$ touch src/index.ts
※ 現時点では空ファイルでよいが,将来的に constants.ts 等を export する記述を行う.
(例: export * from './constants';)
4. TypeScript設定ファイルの作成 (tsconfig.json)
ビルドと型定義生成のための設定ファイルを作成する.
・ファイル: packages/shared/tsconfig.json
・内容:
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "Bundler",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "./dist",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
3-2. フロントエンド (apps/client)
Vite プロジェクトとして初期化を行う.
1. プロジェクト作成
$ cd ../../apps/client
$ pnpm create vite . --template preact-ts
※ 実行中に表示される選択肢には以下のように回答すること:
? Use rolldown-vite (Experimental)? » No
? Install with pnpm and start now? » No
2. 依存ライブラリのインストール
・Pixi.js (描画エンジン) を追加する.
・共通ライブラリへの依存を追加する.
$ pnpm add pixi.js
$ pnpm add @repo/shared --workspace
3-3. バックエンド (apps/server)
Node.js アプリケーションとして初期化を行う.
1. 初期化
$ cd ../../apps/server
$ pnpm init
2. 依存ライブラリのインストール
・ws (WebSocket) を追加する.
・開発用ツール (tsx, typescript, @types/node, @types/ws) を追加する.
・共通ライブラリへの依存を追加する.
$ pnpm add ws
$ pnpm add -D tsx typescript @types/node @types/ws
$ pnpm add @repo/shared --workspace
3. サーバー用ディレクトリとファイルの作成
tsxが実行対象とするエントリーポイントを作成する.
$ mkdir src
$ touch src/index.ts
4. 実行スクリプトの定義
package.json にサーバー起動用のコマンドを追加する.
・編集ファイル: apps/server/package.json
・内容:
"scripts": {
"dev": "tsx watch src/index.ts"
}
5. TypeScript設定ファイルの作成 (tsconfig.json)
開発時の実行環境とパス解決のための設定ファイルを作成する.
・ファイル: apps/server/tsconfig.json
・内容:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"lib": ["ES2022"],
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
"paths": {
"@repo/shared": ["../../packages/shared/src/index.ts"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}
4. Docker環境での開発開始 (推奨手順)
------------------------------------------------------------------------
本プロジェクトは VS Code の Dev Containers 機能を使用する.
これにより Node.js, pnpm, ESLint 等の環境が自動構築される.
4-1. プロジェクトを開く
1. VS Codeを起動し,「ファイル > フォルダを開く」からプロジェクトルートを選択する.
4-2. コンテナでの再起動 (Reopen in Container)
以下のいずれかの方法で,開発環境をコンテナ内に移行する.
【方法A: ステータスバーから】
1. ウィンドウ左下の緑色(または青色)の「><」アイコンをクリックする.
2. 表示されるメニューから「Reopen in Container」を選択する.
【方法B: コマンドパレットから】
1. [F1] または [Ctrl+Shift+P] を押下する.
2. "Reopen" と入力し,「Dev Containers: Reopen in Container」を選択する.
4-3. 初回ビルドの待機
1. 初回起動時は Dockerイメージのビルドと npmパッケージのインストールが行われる.
(数分〜十数分かかる場合がある)
2. 右下に "Starting Dev Container" 等の通知が表示されている間は待機する.
4-4. 起動確認
1. 左下のアイコンが「Dev Container: Pixel Paint War Dev」と表示されていることを確認する.
2. VS Codeのターミナルを開き (`Ctrl + @`),パスを確認する.
成功例: node@...:/workspace$
(Windowsのパス C:\Users... ではなく Linux形式になっていれば成功)
3. 動作確認コマンドを実行する.
$ pnpm --filter client dev
ブラウザで http://localhost:5173 にアクセスし,画面が表示されれば環境構築完了である.
5. 開発ツールの確認 (Tools Verification)
------------------------------------------------------------------------
Dockerコンテナ起動完了後、定義済みのツールが正しく自動導入されているか確認する.
※ 手動でのインストールは不要である.
5-1. VS Code 拡張機能
拡張機能サイドバーを開き、"Dev Container: Pixel Paint War Dev" セクションに
以下がインストール済みであることを確認する.
・ESLint
・Prettier - Code formatter
・EditorConfig for VS Code
・Hex Editor
・GitHub Copilot
5-2. AI アシスタント設定
GitHub Copilot Pro
- VS Code 右下のアイコンから、GitHubアカウントへのログイン状態を確認する.
6. 構成確認 (Configuration Check)
------------------------------------------------------------------------
6-1. 最終ディレクトリ構成
構築完了時点で,以下のディレクトリおよびファイルが存在することを確認する.
SkillSemiWebGame/ <-- プロジェクトルート
├── .devcontainer/ <-- 【重要】Docker設定
│ └── devcontainer.json
├── .git/ <-- git init で作成
├── .gitignore <-- Git除外設定
├── docker-compose.yml <-- Docker構成
├── package.json <-- ルート定義
├── pnpm-workspace.yaml <-- ワークスペース定義
├── node_modules/ <-- 依存ライブラリ
│
├── apps/ <-- アプリケーション格納用
│ ├── client/ <-- フロントエンド (Vite + Preact)
│ │ ├── node_modules/
│ │ ├── src/
│ │ │ ├── main.tsx (または index.tsx)
│ │ │ └── ... (Viteテンプレートファイル群)
│ │ ├── index.html
│ │ ├── package.json <-- pixi.js, @repo/shared 依存あり
│ │ ├── tsconfig.json
│ │ └── vite.config.ts
│ │
│ └── server/ <-- バックエンド (Node.js)
│ ├── node_modules/
│ ├── src/
│ │ └── index.ts <-- エントリーポイント
│ ├── package.json <-- ws, @repo/shared 依存あり
│ └── tsconfig.json <-- pnpm init 等で生成(または要作成)
│
└── packages/ <-- 共通パッケージ格納用
└── shared/ <-- 共通ロジック
├── node_modules/
├── dist/ <-- ビルド後に生成される (index.js, index.d.ts)
├── src/
│ └── index.ts <-- 空または定数export用
├── package.json <-- buildスクリプト定義あり
└── tsconfig.json <-- tsup/typescript設定用
6-2. 重要ファイル設定確認
各パッケージの連携設定が正しいか確認する.
■ root/pnpm-workspace.yaml
packages:
- 'apps/*'
- 'packages/*'
■ packages/shared/package.json
・name: "@repo/shared"
・main: "./dist/index.js"
・types: "./dist/index.d.ts"
■ apps/client/package.json
・dependencies:
"@repo/shared": "workspace:*"
■ apps/server/package.json
・dependencies:
"@repo/shared": "workspace:*"
7. 動作確認 (Verification)
------------------------------------------------------------------------
7-1. ビルド確認
※ 注意: 以下のコマンドは全て「Dev Container内のターミナル」で実行すること.
$ pnpm --filter @repo/shared build
※ shared のビルドが成功することを確認する.
7-2. 開発サーバー起動
モノレポ構成のため,個別のディレクトリに移動せず,プロジェクトルートから
--filter オプションを使用して各アプリを起動する.
※ ターミナルを2つ開き,両方を同時に起動した状態で開発を進めることを推奨.
1.Client (フロントエンド) の動作確認
・ルートディレクトリにて以下のコマンドを実行する.
$ pnpm --filter client dev
・ブラウザでの確認:
ターミナルに「➜ Local: http://localhost:5173/」と表示されたら,
Google Chrome等のブラウザを開き,アドレスバーに上記URLを貼り付けて実行する.
・正常動作の判断基準:
画面に「Vite + Preact」のロゴと「Vite + Preact + TypeScript」といった
テキストが表示されていれば,フロントエンドの環境構築は成功である.
2. Server (バックエンド) の動作確認
・テスト用コードの作成:
動作確認用のエントリーポイントを作成する.
$ touch apps/server/src/index.ts
ファイルに以下の内容を記述する.
console.log("Server is running!");
・コマンド:
$ pnpm --filter server dev
・正常動作の判断基準:
ターミナルに「Server is running!」と出力されれば構築成功である.
3.終了方法 (重要)
・動作確認を終了し,開発サーバーを停止させる場合は,ターミナル上で
「Ctrl + C」を押下する.
・停止後はブラウザでURLにアクセスしても接続不可となるが,再度起動
コマンドを実行すればいつでも再開可能である.
8. 本番デプロイ手順 (Production Deployment)
------------------------------------------------------------------------
本番環境(サーバー)へのデプロイは,Dockerを使用して最適化されたイメージを作成して行う.
8-1.
構成ファイルの準備
プロジェクトルートに以下のファイルが存在することを確認する.
1. Dockerfile (Multi-stage build構成)
- `pnpm prune` 後の `node_modules` コピー処理が含まれていること.
2. docker-compose.prod.yml (本番起動用)
- ポート設定: "3001:3000" (ホスト側3001番 -> コンテナ側3000番)
8-2.
ローカルでの本番稼働テスト
開発環境(Dev Container)と同時に起動する場合,ポート衝突を避けるために
ホスト側のポートをずらして起動する.
1. ビルドと起動 (WSL/ホスト側のターミナルで実行)
$ docker compose -f docker-compose.prod.yml up -d --build
2. 稼働確認
$ docker compose -f docker-compose.prod.yml ps
・Stateが "Up" であり,"Restarting" を繰り返していないことを確認する.
3. ログ確認
$ docker compose -f docker-compose.prod.yml logs -f
・"Pixel Paint War Server started on port 3000" と表示されれば成功.
4. ブラウザ接続確認
・URL: http://localhost:3001
・表示: "Upgrade Required" と表示されれば,WebSocketサーバーとして正常に稼働している.
8-3.
停止と削除
テストが終了したらリソースを解放する.
$ docker compose -f docker-compose.prod.yml down