こんにちは。Ooharabucyou こと、川原であります。
技術ブログ強化中です。飽きるまで週一で情報発信をしていく次第です。
今までやってなかった、Groovy, Grails, Gradle といった G* シリーズも
ちょくちょくやっていこうかなとおもいます。

本日は、前回の記事でちょこっと出ていた satis についてです。
satis は、composer パッケージのレポジトリを静的なコンテンツで作成してくれる
ツールです。

公に公開するものであれば、packagist.org に登録をすればよいのですが、
社内向けプロジェクトやライブラリはそういうわけには行きません。
そこで役に立つのが、このプロダクトです。

このプロダクトの優れているところは、
対象のパッケージに依存する(packagist.orgなどの)パッケージも、同じレポジトリに入れてくれる
機能が存在することです。

社内でこれを利用した場合、社内の利用プロジェクトは packagist.org
に接続しなくても良くなるので、スピーディーな開発プロジェクトセットアップ
が期待されます。

実際に使ってみましょう。

ドキュメントにある通り、プロジェクトを作成します。

composer create-project composer/satis --stability=dev --keep-vcs

composer –keep-vcs オプションは、プロジェクト作成時に使うと、
git の場合 git clone & composer install した状態と同じになります。
付けない状態だと、ソースコードの入手からの場合、 .git or .svn を削除するか
聞かれます。 (2013/07/06 version=ab731b1197d76ce1e13fbf67a7e8f17a2be8b3e9)

satis 自体の入手はこれで完了です。次は composer.json を含む
対象のプロジェクトを用意しましょう。今回は、symfony-standard を例に使います。

対象のパッケージ情報について記した config.json を作成します。
とりあえず、satis と同じディレクトリに置いてみましたが、どこでも構いません。

{
    "name": "Symfony Standard (Internal)",
    "homepage": "http://symfony.com/",
    "repositories": [
        { "type": "composer", "url": "http://packagist.org" }
    ],  
    "require": {
        "symfony/framework-standard-edition": "v2.3.1"
    },  
    "require-dependencies": true
}

repositories では、レポジトリの指定を行います。
今回は、composer を指定していますが、社内の VCS レポジトリを指定する場合は

{ "type": "vcs", "url": "gitなどのパス" }

とできるわけです。

“require-dependencies” を true にすると、依存するライブラリも
一緒にレポジトリに入れます。

最後に、satis の bin ディレクトリに satis コマンドがありますので
build を実行します。先ほど作成した、 config.json と、完成した
レポジトリを格納するディレクトリ (以下の例では web) を指定します。

Github のAPIコール制限に引っかかる場合もありますので、その場合は
ユーザ名とパスワードを入力すると良しです。

./bin/satis build config.json web

… と暫く待っていると、出来上がりです。
web ディレクトリに展開されています。

PHP のビルドインHTTP Server で公開して確認

php -s localhost:9999 -t web

.composer のキャッシュを削除して composer install の時間を
測定してみます。

まずは、通常の状態で

composer create-project  symfony/framework-standard-edition --profile

293.56s かかりました。

次に、 .composer/config.json を少しいじくってから検証します。
以下のようにすると、packagist.org が無効化されます。
(こうなってくると、無効化のオプションとかがほしくなるぜ。)

{
    "repositories" : [ 
        {"packagist" : false },
        {"type" : "composer", "url" : "http://localhost:9999/"}
    ]
}

その上で、再度実行

composer create-project  symfony/framework-standard-edition --profile

77.87s

だいぶ早くなりました。

いまのところ、zip ファイルは、Github から取得しに行っていますが、
satis では、repository と一緒に公開する機能を搭載しています。

{
    "name": "Symfony Standard (Internal)",
    "homepage": "http://symfony.com/",
    "repositories": [
        { "type": "composer", "url": "http://packagist.org" }
    ],  
    "require": {
        "symfony/framework-standard-edition": "v2.3.1"
    },  
    "require-dependencies": true
}

バージョン指定が範囲指定されているため、考えられるすべらのバージョンを
アーカイブします。framework-standard-edition の依存を
アーカイブしようとしたのですが全然終わりません。。。

ひとまず、アーカイブまではしなくてもよさそうなのでここまでにします!

Posted in PHP.

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>