SlideShare a Scribd company logo
Composer による依存管理
と Packagist によるライブラリの公開
          Ooharabucyou
      <kawahara@bucyou.net>

  2012-09-15 PHP Conference 2012
おしながき


• 依存管理とは何か

• 使おう Composer

• ライブラリを Packagist で公開しよう
自己紹介

•@ooharabucyou
•川原翔吾
•PHP遣い 5年目くらい
 •おもに Symfony な人
•最近: Groovy やら Spring Framework
•2008-2011 OpenPNEの開発
•2011-     楽天ウェブサービス
          (公開API) の中の人
依存管理とは


• 依存管理 (Dependency Management)

• プロジェクトが依存するライブラリを管
 理する
依存管理とは

 • 常にリリース可能
     (Relesable) なソフト
     ウェアのための一つの要
     素
 •   参考: 『継続的デリバリー』13章 コンポーネントや
     依存を管理する
依存管理とは

Your Project
                               Framework
                               Framework
                  require
                                Framework
                                Framework
                                 Framework
                            Component 2.1.0
                            Component 2.1.0
        require             Component 2.1.0
                             Component 2.1.0
                             Component 2.1.0


    Library Foo-1.0.0                 Library Bar-1.*
                            require
ちゃんと依存管理する利点

• 開発環境構築が楽に!

• Library バージョンアップもいくばしか
 楽に

• 同じプロジェクトをチームで開発する場
 合、ライブラリのバージョンのズレをな
 くす
依存管理の方法

• svn や git に library 入れる

• git submodule や svn:external を使う
 • svn:external は svn up の度に更新が走って煩わしい。 <-I hate!

 • 当然 svn 利用時は git で管理するソースコードを何とかするのは難
   しい。 (Github ならできるかもだけど)


• 専用のツールを使う
他の言語だと


• Ruby - Bundler
• node.js - npm
• Java - Maven
  (僕はGradleが好き)
PHPの場合?


• Composer
• 採用しているプロダクト

 • Symfony2, Zend Framework2,
   FuelPHP, ...
特徴
• PHP5.3.2 以上用

• json でシンプルなパッケージ定義

• autoload 機能

• git, svn, hg, PEAR, PEAR2 上のライブラリを
  依存として定義可能

• Public Package Repository もあるよ!
おてもとに準備するもの

• PHP5.3.2 以降

• 依存するライブラリを管理している VCS

 • 多くは Github で管理されているた
   め、 git のインストールが必要

• (一応 Windows でも動いた)
入手

• まずは入手
 •   curl -s https://getcomposer.org/installer | php


 •   インストール要件等のチェック後、composer.phar がダウンロードされます。



• Proxy や curl がない等の場合は、
 http://getcomposer.org/download/
 からも入手可能
プロジェクトを始める


• mkdir YOUR_PROJECT_DIR
• cd YOUR_PROJECT_DIR
• php PATH_TO_COMPOSER init
init コマンド

• Project の名前や、依存を定義する
 composer.json を作成する

• init コマンドは対話形式で Public
 Repository である Packagist から依存
 パッケージを検索・選択することができ
 る。 (でもちょっと重い)
Packagist

• packagist.org
• composer の中央公開レポジトリ

• どなたでもパッケージを公開できます

• 現在 3,000パッケージ以上が登録されている

  • -> PEAR, PEAR2 より多い!!
備考: init 時の指定

•   Package name: パッケージ名 (ベンダー名/名前 という形式の必要がある。文字の大小は区別し
    ない)


•   Description: パッケージの説明


•   Author: 作成者


•   Minimum Stability: 依存パッケージの最小の安定性, stable を指定すると、dev (開発版) はイ
    ンストールされない * ここ数カ月で増えた項目なので注意
composer.json
{

    "name": "kawahara/sample20120915",

    "require": {

         "pimple/pimple": "1.0.0"

    },

    "minimum-stability": "stable",

    "authors": [

         {

             "name": "Shogo Kawahara",

             "email": "kawahara@bucyou.net"

         }

    ]

}
require について

• 依存を “パッケージ名” : “バージョン” で
 指定する

• バージョンは、”1.0.*” のようなワイル
 ドカードや、”1.0<=,2.0>” のような範
 囲指定もできる。
install コマンド
• php composer.phar install
• composer.json を依存解決し、パッケー
  ジのダウンロードを行い、vendor/ に配
  置する。

• composer.lock というファイルが存在し
  ない場合は、ダウンロードしたパッケー
  ジのバージョン情報を書き出す。
install コマンド

• install コマンド実行時に composer.lock ファイ
 ルが存在する場合は、 composer.lock に書きだ
 されているバージョンをダウンロードする。

 • -> チーム開発時に同じバージョンを共有するため

 • -> プロジェクトであれば composer.lock もコミットして共有する
   こと!!
update コマンド

• php composer.phar update
• composer.json の require を更新し、依
 存を入手したい場合は、 update コマン
 ドを使う。

• その際、composer.lock も更新される。
パッケージ入手後


• 大抵のパッケージは
 vender/autoload.php をロードするだ
 けで composer 同梱のオートローダーが
 ファイルロードを何とかする。
Packagist 以外から




• composer.json に レポジトリ情報を書く
 ことによって Packagist 以外のレポジト
 リにあるソースコードに依存を張ること
 ができる。
Packagist 以外から

{

    "name": "kawahara/sample20120915",

    “repositories”: [

         {

             “type”: “pear”,

             “url” : “http://pear2.php.net”

         }

    ],

    "require": {

             "pimple/pimple": "1.0.0",

             “pear-pear2/PEAR2_HTTP_Request”: “*”

    },

    ...
Packagist 以外から

{

    "name": "kawahara/sample20120915",

    “repositories”: [

         {

             “type”: “svn”,

             “url”: “http://smarty-php.googlecode.com/svn/”,

             “vender-alias: “smarty”

         }

    ],

    "require": {

             "pimple/pimple": "1.0.0",

             “smarty”: “3.1.*”

    },

    ...
特集: Packagist に公開
簡単な手順を踏むだけで、 Packagist
に簡単にパッケージを登録することがで
きます。
手順
1. composer.json に公開に必要な情報を
  記述します。
  •   php composer.phar validate でチェック!


2. Github などで composer.json ごと公
   開
3. Packagist に Repository URL を登
   録
公開!

tag がバージョンになります。このと
き、tag は x.y.z という形式で!
Github の場合 サービスフックする
と、tag 更新時に自動的に Packagist
のバージョンが更新される
http://packagist.org/packages/
kawahara/httpgetcontents
公開できました!!



ちゃんと使えます。

(実演は失敗した)
レシピおさらい



お手持ちの PHP製ライブラリ
Github Repository
詳しくはドキュメント
• 更に細かい情報は、全てドキュメントに載って
  います。

• http://getcomposer.org/
• 英語? あぁ、仰らないで。私が (ひどいもんです
  が) 日本語化していたりします。

• https://github.com/kawahara/composer/
  tree/japanese-doc-progress/jpdoc

• この際はっきり言うと、英語苦手なので誰か手
  伝って。特にひどいと思った人は。
良い依存管理ライフを

More Related Content

Composer による依存管理 と Packagist によるライブラリの公開

Editor's Notes