packagist に net-empty_port というモジュールを公開した話
packagist: https://packagist.org/packages/dooaki/net-empty_port
github: https://github.com/do-aki/Net-EmptyPort
net-empty_port とは
実行したマシンの空いてるポートを探し出してくれるモジュール。
https://metacpan.org/module/Net::EmptyPort にインスパイアされて作りました。というか、ロジックまんまです。
テスト用サーバの立ち上げなんかに、特定のポートをハードコーディングしちゃうと環境によって動かなくなっちゃうので、そう言うときに便利だよねってもの。
サンプルのつもりでエコーサーバ書いてみたけど、 socket 系の関数を生で使うのメンドイから、ラップしたいね。
<?php use dooaki\Net\EmptyPort; require __DIR__ . '/vendor/autoload.php'; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $port = EmptyPort::find(); echo "port: {$port}\n"; socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1); socket_bind($sock, '127.0.0.1', $port); socket_listen($sock); while ($client = @socket_accept($sock)) { while($buf = socket_read($client, 256, PHP_NORMAL_READ)) { socket_write($client, $buf); } }
packagist に登録したこと
ほとんど全て http://blog.monochromegane.com/blog/2013/06/02/development-php-composer-library-at-packagist-2/ に書かれてるので、これを参考にしてさくっと。
ベンダー名は dooaki にした。
最初は do_aki あるいは do-aki にしようと思ったのだけど、do-aki だと namespace として使えないし、do_akl だと タイプするのが面倒なので dooaki を採用。
読み的にもこれなら揺れないし
composer による構成管理はとても便利ではあるのだけど、packagist に公開するまでにやらなきゃならない定型部分が多いので、その辺を支援するコマンドがあるとよさそう。
とはいえ、一度設定しちゃえばあとは push するだけなのでそこまで必要でもないか。
coverall とか
モジュール書いたなら継続的なテストは必須ですよねーって事で、Travis CI つかってるんだけど、
最近 Coveralls でカバレッジ表示 (計測そのものはユニットテスト実行時に行っている) できることを知ったので導入。
Coveralls のドキュメント( https://coveralls.io/docs/php )によれば、PHP から利用するには php-coveralls か atoum を使えば簡単にできるらしい。
ただ、ユニットテストは phpunit で書いているので前者を選択。
以下のように、 phpunit で clover.xml を出力したあとに、 coveralls コマンドを呼び出すだけでOK でした。
script: - php vendor/bin/phpunit --bootstrap tests/bootstrap.php --coverage-clover build/logs/clover.xml tests && php vendor/bin/coveralls -v