Skip to content

presire/MochBBS

Repository files navigation

Moch BBS

次世代掲示板システム - 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 install

管理者アカウント作成

cd backend
php artisan bbs:create-admin

詳細は docs/Admin-Account-Setup.md を参照してください。

開発コマンド

バックエンド (backend/)

php artisan serve                    # 開発サーバ起動 (:8000)
php artisan migrate                  # マイグレーション実行
./vendor/bin/phpunit                 # テスト実行
./vendor/bin/pint                    # コードフォーマット

フロントエンド (frontend/)

npm run dev                          # Vite開発サーバ起動 (:5173)
npm run build                        # プロダクションビルド
npm run lint                         # ESLintチェック
npm run test                         # テスト実行

BBS固有コマンド

php artisan bbs:auto-archive         # 自動アーカイブ実行
php artisan bbs:collect-active-users  # アクティブユーザ集計
php artisan notifications:cleanup     # 通知クリーンアップ
php artisan bbs:clear-captcha-cache   # CAPTCHA認証キャッシュクリア

API概要

公開エンドポイント

メソッド パス 説明
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} 過去ログ詳細

2ch互換エンドポイント

パス 説明
/{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/ ディレクトリを参照してください。

ライセンス

MIT License

About

PHP 8 / Laravel 11 + React 19 + TypeScriptで新規構築した掲示板システム。スレッド管理、NGワード、忍法帖、CAPTCHA (3プロバイダー)、プラグインシステム、管理画面、2ch専用ブラウザ互換エンドポイントを実装した次世代匿名掲示板エンジン

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors