エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法

      2019/03/02

CakePHP3で vendorに置いたプラグインを手動で読み込み使う方法解説

 

CakePHP3でのプラグインは Composerを利用してインストールする方法がメイン

 
CakePHP3で外部のライブラリやプラグインを使う場合は、Composerを使ってインストールしましょう、と書いてあります。
公式サイトや解説してくれているブログなども Composerを利用する方法の解説がほとんどです。
 
私も下記の様に、Composerを使ってプラグインをインストールする方法を解説しています。
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
 
 
ですが、自作のライブラリであったり、Composerからインストールするファイルが用意されていないプラグインもありまして、そのようなプラグインをどうやって利用するか、詳しく解説しているサイトが見当たらない状況でした。
 
 
そんなある日、とあるサービスの APIを利用して、とある Webサービスを開発することになりましたが、その APIから提供されているサンプルプログラムには Composerを利用してインストールする仕組みが用意されていなかったのです。
 
そんなわけで、サンプルソースをダウンロードしてきたものの、それをどう使えばいいのかがよく分からない!という状況になってしまったのです。
 
そんなわけで、Composerを利用せずに外部ライブラリ、プラグインをインストール、読み込む方法、それを利用する方法を調べましたので、解説します。
 
 
ちなみに、この記事で解説する方法は、Composerは使用しますので、Composerは必要です。
Composerすら使わない方法はまたいずれ。
 

 

「/vendor/」にプラグインのファイル一式を設置

 
「/vendor/testabc/src/」にプラグインのファイル一式を設置します。
 
下記のサンプルは、「/vendor/testabc/src/」に設置したファイル一式のうちの一つ、「/vendor/testabc/src/GetTestData.php」ファイルです。
 

<?php
namespace TestAbc;
use SoapUtils;
class GetTestData {
    public function getData($id) {
        require_once(dirname(__FILE__).'/SoapUtils.class.php');

       (プラグインの処理)

    }
}

 
コントローラーやシェルから呼び出されるファイルの最初には「namespace」を記述します。
ここに記述する「namespace」の名前「TestAbc」は、次の項で説明する「/composer.json」に付けるプラグインの名称、もしくは、プラグインの名称からのパスを記述します。
 
 
また、6行目で「require_once()」でファイルを読み込んでいますが、プラグイン内から読み込むファイル「SoapUtils.class.php」には、「namespace」の追加などの対応は必要ありません。
 
 

「namespace」の付け方

 
「namespace」の付け方は先に少し説明しましたが、「/composer.json」に付けるプラグインの名称、もしくは、プラグインの名称からのパスを記述します。
 
例えば、
「/vendor/testabc/src/GetTestData.php」
にファイルを設置したとします。
 
そして、「composer.json」には、
「"TestAbc\\": "vendor/testabc/src/"」
と記述したとします。
 
この場合の「namespace」は
「namespace TestAbc;」
となります。
 
 
また、「GetTestData.php」を置いたフォルダの中にさらにフォルダを作成し、下記のように
「/vendor/testabc/src/Abc/xyz/GetTestData2.php」
にファイルを設置したとします。
 
この場合は、「GetTestData.php」のプラグインの関連プログラムなので、「composer.json」は変更しません。
 
この場合の「namespace」は、「/vendor/testabc/src/」からのパスを付けて記述しますので
「namespace Abc\xyz\TestAbc;」
となります。
 
 

