bitrix-project-structure について
Bitrix の開発者向けに、プロジェクト構成、モジュール読み込み、オートローディング、ファイルの優先順位を解説するリファレンススキルです。コードの配置場所とカーネルによる解決方法を示します。
主な機能
- 01プロジェクトのディレクトリ構成
- 02モジュール読み込みの指針
- 03PSR-4 オートローディング規則
- 04Composer の設定
- 05ローカルとカーネルのファイル優先順位
活用シーン
- 01プロジェクトコードの配置場所の決定
- 02必須・任意モジュールの読み込み
- 03モジュールクラスの自動読み込み設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bxmaximum/ bitrix-framework-skills --skill bitrix-project-structureインストール後、Claude Code で/bitrix-project-structureを入力して読み込まれたか確認します。
詳細
プロジェクト構成とオートローディング
ベースライン:main 23.0+ · 検証済み:main 26.800.0
ルート
/bitrix/— カーネルとマーケットプレイスのモジュールが含まれます。アップデートで置き換えられるため、編集しないでください(bitrix-framework)。/local/— プロジェクトのすべてのコードを置きます。/local/内の同じ相対パスが/bitrix/より優先されます。/upload/— ユーザーおよびモジュールのファイルを置きます。
/local/
├── modules/<vendor>.<module>/ # project code lives in modules (bitrix-modules)
├── components/<ns>/<name>/ # bitrix-components
├── templates/<site_tpl>/ # site templates, component template overrides
├── routes/web.php # bitrix-routing
├── js/<vendor>/<module>/<ext>/ # extension id vendor.module.ext (bitrix-extensions)
├── activities/ # bizproc activities (also activities/custom)
├── gadgets/<ns>/<name>/ # desktop gadgets
├── blocks/ # landing blocks repo
├── php_interface/
│ ├── init.php # every hit, before page code
│ ├── dbconn.php # Since main 24.100 here; kernel constants
│ ├── after_connect_d7.php # after the "default" DB connect only
│ └── user_lang/<lang>/lang.php # phrase overrides
├── .settings.php # replaces /bitrix/.settings.php (bitrix-settings)
└── .settings_extra.php
/local/php_interface/ にも /bitrix/php_interface/ と同じアクセス保護を設定してください。
php_interface ファイル
init.php:モジュールより前に必要な定数と、どのモジュールにも属さないフック用の実行時addEventHandler()のみを記述します。それ以外はモジュール(install/、include.php、.settings.php)に移してください。after_connect_d7.phpはdefault接続オブジェクト内でインクルードされます。文字セット、sql_mode、タイムゾーンの設定には$this->queryExecute("SET …")を使用してください。実行されるファイルは1つだけです。/localにコピーを置くと/bitrixのファイルは無効になるため、そのステートメントも引き継いでください。その他の接続では、connections内の'include_after_connected' => '/abs/path.php'を指定して、それぞれのファイルを実行します。
モジュールの読み込み(Loader)
| 状況 | 呼び出し |
|---|---|
| モジュールが必須。読み込み失敗はバグ | Loader::requireModule('vendor.module') — LoaderException をスローします |
| オプションの連携機能 | if (Loader::includeModule('crm')) { … } |
| シェアウェア/デモの状態確認 | Loader::includeSharewareModule() |
includeModule() は、モジュールが b_module に登録されていない場合(ファイルがあるだけでは不十分です)、またはその include.php が false を返した場合に false を返します。成功すると、PSR-4 のルートを登録し、include.php をインクルードして、モジュールの services を登録します。読み込みはサービスの深部ではなく、エントリーポイント(コントローラー、エージェント、コマンド)で一度だけ行ってください。旧式の CModule::IncludeModule() は互換性維持用です。
モジュールの lib/ における PSR-4
- ルート:
vendor.module→Vendor\Module\→lib/、1単語のmymodule→Bitrix\Mymodule\。 - フォルダーは名前空間のセグメント、ファイルはクラスに対応します:
Vendor\Module\Public\Service\PostService→lib/Public/Service/PostService.php。 - Loader は大文字と小文字を区別したパスを試し、次にすべて小文字のパスを試します(カーネルでは両方の形式が混在しています。main 26.600 以降、多くのカーネルの
lib/ディレクトリは PascalCase です)。PostTableはpost.phpとしても検索されます。 - カーネルの
lib/ファイルをパス指定でrequireしないでください。カーネルのアップデートでファイル名が変更されるためです(例:lists 26.200 で PascalCase に変更)。 - PSR-4 に準拠しない旧式コードでは、
include.php内でLoader::registerNamespace('Vendor\\Legacy', $absDir)またはLoader::registerAutoLoadClasses('vendor.module', ['COldClass' => 'classes/old.php'])を使用してください。
Composer
composer.jsonをDOCUMENT_ROOTの外(例:プロジェクトルート)に置き、.settings.phpに'composer' => ['value' => ['config_path' => '../composer.json']]を設定します。カーネルがvendor/autoload.phpをインクルードします。bitrix.php(Symfony Console)で必要です —bitrix-console-commands。/bitrix/にパッケージをインストールしないでください。
ファイルの優先順位
- コンポーネント、サイトテンプレート、
php_interfaceファイル、.settings*.php:まず/local/、次に/bitrix/。 - コンポーネントテンプレート:サイトテンプレートの
components/…が、コンポーネント独自のtemplates/より優先されます。 - モジュール:両方に存在する場合は
/local/modules/<id>が優先されます。 - モジュールのルートは自動読み込みされません。
/local/routes/web.phpからrequireしてください(bitrix-routing)。
コメント
Markdown 対応