#
ドキュメント

Document

自分のための備忘録です。

PHPローカル開発環境構築

Composer

Composerについてのメモです。
ComposerはPHPパッケージ管理ツールです。

Composerインストール

composer.pharを(カレントディレクトリ)へダウンロードします。

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

コマンドを実行できます(例はバージョンの確認)。

$ php /path/to/composer.phar --version

composer.pharへ実行権限を付与します。

$ chmod u+x composer.phar

composer.pharを直接実行できるようになります。

$ /path/to/composer.phar --version

パスの通っているディレクトリへ移動します(例 /usr/local/bin)。
どのディレクトリでも下記コマンドで実行できます。

$ composer.phar --version

簡略化のためcomposer.pharをcomposerへリネームします。

$ composer --version

Composer本体アップロード

$ composer self-update

Composer初期化

$ composer init

対話的にcomposer.jsonを作成できます。

composer.jsonの例

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

composer install

installコマンドでパッケージをインストールします。

$ composer install

composer installは下記処理を行います。

  1. composer.jsonをもとにパッケージをvendorディレクトリへインストールします。 (vendor/autoload.phpが作成されオートロードが利用できます)
  2. composer.lockファイルを作成します

composer update

パッケージをアップデートします。

$ composer update
# 特定のパッケージだけアップデート
$ composer update foo/bar

特定バージョンだけをアップデートする場合は、composer.jsonのバージョンの範囲で最新のものに更新されます。
つまりcomposer.jsonに指定した範囲で最新のものがダウンロード・インストールされます。

指定された以外のパッケージはcomposer.lockに指定されているバージョンがダウンロードされます。
(指定以外のバージョンはダウンロードされたないと考えましたが、composer.logを見ると指定されたバージョン(=既存バージョン)をダウンロードし直しているよう?)

updateでcomposer.jsonに記載されたより上のバージョンをインストール

  1. composer.jsonの該当部分の指定を上げます
  2. $ composer update {{package_name}}を実行

installとupdateの違い

composer.lockファイルが存在するときの挙動が異なります。

  • install
    composer.lockに記載されたバージョンをインストールします。
    composer.lockが無いときはcomposer.jsonをもとにインストールします。
  • update
    composer.lockはみません。
    composer.jsonに記載された範囲で最新のバージョンをインストールします。

composer install と composer updateの違い - Qiita

パッケージ追加

// 通常パッケージを追加
$ composer require {{package name}}

composer requireはパッケージを追加して、composer.json(のrequireプロパティ)へ追記します。

// 開発でのみ必要なパッケージを追加
$ composer require --dev packagename

composer require –devは開発環境でのみ必要なパッケージを追加します。
パッケージを追加しcomposer.json(のrequire-dev)へ追記します。

composer installではインストールされず–devオプションを付けてcomposer install –devでインストールされます。 install/updateコマンドの--devオプションのデフォルト値は有効なので--devは付けなくてもrequire-devパッケージもインストール/アップデートします。
require-devパッケージをインストール/アップデートしないときは明示的に--no-devオプションを指定します。

個別パッケージを追加(その他パッケージは変更しない)

新規追加パッケージ以外は、composer.lockを変更しないようにパッケージを追加。

  1. composer.jsonにパッケージを追加(例:foo/barパッケージを追加)
  2. $ composer update foo/bar
    • バージョンなどを指定しない
    • bad:$ composer update foo/bar:^1.1
    • good:$ composer update foo/bar
  3. composer.json, composer.lockをコミット

パッケージインストール場所

デフォルトはcomposer.jsonと同階層にvendorディレクトリを作成します。
上述のcomposer.jsonの例では下記のようになります。

vendor/monolog/monolog

|-- composer.json
|
|-- composer.lock
|
|-- vendor
      |
      |--monolog
          |
          |--monolog

インストール済みパッケージ一覧を確認

$ composer show -i

requiredしたパッケージのみ表示。

$ composer show -D

パージョンの指定

[初心者向け] composerのバージョン指定方法 | QUARTETCOM TECH BLOG

Scripts

Composerをホストしている場合

Composerの設定は、composer configコマンドで行う。

Basic認証

Basic認証を設定する方法は下記のとおり。

$ composer config -g http-basic.example.com foo bar

上記コマンドを実行すると~/.composer/auth.jsonファイルが作成される。

{
    // ...
    "http-basic": {
        "example.com": {
            "username": "foo",
            "password": "bar"
        }}
}

Personal Access Token

Personal Access Tokenは以下のページから生成できます。

Personal Access Tokens

$ composer config -g github-oauth.github.com <oauthtoken>

Personal Access Tokenが必要な理由は下記ブログでわかりやすく解説されています。

Composerを利用してGithubへ短時間で大量のリクエストを送ると、Github APIに対するアクセス回数制限に引っかかる場合があります。このような場合、Composerがgithub認証のために、ユーザIDとパスワードを要求します。要求通りID/パスワード入力すればユーザ認証が行われ、回数制限の上限が緩和されるので処理が先に進みます。

ですが、共有のPCを使っているときなど、IDやパスワードを直接入力したくない場合があります。このような場合は、githubから取得出来るOAuthトークンを利用すると良いです。 --[PHP]composer使用時、GitHubのAPI rate limitを回避するためにOAuthトークンを使う - akamist blog

https://akamist.com/blog/archives/215

Composerに限らず大量のリクエストを送るアプリケーション(例えばHomebrewなど)でも Personal Access Tokenを登録する必要があります。詳しくはgitを参照ください。

--no-script

$ composer install --no-script

参考

公式リファレンス Personal API tokens

create-project

create-projectもバージョン指定可能。

composer create-project koriym/php-skeleton:1.1.5 salesforce-rest-api-client

トラブルシューティング

以下が発生。

symfony flex 1.2.7 Plugin installation failed (Invalid version string "5.x")

下記手順で解消。

  1. vendorディレクトリを削除
  2. ローカルのcomposer.lockを削除
  3. ローカル$ composer install
  4. composer.lockをコミットしてPush