LoginSignup
15
12

More than 5 years have passed since last update.

PHP開発でComposerを使わないなんてありえない!Packagist公開編

Posted at

皆さんこんにちは
前回のエントリーを見ていただいた方、ありがとうございます

今日もcomposerを使わなかったプロジェクトをさわってしまった悲しみを、記事を書くことによって全力で吹き飛ばそうというはた迷惑な企画を進めていきます

広がりを見せるcomposer

packagist

composerでインストールできるライブラリの殆どはpackagistから取得されます。
というか、普通はpackagistに問い合わせているのです。
https://packagist.org/

packagistというのは、PHPのライブラリを管理するサービスで、誰でもパッケージを作成してここで公開することができるというものです。
composerでライブラリをインストールするときは、このpackagistを使用するか、awesomeを漁ることになるでしょう

composer.jsonの役割

composer.jsonはそのプロジェクトのパッケージを管理していると前回のエントリーで書きましたが。。。
実はcomposer.jsonにはプロジェクト名とかプロジェクトの説明とかを書き加えることができ、そのことから、composer.json自体がそのプロジェクトの定義を行っていると見ることができます。

そして、composerでインストールするパッケージがどのような依存性を持っているかは、このcomposer.jsonを参照することで、知ることができるのです。
composerは必要となるパッケージのcomposer.jsonの情報を収集し、どのパッケージのどのバージョンを落とすかを計画するのです。
composer.jpg

composerを使うとcomposerで使えるようになる

上述したように、composerはcomoser.jsonの情報を元にパッケージの依存性を解決していくため、composer.jsonのないパッケージのインストールは基本的には無理です。
しかし、逆に考えてみると、composerを使うと必ずcomposer.jsonが生成されるわけですから、composerを使用したプロジェクトは必然的にcomposerで管理可能なパッケージになり得るということです。

つまり、「ちゃちゃっとライブラリでも作るか」→「あれ?これ、結構出来よくね?」→「公開しちゃえ!」→「composerで簡単にインストールできるよ!」
というフローが簡単にできるということです。
packagistという仕組みを利用することで、このようなライブラリ公開を容易に行えるのですから、これはもうcomposerを使わないという選択肢がまるで思い浮かびません!

実践!Packagistへのパッケージ登録

というわけで、packagistへのパッケージ登録を実践してみましょう

まずは事始め - init

composer init

適当に設定しましょう
今回は、以前にfluentdのロガーを作ったら、PSR-3に準拠していないとか怒られたので、こいつを対応させてしまいましょう
今回の作業は以下のリポジトリで行います
https://github.com/niisan-tokyo/fluent-psr-log

パッケージを導入する

composer require psr/log
composer require fluent/logger

これで十分です

コードを書いてみる

全部書いてるときりがないので、何書いているのか見たい場合はgithubをどうぞ
https://github.com/niisan-tokyo/fluent-psr-log

src/logger.php
namespace NiisanTokyo\FluentPsrLogger;

use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
use Fluent\Logger\FluentLogger;
use Psr\Log\LogLevel;
//=== 中略 ===//

    public function log($level, $message, $context = [])
    {
        if ($level !== LogLevel::INFO) {
            $context['message'] = $message;
        }

        $this->logger->post($level);

    }
}

適当にコード書いてみました
結果は実際のパッケージかリポジトリを見てもらうとして、ついでにオートロードの設定もいじります

composer.json
+    "autoload": {
+        "psr-4": {
+            "NiisanTokyo\\FluentPsrLogger\\": "src/"
+        }
+    }

これ入れたらオートローダを更新しておきましょう

$ composer dump-autoload

とりあえず挙動確認

適当にfluentd突っ込んだイメージを用意します

From niisan/phpdev

# install fluentd
RUN curl https://packages.treasuredata.com/GPG-KEY-td-agent | apt-key add - ;\
echo "deb http://packages.treasuredata.com/2/ubuntu/trusty/ trusty contrib" > /etc/apt/sources.list.d/treasure-data.list ;\
apt-get update ;\
apt-get install -y --force-yes td-agent

ADD fluent.conf /etc/td-agent/td-agent.conf
fluent.conf
<source>
  type forward
</source>

<match *>
  type file
  path /var/log/td-agent/
</match>

こんな感じで適当にPHPイメージにfluentdを突っ込んでおき、テストしてみます

2016-05-02T00:14:06+00:00 notice {"message":"テスト"}
2016-05-02T00:14:06+00:00 info {"test":"asert","tag":"perfect"}

うまく行っているようです

Packagistに公開する

早速Packagistに公開しましょう
Packagistにgithubでログインしたら、リポジトリとしてgithubの先ほどのリポジトリを公開しましょう
スクリーンショット 2016-05-02 9.20.08.png
右上にsubmitと書かれた部分があるので、押して見ます

すると、こんなページが出てきますので、先ほどの作業リポジトリを入れてみます
スクリーンショット 2016-05-02 9.21.52.png
checkを押すとリポジトリを検査します。
問題がないとsubmitボタンが出てきますので、押してしまえば終わりです

パッケージをインストールしてみる

取りあえず動くようになったはずなので、別のディレクトリに行って、インストールしてみましょう

composer require niisan-tokyo/fluent-psr-logger:dev-master

なぜdev-masterなんていう変なタグを使用しているかというと、minimum-stability, つまり最低限動作保証されたバージョンを指定していないからです。
なんにせよ、これで無事自分の作ったパッケージをインストールすることができました
早速使ってみましょう

test.php
<?php
require "vendor/autoload.php";
$logger = new NiisanTokyo\FluentPsrLogger\Logger();
$logger->debug("this is package log");

で、このコードを

$ php test.php
$ ls /var/log/td-agent
$ tail /var/log/td-agent/xxxx
2016-05-02T14:18:43+00:00   debug   {"message":"this is package log"}

こんな感じでログに出せることが確認できました

おさらい

Packagistにパッケージを公開するまでの手順は以下のとおりです

  1. composer initcomposer create-projectでプロジェクトを建てる
  2. コードをgithubなどの公開リポジトリに上げる
  3. packagistで公開リポジトリを指定してsubmitする
  4. composerでそのパッケージをインストールすることができるようになっている

実質たったの3ステップで自分の作ったパッケージを世界中に公開できます
これで、OSS世界の住人に仲間入りです!
Githubアカウントを持っていない方はなりふり構わず取りに行きましょう
Packagistのアカウントを持っていない方は、とっととサインインしちゃいましょう。
お手軽なOSS公開の世界が待っていますぞ!

まとめ

Packagistを使うことで、composerによるインストールパッケージの探索だけでなく、自分の作ったパッケージの公開まで出来てしまいます。
この圧倒的な敷居の低さにより、レベル高い感のあるOSS開発を、とても身近なものにしてくれるのです。
いやぁ、やはりcomposerは偉大ですわ!
これを使わないPHP開発なんて、ありえませんわな!!

参考

前回のやつ
packagist
Composerがパッケージのstabilityを解決するしくみ

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12