Page 1
仕事で使えるComposer
無修正版
ピクシブ株式会社
うさみけんた @tadsan
PHPカンファレンス北海道2016
公開日:
by USAMI Kenta @tadsan
に札幌市白石区の札幌市産業振興センターで開催された『PHPカンファレンス北海道2016』でレギュラーセッション(20分)として発表しました。
仕事で使えるComposer
無修正版
ピクシブ株式会社
うさみけんた @tadsan
PHPカンファレンス北海道2016
お前誰よ
うさみけんた (@tadsan) / Zonu.EXE
おしながき
Composerの基礎/導入
Version 1.0.0 was released on April 5, 2016
Composer
#とは
Composerって何よ
依存関係管理ツール
(Dependency manager)
グローバル
(特定のプロジェクトに依存しない)
Get Composer!
2016年4月5日(今月) 正式版1.0.0リリース!
PHAR形式で配布されてるので、
Composer VS pear
pear
はPHP標準のパッケージ管理コマンド
機能の豊富さ、利用できるパッケージの数、
理者からアプリエンジニアの手に落ちてきた
(身分制度の変革)
Composerは何ではないか
PHPのC extensionはインストールできない
Composerの基礎
composer.json
プロジェクトの情報を記述するファイル
は組織名やアカウント名をつける
ライブラリの依存を記述
require
に依存するパッケージ+バージョンを記述
"require": {
"filp/whoops": "~2.1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8"
}
}
composer require --dev "phpunit/phpunit:4.8"
バージョン記法 (一部)
"*"
: 全てのバージョンを受け入れる
:バージョンタグ固定
: バージョンタグ固定(マイナー更新する)
: ブランチxxxxxを指定
のようにブラ
composer.lock
依存パッケージのバージョンを固定するファイル
では範囲や複数指定が可能
固定することで、意図しないバージョンが
composer.lockの管理
composer update vendor/package
で更新
composer.lock
自動生成される をGitなどの
Composerを使う
vendor/
依存ライブラリは ディレクトリに入る
Composerに依存するPHPには以下の一行を書く
Composerでインストールされたライブラリは、
する必要がない
オートローディング
PHPerをinclude_onceから解き放つ福音
"autoload": {
"classmap": ["./src"]
},
"autoload-dev": {
"classmap": ["./tests"]
}
}
詳しくはWEB+DB Vol. 81に書きました(宣伝)
サブコマンド (一部)
composer install
:
: 機能一覧を出力
: composer.pharを更新
: パッケージ検索
: composer.jsonのチェック
composer create-project
:
Composerを導入する
Composerの配置を考える
公式サイトのスクリプトでは、ダウンロードまで
サーバーごとの場合
プロジェクトメンバーが共有の開発サーバーに
など
悪い点:サーバー管理者が更新しなきゃいけない
ユーザーごとの場合
プロジェクトメンバーが自分のPCで開発する
など (好みによる)
良い点:メンテナンスするライブラリの数が
悪い点:バージョンを同期させるのがめんどう
プロジェクトごとの場合
大規模な開発チームで一つのリポジトリを
/composer.phar
プロジェクト内の など
悪い点:プロジェクト数が多いと運用が面倒
結局どれがいいの?
PHPに詳しくないひとのことを考えると、
プロジェクトごとにcomposer.pharを置くのが
一番楽じゃないかと思う
セットアップスクリプトでダウンロードさせても
xdebugとComposer
xdebugが有効な環境でComposer使うと怒られる
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug
xdebugは開発中は有用なので外したくない
を で起動できればいい
Composerのラッパー
プロジェクトローカルに置く場合…
を にリネーム
で実行権限を付与
php -n $(dirname $0)/.composer.phar "$@"
環境変数
Composerに必要なファイルは
COMPOSER_HOME
環境変数のディレクトリにインストール
デフォルトでユーザディレクトリにインストール
(Linux/OS X)
$HOME/.composer
(Windows)
%APPDATA%¥Composer
システムの設定を工夫すれば共有ディレクトリに
インストールすることも可能ではある
(やったことないけど)
Composerを導入
UNIX系OSでユーザごとにインストールするとき
( や などでPATHを通す)
.bash_profile .zshenv
# .bash_profile/.bashrc
PATH=$HOME/.composer/vendor/bin:$HOME/local/bin:$PATH
# .zshenv/.zshrc
path=(
~/.composer/vendor/bin(N-/)
~/local/bin(N-/)
$path
)
PHPのライブラリを探す
Packagist
The PHP Package Repository
Packagistって何だ
https://packagist.org/
http://www.modulecounts.com/
Packagistの特徴
GitHubなどのリポジトリと簡単に連携できる
API連携した状態なら、git tagをつけるだけで
されてきたが、現在はComposerでも
インストールできる
ライブラリを探す
とりあえず awesome-php に載ってるものを
Twitterの@call_user_funcをフォローすると
Composerとデプロイ
デプロイ、どうしてますか?
稼働中のサーバーに高速にコードを配置したい
rsyncなどで愚直にファイルを配置すると、
最中のPHPファイルが書き変わっちゃって
処理途中のユーザーリクエストがエラーで落ちる
Composerにも自動生成ファイルがあるので、
アトミックデプロイ
エラーが出ないようにデプロイ途中の不完全な
最近はDeployer http://deployer.org/ が
いい感じにアトミックデプロイしてくれるらしい
(環境に合せて検証の必要あり)
Satis - Package Repository Generator
https://github.com/composer/satis
パッケージのアーカイブを保存できるので、
もしGitHubが不通になってしまっても
デプロイできない事態を避けることができる
デプロイ先のサーバーとネットワーク的に
Satisの運用
satis.json
必要なライブラリを に列挙する
記法よりは が良い
satis.json
とビルドスクリプトを置いた
Satisを使う場合のcomposer.json
{
"repositories": [
{
"packagist": false
},
{
"type": "composer",
"url": "http://satis.pixiv.private/"
}
]
}
パッケージ作りたい
基本
PackagistはGitHubでログインできるので、
ブラウザで https://packagist.org を開いて
新しいバージョンのリリースは、
お作法
Composerはオートローディングが基本なので、
PSR-1, PSR-2, PSR-4 を読んでおけば、
Composerが遅い
Packagistは遠い
GitHub/Packagistは日本から遠いところに
Satisを用意できない/用意するまでもない
ときは、Hirakuさんという方がミラーサイト
https://packagist.jp/
を用意してくれてるので、これを使える
Composerは遅い
ComposerはPHPの互換性を重視してるので、
composerを速くするプラグイン・prestissimoを作った
グローバルに
ライブラリをインストール
どんなときにグローバル?
実際出番はあまりない
いちいちプロジェクトを作るまでもない
グローバルインストールしても、
PsySHはべんり
composer global require psy/psysh
ただし実行中に関数やクラスの再定義は