「/composer.json」ファイルにプラグインの情報を追記

 
続いて、前項で設置したプラグインの情報を「/composer.json」ファイルに記述します。
追加する内容は、下記の 5行目の情報になります。
 

    "autoload": {
        "psr-4": {
            "App\\": "src/",

            "TestAbc\\": "vendor/testabc/src/"
        }

 
この「TestAbc」は、自由に分かりやすい名称を付与します。
この名称「TestAbc」は、前項で説明した、呼び出される側のプログラムの「namespace」として設定するほか、Controller側、Shell側で呼び出すときの「use句」で「use TestAbc」のように指定する時の名称になります。
 
「vendor/testabc/src/」は、プラグインのファイルを設置したフォルダのパスを指定します。
 
 
また、3行目の「"src/"」の行末の「,(カンマ)」の付け忘れに注意しましょう。忘れがちですので。
 

 

「composer.json」ファイルの設定変更を有効にするためのコマンドを実行

 
前項で設定を変更した「composer.json」ファイルの内容を有効にするために、下記のコマンドを実行します。
 

$ composer dump-autoload
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

 
このコマンドを実行することで、下記のファイルなどの「/vendor/composer/」フォルダの中にある設定情報が更新されます。
 
 /vendor/composer/autoload_psr4.php
 /vendor/composer/autoload_static.php
 
 
Composerにパスが通っていない場合などは、上記のコマンドではエラーが発生する場合があります。
その場合は、下記のコマンドを試してみてください。
 

$ php composer.phar dump-autoload

 
 

設定したプラグインをコントローラー、シェルから呼び出す方法

 
前項までの設定で、プラグイン、ライブラリ側の設定が終り、呼び出せる状態にすることができました。
 
あとは、コントローラーやシェルに、そのプラグイン、ライブラリを呼び出す記述をするだけです。
 
 
サンプルとしてシェル「GetDataShell.php」を作成しました。
 

<?php
namespace App\Shell;

use Cake\Console\ConsoleOptionParser;
use Cake\Console\Shell;

use TestAbc;

class GetDataShell extends Shell {

    public function main() {

        // GetTestDataクラス読み込み
        $getDataObject = new TestAbc\GetTestData;

        // データ取得の実行
        $getDataArray = $getDataObject->getData();

        (以下省略)

 
まず、7行目で、「use句」を使ってプラグインを使用することを宣言します。
 
続いて、14行目の「new TestAbc\GetTestData」ように「プラグイン名 \ クラス名」として、インスタンスを作成します。
 
これで、ようやく 17行目の記述でアクションが実行できるようになります。
 
 
CakePHP3でシェルを作成する方法については、下記の記事で解説しています。
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
 
 
一般的には、シェルよりコントローラーとしてプログラムを開発することの方が多いと思いますが、その場合もシェルと大きな違いはありません。
サンプルとしてコントローラー「GetDataController.php」を作成するとすると、下記の様になります。
 

<?php
namespace App\Controller;

use App\Controller\AppController;

use TestAbc;

class GetDataController extends AppController {

    public function index() {

        // GetTestDataクラス読み込み
        $getDataObject = new TestAbc\GetTestData;

        // データ取得の実行
        $getDataArray = $getDataObject->getData();

        (以下省略)

 
まさに「Shell」が「Controller」に変わっただけです。
 
 

CakePHP3で vendorに置いたプラグインを手動で読み込み使えるようにする方法のあとがき

 
APIなどでサンプルとして提供されているソースファイルなどを CakePHP3で使用する場合、vendorの中に設置して、そのサンプルソース、ライブラリなどを利用したい、と思う場面がありました。
 
ですが、それをどうやったら使えるのか。
 
ググっても、プラグインのインストールには Composerを使ってインストールしましょう、というサイトばかりが出てきます。
Composerでインストールできるファイルを提供していないプラグインの場合はどうすればいいのでしょうか?
 
Composerを使わずにインストールする方法が書いてあるサイトも、情報が少なすぎてそのサイトだけを見ても分からないサイトばかりでした。
 
というワケで、CakePHP3になれていない方であっても分かるように、かなり細かなところまで解説した記事を作成しました。
私と同じように悩んでいる方の助けになれば、と思います。
 
 

CakePHP3の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
 
その他の「CakePHP3」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する

CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。

getParam('action')で取得するアクション名は別関数に移動しても不変
getParam('action')で取得するアクション名は別関数に移動しても不変

CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説

CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合

ID以外のカラムでアソシエーション(連携)させるための考え方とサンプルソースを用いての説明を行っています。

CakePHPを学ぶ際にはオブジェクト指向を学ぼう

CakePHPはオブジェクト指向で書かれていますので、CakePHPを学ぶにはオブジェクト指向も学びましょう。

CakePHP3ログファイルの出力方法・$this->log()の解説
CakePHP3ログファイルへの出力・$this->log()、独自ログへの出力方法の解説

コントロール、モデルの変数の中身を見るときはログに出力する方法が有効です。$this->log()を利用すると変数だけじゃなく、連想配列、オブジェクトも簡単にログ出力ができます。

CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座

CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

Windows環境の XAMPPを利用して CakePHPの開発する際の注意点
Windows環境の XAMPPを利用して CakePHPの開発する際の注意点

WindowsベースにXAMPPで環境を構築しCakePHP4を利用したWebシステムを構築する際は、大文字と小文字の違いを意識する必要がある。LinuxベースのWebサーバに移動させたときに不具合で動作しないこともある。