エラーの発生原因と解消方法
レガシーなプロジェクトと戦っている際に遭遇したエラー。
5.1以降だと普通に使えてハマったので誰かの助けになれば…
そのまま利用しようとすると発生するエラー
Laravel5.0でStorage::disk('ftp')->files('/')等を使用すると以下のエラーが発生する。
exception 'ErrorException' with message 'call_user_func_array() expects parameter 1 to be a valid callback, class 'Illuminate\Filesystem\FilesystemAdapter' does not have a
 method 'createFtpDriver'' in /sampleApp/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemManager.php:232
エラー原因
Laravel5.0に同梱されているLeague\FlySystemはFTPに対応しているが、Illumine/FilesystemがFTPに対応していないのが原因。
※Laravel5.1からは対応している
Laravel5.0 FilesystemManager APIDoc
→createFtpDriverメソッドが無い
Laravel5.1 FilesystemManager APIDoc
→createFtpDriverメソッドが有る
解消方法
公式ドキュメントに記述がある、カスタムファイルシステムを作成する
Laravel 5.0 ファイルシステム/クラウドストレージ - カスタムファイルシステム
実装方法
カスタムファイルシステムを定義
<?php
namespace App\CustomFileSystems;
use Storage;
use Illuminate\Support\ServiceProvider;
use League\Flysystem\Filesystem;
use League\Flysystem\Adapter\Ftp;
class FtpFileSystem extends ServiceProvider
{
    public function boot()
    {
        Storage::extend('ftp', function ($app, $config) {
            return new Filesystem(new Ftp($config));
        });
    }
    public function register() {}
}
ServiceProviderに作成したカスタムファイルシステムを追加
config/app.php
<?php
return [
    'providers' => [
        'App\CustomFileSystems\FtpFileSystem'
    ],
];
Filesystem用コンフィグにFTP接続設定を記述
config/filesystems.php
<?php
return [
    'default' => env('FILE_DISK', 'local'),
    'disks' => [
        'local' => [
            'driver' => 'local',
            'root' => storage_path() . '/app',
        ],
        'ftp' => [
            'driver' => 'ftp',
            'host' => 'hoge.jp',
            'username' => 'user',
            'password' => 'pass',
        ],
    ],
];
呼び出して動かす
use Illuminate\Support\Facades\Storage;
Storage::disk('ftp')->files('/');
レガシープロジェクトからは逃げられないんだなあ わにを。