次世代掲示板システム - PHP 8 / Laravel 11 + React 19 + TypeScript を用いたプロジェクトです。
0ch+掲示板システムの機能を現代的な技術スタックで再実装し、管理機能・プラグインシステム・セキュリティ対策を強化しています。
- 掲示板機能
スレッド作成・レス投稿・過去ログ・全掲示板横断検索 - 管理機能
ダッシュボード・ユーザ管理・掲示板管理・スレッド/レス管理・ログ管理・通知管理 - セキュリティ
NGワード・レートリミット・DNSBL・Samba規制・CAPTCHA (Turnstile/reCAPTCHA v3/hCaptcha)・アクセスルール - プラグインシステム
Dice・Omikuji・RemoveUtm・画像サムネイル・スパムフィルター・バックアップ等 - 忍法帖
レベルシステム・セッション管理 - スレ主システム
スレッド作成者による管理コマンド - キャップ (CAP)
管理者 / 特権ユーザ向け認証投稿・コマンド実行 - 専用ブラウザ対応
2ch互換DAT/subject.txtエンドポイント - レスポンシブ対応:
モバイル・タブレット・デスクトップ
| 項目 | バージョン |
|---|---|
| PHP | 8.2+ |
| Laravel | 11.x |
| MariaDB | 10.11+ (MySQL互換) |
| 認証 | Laravel Sanctum 4.x |
| キャッシュ | ファイルキャッシュ |
| 項目 | バージョン |
|---|---|
| React | 19.x |
| TypeScript | 5.9.x (strict mode) |
| Vite | 7.x |
| Tailwind CSS | 4.x |
| React Router | 7.x |
| TanStack React Query | 5.x |
| Axios | 1.x |
- Nginx (リバースプロキシ + PHP-FPM)
- Terraform / Cloudflare WAF
- SSL: Cloudflare / Let's Encrypt
.
├── backend/ # バックエンド (Laravel 11)
│ ├── app/
│ │ ├── Console/Commands/ # Artisanコマンド (自動アーカイブ、管理者作成等)
│ │ ├── Contracts/ # プラグインインターフェース、CAPTCHAドライバ
│ │ ├── Enums/ # CapPermission, UserAuthority, ClientType等
│ │ ├── Http/
│ │ │ ├── Controllers/
│ │ │ │ ├── Api/
│ │ │ │ │ ├── Admin/ # 管理者APIコントローラ (16個)
│ │ │ │ │ ├── BbsBoardController.php
│ │ │ │ │ ├── ThreadController.php
│ │ │ │ │ ├── ResponseController.php
│ │ │ │ │ ├── SearchController.php
│ │ │ │ │ ├── KakoController.php
│ │ │ │ │ └── SiteConfigController.php
│ │ │ │ ├── CaptchaPageController.php # 専ブラ用CAPTCHA認証ページ
│ │ │ │ └── CompatController.php # 2ch互換エンドポイント
│ │ │ ├── Middleware/ # アクセス制御、レートリミット、アクセスログ、Gzip
│ │ │ └── Requests/ # FormRequestバリデーション (Admin/Bbs)
│ │ ├── Models/ # Eloquentモデル (14個)
│ │ ├── Services/ # ビジネスロジック (21サービス)
│ │ └── Providers/
│ ├── config/
│ │ └── bbs.php # BBS固有設定
│ ├── database/
│ │ └── migrations/ # 連番形式 (0001_〜0030_)
│ ├── plugins/ # プラグインディレクトリ
│ │ ├── Backup/ # 自動バックアップ
│ │ ├── Dice/ # サイコロ機能
│ │ ├── EQAlert/ # 地震速報
│ │ ├── ImageThumbnail/ # 画像サムネイル生成
│ │ ├── NewsFlash/ # ニュース速報
│ │ ├── Omikuji/ # おみくじ機能
│ │ ├── RemoveUtm/ # UTMパラメータ除去
│ │ ├── Sannan/ # 忍法帖
│ │ └── SpamFilter/ # スパムフィルター
│ ├── routes/
│ │ ├── api.php # REST APIルーティング
│ │ ├── compat.php # 2ch互換ルーティング
│ │ ├── web.php
│ │ └── console.php
│ ├── storage/
│ │ └── app/
│ │ ├── threads/ # アクティブスレッドJSON
│ │ └── kako/ # 過去ログJSON
│ └── tests/
│ ├── Feature/ # 機能テスト (API、ミドルウェア、コマンド、互換)
│ └── Unit/ # ユニットテスト (サービス、モデル)
│
├── frontend/ # フロントエンド (React 19 + TypeScript)
│ ├── src/
│ │ ├── api/ # APIクライアント
│ │ │ ├── admin/ # 管理者API (14モジュール)
│ │ │ ├── client.ts # Axios設定
│ │ │ ├── boards.ts
│ │ │ ├── threads.ts
│ │ │ ├── kako.ts
│ │ │ └── search.ts
│ │ ├── components/
│ │ │ ├── admin/ # 管理画面コンポーネント (23個)
│ │ │ ├── board/ # 掲示板コンポーネント (Banner、BoardList等)
│ │ │ ├── thread/ # スレッドコンポーネント (投稿フォーム、レス表示等)
│ │ │ ├── common/ # 共通UI (Button、Modal、Loading、CAPTCHA等)
│ │ │ └── layout/ # レイアウト (MainLayout、Sidebar)
│ │ ├── contexts/ # Reactコンテキスト (認証、サイト設定、レスデータ)
│ │ ├── hooks/ # カスタムフック (19個)
│ │ ├── pages/
│ │ │ ├── admin/ # 管理画面ページ (12個)
│ │ │ ├── BoardListPage.tsx
│ │ │ ├── ThreadListPage.tsx
│ │ │ ├── ThreadDetailPage.tsx
│ │ │ ├── KakoListPage.tsx
│ │ │ ├── KakoDetailPage.tsx
│ │ │ └── SearchPage.tsx
│ │ ├── types/ # TypeScript型定義 (7ファイル)
│ │ └── test/ # テストセットアップ
│ ├── vite.config.ts
│ ├── vitest.config.ts
│ └── tsconfig.json
│
├── nginx/ # Nginx設定
│ ├── moch-dev.conf # 開発環境設定
│ ├── moch-prod.conf # 本番環境設定
│ ├── php-fpm-moch.conf # PHP-FPM設定
│ └── php.ini.moch # PHP設定
│
├── infra/ # インフラ設定
│ ├── cloudflare/ # Cloudflare WAF設定スクリプト
│ └── terraform/ # Terraformモジュール
│
├── scripts/ # セットアップスクリプト
│ ├── setup.sh # 環境構築スクリプト
│ ├── init-db-mysql.sh # データベース初期化(MariaDB/MySQL)
│ └── init-db-pgsql.sh # データベース初期化(PostgreSQL)
│
├── specifications/ # 仕様書
│ ├── [機能概要書]*.xlsx # 機能概要書 (掲示板閲覧・投稿、管理運用、セキュリティ、専ブラ互換)
│ ├── [データベース]テーブル定義書.xlsx # テーブル定義書
│ └── [ファイル]ファイルフォーマット定義書.xlsx # ファイルフォーマット定義書
│
└── docs/ # ドキュメント
├── Setup-Guide.md # セットアップガイド
├── Admin-Account-Setup.md # 管理者アカウント設定
├── Auto-Archive-Setup.md # 自動アーカイブ設定
├── CAPTCHA-Setup.md # CAPTCHA設定ガイド
├── Cloudflare-WAF-Setup.md # WAF設定ガイド
├── File-Storage-Guide.md # ファイルストレージ設計
├── Wacchoi-Rotation.md # ワッチョイローテーション
├── Compat/ # 互換機能ドキュメント
├── Deploy/ # デプロイ手順書 (Docker、Nginx、本番設定)
├── Function/ # 機能別ドキュメント (掲示板管理、ユーザ管理等)
└── Plugin/ # プラグインドキュメント (10個)
| データ | 保存先 | 備考 |
|---|---|---|
| スレッドメタ情報 | MariaDB threads テーブル |
is_archived/archived_at で過去ログ管理 |
| レス内容 | JSONファイル (1スレッド1ファイル) | storage/app/threads/{boardId}/{threadKey}.json |
| 過去ログ | JSONファイル | storage/app/kako/{boardId}/{threadKey}.json |
| キャッシュ | ファイルキャッシュ | Redis不使用 |
- PHP 8.2+
- Composer
- Node.js 18+
- MariaDB 10.11+
# セットアップスクリプト実行
./scripts/setup.sh
# または手動セットアップ
# バックエンド
cd backend
composer install
cp .env.example .env
php artisan key:generate
php artisan migrate
php artisan db:seed
# フロントエンド
cd frontend
npm installcd backend
php artisan bbs:create-admin詳細は docs/Admin-Account-Setup.md を参照してください。
php artisan serve # 開発サーバ起動 (:8000)
php artisan migrate # マイグレーション実行
./vendor/bin/phpunit # テスト実行
./vendor/bin/pint # コードフォーマットnpm run dev # Vite開発サーバ起動 (:5173)
npm run build # プロダクションビルド
npm run lint # ESLintチェック
npm run test # テスト実行php artisan bbs:auto-archive # 自動アーカイブ実行
php artisan bbs:collect-active-users # アクティブユーザ集計
php artisan notifications:cleanup # 通知クリーンアップ
php artisan bbs:clear-captcha-cache # CAPTCHA認証キャッシュクリア| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/health |
ヘルスチェック |
| GET | /api/search |
全掲示板横断検索 |
| GET | /api/boards |
掲示板一覧 |
| GET | /api/boards/{id} |
掲示板詳細 |
| GET | /api/boards/{boardId}/threads |
スレッド一覧 |
| POST | /api/boards/{boardId}/threads |
スレッド作成 |
| GET | /api/boards/{boardId}/threads/{threadKey} |
スレッド詳細 |
| POST | /api/boards/{boardId}/threads/{threadKey}/responses |
レス投稿 |
| GET | /api/boards/{boardId}/kako |
過去ログ一覧 |
| GET | /api/boards/{boardId}/kako/{threadKey} |
過去ログ詳細 |
| パス | 説明 |
|---|---|
/{boardId}/subject.txt |
スレッド一覧 (DAT形式) |
/{boardId}/dat/{threadKey}.dat |
スレッドデータ (DAT形式) |
/test/bbs.cgi |
書き込みエンドポイント |
/api/admin/ 配下に30以上のエンドポイントを提供 (認証必須)
# バックエンド
cd backend
./vendor/bin/phpunit
# フロントエンド
cd frontend
npm run test詳細なドキュメントは docs/ ディレクトリを参照してください。