画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

League\Flysystemをphp5.3対応した

phpftpとかs3に対してやりとりする部分を抽象化したかった。

phpのファイルシステムを抽象化するライブラリ

↑でも書いたけど、ざっと調べた中では以下のLeague\Flysystemが一番良さそうだった。

https://github.com/thephpleague/flysystem

でもphp5.4〜だった。

なので、League\Flysystemをphp5.3対応した。後悔はしていない。

https://github.com/mapyo/flysystem

流れ

  1. fork
  2. ブランチ切る
  3. .travis.ymlに5.3追加
  4. ひたすら修正する   https://github.com/mapyo/flysystem/pull/2

arrayとtraitの修正のみでいけた。何をもって対応OKとしたかというと、テストが全部通ったので対応OKとした。

traitが書いてあったphpファイルとか消したりしてないので、雑といえば雑か。

一度プルリクをMergeしてしまって、僕のforkしたリポジトリのmasterに変更が反映されたけど、何か大事なものを失った気がして、masterはMerge前にforce pushして元に戻してプルリク出したけど、やっぱりmasterにMergeするべきだと思ってMergeしたのでプルリクが2つになっている。

混乱している。


使い方

{
    "repositories": [
        {
            "type":"vcs",
           "url":"git@github.com:mapyo/flysystem.git"
        }
    ],
    "require": {
        "league/flysystem": "dev-master"
    }
}
<?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元のライブラリの変更に追従する事はなさそうな気がする。