2026年度 東京電機大学 ソフトウェア研究部 公式ウェブサイト
| カテゴリ | 技術 |
|---|---|
| フロントエンド | Next.js 16 (App Router), React 19, Tailwind CSS 4, TypeScript 5 |
| CMS | Payload CMS 3, PostgreSQL 16 |
| コード品質 | Biome (Linter & Formatter), Lefthook (Git hooks) |
| インフラ | Docker & Docker Compose, pnpm workspaces |
tdu-src-website/
├── apps/
│ ├── web/ # Next.js フロントエンド (port 3000)
│ │ └── src/app/ # App Router ページ・コンポーネント
│ └── cms/ # Payload CMS (port 3001)
│ └── contents/ # CMS コンテンツ定義
├── packages/
│ ├── theme/ # 共有デザイントークン (CSS変数)
│ └── types/ # 共有型定義
└── docs/
└── api/ # API仕様書
- Node.js 20以上
- pnpm 9以上
- Docker & Docker Compose
# 1. 依存関係のインストール
pnpm install
# 2. 環境変数の設定(PAYLOAD_SECRETを必ず変更)
cp .env.example .env
# 3. Docker + 開発サーバーを起動
pnpm dev| URL | 説明 |
|---|---|
| http://localhost:3000 | フロントエンド |
| http://localhost:3001/admin | CMS管理画面 |
/ # トップページ
/about # ソフ研について
/team # 班一覧
/team/game # ゲームプログラミング班
/team/webapp # Webアプリ班
/team/sound # サウンド班
/team/2d # 2D班
/team/3d # 3D班
/team/design # デザイン班
/news # お知らせ一覧
/news/[id] # お知らせ詳細
/sofchara # ソフきゃら!
/sofchara/[name] # キャラクター詳細
/sofchara/guideline # 二次創作ガイドライン
/sofchara/sofkentown # ソフケンタウン一覧
/sofchara/sofkentown/[id] # ソフケンタウン詳細
このプロジェクトは SSG + ISR (Incremental Static Regeneration) 構成です。
| 設定 | 値 |
|---|---|
| 再検証間隔 | 5分(全ページ統一) |
pnpm dev # Docker + 全アプリ起動
pnpm dev:local # Docker なしで全アプリ起動
pnpm dev:web # フロントエンドのみ
pnpm dev:cms # CMSのみpnpm build # 全アプリをビルド
pnpm build:web # フロントエンドのみ
pnpm build:cms # CMSのみpnpm lint # Lint
pnpm format # フォーマット
pnpm check # Lint + Format
pnpm ci # CI用チェックpnpm docker:up # PostgreSQL起動
pnpm docker:down # 停止
pnpm docker:logs # ログ表示pnpm cms:migrate # マイグレーション実行
pnpm cms:migrate:create # 新規マイグレーション作成
pnpm cms:migrate:status # 状態確認| 項目 | 内容 |
|---|---|
| サーバー | ConoHa VPS (Ubuntu) |
| フロントエンド | https://tdu-src.com |
| CMS管理画面 | https://cms.tdu-src.com/admin |
| SSL | Let's Encrypt (Certbot) |
| リバースプロキシ | Nginx |
| コンテナ管理 | Docker Compose |
# nvm + Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc
nvm install 22
nvm use 22
# pnpm
npm install -g pnpm
# Docker (公式ドキュメントに従う)
# Docker Compose v2 も必須git clone <repo-url> ~/tdu-src-website
cd ~/tdu-src-website
pnpm install.env を作成・編集する:
cp .env.example .env# 外部公開URL(クライアントサイド用)
NEXT_PUBLIC_CMS_URL=https://cms.tdu-src.com
# DBポート(5432が使用中の場合は別ポートを指定)
POSTGRES_PORT=5433
# ホスト側からマイグレーションを実行するためのDB接続URL
DATABASE_URL=postgresql://postgres:postgres@localhost:5433/tdu_src
# Payload CMS シークレット(必ず変更すること)
PAYLOAD_SECRET=<ランダムな文字列>sudo docker compose up -d --build起動確認:
sudo docker ps
sudo docker logs tdu-src-web --tail 30
sudo docker logs tdu-src-cms --tail 30コンテナ起動後、ホスト側から初回マイグレーションを実行する:
pnpm cms:migrate:create
pnpm cms:migrate注意:
pnpm cms:migrateはホスト側の Node.js + TypeScript 環境から実行する。.envのDATABASE_URLがホスト側から接続できるポートを向いていることを確認すること。
# 設定ファイルをコピー
sudo cp deploy/nginx/tdu-src.com.conf /etc/nginx/sites-available/tdu-src.com.conf
sudo cp deploy/nginx/cms.tdu-src.com.conf /etc/nginx/sites-available/cms.tdu-src.com.conf
# シンボリックリンク(既存でない場合)
sudo ln -sf /etc/nginx/sites-available/cms.tdu-src.com.conf /etc/nginx/sites-enabled/
# 設定テストとリロード
sudo nginx -t && sudo nginx -s reload事前に cms.tdu-src.com のDNS AレコードをサーバーのパブリックIPに設定しておくこと。
sudo certbot --nginx -d cms.tdu-src.comcd ~/tdu-src-website
git pull
sudo docker compose up -d --buildスキーマ変更があった場合はマイグレーションも実行:
pnpm cms:migrate:create
pnpm cms:migrate# 状態確認
sudo docker ps
# ログ確認
sudo docker logs tdu-src-web --tail 50
sudo docker logs tdu-src-cms --tail 50
sudo docker logs tdu-src-postgres --tail 50
# 再起動
sudo docker compose restart
# 停止
sudo docker compose down-
upstream sent too big headerの場合:nginx設定のlocation /ブロックに以下が含まれているか確認proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k;
含まれていなければ
deploy/nginx/tdu-src.com.confを再コピーしてnginxをリロード -
upstream timed outの場合:コンテナが起動中かsudo docker psで確認
relation "xxx" does not exist:マイグレーションが未実行。pnpm cms:migrateを実行- ポート接続エラー:
.envのDATABASE_URLのポートがPOSTGRES_PORTと一致しているか確認
# 使用中のポートを確認
ss -tlnp | grep <port>.env の POSTGRES_PORT を変更して docker compose down && docker compose up -d --build
このプロジェクトは東京電機大学ソフトウェア研究部によって管理されています。