コンテンツへスキップ
TubePress — 無料・セルフホスト & 積極的メンテナンス
開発者リファレンス

アーキテクチャ

コアのレイアウト、リクエストのライフサイクル、そして TubePress が採用するノーフレームワークの規約について解説します。

TubePress は意図的にシンプルなソフトウェアです。フレームワークも、依存性注入コンテナも、ビルドステップも不要です — 静的クラスを使用した、整然とした最新の PHP だけです。このページでは、CMS を自信を持って拡張できるよう、各パーツがどのように組み合わさっているか、またコードをどこに配置すべきかを説明します。

設計の理念

コードベース全体を形作る3つの考え方があります:

  • フレームワーク不使用。 カスタム静的クラスを使用したピュア PHP です。壊れるような Composer のランタイム依存関係はなく、PHP 自体以外に学ぶことは何もありません。
  • 固定のコア、自由なアドオン。 コアはアップデート可能で、直接編集すべきではありません。カスタマイズするものはすべて、テーマプラグイン、または設定に配置します。
  • スケーラビリティと低コストホスティングへの対応。 重い処理はチャンク分割され、組み込みの pseudo-cron により、システムの crontab は不要です。

ディレクトリ構成

リポジトリは、コア(固定、アップデート可能)とアドオン(ユーザーがインストール・削除するもの)を分離しています。

CORE — never modified by themes/plugins, replaced by updates
  config/            App config, DB config, install marker
  src/Core/          App, Database, Router, Pagination, CronManager,
                     and the managers (Seo, Transcode, Update, …)
  src/Auth/          Auth, Gate (permissions)
  src/Models/        Video, Category, Tag, Performer, Channel,
                     Comment, Page, User, Setting, Favorite, History
  src/Admin/         Admin CRUD controllers
  src/Front/         Public-facing controllers
  src/Install/       InstallController, Migrator
  src/Helpers/       Format, FileUpload, Sanitizer, Slug, SEO,
                     Player, RateLimiter, ImpressionTracker
  src/Plugin/        HookSystem, PluginInterface, PluginManager
  src/Theme/         ThemeManager, ThemeRenderer
  sql/               Numbered migrations (001_…sql → 0xx_…sql)
  templates/admin/   Admin panel templates (layout + partials)
  templates/install/ Install wizard templates
  public/            Web root — index.php, uploads/, symlinks
  cron/              Optional CLI scripts for a system crontab

ADD-ONS — installable / removable by users
  themes/            Theme directories (active: "simply")
  plugins/           Plugin directories (agegate, backup, ctr)
  lang/              Translation files (en, fr, de, es, ar, …)
カスタマイズのためにコアを編集しないでください。 src/config/sql/templates/ 以下のファイルはアップデートによって上書きされる可能性があります。変更はテーマまたはプラグインに配置し、アップデート後も残るようにしてください。

リクエストのライフサイクル

すべてのリクエストは同じ順序で public/index.php を通じて処理されます:

  1. PHP バージョンガード。 config/php-guard.php が最初に実行されます — 最新の構文がロードされる前に、サポートされていない PHP バージョンでの起動を防ぐ、解析安全なゲートです。
  2. ブートストラップ。 config/app.php がオートロード、セッション、コアサービスをセットアップします。
  3. インストール確認。 App::isInstalled() が false の場合(config/installed.php がない場合)、リクエストはインストールウィザードにルーティングされ、他は何もロードされません。
  4. ルート登録。 管理者、API、フロントコントローラーはそれぞれ静的な ::routes() メソッドを通じてルートを登録します。
  5. ディスパッチ。 Router::dispatch() が URL を照合し、コントローラーメソッドを呼び出します。
  6. レンダリング。 管理者アクションは templates/admin/* をレンダリングし、フロントアクションは ThemeRenderer::render() を通じてアクティブなテーマをレンダリングします。
  7. レンダリング後の処理。 インプレッションがフラッシュされ、CronManager::run() が実行予定のタスクを起動します。

フロントページのルート(静的ページのためのキャッチオール /{slug})は最後に登録されるため、実際のルートを隠してしまうことはありません。

コアの規約

概念規約
コントローラーAdminXxxController::routes() / FrontXxxController::routes() がルートを登録し、メソッドがリクエストを処理します。
モデル静的メソッド:Video::find($id)Video::all($filters)Video::create($data)
DatabaseDatabase::fetchOne()fetchAll()insert()update()delete()count()transaction()
RouterRouter::get()Router::post()Router::param('name')Router::redirect()
管理者テンプレートRouter::render('admin/videos', […])templates/admin/videos.phplayout.php_videos.php パーシャルをロード)。
フロントテンプレートThemeRenderer::render('home', […]) → アクティブなテーマテンプレートとその layout.php
マイグレーションsql/NNN_name.sql、インストールとアップデート時に Migrator::run() によって自動的に実行されます。
フックHookSystem::doAction('event')HookSystem::applyFilter('filter', $value)

ウェブサーバーのサポート

TubePress は ApacheNginx の両方で動作します:

  • Apache.htaccess ファイルが URL リライトとディレクトリ保護を処理します。
  • Nginxalias ディレクティブがアセットを提供し、deny all ルールが機密パスを保護します。
  • シンボリックリンクpublic/themes → ../../themespublic/templates → ../../templates がテーマと管理者アセットを公開しつつ、PHP ソースをウェブルートの外に置きます。

ウェブルートは常に public/ です。機密性の高いもの — config/src/sql/storage/ — はすべてウェブルートの外に置かれ、サーバーレベルでも追加的にブロックされています。

カスタマイズ先

したいこと…配置場所…
外観とレイアウトの変更テーマ(コードなしの変更には外観設定)
機能または統合の追加アクションとフィルターを使用するプラグイン
コードなしで動作を変更設定
スケジュールされた作業の追加プラグインから CronManager を使用

次のステップ

まだお困りですか?

ダッシュボードからチケットを送信してください。サポートチームがお手伝いします。

ライブデモを試す → TubePress をダウンロード →