- 投稿日:2020-10-11T23:51:50+09:00
Laravel Task Schedulerで動的にタスクを実行する
Laravelには標準でタスクスケジューラーがあるため指定した時刻に、指定した処理を実行したい場合にはかなり簡単にかける。
Kernel.php<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ // ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { //ここにコマンドを呼び足す処理と、時刻の指定その他条件を書くだけ $schedule->command('backup:clean')->dailyAt('3:00')->environments('production')->onOneServer(); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__ . '/Commands'); require base_path('routes/console.php'); } }基本的にはコマンドを作成したりして、毎分実行されるscheduleメソッドの中に追記していけばいいが、困るのはDBなどから設定をとってきてそれらの時刻設定などをもとに実行する処理がある場合。この場合においてもLaravelであればかなり簡単にかける。
Model
単純にcron書式の文字列だけ持つモデルをサンプルとして作成(ie, ['id' => 1, 'cron' => '* * * * *'])
Scheduler.php<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Scheduler extends Model { protected $fillable = ['cron']; }Command
動的に設定された時刻に実行するテスト用のコマンドを生成、単純にログを書き込むだけ。
sample.php<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Log; class Sample extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'log:test'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { Log::info('scheduler called'); } }動的スケジュール
Kernel.phpにDBからとってきた値に基づいて、コマンドを呼び出すように処理を追記。
Kernel.php<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ // ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { //DBから取得 $schedulers = Scheduler::all(); foreach($schedulers as $scheduler) { //普通にコマンドを呼び出すが、時刻設定の部分にcronを使用して、取得したcron書式の文字列を渡す。 $schedule->command('log:test')->cron($scheduler->cron); } } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__ . '/Commands'); require base_path('routes/console.php'); } }こんな感じでログ取れていればOK
storage/logs/laravel-2020-10-10.log[2020-10-11 23:33:14] development.INFO: scheduler calledまとめ
今回は、汎用性が高そうだったので、時刻指定の部分にcronを使用したが、用件に合わせてdailyAtなどの文字列を渡してもいい。
DBからスケジュールの情報を持ってきてコマンドを呼び出すという処理をschedulerメソッドの中に書いているため、呼び出しメソッドが増えていくと、可読性が下がるし、重くなる。どんな方法でハンドリングしていくのがいいかまでは試せていないので悪しからず。結構動的に処理しなければいけないものが多かったり、重複実行してしまうのがまずかったりする場合には
withoutOverlapping
を使用したり、本番のみ実行させたい時にはenvironments
、単一サーバー上で実行したい場合にはonOneServer
などをチェーンして書くことも可能。
- 投稿日:2020-10-11T22:13:02+09:00
Laravelルーティングから起動まで
【概要】
1.プロジェクトの作成
2.ルーティング
3.起動方法
1.プロジェクトの作成
$ composer create-project laravel/laravel 名前 --prefer-dist名前に作成したいファイル名を記載するとその名前でファイルが生成されます。任意のファイルの中にで作成してください。
2.ルーティング
routes/web.php<?php Route::get('/' , function(){ return view('****'); });1.で作成した際にテンプレートで上記は記載されています。'/'はhttp://localhost:8000/へアクセスするようになっており、"welcom"はviews/welcome.blade.phpのプログラムが反映されます。3.で起動した際にLaravelが出てきます。
公式ではなく直にちゃんとルーティングが反映されているかを確認する方法としてweb.phpに直接viewを反映する方法があります。
routes/web.phpRoute::get('hoge' , function(){ return '<html><body>HOGE<p>HELLO,HOGE </body></html>';上記のようにコーディングすると、
http://localhost:8000/HOGEにアクセスした際に、
”HOGE”と”HELLO,HOGE”が記載されているページを表示できます。
3.起動方法
$ php artisan serveこれで起動ができます。
phpの場合は何も設定していなければ、"localhost:8000"でブラウザに表示できます。
- 投稿日:2020-10-11T20:05:46+09:00
PHPバージョンアップ時にphp7compatibilityを使ってコード互換性を確認する
PHPバージョンアップ時にphp7compatibilityを使うと互換性を簡単にチェックする事ができます。
php7compatibilityを使う時、環境セットアップに多少準備が必要になるのですが、docker環境なら、すでに作成済みのdockerイメージが公開されているので、だいぶお手軽に環境を構築して確認する事ができます。例えば以下はPHP7.1に対しての互換性を確認する際のコマンド例。
--ignore=vendor
でvender配下をチェックから除外する事が出来ます。docker run --rm -v $(pwd):/app vfac/php7compatibility 7.1 --extensions=php --ignore=vendor .参考
- 投稿日:2020-10-11T17:15:00+09:00
form送れない時はパスを見よう
ルートをresourceで指定し、いざ実行!してみてもformの内容が送信されない。
web.phpRoute::resource("posts",PostController::class);edit.blade.php<form action="./" method="post"> @csrf <p>タイトル</p> <p><input size="30" type="text" name="title"></p> <p>コンテンツ</p> <p><input size="70" type="text" name="content"></p> <p><input type="submit"></p> </form>resource通りのパスに書き換えて完了
書き換え忘れに注意ですね!
- 投稿日:2020-10-11T17:15:00+09:00
パスの変更忘れに注意します
ルートをresourceで指定し、いざ実行!してみてもformの内容が送信されなかった。
原因はresource通りのパスに書き換えるのを忘れていたからということで
resource通りのパスに書き換えて完了。まだこういうことがちょくちょくあるのでなくしたい
web.phpRoute::resource("posts",PostController::class);edit.blade.php//posts/createと指定していた <form action="./" method="post"> @csrf <p>タイトル</p> <p><input size="30" type="text" name="title"></p> <p>コンテンツ</p> <p><input size="70" type="text" name="content"></p> <p><input type="submit"></p> </form>
- 投稿日:2020-10-11T13:57:27+09:00
AWSにdockerを使用したlaravelをデプロイ④
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
EC2インスタンス内にGitをクローン
Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。
root@ip:/home/ubuntu# git clone [任意のレポジトリURL]Dockerコンテナの立ち上げ
cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。
root@ip:/home/ubuntu/awstest# docker-compose up -d root@ip:/home/ubuntu/awstest# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------ awstest_app_1 docker-php-entrypoint php-fpm Up 9000/tcp awstest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp awstest_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:10080->80/tcpこの様に立ち上がればOKです。
苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通りroot@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml version: "3.3" ←3.8から3.3に変更とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。Laravel環境設定
Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。root@ip:/home/ubuntu/awstest# docker-compose exec app bashLaravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。root@:/work# cp .env.example .env.envを作成したらcomposer install、そしてAPP_KEYも発行します。
root@:/work# composer install root@:/work# php artisan key:generateプロジェクト内の権限変更
プロジェクト内のファイルに対する権限を変更します。
通常では storage/logs と vendor の権限を変更すればOKみたいです。
ここでもエラーが起き少し苦戦しました。
file_put_contentsエラーでViewが開かない
root@:/work# chmod 777 storage/logs vendor root@:/work# chmod 777 storage/framework/views root@:/work# chmod 777 storage/framework/sessionsここまでやってようやくTOPページが開ました。
http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。
この様に表示されればOKです。
前回の記事
AWSにdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T13:57:27+09:00
AWSにEC2上にdockerを使用したlaravelをデプロイ④
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
EC2インスタンス内にGitをクローン
Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。
root@ip:/home/ubuntu# git clone [任意のレポジトリURL]Dockerコンテナの立ち上げ
cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。
root@ip:/home/ubuntu/awstest# docker-compose up -d root@ip:/home/ubuntu/awstest# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------ awstest_app_1 docker-php-entrypoint php-fpm Up 9000/tcp awstest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp awstest_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:10080->80/tcpこの様に立ち上がればOKです。
苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通りroot@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml version: "3.3" ←3.8から3.3に変更とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。Laravel環境設定
Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。root@ip:/home/ubuntu/awstest# docker-compose exec app bashLaravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。root@:/work# cp .env.example .env.envを作成したらcomposer install、そしてAPP_KEYも発行します。
root@:/work# composer install root@:/work# php artisan key:generateプロジェクト内の権限変更
プロジェクト内のファイルに対する権限を変更します。
通常では storage/logs と vendor の権限を変更すればOKみたいです。
ここでもエラーが起き少し苦戦しました。
file_put_contentsエラーでViewが開かない
root@:/work# chmod 777 storage/logs vendor root@:/work# chmod 777 storage/framework/views root@:/work# chmod 777 storage/framework/sessionsここまでやってようやくTOPページが開ました。
http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。
この様に表示されればOKです。
マイグレーションを実行する
root@:/work# php artisan migrate root@:/work# php aritsan db:seedここまでやればローカルで作成したアプリが動くと思います。
以上で「AWSにEC2上にdockerを使用したlaravelをデプロイ」を終了させていただきます。
ありがとうございました。前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T13:57:27+09:00
AWSにEC2上にdockerを使用したlaravelをデプロイ④(gitクローン〜デプロイ、マイグレーション)
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
EC2インスタンス内にGitをクローン
Gitのリモートレポジトリにある任意のlaravelプロジェクトをEC2インスタンス内にクローンします。
root@ip:/home/ubuntu# git clone [任意のレポジトリURL]Dockerコンテナの立ち上げ
cloneした自分のフォルダ(docker-compose.ymlのある)へ移動し、コンテナを立ち上げます。
root@ip:/home/ubuntu/awstest# docker-compose up -d root@ip:/home/ubuntu/awstest# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------ awstest_app_1 docker-php-entrypoint php-fpm Up 9000/tcp awstest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp awstest_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:10080->80/tcpこの様に立ち上がればOKです。
苦戦した箇所
docker-compose.ymlのバージョンエラーが出てエラー内容通りroot@ip-172-31-35-36:/home/ubuntu/awstest# vi docker-compose.yml version: "3.3" ←3.8から3.3に変更とversionを変更しました。
さらにgitへのpushが間違っていた為docker関連のファイルが無く立ち上がりませんでした。
こんなミスするヤツ自分以外いないと思いますが万が一同じ人がいたらファイルの確認をしてみて下さい。Laravel環境設定
Laravelが使えるように環境設定をしていきます。
appコンテナに入ります。root@ip:/home/ubuntu/awstest# docker-compose exec app bashLaravelプロジェクト内の環境設定を行う.envファイルは.gitignoreにて指定されているため、Gitリポジトリにプッシュされません。
なので再度作成します。root@:/work# cp .env.example .env.envを作成したらcomposer install、そしてAPP_KEYも発行します。
root@:/work# composer install root@:/work# php artisan key:generateプロジェクト内の権限変更
プロジェクト内のファイルに対する権限を変更します。
通常では storage/logs と vendor の権限を変更すればOKみたいです。
ここでもエラーが起き少し苦戦しました。
file_put_contentsエラーでViewが開かない
root@:/work# chmod 777 storage/logs vendor root@:/work# chmod 777 storage/framework/views root@:/work# chmod 777 storage/framework/sessionsここまでやってようやくTOPページが開ました。
http://[設定したElastic IPアドレス]:10080にブラウザからアクセスします。
この様に表示されればOKです。
マイグレーションを実行する
root@:/work# php artisan migrate root@:/work# php aritsan db:seedここまでやればローカルで作成したアプリが動くと思います。
以上で「AWSにEC2上にdockerを使用したlaravelをデプロイ」を終了させていただきます。
ありがとうございました。前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T12:44:24+09:00
AWSにdockerを使用したlaravelをデプロイ③
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ②EC2インスタンスにSSHでアクセスする
1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
2:インスタンスに接続コード確認
「SSH クライアント」をクリック
3:EC2インスタンスにSSHでアクセス
ターミナルを起動しchmod 400 test-docker.pem ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.comtest-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。
Gitのインストール
EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか
ubuntu@ip:~$ sudo su root@ip:/home/ubuntu#行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。
1:aptの更新
root@ip:/home/ubuntu# apt-get update2:Gitのインストール
Gitのインストールと初期設定を行います。#gitインストール root@ip:/home/ubuntu# apt-get install git #git初期設定 root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名] root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]Docker,Docker-composeのインストール
ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88 root@ip:/home/ubuntu# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io #docker-composeのインストール root@ip:/home/ubuntu# apt install docker-compose前回の記事
AWSにdockerを使用したlaravelをデプロイ②続きはこちら
**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T12:44:24+09:00
AWSにEC2上にdockerを使用したlaravelをデプロイ③
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ②EC2インスタンスにSSHでアクセスする
1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
2:インスタンスに接続コード確認
「SSH クライアント」をクリック
3:EC2インスタンスにSSHでアクセス
ターミナルを起動しchmod 400 test-docker.pem ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.comtest-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。
Gitのインストール
EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか
ubuntu@ip:~$ sudo su root@ip:/home/ubuntu#行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。
1:aptの更新
root@ip:/home/ubuntu# apt-get update2:Gitのインストール
Gitのインストールと初期設定を行います。#gitインストール root@ip:/home/ubuntu# apt-get install git #git初期設定 root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名] root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]Docker,Docker-composeのインストール
ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88 root@ip:/home/ubuntu# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io #docker-composeのインストール root@ip:/home/ubuntu# apt install docker-compose前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ②続きはこちら
AWSにdockerを使用したlaravelをデプロイ④**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T12:44:24+09:00
AWSにEC2上にdockerを使用したlaravelをデプロイ③(SSH接続〜Docke-composeインストール)
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ②EC2インスタンスにSSHでアクセスする
1:EC2ダッシュボード作成したインスタンスに入りの右上の「接続」をクリック
2:インスタンスに接続コード確認
「SSH クライアント」をクリック
3:EC2インスタンスにSSHでアクセス
ターミナルを起動しchmod 400 test-docker.pem ssh -i "test-docker.pem" ubuntu@ec2-52-198-43-4.ap-northeast1.compute.amazonaws.comtest-docker.pemの部分はダウンロードし格納したディレクトリを指定して下さい。
Gitのインストール
EC2内への変更にはスーパーユーザーで行わないといけないので「sudo」を打つか
ubuntu@ip:~$ sudo su root@ip:/home/ubuntu#行頭にある「$(ドル)」が一般ユーザーを表し、「#(シャープ)」がrootユーザーを表します。
1:aptの更新
root@ip:/home/ubuntu# apt-get update2:Gitのインストール
Gitのインストールと初期設定を行います。#gitインストール root@ip:/home/ubuntu# apt-get install git #git初期設定 root@ip:/home/ubuntu# git config --global user.name [任意のユーザー名] root@ip:/home/ubuntu# git config --global user.email [任意のemailアドレス]Docker,Docker-composeのインストール
ubuntu用の手順をDocker公式ページに従います。
Docker,Docker-composeのインストールを行います。root@ip:/home/ubuntu# apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common root@ip:/home/ubuntu# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - root@ip:/home/ubuntu# apt-key fingerprint 0EBFCD88 root@ip:/home/ubuntu# add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" root@ip:/home/ubuntu# apt-get install docker-ce docker-ce-cli containerd.io #docker-composeのインストール root@ip:/home/ubuntu# apt install docker-compose前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ②続きはこちら
AWSにdockerを使用したlaravelをデプロイ④**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T11:58:23+09:00
AWSにEC2上でdockerを使用したlaravelをデプロイ②
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ①Elastic IP取得
1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
これで作成したインスタンスにElastic IPが紐付けられました。
前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ①続きはこちら
AWSにEC2上にdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T11:58:23+09:00
AWSにEC2上でdockerを使用したlaravelをデプロイ②(Elastic IP取得〜紐付け)
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ①Elastic IP取得
1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
これで作成したインスタンスにElastic IPが紐付けられました。
前回の記事
AWSにEC2上にdockerを使用したlaravelをデプロイ①続きはこちら
AWSにEC2上にdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T11:58:23+09:00
AWSにdockerを使用したlaravelをデプロイ②
概要
・自分が詰まったポイントと同じポイントで詰まった方向けにAWSにlaravel/dockerをデプロイするまでの過程を書いていきます。
前回の記事
AWSにdockerを使用したlaravelをデプロイ①Elastic IP取得
1:Elastic IPを開く
EC2ダッシュボードの左側のメニューの「Elastic IP」を選択。
「Elastic IPの割り当て」をクリック。
4:EC2インスタンスに紐づける
「Elastic IP アドレスの関連付け」をクリック
5:インスタンスを選択
「インスタンス」に先ほど作成したEC2インスタンスを選択する。
「関連付ける」をクリック。
これで作成したインスタンスにElastic IPが紐付けられました。
前回の記事
AWSにdockerを使用したlaravelをデプロイ①続きはこちら
AWSにdockerを使用したlaravelをデプロイ③**間違い等ございましたらご指摘お願い致します**
- 投稿日:2020-10-11T10:45:14+09:00
Laravelで画像をリサイズ&勝手に回転しないようにする(EXIFも削除)
はじめに
Laravelで画像投稿機能を作ったは良いけど、
「投稿される画像が大きかったり小さかったりする..」
「アップロード後に画像が勝手に回転してしまう..」
「画像に埋め込まれた隠し情報が危険って聞いたけど..」
そんな問題を解消していきます。
画像の大きさの問題はCSSで指定すれば表示は小さくできますが、
CSSは表示を変えるだけで保存される画像は大きいままです。
これではデータベース周りに負荷がかかってしまいます。また画像には
EXIF情報
というものが埋め込まれていて、撮影したスマートフォンの情報だったり画像の向き、さらには撮影した場所などが記録されているものもあります。これらを簡単に同時に最適化する方法をシェアしていきます。
やること
以下の手順で行います。
① 現状のEXIF情報をみてみる
② InterventionImageをインストールする(Composerを使用)
③ InterventionImageを使えるようにする(Configの設定をする)
④ Controllerで実際に画像処理を行う実際にやってみる
① まず現状の画像のEXIF情報をみてみる
現在画像処理を行っているControllerにおいてdd()メソッドを実行します。
(ちなみにdd()は「dump and die」の略なんですね)〇〇Controller.phpdd($image->exif()); // $imageが画像データですこれでブラウザにEXIF情報が表示できます。
ずらっと配列で表示されて、撮影した機種など色々な情報が格納されているのがわかると思います。。
② InterventionImageをインストールする
この余計なEXIFの削除とリサイズ処理と回転(画像の向き)の最適化処理を同時に簡単にできるのが
InterventionImage
というものです。
PHPの画像処理ライブラリであるGDとImagickをサポートするパッケージで、
Laravelで画像処理をするならこれ一択、という位置付けのものですね。
GDやImagickを簡単に扱うことができます。公式はこちら
http://image.intervention.io/getting_started/installation#laravel以下のコマンドを実行してインストールします。
$php composer.phar require intervention/image
③ InterventionImageを使えるようにする
Config/app.php
に以下の記述を追加します。
追加するのはproviders
とaliases
の2箇所です。Config/app.php'providers' => [ Intervention\Image\ImageServiceProvider::class, ], ~中略~ 'aliases' => [ 'Image' => Intervention\Image\Facades\Image::class, ],
さらにdriver設定の追加を行います。(以下のコマンドを実行)$php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"
最後に、Configで設定をいじったのでキャッシュをクリアします。(以下のコマンドを実行)$php artisan config:clear
③ Controllerで実際に処理を行う
ファサードを使う宣言をする
まずは画像処理を行うControllerにおいて以下を記述します。
〇〇Controller.phpuse Intervention\Image\Facades\Image; // Imageファサードを使う use Illuminate\Support\Facades\Storage; // Storageファサードを使う画像処理を行う
InterventionImageでは本当に色々なことができるのですが、
ここでは実際によく使うであろう縦横比を維持したリサイズと、
ファイルをjpg形式に変換する例を示します。〇〇Controller.php$resized_image = Image::make($posted_image)->fit(640, 360)->encode('jpg');
$posted_image
が加工前の画像で、make()
でInterventionImageに加工前の画像を読み込んでいます。
fit()
は幅と高さを指定しつつ、縦横比が合わない場合はトリミングしてくれるメソッドです。単純なリサイズなら
resize()
でも良いのですが、画像がゆがんでしまうのでこのfit()
が便利だと思います。※InterventionImageでの網羅的な画像処理はこちらのサイトが参考になります。
https://blog.capilano-fw.com/?p=1574#_resize画像の回転とEXIF情報の処理
最後に本題(?)の画像が勝手に回転する問題とEXIF情報の処理です。
これにはorientate()
を使います。〇〇Controller.php$resized_image->orientate()->save();これで自動回転しつつEXIF情報を削除してくれます。
->save()
がないと処理が反映されないので注意です。ファイル保存する
ファイル保存は
store
メソッドが使えない(GDがサポートしていないというエラーになる)ので
Laravelの機能(ファサード)のStorage::put
を使います。〇〇Controller.phpStorage::put('public/image/' . $image_name, $resized_image);
これで良い感じの大きさになり、画像の向きも正しい向きになり、不要な埋め込み情報も削除された画像が投稿できるようになったはずです!
おつかれさまでした〜。
- 投稿日:2020-10-11T10:23:56+09:00
Laravel ベースレイアウトにDBから取得したデータを表示する
目的
- ベースレイアウトにテーブル内に格納されているデータを表示する方法をまとめる
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする Laravel バージョン 8.6.0 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする 前提情報
- 本記事は
@inject
ディレクティブの使用方法を簡単にまとめるものである。@inject
ディレクティブはサービスやリポジトリインターフェースを呼び出す事のできるディレクティブである。- 本記事は若干抽象的な説明が多くわかりにくいと思うので具体例を別途記事にする予定である
詳細
ベースレイアウトへのディレクティブの記載
下記の記載方法でベースレイアウトにディレクティブを記載する。
@inject(サービスからの戻り値を格納する変数, サービス)例えば変数
$str
にアプリ名ディレクトリ/app/Services/TestService
に記載されているとあるメソッドの戻り値を格納したい場合は下記のように記載する。@inject('str', 'App\Services\TestService)得た値の出力
ディレクティブを記載したベースレイアウトファイル内で下記のように記載する事により値を出力する事ができる。
{{ 戻り値を格納した変数名->サービスファイルに書かれたデータ取得メソッド名()}}例えば変数
$str
に格納されているアプリ名ディレクトリ/app/Services/TestService
に記載されているとあるgetStr()メソッドの戻り値を表示したい場合は下記のように記載する。{{ $str->getStr() }}参考文献
- 投稿日:2020-10-11T05:50:16+09:00
Flutter × Laravel × Stripe で単発決済
はじめに
約半年振りの投稿です。
最近はWeb開発から少し離れFlutterの開発を行なっております。巷で流行っている言語&AndroidとIOSの開発を同一言語でできるというのが大変魅力で学習をはじめました。
KBOYのFlutter大学
https://www.youtube.com/channel/UCReuARgZI-BFjioA8KBpjsw自分はこのチャンネルから学習を始めました。
超丁寧に説明していただけるので、初学者に大変オススメです!経緯
もともと決済処理はWebViewで決済処理を行う予定でした。
しかし、調べているうちにhttps://digiryte.com/blog/posts/online-payments-made-easier-by-digiryte-by-flutter-and-ruby-on-rails
こちらの記事を発見しRailsでもできるならLaravelでもできるんじゃね?
と思ったのが事の発端です。言語違いではありますが、実装例があるのに自分で実装できないのはちょっと悔しいと思い試行錯誤の末実装できました。
Stripeとは
こちらの記事が大変参考になります。
https://qiita.com/t-kuni/items/bfbec1dcc695c0f18282Flutterで画面の作成
画面作成の前にStripeを導入するにあたって必要なパッケージを導入します。
pubspec.yamldependencies: flutter: sdk: flutter ... # この辺は自分の環境にあったものを導入してください。 stripe_payment: ^1.0.6 stripe_sdk: ^3.0.1+1main.dartimport 'package:flutter/material.dart'; import 'package:stripe_payment/stripe_payment.dart'; import 'package:stripe_sdk/stripe_sdk_ui.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey(); final formKey = new GlobalKey<FormState>(); final card = new StripeCard(); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ CardForm(card: card, formKey: formKey), // クレジットカード入力欄を表示します。 FlatButton( child: Text("決済する"), onPressed: () async { if (formKey.currentState.validate()) { formKey.currentState.save(); final CreditCard _creditCard = CreditCard( number: card.number, expMonth: card.expMonth, expYear: card.expYear, ); StripePayment.createTokenWithCard( _creditCard, ).then((token) { // apiに処理を渡します。 final url = 'http://127.0.0.1/api/sample_stripe'; await http.post( url, body: { "stripeToken": stripeToken, } ); } else { print('処理が通りませんでした。'); } }, ), ], ), ), ); } }処理の流れとしては下記のような流れになります。
1.CardFormクラスを作成し、クレジットカード情報を入力
2.「決済する」ボタンをタップ
3.CreditCardクラスを作成し入力した値を渡す。
4.stripeTokenを作成
5.Laravel側にstripeTokenを渡す。作成できない場合は下記のURLを参考に作成してみてください。
https://pub.dev/packages/stripe_sdkLaravel側でAPIの作成
api.phpRoute::post('/sample_stripe', 'SampleStripeController@stripe');SampleStripeController.phpfunction stirpe(Request $request) { // Stripeシークレットキーの取得 Stripe::setApiKey(config('app.stripe_secret_key')); // 顧客の作成 $customer = Customer::create(array( 'email' => text@example.com, 'source' => $request->stripeToken //tokenを受け取る )); $charge = Charge::create(array( 'description' => 'ストライプ決済', 'amount' => 500, 'currency' => 'jpy', 'customer' => $customer->id, )); }Stripe管理画面
画像のように決済処理が完了しました。
Flutter側だけで処理しようとするとどうしてもわからない部分が多かったので重要な処理はLaravel側に投げて解決させました。最初はstripeTokenが取得できずStripeの顧客にデータが登録できませんでしたが、「createTokenWithCard」を利用することで顧客データの登録ができるようになりました!
本記事では実装していませんが、決済が終了した後メールを送信してあげたりするともっといいかもしれませんね!
本システムを作成するにあたって苦戦したところ
Flutter × Laravel × Stripe の記事が存在しなかったことが苦戦しました。
APIに処理を渡すということが理解できていてもstripeTokenが取得できなかったりRailsの記事の内容をLaravelに置き換えて実装してもエラー続きでした。
理解はできていても実装できないという大変歯がゆい思いをしながら開発しました(笑)指摘等がございましたら是非お願いします。
決済処理やAPIを利用できると実装の幅が増えると思うのでぜひ参考にしてみてください!
参考URL
https://medium.com/flutterdevs/stripe-payment-in-flutter-d7f87f9a193c
https://digiryte.com/blog/posts/online-payments-made-easier-by-digiryte-by-flutter-and-ruby-on-rails
https://pub.dev/packages/stripe_sdk
- 投稿日:2020-10-11T04:51:34+09:00
LaravelでReactを使う私的まとめ
Laravel Mix
- フロントエンドのアセットをコンパイル、バンドルしてくれる
- 中身はwebpackでwebpackの設定をわかりやすく掛けるようにラッピングしてある
- sass,babelなどは最初から用意されている
バンドル
バンドルとは、束(ねる)、塊などの意味を持つ英単語で、単体でも提供可能な製品やサービスを、複数組み合わせてセットで販売したり、別の製品やサービスに付属して販売、提供することをこのように呼ぶ。
引用:バンドル 【 bundle 】つまり違うものを組み合わせてくれるってことかな
Laravel Mixの実行
npm run dexnpm run dev を実行すると、
package.jsonに書いてあるスクリプトが実行され、
設定ファイルに記述したコンパイルやバンドルが実行される。npm run production の場合は圧縮されたファイルが出力される。
引用:Laravel Mixとは?webpackをより便利に、簡単に。Laravel以外でも使えるよ。npm run watch関連ファイルを監視する
変更を感知すると自動的に再コンパイル
webpack.mix.js
ファイルSass
saasメソッドはSassをCSSコンパイル
mix.sass('resources/assets/sass/app.scss', 'public/css');ページを作ってみる
resource/js/app.js/** * Next, we will create a fresh React component instance and attach it to * the page. Then, you may begin adding components to this application * or customize the JavaScript scaffolding to fit your unique needs. */ //require('./components/Example'); require('./components/index'); //ここを書き換える次に、すべてのルーティングをindex.balde.phpに集中させる
web.phpRoute::get('/{any}', function(){ return view('index'); })->where('any', '.*');bladeファイルを作成
index.blade.php<!doctype html> <html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="csrf-token" content="{{ csrf_token() }}"> <title>Title</title> </head> <body> <div id="root"> {{-- <example-component></example-component> --}} </div> <script src="{{ asset('/js/app.js') }}"></script> </body> </html>これでreact-router-domによるルーティングに対応できました。
参考:LaravelにReactを導入する時の手順〜ルーティングの設定
参考