Ibexa DXP の概念や技術、構成について

## プロジェクト構成
Ibexa DXP は Symfony アプリケーションであり、Symfony で使用されるプロジェクト構造に従っています。

[Ibexa Experience Beginner チュートリアル](https://doc.ibexa.co/en/latest/tutorials/enterprise_beginner/ez_enterprise_beginner_tutorial_-_its_a_dogs_world/)の[コンパニオンリポジトリ](https://github.com/ezsystems/ezplatform-ee-beginner-tutorial/tree/v3-master)で、簡単なプロジェクトを編成する例を見ることができます。


### PHP コード
プロジェクトの PHP コード（コントローラ、イベントリスナーなど）は、`src` フォルダに配置する必要があります。

再利用可能なライブラリは、Composer で簡単に管理できるようにパッケージ化する必要があります。

### テンプレート
プロジェクトのテンプレートは `templates` フォルダに入れる必要があります。

例えば `templates/full/article.html.twig` は Twig テンプレートや PHP で `full/article.html.twig` として参照することができます。

### アセット
プロジェクトのアセットは `assets` フォルダに入れる必要があります。

例えば、 `assets/js/script.js` はテンプレートから `js/script.js` として参照することができるように、ルートからの相対参照とすることができます。

すべてのプロジェクトのアセットは、`assets` パスを通してアクセスできます。

:::note warn
**`assets` の手動削除**
`assets` フォルダを手動で削除することがあれば、 `yarn encore <dev|prod>` コマンドを実行する前にトランスレーションをダンプする必要があります。
```shell
php bin/console bazinga:js-translation:dump assets --merge-domains
```
:::

### 設定
プロジェクトの設定は、 `config/packages` 内のそれぞれのファイルに配置されます。詳しくは [Configuration](https://doc.ibexa.co/en/latest/guide/configuration/) をご覧ください。

プロジェクトの構成は、のそれぞれのファイルに配置されますconfig/packages。詳細については、構成を参照してください。

#### バンドルからの設定のインポート
あなたのコードの一部をバンドルで保持している場合、メインの `config/packages/ibexa.yaml` 設定ファイルで保守すると、コアバンドル意味設定の取り扱いが面倒になります。

Symfony のチュートリアル [How to Import Configuration Files/Resources](http://symfony.com/doc/5.4/service_container/import.html) に従って、バンドルから設定をインポートすることができます。

#### プロジェクトのバージョン管理
推奨される方法は、プロジェクトのリポジトリ全体をバージョン管理することです。

## アーキテクチャ
Ibexa DXP のアーキテクチャは、長期的にメンテナンスされる **API を使用する**という哲学に基づいています。これにより、**アップグレードが容易になり**、アーキテクチャのすべての部分間の**ロスレス結合が実現される**と同時に、システムの移行機能が向上します。
![](https://doc.ibexa.co/en/latest/guide/img/architecture.png)
Ibexa DXP のアーキテクチャはレイヤー化されており、レイヤー間で明確に定義された API を使用しています。

## バンドル
Symfony (および Ibexa DXP) のバンドルは、機能を実装するアプリケーションの独立した部分です。自分でバンドルを作成するか、利用可能なオープンソースのバンドルを利用することができます。また、作成したバンドルを他のプロジェクトで再利用したり、コミュニティで共有したりすることもできます。

Ibexa DXP の多くの機能は、インストールに含まれる個別のバンドルを通じて提供されます。Ibexa DXP と共に自動的にインストールされるバンドルは、それぞれの `composer.json` ファイルで確認することができます。例えば Ibexa Content について、[GitHub にある JSON ファイル](https://github.com/ibexa/content/blob/master/composer.json)を参照してください。

### バンドルを機能させる
Ibexa DXP のビルトイン機能を含むすべてのバンドルは自動的にインストールされます。さらに、コミュニティが開発したバンドルは、[Ibexa DXP パッケージ](https://developers.ibexa.co/packages)からインストールできます。

独自のバンドルを作成する方法については、[バンドルに関する Symfony ドキュメント](http://symfony.com/doc/5.4/bundles.html)を参照してください。

#### サードパーティーバンドルに上書き
外部バンドルを利用する場合、テンプレートやコントローラなどの部分をオーバーライドすることができます。これを行うには、[Symfony のバンドルオーバーライドメカニズム](http://symfony.com/doc/5.4/bundles/override.html)を利用します。ファイルをオーバーライドするとき、アプリケーション内のパスはバンドル内のパスに対応しなければならないことに注意してください。

#### バンドルの削除
バンドル（自分で作成したもの、または不要な既成のもの）を削除するには、Symfony ドキュメントの [How to Remove a Bundle](http://symfony.com/doc/5.4/bundles/remove.html) を参照してください。

### コアパッケージ
|バンドル	|説明|
|---|---|
|ibexa/support-tools	|システム情報|
|ibexa/admin-ui-assets	|管理画面のアセット|
|ibexa/admin-ui	|管理画面インターフェース|
|ibexa/content-forms	|カーネルの Content および User オブジェクトへの Symfony Forms のフォームベースの統合|
|ibexa/core-extensions	|システムの中核機能|
|ibexa/cron	|`ibexa:cron:run` コマンドで使用するための Cron パッケージ|
|ibexa/design-engine	|デザインフォールバックシステム|
|ibexa/graphql	|GraphQL server for Ibexa DXP|
|ibexa/http-cache	|HTTP cache handling, using multi tagging|
|ibexa/core	|Ibexa DXP アプリケーションのコア部分|
|ibexa/matrix-fieldtype	|Matrix のフィールドタイプ|
|ibexa/query-fieldtype	|Query のフィールドタイプ|
|ibexa/rest	|REST API|
|ibexa/richtext	|構造化された XML 形式で保存されたリッチフォーマットテキストをサポートするためのフィールドタイプ|
|ibexa/search	|共通の検索機能|
|ibexa/solr-search-engine	|Solr 搭載の検索ハンドラ|
|ibexa/standard-design	|デザインエンジンによって処理される標準デザインおよびテーマ|
|ibexa/user	|ユーザー管理|

### Ibexa Content パッケージ
### Ibexa Experience パッケージ
### Ibexa Commerce パッケージ