概要
下記に該当するOctoberCMSプラグインは、そのままではComposerで適切にインストールできないので対処が必要になる。
- Packagistに登録されていない
- ソースコードにcomposer.jsonが含まれていない
- composer.jsonが含まれているが適切なパッケージ定義になっていない
自分のプロジェクト(または自分のプラグイン)のcomposer.jsonで、ソースを取得してくる場所を指定し、プラグインが定義しているべき情報を代わりに定義してやれば、composerでインストール&管理することができる。
取得場所の指定
自分のプロジェクトまたはプラグインのcomposer.jsonにrepositories
を定義して、ソースコードの取得場所を指定する。これによりPackagsitに登録されていなくてもダウンロードできるようになる。
{
...
"require": {
...
"simplicitylab/blogfeaturedvideo": "dev-master",
...
},
"repositories": [
...
{
"url": "https://github.com/simplicitylab/blogfeaturedvideo",
"type": "git",
},
...
これで、composer update
すると、GitHubのmasterブランチからソースを取ってきてくれる。しかし、これだとvendorディレクトリにインストールされてプラグインとしては認識されない。
プラグインとして認識させる
プラグインとして認識させるには、自分のcomposer.jsonで代わりにそのプラグインの情報を定義してやる。ここの例だと、最終的には下記のようにすれば、プラグインディレクトリにインストールされてコンポー年やモデルなどが認識されるようになる。
{
...
"require": {
...
"simplicitylab/oc-blogfeaturedvideo-plugin": "dev-master",
...
},
"repositories": [
...
{
"type": "package",
"package": {
"name": "simplicitylab/oc-blogfeaturedvideo-plugin",
"type": "october-plugin",
"version": "dev-master",
"source": {
"url": "https://github.com/simplicitylab/blogfeaturedvideo",
"type": "git",
"reference": "master"
}
}
},
...
だいたい見ればわかると思うが、"type": "october-plugin"
を指定することで適切にプラグインディレクトリにインストールしてくれる。
そして、注意すべきなのはname
で、ネームスペースと関係するディレクトリ構成を決定するものなので、ネームスペースを確認して決定する必要がある。
このプラグインの場合、ソースコードを見るとネームスペースは下記のようになっている。
namespace Simplicitylab\BlogFeaturedVideo;
なので、ディレクトリ構成はplugins/simplicitylab/blogfeaturedvideo
となる必要がある。
よって作者名はsimplicitylab
。また、プラグイン名はOctoberCMSのネーミング規約からoc-
プレフィックスと-plugin
ポストフィックスをつける。
ということで、パッケージ名はsimplicitylab/oc-blogfeaturedvideo-plugin
となる。すべて小文字。これを上記のようにname
とrequire
のところに記述する。
このプラグインは比較的そのままのパッケージ名になったが、中にはGitHub上のレポジトリ名がパッケージ名と大きく異なるケースもある。
ソースコードがcomposer.jsonを含んでいた場合
代わりのパッケージ定義をしてやることで、元々あったcomposer.jsonが読み込まれなくなるようだ。
つまり、もし、元々あったcomposer.jsonに依存パッケージが定義されていた場合は、これらを作成した代わりのパッケージ定義に転記してやる必要がある。作成したパッケージ定義のpackage
の中にrequire
を転記する。
Class not foundになる場合
ファイルが存在しているのに、クラスが見つからないというエラーが発生した場合、再度、先の手順で勝手に決めた作者名とパッケージ名が全て小文字になっているか確認する。
作者名とパッケージ名作者名とパッケージ名がキャメルケースなどになっていると、この様なエラーが発生するようだ。