phpでftpとかs3に対してやりとりする部分を抽象化したかった。
↑でも書いたけど、ざっと調べた中では以下のLeague\Flysystem
が一番良さそうだった。
https://github.com/thephpleague/flysystem
でもphp5.4〜だった。
なので、League\Flysystem
をphp5.3対応した。後悔はしていない。
https://github.com/mapyo/flysystem
流れ
- fork
- ブランチ切る
- .travis.ymlに5.3追加
- ひたすら修正する https://github.com/mapyo/flysystem/pull/2
arrayとtraitの修正のみでいけた。何をもって対応OKとしたかというと、テストが全部通ったので対応OKとした。
traitが書いてあったphpファイルとか消したりしてないので、雑といえば雑か。
一度プルリクをMergeしてしまって、僕のforkしたリポジトリのmasterに変更が反映されたけど、何か大事なものを失った気がして、masterはMerge前にforce pushして元に戻してプルリク出したけど、やっぱりmasterにMergeするべきだと思ってMergeしたのでプルリクが2つになっている。
混乱している。
使い方
- composer.json
{ "repositories": [ { "type":"vcs", "url":"git@github.com:mapyo/flysystem.git" } ], "require": { "league/flysystem": "dev-master" } }
- test.php
<?php date_default_timezone_set('Asia/Tokyo'); require 'vendor/autoload.php'; use League\Flysystem\Filesystem; use League\Flysystem\Adapter\Ftp as Adapter; $filesystem = new Filesystem(new Adapter(array( 'host' => ‘ftp.server.name.jp', 'username' => 'ftp', 'password' => 'ftp', ))); $contents = $filesystem->listContents(); var_dump($contents);
こんな感じで、masterの内容をcomposer installして使える。 しかし、実際のライブラリをforkして修正を加えたものを使うのって、 どう扱うのがよいのだろうか?
タグを新たに作ってそれを指定すると、fork元のライブラリの変更に追従させる時に微妙だけど、 masterを指定すると意図せず最新のソースが入ってしまう可能性もある。 コミットのハッシュを指定して入れるのがいいのかなぁ。
所感
こういう事が出来るのはちゃんとテストがあるからこそ出来る。 PHPUnit4.0がPHP5.3で動いてくれてよかったー。
闇を作ってしまった感じがある。 そして、こういうパターンはfork元のライブラリの変更に追従する事はなさそうな気がする。