拡張機能とは、Yiiアプリケーションで使用するために特別に設計された再配布可能なソフトウェアパッケージであり、すぐに使用できる機能を提供します。たとえば、yiisoft/yii2-debug拡張機能は、ページの生成方法をより簡単に把握できるように、アプリケーションのすべてのページの下部に便利なデバッグツールバーを追加します。拡張機能を使用して開発プロセスを加速できます。また、自分のコードを拡張機能としてパッケージ化して、他の人と素晴らしい成果を共有することもできます。
情報: Yii固有のソフトウェアパッケージを指すために「拡張機能」という用語を使用します。Yiiなしで使用できる汎用ソフトウェアパッケージの場合は、「パッケージ」または「ライブラリ」という用語を使用します。
拡張機能を使用するには、まずそれをインストールする必要があります。ほとんどの拡張機能はComposerパッケージとして配布されており、次の2つの簡単な手順でインストールできます。
composer.json
ファイルを変更し、インストールする拡張機能(Composerパッケージ)を指定します。composer install
を実行して、指定された拡張機能をインストールします。Composerをお持ちでない場合は、Composerをインストールする必要がある場合がありますのでご注意ください。
デフォルトでは、ComposerはオープンソースのComposerパッケージの最大のレポジトリであるPackagistに登録されたパッケージをインストールします。 Packagistで拡張機能を探すことができます。また、独自のレポジトリを作成し、それを使用するようにComposerを設定することもできます。これは、プロジェクト内でのみ共有したいプライベート拡張機能を開発している場合に役立ちます。
Composerによってインストールされた拡張機能は、BasePath/vendor
ディレクトリに保存されます。ここで、BasePath
はアプリケーションのベースパスを指します。Composerは依存関係マネージャーであるため、パッケージをインストールすると、それに依存するすべてのパッケージもインストールされます。
例えば、yiisoft/yii2-imagine
エクステンションをインストールするには、あなたの composer.json
を以下のように修正します。
{
// ...
"require": {
// ... other dependencies
"yiisoft/yii2-imagine": "*"
}
}
インストール後、BasePath/vendor
の下に yiisoft/yii2-imagine
というディレクトリが見えるはずです。また、インストールされた依存パッケージを含む別のディレクトリ imagine/imagine
も見えるはずです。
情報:
yiisoft/yii2-imagine
は、Yii 開発チームによって開発および保守されているコアエクステンションです。すべてのコアエクステンションは Packagist でホストされており、yiisoft/yii2-xyz
のように命名されています。ここで、xyz
はエクステンションによって異なります。
これで、インストールしたエクステンションをアプリケーションの一部であるかのように使用できます。次の例は、yiisoft/yii2-imagine
エクステンションによって提供される yii\imagine\Image
クラスをどのように使用できるかを示しています。
use Yii;
use yii\imagine\Image;
// generate a thumbnail image
Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
->save(Yii::getAlias('@runtime/thumb-test-image.jpg'), ['quality' => 50]);
情報: エクステンションクラスは、Yii クラスオートローダーによってオートロードされます。
まれに、Composer に依存するのではなく、一部またはすべてのエクステンションを手動でインストールしたい場合があります。そうするには、次の手順に従ってください。
vendor
ディレクトリに展開します。エクステンションにクラスオートローダーがないものの、PSR-4 標準に従っている場合は、Yii によって提供されるクラスオートローダーを使用して、エクステンションクラスをオートロードできます。必要なのは、エクステンションのルートディレクトリに対して ルートエイリアスを宣言することだけです。たとえば、エクステンションをディレクトリ vendor/mycompany/myext
にインストールし、エクステンションクラスが myext
名前空間の下にあると仮定すると、アプリケーション構成に次のコードを含めることができます。
[
'aliases' => [
'@myext' => '@vendor/mycompany/myext',
],
]
あなたの素晴らしいコードを他の人と共有したいと感じたときには、エクステンションを作成することを検討できます。エクステンションには、ヘルパークラス、ウィジェット、モジュールなど、好きなコードを含めることができます。
最後のサブセクションで説明したように、他のユーザーがより簡単にインストールして使用できるように、Composer パッケージの形でエクステンションを作成することをお勧めします。
以下は、Composer パッケージとしてエクステンションを作成するために従うことができる基本的な手順です。
composer.json
という名前のファイルを作成します。詳細については、次のサブセクションを参照してください。composer.json
¶各 Composer パッケージは、ルートディレクトリに composer.json
ファイルを持っている必要があります。このファイルには、パッケージに関するメタデータが含まれています。このファイルに関する完全な仕様は、Composer マニュアルにあります。次の例は、yiisoft/yii2-imagine
エクステンションの composer.json
ファイルを示しています。
{
// package name
"name": "yiisoft/yii2-imagine",
// package type
"type": "yii2-extension",
"description": "The Imagine integration for the Yii framework",
"keywords": ["yii2", "imagine", "image", "helper"],
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?labels=ext%3Aimagine",
"forum": "https://forum.yiiframework.com/",
"wiki": "https://yii.dokyumento.jp/wiki/",
"irc": "ircs://irc.libera.chat:6697/yii",
"source": "https://github.com/yiisoft/yii2"
},
"authors": [
{
"name": "Antonio Ramirez",
"email": "amigo.cobos@gmail.com"
}
],
// package dependencies
"require": {
"yiisoft/yii2": "~2.0.0",
"imagine/imagine": "v0.5.0"
},
// class autoloading specs
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
各 Composer パッケージには、すべてのパッケージの中でパッケージを一意に識別するパッケージ名が必要です。パッケージ名の形式は vendorName/projectName
です。たとえば、パッケージ名 yiisoft/yii2-imagine
では、ベンダー名とプロジェクト名はそれぞれ yiisoft
と yii2-imagine
です。
Yii コアコードでの使用のために予約されているため、ベンダー名として yiisoft
を使用しないでください。
Yii 2 エクステンションを表すパッケージの場合、myname/yii2-mywidget
のように、プロジェクト名に yii2-
をプレフィックスとして付けることをお勧めします。これにより、ユーザーはパッケージが Yii 2 エクステンションかどうかをより簡単に判断できます。
エクステンションのパッケージタイプを yii2-extension
として指定することは重要です。これにより、パッケージはインストール時に Yii エクステンションとして認識されるようになります。
ユーザーが composer install
を実行してエクステンションをインストールすると、ファイル vendor/yiisoft/extensions.php
が自動的に更新され、新しいエクステンションに関する情報が含まれます。このファイルから、Yii アプリケーションはどのエクステンションがインストールされているかを知ることができます (この情報は yii\base\Application::$extensions を介してアクセスできます)。
あなたのエクステンションは Yii (もちろん) に依存しています。したがって、composer.json
の require
エントリにそれを (yiisoft/yii2
) リストする必要があります。エクステンションが他のエクステンションまたはサードパーティライブラリにも依存している場合は、それらもリストする必要があります。また、各依存パッケージに適切なバージョン制約 (例: 1.*
, @stable
) をリストするようにしてください。エクステンションが安定版でリリースされる場合は、安定した依存関係を使用してください。
ほとんどの JavaScript/CSS パッケージは、Composer の代わりに Bower や NPM を使用して管理されています。Yii は Composer asset plugin を使用して、Composer を介してこれらの種類のパッケージを管理できるようにしています。エクステンションが Bower パッケージに依存している場合は、次のように composer.json
に依存関係をリストするだけで済みます。
{
// package dependencies
"require": {
"bower-asset/jquery": ">=1.11.*"
}
}
上記のコードは、エクステンションが jquery
Bower パッケージに依存していることを示しています。一般に、composer.json
で Bower パッケージを参照するには bower-asset/PackageName
を使用し、NPM パッケージを参照するには npm-asset/PackageName
を使用できます。Composer が Bower または NPM パッケージをインストールすると、デフォルトでは、パッケージコンテンツはそれぞれ @vendor/bower/PackageName
および @vendor/npm/Packages
ディレクトリの下にインストールされます。これら 2 つのディレクトリは、より短いエイリアス @bower/PackageName
および @npm/PackageName
を使用して参照することもできます。
アセット管理の詳細については、アセットセクションを参照してください。
クラスを Yii クラスオートローダーまたは Composer クラスオートローダーでオートロードできるようにするには、以下に示すように、composer.json
ファイルに autoload
エントリを指定する必要があります。
{
// ....
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
1 つまたは複数のルート名前空間と、それに対応するファイルパスをリストできます。
エクステンションがアプリケーションにインストールされると、Yii はリストされた各ルート名前空間に対して、その名前空間に対応するディレクトリを参照する エイリアス を作成します。たとえば、上記の autoload
宣言は、@yii/imagine
という名前のエイリアスに対応します。
エクステンションは他の人が使用することを目的としているため、開発中にさらに努力する必要があることがよくあります。以下に、高品質のエクステンションを作成する際の一般的で推奨されるプラクティスを紹介します。
名前の衝突を避け、エクステンションのクラスをオートロード可能にするには、名前空間を使用し、PSR-4 標準または PSR-0 標準に従ってエクステンションのクラスに名前を付ける必要があります。
クラスの名前空間は vendorName\extensionName
で始める必要があります。ここで、extensionName
はパッケージ名のプロジェクト名に似ていますが、yii2-
プレフィックスを含めないようにする必要があります。たとえば、yiisoft/yii2-imagine
エクステンションの場合、クラスの名前空間として yii\imagine
を使用します。
ベンダー名として yii
、yii2
、または yiisoft
を使用しないでください。これらの名前は、Yii コアコードでの使用のために予約されています。
場合によっては、アプリケーションの ブートストラッププロセス ステージ中にエクステンションがいくつかのコードを実行したい場合があります。たとえば、エクステンションは、環境設定を調整するためにアプリケーションの beginRequest
イベントに応答したい場合があります。エクステンションのユーザーに、beginRequest
イベントにエクステンションのイベントハンドラーを明示的にアタッチするように指示することもできますが、より良い方法はこれを自動的に行うことです。
この目標を達成するには、yii\base\BootstrapInterface を実装することにより、いわゆる *ブートストラップクラス* を作成できます。例えば、
namespace myname\mywidget;
use yii\base\BootstrapInterface;
use yii\base\Application;
class MyBootstrapClass implements BootstrapInterface
{
public function bootstrap($app)
{
$app->on(Application::EVENT_BEFORE_REQUEST, function () {
// do something here
});
}
}
次に、次のようにエクステンションの composer.json
ファイルにこのクラスをリストします。
{
// ...
"extra": {
"bootstrap": "myname\\mywidget\\MyBootstrapClass"
}
}
エクステンションがアプリケーションにインストールされると、Yii は自動的にブートストラップクラスをインスタンス化し、すべてのリクエストのブートストラッププロセス中にその bootstrap() メソッドを呼び出します。
エクステンションはデータベースにアクセスする必要がある場合があります。エクステンションを使用するアプリケーションが常に DB 接続として Yii::$db
を使用することを想定しないでください。代わりに、DB アクセスを必要とするクラスの db
プロパティを宣言する必要があります。このプロパティを使用すると、エクステンションのユーザーは、エクステンションで使用したい DB 接続をカスタマイズできます。例として、yii\caching\DbCache クラスを参照し、db
プロパティがどのように宣言および使用されているかを確認してください。
エクステンションが特定の DB テーブルを作成したり、DB スキーマを変更したりする必要がある場合は、次の手順に従う必要があります。
エクステンションがウィジェットまたはモジュールの場合、動作するためにいくつかの アセット が必要になる可能性があります。たとえば、モジュールは、画像、JavaScript、および CSS を含むいくつかのページを表示する場合があります。エクステンションのファイルはすべて、アプリケーションにインストールすると Web アクセスできない同じディレクトリの下にあるため、Web を介してアセットファイルに直接アクセスできるようにするための 2 つの選択肢があります。
エクステンションを他の人がより簡単に使用できるように、2 番目の方法を使用することをお勧めします。アセットを操作する方法の詳細については、アセットセクションを参照してください。
あなたのエクステンションは、異なる言語をサポートするアプリケーションで使用される可能性があります。したがって、エクステンションがエンドユーザーにコンテンツを表示する場合は、国際化とローカライズを試みる必要があります。特に、
Yii::t()
でラップする必要があります。開発者向けのメッセージ(内部例外メッセージなど)は翻訳する必要はありません。詳細については、国際化セクションを参照してください。
エクステンションが他の人に問題を引き起こすことなく、完璧に動作するようにする必要があります。この目標を達成するためには、エクステンションを一般公開する前にテストする必要があります。
手動テストに頼るのではなく、エクステンションコードを網羅する様々なテストケースを作成することをお勧めします。エクステンションの新しいバージョンをリリースするたびに、これらのテストケースを実行して、すべてが良好な状態であることを確認できます。Yiiは、ユニットテスト、受け入れテスト、機能テストをより簡単に作成できるように、テストのサポートを提供しています。詳細については、テストセクションを参照してください。
エクステンションの各リリースには、バージョン番号(例:1.0.1
)を付与する必要があります。どのバージョン番号を使用すべきかを決定する際には、セマンティックバージョニングのプラクティスに従うことをお勧めします。
他の人にエクステンションを知ってもらうためには、それを一般公開する必要があります。
エクステンションを初めてリリースする場合は、PackagistなどのComposerリポジトリに登録する必要があります。その後、必要なのはエクステンションのVCSリポジトリにリリースタグ(例:v1.0.1
)を作成し、新しいリリースについてComposerリポジトリに通知するだけです。これにより、他の人は新しいリリースを見つけ、Composerリポジトリを通じてエクステンションをインストールまたは更新できるようになります。
エクステンションのリリースでは、コードファイルに加えて、他の人がエクステンションについて学び、使用するのに役立つように、以下を含めることも検討する必要があります。
readme.md
にすることをお勧めします。changelog.md
という名前を付けることができます。upgrade.md
という名前を付けることができます。情報: コードのコメントはMarkdown形式で記述できます。
yiisoft/yii2-apidoc
エクステンションは、コードのコメントに基づいて美しいAPIドキュメントを生成するためのツールを提供します。
情報: 必須ではありませんが、エクステンションが特定のコーディングスタイルに準拠することをお勧めします。コアフレームワークのコードスタイルを参照してください。
Yiiは、Yii開発チームによって開発および保守されている以下のコアエクステンション(または「公式エクステンション」)を提供しています。これらはすべてPackagistに登録されており、エクステンションの使用サブセクションで説明されているように簡単にインストールできます。
以下の公式エクステンションは、Yii 2.1以上用です。Yii 2.0では、コアフレームワークに含まれているため、インストールする必要はありません。
タイプミスを発見した場合、またはこのページを改善する必要があると思われる場合
githubで編集 !
コメントするには、サインアップまたはログインしてください。