それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

composerの使い方:Composer でphp のパッケージを楽にする

composer 便利だった

Composer が便利です。 php の autoload 系の機能を上手に使ってくれるので、コンポーネントの管理がとても楽です。

composer が便利なので、パッケージ管理を丸投げすることにした。

すぐにできる Composer のインストール

composer を使いたいPHPのプロジェクトディレクトリを作成、

mkdir sample
cd sample

そこにcomposerの実行ファイルを用意する。

curl -sS https://getcomposer.org/installer | php

これで準備完了

私の場合の実行結果

takuya@rena:~/Desktop/sample$ curl -sS https://getcomposer.org/installer | php
#!/usr/bin/env php
All settings correct for using Composer
Downloading...

Composer successfully installed to: /Users/takuya/Desktop/sample/composer.phar
Use it: php composer.phar
takuya@rena:~/Desktop/sample$ ls

パッケージインストール

あとはパッケージをインストールします。

composer.json の作成

インストールの依存関係やバージョンを指定する composer.json を作る

composer.json の作成

takuya@rena:~/Desktop/sample$ cat - > composer.json
{
  "require": {
      "slim/slim": "*"
  }
}

composer.jsonシンタックスチェック

takuya@rena:~/Desktop/sample$ JSON.parse composer.json
{ require: { 'slim/slim': '*' } }

とりあえず、json としてシンタックスチェック。正しければなんとか動くよ。

composerでインストール

slim をインストール設定を書いたのでインストール

takuya@rena:~/Desktop/sample$ php composer.phar  install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing slim/slim (2.4.3)
    Loading from cache

slim/slim suggests installing ext-mcrypt (Required for HTTP cookie encryption)
Writing lock file
Generating autoload files

インストール完了

確認してみます。

takuya@rena:~/Desktop/sample$ tree -L 2
.
├── composer.json
├── composer.lock
├── composer.phar
└── vendor
    ├── autoload.php
    ├── composer
    └── slim

3 directories, 4 files

インストールできてました。やったね。

パッケージを使う。

composer.phar でインストールしたパッケージを使います。autoload を使うと楽ちん index.phpでこれをを書けばいい

<?php
require 'vendor/autoload.php';

やってみた

takuya@rena:~/Desktop/sample$ cat - > index.php
<?php
require 'vendor/autoload.php';

$app = new \Slim\Slim(array(
  'debug'              => true,
  'log.level'          => \Slim\Log::DEBUG,
  'log.enabled'        => true,
  'cookies.encrypt'    => true, //cookie
));

var_dump($app);

実行してみた。

takuya@rena:~/Desktop/sample$ php index.php
object(Slim\Slim)#2 (6) {
  ["container"]=>
  object(Slim\Helper\Set)#3 (1) {
    ["data":protected]=>
    array(9) {

動いている。楽ちん。

パッケージの追加

composer.json に パッケージを追加する。

{
    "require": {
        "slim/slim": "2.*",
        "evernote/evernote": "1.*"
    }
}

追加したら、インストール

php composer.phar install

これでパッケージの追加完了

パッケージを探す

composer のパッケージ一覧からも探すことが出来る。

https://packagist.org/explore/

もちろん、コマンドでも探すことが出来る。

php composer.phar search キーワード

やってみた。

takuya@rena:~/Desktop/sample$ php composer.phar search twig/twig
twig/twig Twig, the flexible, fast, and secure template language for PHP
twig/extensions Common additional features for Twig that do not directly belong in core
frood/twig Twig extension for The Frood VC framework.
twig/twig2 Twig, the flexible, fast, and secure template language for PHP
meerkat/twig Twig, the flexible, fast, and secure template language for PHP
simonjodet/twig Twig, the flexible, fast, and secure template language for PHP
appt/twig Integrate Twig with ZF2.
twig/tracelytics Tracelytics helpers for the Twig templating engine
symfony/twig-bridge Symfony Twig Bridge
phpdocumentor/template-responsive-twig Responsive modern template for phpDocumentor for Twig
symfony/twig-bundle Symfony TwigBundle
zf-commons/zfc-twig Zend Framework 2 Module that provides a Twig rendering strategy and extensions to render actions or trigger events from your templates
asm89/twig-cache-extension Cache fragments of templates directly within Twig.
jms/twig-js twig.js, flexible, secure, and high-performance templating engine for Javascript
cedriclombardot/twig-generator A generator for PHP code based on Twig template engine

git に追加する場合

composer で入れたパッケージはデプロイするときに再度 composer installを行えばいいので、わざわざ パッケージをgit 管理下に置く必要もないと思います。

.gitignore

vendor/
composer.lock

とかやってvendor 以下を外しておいても、十分じゃないでしょうか。

自分のレポジトリを取り込む場合

自分のレポジトリを取り込む場合は repository の配列に vcs で取り込むといいようです。

{
  "repositories" : [
    {
      "type" :"vcs",
      "url" : "/Users/takuya/repos/negi"
    } 
  ],
  "require": {
    "negi/negi" : "*"
   }
}

pear のライブラリを取り込む場合

PEARの取り込んで使うことが出来ます。レポジトリの一つとして取り込めます。

{
    "repositories":[{
        "type":"pear",
        "url":"http://pear.php.net"
    }],
    "require": {
        "pear-pear/HTTP_Request2":"2.1.*"
    }
}

まぁ、いまさらPEARでも無いと思いますが。

composer が遅い場合の対処用法

Composer install って遅いですよね。

JPミラーを選択して遅いインストールを高速化することができます。

composer config -g repositories.packagist composer https://packagist.jp

こうすると、爆速になります。

よく間違えるのがhttp / https ですね。いまはHTTPSで参照します。

[Composer\Downloader\TransportException]                                                                             
  Your configuration does not allow connections to http://packagist.jp/packages.json. See https://getcomposer.org/doc  
  /06-config.md#secure-http for details.                                                                                                                      

http でアクセスするとcomposerに叱られます。

https でアクセスしても駄目なときは、フレッツの閉域網のIPv6を疑ってみましょう。

ComposerがLimit Exceededになる場合

Composer install でGithub の制限に引っかかることがあったので、共有トークンじゃなくて、自分のトークンを使う

php composer intall で github rate Limitと言われたときの対処方法 - それマグで!

  参考資料

PHPのパッケージ管理Composerを使う ベーシック エンジニアブログ Basic::Engineer.deploy(blog)

2019-02-14 記述追加

いくつか記述を更新しました。