PHP」が用いられますが、CakePHPにそれを導入し、一連のファイル操作を行います。ファイル操作にはリスト取得・アップロード・ダウンロード・削除・コピー・移動が主なものになりますが、今回はそれら全てをコンポーネントで実装していきます。開発環境は以下の通りです。3.6/3.5CakePHPのルートディレクトリを「cakephp/」とします。S3を使用するので、接続可能なIAMユーザーが必要です。PHPをインストールします。CakePHPのルートディレクトリに移動し、以下のコマンドを叩きます。Cake\Composer\Installer\PluginInstaller::postAutoloadDump初期設定SDKを使って処理を書くのに必要な設定を初めに行っておきます。IAM資格情報S3に接続可能なIAMユーザ情報をenvファイルに追記します。AWS_S3_SECRET=YourSecretAccesskeyローカルストレージアップロードやダウンロードを行う際のディレクトリを作成します。CakePHPのルートディレクトリ配下へstorageディレクトリを作成します。storageそしてこのディレクトリまでのパスを環境変数として登録します。'/storage');コンポーネントの作成aws-sdk-phpで操作する為のコンポーネントを作成していきます。コンポーネントの作成CakePHPルートディレクトリへ移動し、以下のBakeコマンドでコンポーネントを生成します。[];}S3Clientコンポーネントの実装それではコンポーネントを定義します。結果的に、以下のようになりました。}}上から解説します。'');}コンストラクタでS3Clientの設定を行っています。バケット名だけはメンバ変数$default_bucketに格納し、操作する際に自由にバケットを変更できるようにしています。各メソッドの引数にバケット名を渡さない場合は、このデフォルトのバケット名が使用されます。}}getList()メソッドでは、ファイルの一覧を取得します。引数にはバケット名、ディレクトリ、取得上限数を取ります。バケット名は渡さなければデフォルトのバケット名が使われます。取得上限数の上限設定値は1000です。}}putFile()メソッドでは、1つのファイルのアップロード処理を行います。引数にはアップロード元ファイルパス、アップロード先ファイルパス、バケット名を取ります。}}getFile()メソッドでは、ファイルのダウンロード処理を行います。引数にはS3上のファイルパス、保存するローカルのファイルパス、バケット名を取ります。}}getDirectory()メソッドでは、指定したディレクトリをダウンロードします。指定ディレクトリ以下を再帰的(ディレクトリ構造を保ったまま)にダウンロードします。引数には、ダウンロードするS3のディレクトリ、保存するローカルのディレクトリパス、バケット名を取ります。}}copyFile()メソッドでは、ファイルをS3内で1つのファイルをコピーします。引数にはコピー元ファイルパス、コピー先ファイルパス、コピー元バケット名、コピー先バケット名を取ります。}}copyDirectory()メソッドでは、S3内でディレクトリをコピー処理します。ファイルは再帰的(ディレクトリ構成を保ったまま)にコピーされます。引数にはコピー元S3ファイルパス、コピー先S3ファイルパス、コピー元バケット名、コピー先バケット名を取ります。}}moveFile()メソッドでは、S3内で1つのファイルを移動します。引数には移動基ファイルパス、移動先ファイルパスを取ります。}}moveDirectory()メソッドでは、S3内でディレクトリを移動します。ファイルは再帰的(ディレクトリ構成を保ったまま)移動します。引数には移動元ディレクトリパス、移動先ディレクトリパス、バケット名を取ります。}}deleteFile()メソッドでは、1つのファイルを削除します。引数には削除するS3内のファイルパス、バケット名を取ります。}}deleteDirectory()では、S3内のディレクトリを削除します。対象ディレクトリ内のファイルは全て削除されます。引数には削除対象ディレクトリパス、バケット名を取ります。これより以下は、上記メソッドをサポートするメソッド群です。$files;}createArrayMultipleObjects()メソッドでは、複数オブジェクトを削除する為のデータ構成を作成します。引数にはgetList()メソッドで取得したファイルリストを取ります。}}chkDirHandle()メソッドは、ディレクトリ群を再帰的に処理する為のハンドラです。ファイルパスを適切な形へ整形し、chkDir()メソッドに渡します。}}chkDir()メソッドでは、ローカルでの指定ディレクトリの存在確認を行い、存在しない場合はそのディレクトリを作成します。基本的にはコンポーネントを用いれば一通りの操作が行えますが、動作例として、コントローラを作成します。コントローラの生成コントローラファイルを生成します。CakePHPルートディレクトリへ移動し、以下のBakeコマンドを叩きます。S3Controller.phpコントローラ実装コントローラを実装します。以下のようになります。}}アクション(メソッド)名からその内容はわかると思いますが、$this->loadComponent('S3Client');上記にてS3Clientコンポーネントを読み込み、実行しています。アクション内では、適宜対象のファイルやパスを指定している流れになっています。まとめ以上で作業は完了になります。PHPを導入する事で、インフラ側の用意が不要になるので、構築の際の作業範囲にインフラ側が無い場合はこちら側の作業で導入できて便利なので是非試してみてください。ちなみに今回作ったコンポーネントは、確認用コントローラも含め、Githubに上げてあります。BookmarkLINECakePHP3でイベントリスナーを用いた処理の実装(&メールやSlackでの通知)CakePHP3のコンポーネントとは?導入から共通処理をまとめる入門編CakePHP3の認証[Auth]コンポーネントを用いてログイン機能を実装するCakePHP3でメッセージやテキストのローカライズ(多言語化)を行う。英語から日本語へCakePHP3のトランザクションとtry/catchと例外処理と。イベントレポート2019.12.8MySQL8.0.16で追加されたCHECK制約を試してみる。2019.12.2LaravelのContracts(契約)とは。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。