what-is-composer



what-is-composer

0 0


what-is-composer

what-is-composer

On Github dekokun / what-is-composer

Composer

Pearの不満も解決できる!?ライブラリ管理のお供にComposer!

倉知真太郎

自己紹介

  • 倉知 真太郎
  • システム管理部ベースライブラリグループ
  • twitter : @dekokun
  • PHP Lover
  • Haskell Lover

お仕事

  • Android,iOSへのPUSH配信システム作成中
  • メール配信システム、PictureFitter運用中

なぜ発表をしようと思ったか

Composerが便利だと聞いていた 個人プロジェクトで使ってみたら便利だった 今後外部ライブラリ管理の主流になりそう

想定視聴者

  • Composerを触ったことがない人

この発表の目的

  • 参加者がComposerの存在を知ること
  • 参加者がComposerの便利な面を知ること

すでによくご存知の方へ

  • 知っていることばかりかと思います
  • ごめんなさい
  • でも、嬉しい
  • ツッコミお願い致します

突然ですが

  • PHPの外部ライブラリ、使ってますか?

車輪の再発明は防ぎたい

  • Services_Twitter
  • PHPUnit
  • Net_IPv4

Composer登場以前のPHPの外部ライブラリ管理

  • 外部ライブラリの管理方法はたいていPear

こんなことに困ったことはないですか?

サーバ増設時

  • 他のサーバのライブラリと異なるバージョンのライブラリをインストールしてしまい動かなくなった…

複数メンバーでの開発時

  • 開発メンバが各々PCに勝手に必要ライブラリを入れるため開発メンバ間でライブラリのバージョンが揃わない…

ライブラリバージョンアップ時

  • あるシステムのためにライブラリのバージョンを上げたら同じサーバで動いていた別のシステムが動かなくなった…

使用するライブラリ追加時

  • サーバに外部ライブラリをインストールをせずにデプロイ…

その他

  • 新しい機能を追加した際に必要ライブラリのrequire漏れのページが…

これは嬉しくない

こういうのが欲しい

  • ソースコードと一緒に外部ライブラリをGit,SVNなどで管理/共有可能にする仕組み
  • サーバではなくプロジェクトに対して外部ライブラリをインストールする仕組み
  • requireするのを忘れないような仕組み
  • ライブラリ間の依存関係の解決ができる仕組み

Rubyistによる嘲笑

  • それ、Bundlerでできるよ!
  • PHPerはまだそんな場所にいるのか…(クスクス

他の言語達による追従

  • npmでできるよ!(Node.js)
  • Cartonでできるよ!(Perl)
  • Cabal(-dev)でできるよ!(Haskell)

PHPによる反撃

  • PHPにはComposerがある!!
  • それ、Composerでできるよ!

Composerとは

  • jsonファイルで外部ライブラリを管理
  • プロジェクトメンバーでバージョンの共有可能
  • 外部ライブラリをプロジェクトのディレクトリにインストール
  • インストールしたライブラリを使用するにはautoloadファイルを1つだけrequireすればよい

デモ

jsonファイルで外部ライブラリを管理

{
  "require": {
    "phpunit/phpunit": "3.7.*",
    "slim/slim": "1.6.*"
  }
}

    

composer.lockファイルでバージョンを凍結

{
  "name": "phpunit/phpunit",
  "version": "3.7.13",
  "source": {
    "type": "git",
    "url": "git://github.com/sebastianbergmann/phpunit.git",
    "reference": "3.7.13"
  }, ...

  • composer.lockファイルがある場合、Composerは指定されたバージョンをインストールする
  • このファイルを共有することでプロジェクト間のバージョンの同期が可能

インストールしたライブラリの使い方

    require_once APP_HOME . '/vendor/autoload.php';
  
  • インストールしたすべてのライブラリがこの1行で使用可能となります

デプロイとの絡め方

  • デプロイのたびにcomposer install
  • これによりinstall漏れなどがなくなる
  • テスト環境で動けば本番環境でも動くことが保証される

デモ

Composerを採用しているプロジェクト

  • FuelPHP
  • Symfony
  • Zend Framework

制約

  • PHP5.3.2以上
  • 実行サーバにgitが必要
  • detect_unicode("きっと将来削除されるでしょう"な機能)をoffにする必要あり

欠点

  • 誰でもライブラリに登録できる
  • デプロイ時の障害点が増える
  • デプロイに時間がかかる

上記より、vender下ディレクトリは最終的にはコミットしてしまったほうがいいかもしれない

最後に

  • 利点や欠点を知り楽しいComposerライフを

ありがとうございました