[CakePHP3] composer経由で外部ライブラリをインストール&読み込み

PHPの世界というのは素敵なライブラリがごろごろ転がっているものです。

素のPHPだとrequire_onceで終わるところを、フレームワークを使っているならフレームワークっぽい使い方がしたい。とか思い始め、composerの使い方もプラグインの読み込み方もよくわかっていないのに、あれやこれや試しました。

結果うまくいったので、composer経由でのインストールから、MVCやShellに読み込むところまでをメモ。


スポンサーリンク

1.composerからライブラリをインストール

使用するのはelectrolinux/phpqueryです。

スクレイピングでごにょごにょやりたくて、phpQueryをCakeに組み込みたかったのです。phpQueryはもともと1ファイルrequire_onceすれば使える便利なライブラリなんですが、そういうファイルをどこに置けばいいのかよくわからなかったので、composerからインストールして利用したかったという次第です。

electrolinuxを選んだのは、Packagistで検索したら一番に出てくるし、PackagistでもGitHubでも評価が高かったから、というニワカな理由です。

とはいえ今回はelectrolinux/phpqueryの使い方には特に触れません。インストールから読み込みまでです。なんでって、electrolinux/phpqueryの使い方は現在学習中だから。そのうち別で記事書けたらいいな!

1-1.目当てのライブラリがはっきりしている場合

「わしはelectrolinux/phpqueryをインストールするんじゃい!」という場合ですね。さくっとrequireしてしまいましょう。

//CakePHPのルートフォルダにて
$ composer require electrolinux/phpquery

はい。ちょっと時間かかるけど、これで完了です。ちなみにPATH切ってるWindows環境でのコマンドです。

1-2.目当てのライブラリがはっきりしていない場合

「phpQuery使いたいけど、これってComposerからインストールできるのかなあ、どうなのかなあ」という場合。

いくつか方法はありますが、コマンドライン上で完結するのであれば、とりあえず下記コマンドを打ちます。(参考:CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法

$ composer require

すると、こんな表示になります。

Search for a package:

ここで、検索したいワードを入れてエンターを押します。たとえば「phpquery」って入れるとこんな感じ。

Search for a package: phpquery

Found 15 packages matching phpquery

   [0] electrolinux/phpquery
   [1] coderockr/php-query
   [2] cagartner/phpquery
   [3] wittiws/phpquery
   [4] bariew/phpquery
   [5] krok/phpquery
   [6] zomberg/phpquery
   [7] maciek-kemnitz/phpquery
   [8] atofighi/phpquery
   [9] khongchi/phpquery
  [10] pherum/phpquery
  [11] damien-list/phpquery-1
  [12] jaeger/phpquery-single
  [13] jaeger/querylist
  [14] nxnx/spec-parser

Enter package # to add, or the complete package name if it is not listed:

いやー、いっぱいあるんですね、phpQueryのパッケージ。この中から選んでインストールする場合は、該当するパッケージの番号を入力してエンターします。electrolinux/phpqueryの場合は0ですね。

Enter package # to add, or the complete package name if it is not listed: 0
Enter the version constraint to require (or leave blank to use the latest version):

今度はバージョン入れろと言ってきます。最新バージョンでいい場合は、何も入力せずにエンターを押します。しばらく待つと下記表示になります。

Enter the version constraint to require (or leave blank to use the latest version):
Using version ^0.9.6 for electrolinux/phpquery
Search for a package:

実はつまずいたのがこのタイミングで、先程ご紹介した参考URLではパッケージの番号を指定したところまでしか載ってなかったんですね。

Search for a packageに戻っちゃったんだけど!?ってあたふたしておりましたが、なんのこたあない、ここで黙ってエンター押せばOKです。インストールが始まります。

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

ちょっとこれは既にインストールした状態で実行した結果なので「Nothing to install or update」って出ちゃってますが、初回だとドンドコインストールが行われます。

2.Cakeアプリから利用する

インストールできたー!ひゃっはー!ってところまできて、次の壁が、「で、どうやって使うの?」です。

2-1.使いたいところでuseする

これも実はとっても簡単な話で、使いたいファイルにuse文を書けばOKです。MVCだけでなく、Shellクラスでもいけます。

//冒頭
use phpQuery;

//メソッド内
phpQuery::phpQueryのメソッド();

これだけのことがわからなくて、けっこう時間使いましたよね…。

ネットで調べたらcomposer.jsonに追記が必要とか、プラグインまでのパスを書くとか、autoload.phpをrequire_onceするとか、Plugin::load(‘パッケージ名’)するとか、情報がまちまちなんですもん。「phpQueryクラスが見つかりません」って何度言われたことか。

2-2.useするクラス名はどこを見ればいいか

CookBookにも載っているとおり、Composerを使ってプラグインをインストールした場合は他のファイルに設定入れたりなんやかんやしたりする必要はありません。

CookBookにはPlugin::loadを使えと書いてありますが、私はなんか「Pluginクラスが見つかりません」ってめっちゃ言われました。useしてないからかな??Pluginクラスってどうすれば使えるのだ…?

兎にも角にも、前述の通り、useすれば使えるわけです。でもその指定クラス名ってどこで判断するの?と申しますと、vendor/composer/autoload_classmap.phpを見ればわかりました。

//vendor/composer/autoload_classmap.php

return array(
    'Callback' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'CallbackBody' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'CallbackParam' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'CallbackParameterToReference' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'CallbackReturnReference' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'CallbackReturnValue' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/Callback.php',
    'DOMDocumentWrapper' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/DOMDocumentWrapper.php',
    'DOMEvent' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/DOMEvent.php',

    …中略…

    'phpQuery' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery.php',
    'phpQueryEvents' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryEvents.php',
    'phpQueryObject' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/phpQueryObject.php',
    'phpQueryObjectPlugin_Scripts' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php',
    'phpQueryObjectPlugin_WebBrowser' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php',
    'phpQueryObjectPlugin_example' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php',
    'phpQueryPlugin_Scripts' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/Scripts.php',
    'phpQueryPlugin_WebBrowser' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/WebBrowser.php',
    'phpQueryPlugin_example' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery/plugins/example.php',
    'phpQueryPlugins' => $vendorDir . '/electrolinux/phpquery/phpQuery/phpQuery.php',
);

ここから見つけた「phpQuery」を指定してみたらいけた、という寸法です。

でもこれ大丈夫なのかなって気は少しします。「Callback」なんて色んなところで使われそうなクラス名も載ってるぞ…?うーん、まだまだわからないことばかりです…。

この投稿の投稿者は おさみ です。ブックマーク用 パーマリンク

スポンサーリンク