Fippiyのプログラム学習内容アウトプットBlog

日々の学習内容をアウトプットして振り返りを実施する。

Laravel開発、作成したアプリをデプロイして本番環境で動作させる【6】ヘルパー関数を扱う

デプロイして本番環境でアプリを動作させるシリーズの続きです。

S3を利用して新規レコード作成時に画像をアップロードさせる所まで出来るようになりましたが、まだこれでは編集や削除機能に対応できていないため、こちらについてもS3に対応させたいです。

今回の目的

共通的な処理を1箇所にまとめることで、使い回せるようにしたい

なぜやるか

S3削除機能を実装するに当たり、同じ処理が必要と想定される為、処理の共通化を実施する方法を学習し確立させたい

やりたいこと

処理の共通化

やったこと

自作ヘルパーメソッドを組み込む

自作ペルパーメソッドを作成し扱う

 

実施内容

S3ファイルの削除機能を考える

S3への画像アップロードは完了したわけですが、次に実施したい削除について調べていたところ、こちらを参考にさせて頂きました、ありがとうございます。 

qiita.com

しかし、編集・削除するにしても結局S3にアクセスする必要があるため、特にアクセス処理については同様の記述をする必要があると想定しています。

そこで、編集・削除の処理の前にこれらの処理を共通化することを先に実施することにしました。

処理の共通化をどうするか

共通作業について関数化してそれらを扱える様にしたい…探しているうちにLaravelの自作ヘルパー関数という物があることが分かりました。

こちらを参考にさせて頂きました、ありがとうございます。

s8a.jp

これを参考にS3インスタンス生成とS3画像アップロードの2つの関数を生成することにしました。

 

自作ヘルパーを扱う環境を整える 

ヘルパー関数として呼び出すためのファイルをまず準備しました。

ファイルについては~/app/Helpersフォルダを作成、この中にpicture_helpers.phpファイルを新規作成。

後はファイルを読み込ませる為の設定をcomposer.jsonに追記します。

# ~/composer.json

f:id:Fippiy:20190328162546p:plain

composer.json

最後にこのファイルを認識させるためのコマンドを投入

$ composer dump-autoload

 

段階的に目的をもってコードをヘルパー化する

ヘルパー関数化するにあたって、どこまで関数にするかで作成内容が変わって来ます。

今回はこのような内容で既存の処理を関数化することにしました。

  1. 画像ファイル判定
  2. S3インスタンス生成
  3. S3へファイルアップロード

画像処理という観点でいくと、開発環境での画像処理も対象に入るのですが、今回はS3の画像アップロードに着目しているので、開発環境の設定は関数の処理から外しました。

あまりまとめすぎると、関数の中で開発環境と本番環境を分ける処理を書いてしまうことになりコードが見づらくなると思った為です。まとめる必要性があればまた変更したいと考えています。

 

画像判定部分を自作ヘルパーに載せ替える

# ~/app/Http/Controllers/BookController.php

f:id:Fippiy:20190328162906p:plain

BookController画像処理

画像処理部のコードの先頭部分です。

まず、$save_directory変数を作成し画像保存ディレクトリを指定しました。これは後に使うか現時点ではわかりませんが、ここでディレクトリ指定化しておくことで、他の用途でアップロード等処理する時にディレクトリ変更がしやすくなると考えた為です。

 

次に画像情報として取得した値を変数に格納させました。

取得データはform構成等で変化することがあるので、ここはヘルパー関数にすることはしませんでした。

 

この次から画像処理に関して自作ヘルパー化していきます。

まずこの次に処理しているのはアップロードされたファイルの判定です。画像ファイル判定としてヘルパー関数を作成しました。引数に拡張子とエラーコードを設定しています。

# ~/app/Helpers/picture_helpers.php

f:id:Fippiy:20190328163500p:plain

ヘルパー関数

引数を受け取り画像判定しています。コード自体は元のコードをコピーしているだけです。変数名が長くなっていたので、こちらは分かりやすく短い名前にしています。

こうすることで、後からレコード変更処理時にも新しい画像をアップロードする処理が入るので、その時にもファイルの判定に同じ物が使えます。

 

次に画像判定後の処理を載せ替えていきます

# ~/app/Http/Controllers/BookController.php

f:id:Fippiy:20190328164444p:plain

BookController画像処理2

画像判定後、開発環境と本番環境で処理を分けています。

開発環境については、今回ヘルパー関数化はしないので、初めに記載していた変数名に対応させているだけです。

本番環境設定"else"以降について、S3インスタンス設定とS3画像アップロード設定をヘルパー化しました。

ヘルパー呼び出し設定してあることでコメントを除くとほぼ数行になっています。

 

S3インスタンス処理

# ~/app/Helpers/picture_helpers.php

f:id:Fippiy:20190328164851p:plain

S3インスタンス設定(ヘルパー)

画像処理に必要なS3インスタンス設定をヘルパー化しました。

必要な情報としてs3clientとバケット設定を読み込んでいます。2つの変数を返したいのでreturnに変数2つをまとめています。

 

画像アップロード処理

# ~/app/Helpers/picture_helpers.php

f:id:Fippiy:20190328165028p:plain

S3画像アップロード設定(ヘルパー)

画像のアップロード処理です。

引数が長くなっていますが、ファイル名・拡張子・保存ディレクトリ・S3インスタンス情報等をいれています。

新規ファイル名等の作成処理は元々画像処理の先頭にあったのですが、アップロードの段階で生成でも特に問題はなかったので、S3画像アップロード処理としてこちらにまとめました。

 

 

こちらでヘルパー関数利用による処理の切り出しは完了しました。

後は残っている画像編集や削除機能についても、共通処理についてはこちらを使い回せるようになりました。

 

次はS3画像関連の削除処理行います。

fippiy.hatenablog.jp