Commit 3804817c by Nobuo Kihara

docs/guide-ja/structure-extensions.md - revised [ci skip]

parent ec76fa00
エクステンション エクステンション
================ ================
エクステンションは、Yii のアプリケーションで使われることに限定して設計され、そのまますぐに使える機能を提供する エクステンションは、Yii のアプリケーションで使われることに限定して設計され、そのまますぐに使える機能を提供する再配布可能なソフトウェアパッケージです。
再配布可能なソフトウェアパッケージです。例えば、[yiisoft/yii2-debug](tool-debugger.md) エクステンションは、 例えば、[yiisoft/yii2-debug](tool-debugger.md) エクステンションは、あなたのアプリケーションにおいて、全てのページの末尾に便利なデバッグツールバーを追加して、ページが生成される過程をより容易に把握できるように手助けしてくれます。
あなたのアプリケーションにおいて、全てのページの末尾に便利なデバッグツールバーを追加して、ページが生成される過程を エクステンションを使うと、あなたの開発プロセスを加速することが出来ます。
より容易に把握できるように手助けしてくれます。エクステンションを使うと、あなたの開発プロセスを加速することが出来ます。
また、あなたのコードをエクステンションとしてパッケージ化すると、あなたの優れた仕事を他の人たちと共有することが出来ます。 また、あなたのコードをエクステンションとしてパッケージ化すると、あなたの優れた仕事を他の人たちと共有することが出来ます。
> Info|情報: 「エクステンション」という用語は Yii に限定されたソフトウェアパッケージを指すものとして使用します。 > Info|情報: 「エクステンション」という用語は Yii に限定されたソフトウェアパッケージを指すものとして使用します。
...@@ -12,25 +11,24 @@ ...@@ -12,25 +11,24 @@
## エクステンションを使う <a name="using-extensions"></a> ## エクステンションを使う <a name="using-extensions"></a>
エクステンションを使うためには、先ずはそれをインストールする必要があります。ほとんどのエクステンションは [Composer](https://getcomposer.org/) エクステンションを使うためには、先ずはそれをインストールする必要があります。
パッケージとして配布されていて、次の二つの簡単なステップをふめばインストールすることが出来ます: とんどのエクステンションは [Composer](https://getcomposer.org/) のパッケージとして配布されていて、次の二つの簡単なステップをふめばインストールすることが出来ます。
1. アプリケーションの `composer.json` ファイルを修正して、どのエクステンション (Composer パッケージ) をインストールしたいかを指定する。 1. アプリケーションの `composer.json` ファイルを修正して、どのエクステンション (Composer パッケージ) をインストールしたいかを指定する。
2. `composer install` コマンドを走らせて指定したエクステンションをインストールする。 2. `composer install` コマンドを走らせて指定したエクステンションをインストールする。
[Composer](https://getcomposer.org/) を持っていない場合は、それをインストールする必要があることに注意してください。 [Composer](https://getcomposer.org/) を持っていない場合は、それをインストールする必要があることに注意してください。
既定では、Composer は [Packagist](https://packagist.org/) に登録されたパッケージをインストールします。Packagist は 既定では、Composer は [Packagist](https://packagist.org/) に登録されたパッケージをインストールします。
オープンソース Composer パッケージの最大のレポジトリであり、そこでエクステンションを探すことが出来ます。 Packagist はオープンソース Composer パッケージの最大のレポジトリであり、そこでエクステンションを探すことが出来ます。
また、[自分自身のレポジトリを作成](https://getcomposer.org/doc/05-repositories.md#repository) して、それを使うように また、[自分自身のレポジトリを作成](https://getcomposer.org/doc/05-repositories.md#repository) して、それを使うように Composer を構成することも出来ます。
Composer を構成することも出来ます。これは、あなたがプライベートなエクステンションを開発していて、 これは、あなたがプライベートなエクステンションを開発していて、それを自分のプロジェクト間でのみ共有したい場合に役に立つ方法です。
それを自分のプロジェクト間でのみ共有したい場合に役に立つ方法です。
Composer によってインストールされるエクステンションは `BasePath/vendor` ディレクトリに保存されます。ここで `BasePath` Composer によってインストールされるエクステンションは `BasePath/vendor` ディレクトリに保存されます。
、アプリケーションの [ベースパス](structure-applications.md#basePath) を指します。Composer は依存関係を管理するものですから、 こで `BasePath` は、アプリケーションの [ベースパス](structure-applications.md#basePath) を指します。
パッケージをインストールするときには、それが依存している全てのパッケージをも同時にインストールします。 Composer は依存関係を管理するものですから、あるパッケージをインストールするときには、それが依存する全てのパッケージも同時にインストールします。
例えば、`yiisoft/yii2-imagine` エクステンションをインストールするためには、あなたの `composer.json` を次のように修正します: 例えば、`yiisoft/yii2-imagine` エクステンションをインストールするためには、あなたの `composer.json` を次のように修正します。
```json ```json
{ {
...@@ -44,8 +42,8 @@ Composer 縺ォ繧医▲縺ヲ繧、繝ウ繧ケ繝医繝ォ縺輔l繧九お繧ッ繧ケ繝Φ繧キ繝ァ繝ウ縺ッ `Bas ...@@ -44,8 +42,8 @@ Composer 縺ォ繧医▲縺ヲ繧、繝ウ繧ケ繝医繝ォ縺輔l繧九お繧ッ繧ケ繝Φ繧キ繝ァ繝ウ縺ッ `Bas
} }
``` ```
インストール完了後には、`BasePath/vendor` の下に `yiisoft/yii2-imagine` ディレクトリが作られている筈です。それと同時に、 インストール完了後には、`BasePath/vendor` の下に `yiisoft/yii2-imagine` ディレクトリが作られている筈です。
`imagine/imagine` という別のディレクトリも作られて、依存するパッケージがそこにインストールされている筈です。 それと同時に、`imagine/imagine` という別のディレクトリも作られて、依存するパッケージがそこにインストールされている筈です。
> Info|情報: `yiisoft/yii2-imagine` は Yii 開発チームによって開発され保守されるコアエクステンションの一つです。 > Info|情報: `yiisoft/yii2-imagine` は Yii 開発チームによって開発され保守されるコアエクステンションの一つです。
全てのコアエクステンションは [Packagist](https://packagist.org/) でホストされ、`yiisoft/yii2-xyz` のように名付けられます。 全てのコアエクステンションは [Packagist](https://packagist.org/) でホストされ、`yiisoft/yii2-xyz` のように名付けられます。
...@@ -53,7 +51,7 @@ Composer 縺ォ繧医▲縺ヲ繧、繝ウ繧ケ繝医繝ォ縺輔l繧九お繧ッ繧ケ繝Φ繧キ繝ァ繝ウ縺ッ `Bas ...@@ -53,7 +51,7 @@ Composer 縺ォ繧医▲縺ヲ繧、繝ウ繧ケ繝医繝ォ縺輔l繧九お繧ッ繧ケ繝Φ繧キ繝ァ繝ウ縺ッ `Bas
これであなたはインストールされたエクステンションをあなたのアプリケーションの一部であるかのように使うことが出来ます。 これであなたはインストールされたエクステンションをあなたのアプリケーションの一部であるかのように使うことが出来ます。
次の例は、`yiisoft/yii2-imagine` エクステンションによって提供される `yii\imagine\Image` クラスをどのようにして使うことが 次の例は、`yiisoft/yii2-imagine` エクステンションによって提供される `yii\imagine\Image` クラスをどのようにして使うことが
出来るかを示すものです: 出来るかを示すものです。
```php ```php
use Yii; use Yii;
...@@ -70,17 +68,18 @@ Image::thumbnail('@webroot/img/test-image.jpg', 120, 120) ...@@ -70,17 +68,18 @@ Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
### エクステンションを手作業でインストールする <a name="installing-extensions-manually"></a> ### エクステンションを手作業でインストールする <a name="installing-extensions-manually"></a>
あまり無いことですが、いくつかまたは全てのエクステンションを Composer に頼らずに手作業でインストールしたい場合があるかもしれません。 あまり無いことですが、いくつかまたは全てのエクステンションを Composer に頼らずに手作業でインストールしたい場合があるかもしれません。
そうするためには、次のようにしなければなりません: そうするためには、次のようにしなければなりません。
1. エクステンションのアーカイブファイルをダウンロードして、`vendor` ディレクトリに解凍する。 1. エクステンションのアーカイブファイルをダウンロードして、`vendor` ディレクトリに解凍する。
2. もし有れば、エクステンションによって提供されているクラスオートローダをインストールする。 2. もし有れば、エクステンションによって提供されているクラスオートローダをインストールする。
3. 指示に従って、依存するエクステンションを全てダウンロードしインストールする。 3. 指示に従って、依存するエクステンションを全てダウンロードしインストールする。
エクステンションがクラスオートローダを持っていなくても、[PSR-4 標準](http://www.php-fig.org/psr/psr-4/) に従っている場合は、 エクステンションがクラスオートローダを持っていなくても、[PSR-4 標準](http://www.php-fig.org/psr/psr-4/)
Yii によって提供されているクラスオートローダを使ってエクステンションのクラスをオートロードすることが出来ます。必要なことは、 に従っている場合は、Yii によって提供されているクラスオートローダを使ってエクステンションのクラスをオートロードすることが出来ます。
エクステンションのルートディレクトリのための [ルートエイリアス](concept-aliases.md#defining-aliases) を宣言することだけです。 必要なことは、エクステンションのルートディレクトリのための [ルートエイリアス](concept-aliases.md#defining-aliases) を宣言することだけです。
例えば、エクステンションを `vendor/mycompany/myext` というディレクトリにインストールしたと仮定します。そして、エクステンションの 例えば、エクステンションを `vendor/mycompany/myext` というディレクトリにインストールしたと仮定します。
クラスは `myext` 名前空間の下にあるとします。その場合、アプリケーションのコンフィギュレーションに下記のコードを含めれば良いのです: そして、エクステンションのクラスは `myext` 名前空間の下にあるとします。
その場合、アプリケーションのコンフィギュレーションに下記のコードを含めれば良いのです。
```php ```php
[ [
...@@ -94,26 +93,27 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ ...@@ -94,26 +93,27 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ
## エクステンションを作成する <a name="creating-extensions"></a> ## エクステンションを作成する <a name="creating-extensions"></a>
あなたの優れたコードを他の人々と共有する必要があると感じたときは、エクステンションを作成することを考慮するのが良いでしょう。 あなたの優れたコードを他の人々と共有する必要があると感じたときは、エクステンションを作成することを考慮するのが良いでしょう。
エクステンションは、ヘルパークラス、ウィジェット、モジュールなど、どのようなコードでも含むことが出来ます。 エクステンションは、ヘルパクラス、ウィジェッ、モジュールなど、どのようなコードでも含むことが出来ます。
エクステンションは、[Composer パッケージ](https://getcomposer.org/) の形式で作成することが推奨されます。そうすれば、 エクステンションは、[Composer パッケージ](https://getcomposer.org/) の形式で作成することが推奨されます。
直前の項で説明したように、いっそう容易に他のユーザによってインストールされ、使用されることが出来ます。 そうすれば、直前の項で説明したように、いっそう容易に他のユーザによってインストールされ、使用されることが出来ます。
以下は、エクステンションを Composer のパッケージとして作成するために踏む基本的なステップです。 以下は、エクステンションを Composer のパッケージとして作成するために踏む基本的なステップです。
1. エクステンションのためのプロジェクトを作成して、[github.com](https://github.com) などの VCS レポジトリ上でホストする。 1. エクステンションのためのプロジェクトを作成して、[github.com](https://github.com) などの VCS レポジトリ上でホストします。
エクステンションに関する開発と保守の作業はこのレポジトリ上でなされなければならない。 エクステンションに関する開発と保守の作業はこのレポジトリ上でなされなければならない。
2. プロジェクトのルートディレクトリに、Composer によって要求される `composer.json` という名前のファイルを作成する。 2. プロジェクトのルートディレクトリに、Composer によって要求される `composer.json` という名前のファイルを作成します。
更なる詳細については、次の項を参照。 詳細については、次の項を参照してください。
3. エクステンションを [Packagist](https://packagist.org/) などの Composer レポジトリに登録する。そうすると、他のユーザが 3. エクステンションを [Packagist](https://packagist.org/) などの Composer レポジトリに登録します。
エクステンションを見つけて Composer を使ってインストールすることが出来るようになる。 そうすると、他のユーザがエクステンションを見つけて Composer を使ってインストールすることが出来るようになります。
### `composer.json` <a name="composer-json"></a> ### `composer.json` <a name="composer-json"></a>
全ての Composer パッケージは、ルートディレクトリに `composer.json` というファイルを持たなければなりません。このファイルは 全ての Composer パッケージは、ルートディレクトリに `composer.json` というファイルを持たなければなりません。
パッケージに関するメタデータを含むものです。このファイルに関する完全な仕様は [Composer Manual](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup) このファイルはパッケージに関するメタデータを含むものです。
に記載されています。次の例は、`yiisoft/yii2-imagine` エクステンションのための `composer.json` ファイルを示すものです: このファイルに関する完全な仕様は [Composer Manual](https://getcomposer.org/doc/01-basic-usage.md#composer-json-project-setup) に記載されています。
次の例は、`yiisoft/yii2-imagine` エクステンションのための `composer.json` ファイルを示すものです。
```json ```json
{ {
...@@ -159,8 +159,8 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ ...@@ -159,8 +159,8 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ
#### パッケージ名 <a name="package-name"></a> #### パッケージ名 <a name="package-name"></a>
全ての Composer パッケージは、他の全てパッケージに対して唯一のものとして特定できるような名前を持たなければなりません。 全ての Composer パッケージは、他の全てパッケージに対して唯一のものとして特定できるような名前を持たなければなりません。
パッケージ名の形式は `vendorName/projectName` です。例えば、`yiisoft/yii2-imagine` というパッケージ名の中では、 パッケージ名の形式は `vendorName/projectName` です。
ベンダー名とプロジェクト名は、それぞれ、`yiisoft``yii2-imagine` です。 例えば、`yiisoft/yii2-imagine` というパッケージ名の中では、ベンダー名とプロジェクト名は、それぞれ、`yiisoft``yii2-imagine` です。
ベンダー名として `yiisoft` を使ってはいけません。これは Yii のコアコードに使うために予約されています。 ベンダー名として `yiisoft` を使ってはいけません。これは Yii のコアコードに使うために予約されています。
...@@ -170,27 +170,24 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ ...@@ -170,27 +170,24 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ
#### パッケージタイプ <a name="package-type"></a> #### パッケージタイプ <a name="package-type"></a>
パッケージがインストールされたときに Yii のエクステンションとして認識されるように、エクステンションのパッケージタイプを パッケージがインストールされたときに Yii のエクステンションとして認識されるように、エクステンションのパッケージタイプを `yii2-extension` と指定することは重要なことです。
`yii2-extension` と指定することは重要なことです。
ユーザが `composer install` を走らせてエクステンションをインストールすると、`vendor/yiisoft/extensions.php` というファイルが ユーザが `composer install` を走らせてエクステンションをインストールすると、`vendor/yiisoft/extensions.php` というファイルが自動的に更新されて、新しいエクステンションに関する情報を含むようになります。
自動的に更新されて、新しいエクステンションに関する情報を含むようになります。このファイルから、Yii のアプリケーションは このファイルから、Yii のアプリケーションはどんなエクステンションがインストールされているかを知ることが出来ます
どんなエクステンションがインストールされているかを知ることが出来ます (その情報には、[[yii\base\Application::extensions]] (その情報には、[[yii\base\Application::extensions]] を通じてアクセス出来ます)。
を通じてアクセス出来ます)。
#### 依存パッケージ <a name="dependencies"></a> #### 依存パッケージ <a name="dependencies"></a>
あなたのエクステンションは Yii に依存します (当然ですね)。ですから、`composer.json``require` エントリのリストに あなたのエクステンションは Yii に依存します (当然ですね)。
れ (`yiisoft/yii2`) を挙げなければなりません。あなたのエクステンションがその他のエクステンションやサードパーティの すから、`composer.json``require` エントリのリストにそれ (`yiisoft/yii2`) を挙げなければなりません。
ライブラリに依存する場合は、それらもリストに挙げなければなりません。それぞれの依存パッケージについて、適切なバージョン制約 あなたのエクステンションがその他のエクステンションやサードパーティのライブラリに依存する場合は、それらもリストに挙げなければなりません。
(例えば `1.*``@stable`) を指定することも忘れてはなりません。あなたのエクステンションを安定バージョンとしてリリースする場合は それぞれの依存パッケージについて、適切なバージョン制約 (例えば `1.*``@stable`) を指定することも忘れてはなりません。
定した依存パッケージを使ってください。 あなたのエクステンションを安定バージョンとしてリリースする場合は、安定した依存パッケージを使ってください。
たいていの JavaScript/CSS パッケージは、Composer ではなく、[Bower](http://bower.io/) および/または [NPM](https://www.npmjs.org/) たいていの JavaScript/CSS パッケージは、Composer ではなく、[Bower](http://bower.io/) および/または [NPM](https://www.npmjs.org/) を使って管理されています。
を使って管理されています。Yii は [Composer アセットプラグイン](https://github.com/francoispluchino/composer-asset-plugin) Yii は [Composer アセットプラグイン](https://github.com/francoispluchino/composer-asset-plugin) を使って、この種のパッケージを Composer によって管理することを可能にしています。
を使って、この種のパッケージを Composer によって管理することを可能にしています。あなたのエクステンションが Bower パッケージに あなたのエクステンションが Bower パッケージに依存している場合でも、次のように、`composer.json` に依存パッケージをリストアップすることが簡単に出来ます。
依存している場合でも、次のように、`composer.json` に依存パッケージをリストアップすることが簡単に出来ます:
```json ```json
{ {
...@@ -201,19 +198,18 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ ...@@ -201,19 +198,18 @@ Yii 縺ォ繧医▲縺ヲ謠蝉セ帙&繧後※縺k繧ッ繝ゥ繧ケ繧ェ繝シ繝医Ο繝シ繝繧剃スソ縺」縺ヲ繧ィ
} }
``` ```
上記のコードは、エクステンションが `jquery` Bower パッケージに依存することを述べています。一般に、`composer.json` の中 上記のコードは、エクステンションが `jquery` Bower パッケージに依存することを述べています。
Bower パッケージを指すためには `bower-asset/PackageName` を使うことが出来ます。そして、NPM パッケージを指すためには 一般に、`composer.json` の中でBower パッケージを指すためには `bower-asset/PackageName` を使うことが出来ます。
`npm-asset/PackageName` を使うことが出来ます。Composer が Bower または NPM のパッケージをインストールする場合は、既定では、 そして、NPM パッケージを指すためには `npm-asset/PackageName` を使うことが出来ます。
それぞれ、`@vendor/bower/PackageName` および `@vendor/npm/Packages` というディレクトリの下にパッケージの内容がインストールされます。 Composer が Bower または NPM のパッケージをインストールする場合は、既定では、それぞれ、`@vendor/bower/PackageName` および `@vendor/npm/Packages` というディレクトリの下にパッケージの内容がインストールされます。
この二つのディレクトリは、`@bower/PackageName` および `@npm/PackageName` という短いエイリアスを使って参照することも可能です。 この二つのディレクトリは、`@bower/PackageName` および `@npm/PackageName` という短いエイリアスを使って参照することも可能です。
アセット管理に関する更なる詳細については、[アセット](structure-assets.md#bower-npm-assets) の節を参照してください。 アセット管理に関する詳細についは、[アセット](structure-assets.md#bower-npm-assets) の節を参照してください。
#### クラスのオートロード <a name="class-autoloading"></a> #### クラスのオートロード <a name="class-autoloading"></a>
エクステンションのクラスが Yii のクラスオートローダまたは Composer のクラスオートローダによってオートロードされるように、 エクステンションのクラスが Yii のクラスオートローダまたは Composer のクラスオートローダによってオートロードされるように、下記に示すように、`composer.json` ファイルの `autoload` エントリを指定しなければなりません。
下記に示すように、`composer.json` ファイルの `autoload` エントリを指定しなければなりません:
```json ```json
{ {
...@@ -229,8 +225,7 @@ Bower 繝代ャ繧ア繝シ繧ク繧呈欠縺吶◆繧√↓縺ッ `bower-asset/PackageName` 繧剃スソ縺 ...@@ -229,8 +225,7 @@ Bower 繝代ャ繧ア繝シ繧ク繧呈欠縺吶◆繧√↓縺ッ `bower-asset/PackageName` 繧剃スソ縺
一つまたは複数のルート名前空間と、それに対応するファイルパスをリストに挙げることが出来ます。 一つまたは複数のルート名前空間と、それに対応するファイルパスをリストに挙げることが出来ます。
エクステンションがアプリケーションにインストールされると、Yii は列挙されたルート名前空間の一つ一つに対して、 エクステンションがアプリケーションにインストールされると、Yii は列挙されたルート名前空間の一つ一つに対して、名前空間に対応するディレクトリを指す [エイリアス](concept-aliases.md#extension-aliases) を作成します。
名前空間に対応するディレクトリを指す [エイリアス](concept-aliases.md#extension-aliases) を作成します。
例えば、上記の `autoload` の宣言は、`@yii/imagine` という名前のエイリアスに対応することになります。 例えば、上記の `autoload` の宣言は、`@yii/imagine` という名前のエイリアスに対応することになります。
...@@ -242,23 +237,21 @@ Bower 繝代ャ繧ア繝シ繧ク繧呈欠縺吶◆繧√↓縺ッ `bower-asset/PackageName` 繧剃スソ縺 ...@@ -242,23 +237,21 @@ Bower 繝代ャ繧ア繝シ繧ク繧呈欠縺吶◆繧√↓縺ッ `bower-asset/PackageName` 繧剃スソ縺
#### 名前空間 <a name="namespaces"></a> #### 名前空間 <a name="namespaces"></a>
名前の衝突を避けて、エクステンションの中のクラスをオートロード可能にするために、名前空間を使うべきであり、 名前の衝突を避けて、エクステンションの中のクラスをオートロード可能にするために、名前空間を使うべきであり、エクステンションの中のクラスに
エクステンションの中のクラスに [PSR-4 標準](http://www.php-fig.org/psr/psr-4/) または [PSR-4 標準](http://www.php-fig.org/psr/psr-4/) または [PSR-0 標準](http://www.php-fig.org/psr/psr-0/) に従った名前を付けるべきです。
[PSR-0 標準](http://www.php-fig.org/psr/psr-0/) に従った名前を付けるべきです。
あなたのクラスの名前空間は `vendorName\extensionName` で始まるべきです。ここで `extensionName` は、`yii2-` あなたのクラスの名前空間は `vendorName\extensionName` で始まるべきです。
いう前置辞を含むべきでないことを除けば、パッケージ名におけるプロジェクト名と同じものです。例えば、`yiisoft/yii2-imagine` こで `extensionName` は、`yii2-` という接頭辞を含むべきでないことを除けば、パッケージ名におけるプロジェクト名と同じものです。
エクステンションでは、`yii\imagine` をエクステンションのクラスの名前空間として使っています。 例えば、`yiisoft/yii2-imagine` エクステンションでは、`yii\imagine` をエクステンションのクラスの名前空間として使っています。
`yii``yii2` または `yiisoft` をベンダー名として使ってはいけません。これらの名前は、Yii のコアコードに使うために予約されています。 `yii``yii2` または `yiisoft` をベンダー名として使ってはいけません。これらの名前は、Yii のコアコードに使うために予約されています。
#### ブートストラップクラス <a name="bootstrapping-classes"></a> #### ブートストラップクラス <a name="bootstrapping-classes"></a>
場合によっては、アプリケーションが [ブートストラップ](runtime-bootstrapping.md) の段階にある間に、エクステンションに何らかの 場合によっては、アプリケーションが [ブートストラップ](runtime-bootstrapping.md) の段階にある間に、エクステンションに何らかのコードを実行させたい場合があるでしょう。
コードを実行させたい場合があるでしょう。例えば、エクステンションをアプリケーションの `beginRequest` イベントに反応させて、 例えば、エクステンションをアプリケーションの `beginRequest` イベントに反応させて、何らかの環境設定を調整したいことがあります。
何らかの環境設定を調整したいことがあります。エクステンションのユーザに対して、エクステンションの中にあるイベントハンドラを エクステンションのユーザに対して、エクステンションの中にあるイベントハンドラを `beginRequest` イベントに明示的にアタッチするように指示することも出来ますが、より良い方法は、それを自動的に行うことです。
`beginRequest` イベントに明示的にアタッチするように指示することも出来ますが、より良い方法は、それを自動的に行うことです。
この目的を達するためには、[[yii\base\BootstrapInterface]] を実装する、いわゆる *ブートストラップクラス* を作成します。 この目的を達するためには、[[yii\base\BootstrapInterface]] を実装する、いわゆる *ブートストラップクラス* を作成します。
例えば、 例えば、
...@@ -292,18 +285,17 @@ class MyBootstrapClass implements BootstrapInterface ...@@ -292,18 +285,17 @@ class MyBootstrapClass implements BootstrapInterface
} }
``` ```
このエクステンションがアプリケーションにインストールされると、すべてのリクエストのブートストラップの過程において、毎回、 このエクステンションがアプリケーションにインストールされると、すべてのリクエストのブートストラップの過程において、毎回、Yii
Yii が自動的にブートストラップクラスのインスタンスを作成し、その [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]] が自動的にブートストラップクラスのインスタンスを作成し、その [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]] メソッドを呼びます。
メソッドを呼びます。
#### データベースを扱う <a name="working-with-databases"></a> #### データベースを扱う <a name="working-with-databases"></a>
あなたのエクステンションはデータベースにアクセスする必要があるかも知れません。エクステンションを使うアプリケーションが あなたのエクステンションはデータベースにアクセスする必要があるかも知れません。
常に `Yii::$db` を DB 接続として使用すると仮定してはいけません。その代りに、DB アクセスを必要とするクラスのために `db` エクステンションを使うアプリケーションが常に `Yii::$db` を DB 接続として使用すると仮定してはいけません。
プロパティを宣言すべきです。このプロパティによって、エクステンションのユーザは、エクステンションにどの DB 接続を使わせるかを その代りに、DB アクセスを必要とするクラスのために `db` プロパティを宣言すべきです。
カスタマイズすることが出来るようになります。その一例として、[[yii\caching\DbCache]] クラスを参照して、それがどのように このプロパティによって、エクステンションのユーザは、エクステンションにどの DB 接続を使わせるかをカスタマイズすることが出来るようになります。
`db` プロパティを宣言して使っているかを見ることが出来ます。 その一例として、[[yii\caching\DbCache]] クラスを参照して、それがどのように `db` プロパティを宣言して使っているかを見ることが出来ます。
あなたのエクステンションが特定の DB テーブルを作成したり、DB スキーマを変更したりする必要がある場合は、次のようにするべきです。 あなたのエクステンションが特定の DB テーブルを作成したり、DB スキーマを変更したりする必要がある場合は、次のようにするべきです。
...@@ -314,78 +306,69 @@ Yii 縺瑚蜍慕噪縺ォ繝悶繝医せ繝医Λ繝繧ッ繝ゥ繧ケ縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧剃ス懈 ...@@ -314,78 +306,69 @@ Yii 縺瑚蜍慕噪縺ォ繝悶繝医せ繝医Λ繝繧ッ繝ゥ繧ケ縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧剃ス懈
#### アセットを使う <a name="using-assets"></a> #### アセットを使う <a name="using-assets"></a>
あなたのエクステンションがウィジェットかモジュールである場合は、動作するために何らかの [assets](structure-assets.md) あなたのエクステンションがウィジェットかモジュールである場合は、動作するために何らかの [アセット](structure-assets.md) が必要である可能性が高いでしょう。
が必要である可能性が高いでしょう。例えば、モジュールは、画像、JavaScript、そして CSS を含むページをいくつか表示するでしょう。 えば、モジュールは、画像、JavaScript、そして CSS を含むページをいくつか表示するでしょう。
エクステンションのファイルは、全て、アプリケーションにインストールされるときに、ウェブからアクセス出来ない同じディレクトリ エクステンションのファイルは、全て、アプリケーションにインストールされるときに、ウェブからアクセス出来ない同じディレクトリの下に配置されます。
下に配置されます。そのため、次のどちらかの方法を使って、アセットファイルをウェブから直接アクセス出来るようにしなければなりません。 ため、次のどちらかの方法を使って、アセットファイルをウェブから直接アクセス出来るようにしなければなりません。
- アセットファイルをウェブからアクセス出来る特定のフォルダに手作業でコピーするように、エクステンションのユーザにお願いする。 - アセットファイルをウェブからアクセス出来る特定のフォルダに手作業でコピーするように、エクステンションのユーザにお願いする。
- [アセットバンドル](structure-assets.md) を宣言し、アセット発行メカニズムに頼って、アセットバンドルにリスとされているファイルを - [アセットバンドル](structure-assets.md) を宣言し、アセット発行メカニズムに頼って、アセットバンドルにリストされているファイルをウェブからアクセス出来るフォルダに自動的にコピーする。
ウェブからアクセス出来るフォルダに自動的にコピーする。
あなたのエクステンションが他の人々にとってより一層使いやすいものになるように、第二の方法をとることを推奨します。 あなたのエクステンションが他の人々にとってより一層使いやすいものになるように、第二の方法をとることを推奨します。
アセットの取り扱い一般に関する更なる詳細は [セット](structure-assets.md) の節を参照してください。 アセットの取り扱い一般に関する詳細は [アセット](structure-assets.md) の節を参照してください。
#### 国際化と地域化 <a name="i18n-l10n"></a> #### 国際化と地域化 <a name="i18n-l10n"></a>
あなたのエクステンションは、さまざまな言語をサポートするアプリケーションによって使われるかもしれません。従って、 あなたのエクステンションは、さまざまな言語をサポートするアプリケーションによって使われるかもしれません。
あなたのエクステンションがエンドユーザにコンテンツを表示するものである場合は、それを [国際化](tutorial-i18n.md) 従って、あなたのエクステンションがエンドユーザにコンテンツを表示するものである場合は、それを [国際化](tutorial-i18n.md) するように努めるべきです。
するように努めるべきです。具体的には、 具体的には、
- エクステンションがエンドユーザに向けたメッセージを表示する場合は、翻訳することが出来るようにメッセージを `Yii::t()` - エクステンションがエンドユーザに向けたメッセージを表示する場合は、翻訳することが出来るようにメッセージを `Yii::t()` で包むべきです。
で包むべきです。開発者に向けられたメッセージ (内部的な例外のメッセージなど) は翻訳される必要はありません。 開発者に向けられたメッセージ (内部的な例外のメッセージなど) は翻訳される必要はありません。
- エクステンションが数値や日付などを表示する場合は、[[yii\i18n\Formatter]] を適切な書式化の規則とともに使って書式設定すべきです。 - エクステンションが数値や日付などを表示する場合は、[[yii\i18n\Formatter]] を適切な書式化の規則とともに使って書式設定すべきです。
更なる詳細については、[国際化](tutorial-i18n.md) の節を参照してください。 細については、[国際化](tutorial-i18n.md) の節を参照してください。
#### テスト <a name="testing"></a> #### テスト <a name="testing"></a>
あなたは、あなたのエクステンションが他の人々に問題をもたらすことなく完璧に動作することを望むでしょう。この目的を達するためには、 あなたは、あなたのエクステンションが他の人々に問題をもたらすことなく完璧に動作することを望むでしょう。
なたのエクステンションを公開する前にテストすべきです。 の目的を達するためには、あなたのエクステンションを公開する前にテストすべきです。
手作業のテストに頼るのではなく、あなたのエクステンションのコードをカバーするさまざまなテストケースを作成することが推奨されます。 手作業のテストに頼るのではなく、あなたのエクステンションのコードをカバーするさまざまなテストケースを作成することが推奨されます。
あなたのエクステンションの新しいバージョンを公開する前には、毎回、単にそれらのテストケースを走らせれば、全てが良い状態にあることを あなたのエクステンションの新しいバージョンを公開する前には、毎回、単にそれらのテストケースを走らせれば、全てが良い状態にあることを確認することが出来ます。
確認することが出来ます。Yii はテストのサポートを提供しており、それよって、ユニットテスト、機能テスト、承認テストを書くことが Yii はテストのサポートを提供しており、それよって、ユニットテスト、機能テスト、承認テストを書くことが一層簡単に出来るようになっています。
一層簡単に出来るようになっています。更なる詳細については、[テスト](test-overview.md) の節を参照してください。 細については、[テスト](test-overview.md) の節を参照してください。
#### バージョン管理 <a name="versioning"></a> #### バージョン管理 <a name="versioning"></a>
エクステンションのリリースごとにバージョン番号 (例えば `1.0.1`) を付けるべきです。 エクステンションのリリースごとにバージョン番号 (例えば `1.0.1`) を付けるべきです。
どのようなバージョン番号を付けるべきかを決定するときは、[セマンティックバージョニング](http://semver.org) どのようなバージョン番号を付けるべきかを決定するときは、[セマンティックバージョニング](http://semver.org) の慣行に従うことを推奨します。
の慣行に従うことを推奨します。
#### リリース(公開) <a name="releasing"></a> #### リリース(公開) <a name="releasing"></a>
他の人々にあなたのエクステンションを知ってもらうためには、それをリリース(公開)する必要があります。 他の人々にあなたのエクステンションを知ってもらうためには、それをリリース(公開)する必要があります。
エクステンションをリリースするのが初めての場合は、[Packagist](https://packagist.org/) などの Composer レポジトリに エクステンションをリリースするのが初めての場合は、[Packagist](https://packagist.org/) などの Composer レポジトリにエクステンションを登録するべきです。
エクステンションを登録するべきです。その後は、あなたがしなければならない仕事は、エクステンションの VCS レポジトリでリリースタグ その後は、あなたがしなければならない仕事は、エクステンションの VCS レポジトリでリリースタグ (例えば `v1.0.1`) を作成することと、Composer レポジトリに新しいリリースについて通知するだけのことになります。
(例えば `v1.0.1`) を作成して Composer レポジトリに新しいリリースについて通知するだけのことになります。そして、 そうすれば、人々が新しいリリースを見出すことが出来るようになり、Composer レポジトリを通じてエクステンションをインストールしたりアップデートしたりするようになります。
人々が新しいリリースを見出すことが出来るようになり、Composer レポジトリを通じてエクステンションをインストールしたり
アップデートしたりするようになります。
エクステンションのリリースには、人々があなたのエクステンションについて知ったり、エクステンションを使ったりするのを助けるために、 エクステンションのリリースには、コードファイル以外に、人々があなたのエクステンションについて知ったり、エクステンションを使ったりするのを助けるために、下記のものを含めることを考慮すべきです。
コードファイル以外に下記のものを含めることを考慮すべきです。
* パッケージのルートディレクトリに readme ファイル: あなたのエクステンションが何をするものか、そして、 * パッケージのルートディレクトリに readme ファイル: あなたのエクステンションが何をするものか、そして、どのようにインストールして使うものかを説明するものです。
どのようにインストールして使うものかを説明するものです。[Markdown](http://daringfireball.net/projects/markdown/) [Markdown](http://daringfireball.net/projects/markdown/) 形式で書いて、`readme.md` という名前にすることを推奨します。
形式で書いて、`readme.md` という名前にすることを推奨します。
* パッケージのルートディレクトリに changelog ファイル: それぞれのリリースで何が変ったかを一覧表示するものです。 * パッケージのルートディレクトリに changelog ファイル: それぞれのリリースで何が変ったかを一覧表示するものです。
このファイルは Markdown 形式で書いて `changelog.md` と名付けることが出来ます。 このファイルは Markdown 形式で書いて `changelog.md` と名付けることが出来ます。
* パッケージのルートディレクトリに upgrade ファイル: エクステンションの古いリリースからのアップグレード方法について説明するものです。 * パッケージのルートディレクトリに upgrade ファイル: エクステンションの古いリリースからのアップグレード方法について説明するものです。
このファイルは Markdown 形式で書いて `upgrade.md` と名付けることが出来ます。 このファイルは Markdown 形式で書いて `upgrade.md` と名付けることが出来ます。
* チュートリアル、デモ、スクリーンショットなど: あなたのエクステンションが readme ファイルでは十分にカバーできないほど * チュートリアル、デモ、スクリーンショットなど: あなたのエクステンションが readme ファイルでは十分にカバーできないほど多くの機能を提供するものである場合は、これらが必要になります。
多くの機能を提供するものである場合は、これらが必要になります。
* API ドキュメント: あなたのコードは、他の人々が読んで理解することがより一層容易に出来るように、十分な解説を含むべきです。 * API ドキュメント: あなたのコードは、他の人々が読んで理解することがより一層容易に出来るように、十分な解説を含むべきです。
[Object のクラスファイル](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) を参照すると、 [Object のクラスファイル](https://github.com/yiisoft/yii2/blob/master/framework/base/Object.php) を参照すると、コードに解説を加える方法を学ぶことが出来ます。
コードに解説を加える方法を学ぶことが出来ます。
> Info|情報: コードのコメントを Markdown 形式で書くことが出来ます。`yiisoft/yii2-apidoc` エクステンションは、 > Info|情報: コードのコメントを Markdown 形式で書くことが出来ます。`yiisoft/yii2-apidoc` エクステンションは、コードのコメントに基づいて綺麗な API ドキュメントを生成するツールを提供しています。
コードのコメントに基づいて綺麗な API ドキュメントを生成するツールを提供しています。
> Info|情報: これは要求ではありませんが、あなたのエクステンションも一定のコーディングスタイルを守るのが良いと思います。 > Info|情報: これは要求ではありませんが、あなたのエクステンションも一定のコーディングスタイルを守るのが良いと思います。
[コアフレームワークコードスタイル](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style) を参照してください。 [コアフレームワークコードスタイル](https://github.com/yiisoft/yii2/wiki/Core-framework-code-style) を参照してください。
...@@ -394,8 +377,7 @@ Yii 縺瑚蜍慕噪縺ォ繝悶繝医せ繝医Λ繝繧ッ繝ゥ繧ケ縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧剃ス懈 ...@@ -394,8 +377,7 @@ Yii 縺瑚蜍慕噪縺ォ繝悶繝医せ繝医Λ繝繧ッ繝ゥ繧ケ縺ョ繧、繝ウ繧ケ繧ソ繝ウ繧ケ繧剃ス懈
## コアエクステンション <a name="core-extensions"></a> ## コアエクステンション <a name="core-extensions"></a>
Yii は下記のコアエクステンションを提供しています。これらは Yii 開発チームによって開発され保守されているものです。 Yii は下記のコアエクステンションを提供しています。これらは Yii 開発チームによって開発され保守されているものです。
全て [Packagist](https://packagist.org/) に登録され、[エクステンションを使う](#using-extensions) の項で説明したように、 全て [Packagist](https://packagist.org/) に登録され、[エクステンションを使う](#using-extensions) の項で説明したように、簡単にインストールすることが出来ます。
簡単にインストールすることが出来ます。
- [yiisoft/yii2-apidoc](https://github.com/yiisoft/yii2-apidoc): - [yiisoft/yii2-apidoc](https://github.com/yiisoft/yii2-apidoc):
拡張可能で高性能な API ドキュメント生成機能を提供します。コアフレームワークの API ドキュメントを生成するためにも使われています。 拡張可能で高性能な API ドキュメント生成機能を提供します。コアフレームワークの API ドキュメントを生成するためにも使われています。
...@@ -406,30 +388,31 @@ Yii 縺ッ荳玖ィ倥繧ウ繧「繧ィ繧ッ繧ケ繝Φ繧キ繝ァ繝ウ繧呈署萓帙@縺ヲ縺∪縺吶ゅ%繧後 ...@@ -406,30 +388,31 @@ Yii 縺ッ荳玖ィ倥繧ウ繧「繧ィ繧ッ繧ケ繝Φ繧キ繝ァ繝ウ繧呈署萓帙@縺ヲ縺∪縺吶ゅ%繧後
- [yiisoft/yii2-codeception](https://github.com/yiisoft/yii2-codeception): - [yiisoft/yii2-codeception](https://github.com/yiisoft/yii2-codeception):
[Codeception](http://codeception.com/) に基づくテストのサポートを提供します。 [Codeception](http://codeception.com/) に基づくテストのサポートを提供します。
- [yiisoft/yii2-debug](https://github.com/yiisoft/yii2-debug): - [yiisoft/yii2-debug](https://github.com/yiisoft/yii2-debug):
Yii アプリケーションのデバッグのサポートを提供します。このエクステンションが使われると、全てのページの末尾にデバッガツールバーが Yii アプリケーションのデバッグのサポートを提供します。
表示されます。このエクステンションは、より詳細なデバッグ情報を表示する一連のスタンドアロンページも提供します。 このエクステンションが使われると、全てのページの末尾にデバッガツールバーが表示されます。
このエクステンションは、より詳細なデバッグ情報を表示する一連のスタンドアロンページも提供します。
- [yiisoft/yii2-elasticsearch](https://github.com/yiisoft/yii2-elasticsearch): - [yiisoft/yii2-elasticsearch](https://github.com/yiisoft/yii2-elasticsearch):
[Elasticsearch](http://www.elasticsearch.org/) の使用に対するサポートを提供します。基本的なクエリ/サーチのサポートを [Elasticsearch](http://www.elasticsearch.org/) の使用に対するサポートを提供します。
含むだけでなく、Elasticsearch にアクティブレコードを保存することを可能にする [アクティブレコード](db-active-record.md) 基本的なクエリ/サーチのサポートを含むだけでなく、Elasticsearch にアクティブレコードを保存することを可能にする [アクティブレコード](db-active-record.md) パターンをも実装しています。
パターンをも実装しています。
- [yiisoft/yii2-faker](https://github.com/yiisoft/yii2-faker): - [yiisoft/yii2-faker](https://github.com/yiisoft/yii2-faker):
ダミーデータを作る [Faker](https://github.com/fzaninotto/Faker) を使うためのサポートを提供します。 ダミーデータを作る [Faker](https://github.com/fzaninotto/Faker) を使うためのサポートを提供します。
- [yiisoft/yii2-gii](https://github.com/yiisoft/yii2-gii): - [yiisoft/yii2-gii](https://github.com/yiisoft/yii2-gii):
拡張性が非常に高いウェブベースのコードジェネレータを提供します。これを使って、モデル、フォーム、モジュール、CRUD 拡張性が非常に高いウェブベースのコードジェネレータを提供します。これを使って、モデル、フォーム、モジュール、CRUD などを迅速に生成することが出来ます。
などを迅速に生成することが出来ます。
- [yiisoft/yii2-imagine](https://github.com/yiisoft/yii2-imagine): - [yiisoft/yii2-imagine](https://github.com/yiisoft/yii2-imagine):
[Imagine](http://imagine.readthedocs.org/) に基づいて、使われることの多い画像操作機能を提供します。 [Imagine](http://imagine.readthedocs.org/) に基づいて、使われることの多い画像操作機能を提供します。
- [yiisoft/yii2-jui](https://github.com/yiisoft/yii2-jui): - [yiisoft/yii2-jui](https://github.com/yiisoft/yii2-jui):
[JQuery UI](http://jqueryui.com/) のインタラクションとウィジェットをカプセル化した一連のウィジェットを提供します。 [JQuery UI](http://jqueryui.com/) のインタラクションとウィジェットをカプセル化した一連のウィジェットを提供します。
- [yiisoft/yii2-mongodb](https://github.com/yiisoft/yii2-mongodb): - [yiisoft/yii2-mongodb](https://github.com/yiisoft/yii2-mongodb):
[MongoDB](http://www.mongodb.org/) の使用に対するサポートを提供します。基本的なクエリ、アクティブレコード、マイグレーション、 [MongoDB](http://www.mongodb.org/) の使用に対するサポートを提供します。
キャッシュ、コード生成などの機能を含みます。 基本的なクエリ、アクティブレコード、マイグレーション、キャッシュ、コード生成などの機能を含みます。
- [yiisoft/yii2-redis](https://github.com/yiisoft/yii2-redis): - [yiisoft/yii2-redis](https://github.com/yiisoft/yii2-redis):
[redis](http://redis.io/) の使用に対するサポートを提供します。基本的なクエリ、アクティブレコード、キャッシュなどの機能を含みます。 [redis](http://redis.io/) の使用に対するサポートを提供します。
基本的なクエリ、アクティブレコード、キャッシュなどの機能を含みます。
- [yiisoft/yii2-smarty](https://github.com/yiisoft/yii2-smarty): - [yiisoft/yii2-smarty](https://github.com/yiisoft/yii2-smarty):
[Smarty](http://www.smarty.net/) に基づいたテンプレートエンジンを提供します。 [Smarty](http://www.smarty.net/) に基づいたテンプレートエンジンを提供します。
- [yiisoft/yii2-sphinx](https://github.com/yiisoft/yii2-sphinx): - [yiisoft/yii2-sphinx](https://github.com/yiisoft/yii2-sphinx):
[Sphinx](http://sphinxsearch.com) の使用に対するサポートを提供します。基本的なクエリ、アクティブレコード、コード生成などの機能を含みます。 [Sphinx](http://sphinxsearch.com) の使用に対するサポートを提供します。
基本的なクエリ、アクティブレコード、コード生成などの機能を含みます。
- [yiisoft/yii2-swiftmailer](https://github.com/yiisoft/yii2-swiftmailer): - [yiisoft/yii2-swiftmailer](https://github.com/yiisoft/yii2-swiftmailer):
[swiftmailer](http://swiftmailer.org/) に基づいたメール送信機能を提供します。 [swiftmailer](http://swiftmailer.org/) に基づいたメール送信機能を提供します。
- [yiisoft/yii2-twig](https://github.com/yiisoft/yii2-twig): - [yiisoft/yii2-twig](https://github.com/yiisoft/yii2-twig):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment