COMPANY SERVICE STAFF BLOG NEWS CONTACT

STAFF BLOG

スタッフブログ

TECHNICAL

テクログ

2021.11.12

FuelPHP で外部ライブラリをインストールする場所

テクログphp

概要

FuelPHP において、 AWS SDK などの外部ライブラリは `fuel/app/vendor` に入れるという内容です

`fuel/app/vendor/` にインストールする

たとえば、`fuel/app/vendor/aws3.199.2` ディレクトリを作成して、そこに `aws_sdk 3.199.2` をインストールします。アプリでは `try catch` を利用して読み込みます。

なにが嬉しいか

  • 実践はしていませんが、メンテナンス無しでアップデートが出来ると思います

今後、`AWS SDK 4` にアップデートが必要な場合は、`fuel/app/vendor/aws4` ディレクトリにインストールします。アプリでは、読み込みに成功したらそちらを読み込ませます。

サンプル( AWS SDK )

前提として、`fuel/app/vendor` に AWS SDK の `2.8.31` がすでにインストールされています。
この状態で、 `fuel/app/vendor` に AWS SDK の `3.199.2` を新しくインストールします。

`composer.phar` を利用して特定のディレクトリにインストールする方法

以下の形式でインストール先を指定することができます。

php composer.phar require --working-dir=ディレクトリまでのパス ベンダー名/プロジェクト名

`--working-dir` をつけることでインストール先のディレクトリを指定しています。ディレクトリはすでに作成されている必要があります。

サンプルコードでやること

  • 新しく `3.199.2` を読み込みたい
  • 失敗したら `2.8.31` を読み込みたい
  • 試しに `getObject` メソッドを実行して S3 から画像ダウンロードしたい

注意

サンプルコードでは `Aws\S3\S3Client` のインスタンス生成に続いて `getObject` を実行していますが、実際には分けたほうがいいです。

メソッドに破壊的変更が加えられると対応が辛いので。

ラッパークラスを利用するなどして、外部ライブラリのバージョンアップによる破壊的変更を吸収できるようにコードを設計する必要があります。

サンプルコード

try {

    // AWS SDK 3.199.2 を読み込む(新しく読み込みたい)
    include APPPATH.'vendor/awssdk3.199.2/vendor/autoload.php';
    $aws_s3_client = new Aws\S3\S3Client(
        array(
            'key'    => 'XXXXXXX',
            'secret' => 'YYYYYYYYY',
            'region' => 'ap-northeast-1',
            'bucket' => 'CCCCCCCC',
            'version' => 'latest',
            'credentials' => false // credentials の値については詳しく調べていません
        )
    );
} catch (\Throwable $th) {

    // AWS SDK 2.8.31 を読み込む(読み込み実績がある前提)
    include APPPATH.'vendor/awssdk2.8.31/vendor/autoload.php';
    $aws_s3_client = Aws\S3\S3Client::factory(array(
        'key'    => 'XXXXXXX',
        'secret' => 'YYYYYYYYY',
        'region' => 'ap-northeast-1',
        'bucket' => 'CCCCCCCC'
    ));

    Log::error($th->getMessage());
}

try {
    // S3 から画像ダウンロードしてみる
    $result = $aws_s3_client->getObject(array(
        'Bucket' => 'Bucket',
        'Key' => 'sample.jpg',
        'SaveAs' => APPPATH.'tmp/sample.jpg',
    ));
} catch (\Throwable $th) {
    // エラー処理
}

サンプルコードで出来たこと

  • `getObject` を実行してS3から画像のダウンロードは出来ました
  • `3.199.2`, `2.8.31` の両方で実行できました
  • `3.199.2` の読み込みを失敗させて、`2.8.31` で実行できました

終わり

以上です。
実際に運用しているわけではないので問題点などは不明です。

この記事を書いた人

インドア

入社年2017年

出身地埼玉県

業務内容開発

特技・趣味映画・アニメ鑑賞、ゲーム、散歩、勉強

テクログに関する記事一覧

TOP