さて、いざブログを書こうとしたのですが、コロナ渦でプライベートは質素でシンプルな暮らしをしていて特段書くほどのこともない事に今気づきました。
そういえば、昨年母親が老人ホームに入って月に一度、実家の四国に戻ってます。
老人ホームは種類がいろいろあり、老人ホームについて書くか?とも思いましたが
業務とあまりにも関係ないのでこの話はやっぱやめます。
※老人ホームについて一つだけ言うならば、
「値段が高ければ良い」ってことはなかったです。
安い老人ホームのほうが良い人が居てよかったです。
ということで、「仕事の内容」を書きます。
仕事でLaravel8を使ってみました。
phpフレームワークは命名規則が
嫌で使うのにずっと抵抗があったのですが
Laravelは使ってみたらすごい快適でよかったです。
■良いと思った点
・HttpControllerやその中の関数などの命名規則が自由
(命名規則も存在しており、命名規則通りに作ればさらに強力な機能があるらしいことはわかったのですが、勉強不足でまだよく理解できてません)
・ファサード(Facades)が便利(最初3ファイルを用意するのがちょっと面倒ですが作ってしまうと非常に便利)
・cronでバックエンドで処理させたいものをapp/Console/Kernel.phpに登録して変更履歴管理できる。
・ログを取るのも導入の仕組みを理解すれば非常に簡単にできる。導入の仕組みも非常に簡単に理解できた。
・laravel/breezeなどを追加でインストールすれば、ユーザアカウント作成、ログイン処理なども自動で作られる。
・DBテーブル操作用のモデルで使用するテーブル名やPKのカラム名を変更可能(既存システムのリプレース時に助かる)
■使ってみていまいちと思った点
・フレームワーク全般に当てはまりますが、routeをいちいち書かなきゃいけないのがめんどくさい。
動的にroute追加を自動化できないかやってみましたが無理でした。
・メールのテンプレートをコマンドで views/vendor に取り出せますが、
改造するのであればvendorから移動させたほうが良いというアドバイスが欲しかった
php artisan vendor:publish –tag=laravel-notifications
php artisan vendor:publish –tag=laravel-mail
・システムエラーのテンプレートは最初から組み込んでおいて欲しい(コマンドで簡単に取り出せますが)
php artisan vendor:publish –tag=laravel-errors
・入力エラーメッセージのテンプレートも同様
php -r “copy(‘https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php’, ‘install-ja-lang.php’);”
php -f install-ja-lang.php
・phpの文法の ?? を勧めてくるし、実際ほとんどの場面で便利ですが、nullをいちいち設定しないと ?? が使いにくい(”,0,falseでも同じ動きしてくれたらありがたい)
(これはLaravelの問題ではなく、自分のphpの作り方の問題ではありますが・・・)
・DBマイグレーションって言うのもいまいち便利でなかった。
デフォルトの動作がいまいち。サイズがデカすぎたり、インデックスなどがで作られない(PKのみは作られている)。
作るための文法を調べるくらいなら、SQLでやったほうが手っ取り早い。
マイグレーションでテーブルを作れば、変更履歴をgitに残せるという思想はすごくいいのですが、
テーブルを作るマイグレーションはSQLのファイルを自動生成するみたいになってくれたほうがありがたいと思いました。
・LaravelのEloquentでupdateなどでwhere()を使うときに条件でandを指定する際、
where()を2回書くってのがどうも変と思いました。
無理して使わず
Fruit::where(‘name’, ‘=’, ‘aaa’)
->where(‘type’, ‘=’, ‘bbb’)
->update([
‘color’ => ‘yellow’,
]);
whereRawを使ったほうがいいと思いました。
Fruit::whereRaw(‘name=? AND type=?’, [‘aaa’,’bbb’])
->update([
‘color’ => ‘yellow’,
]);
■ファサード(Facades)が便利
Laravelの初心者向け勉強サイトでは、特に強く勧めてくれないのですが
ファサードが便利なので、phpの経験がある人ならば、
まずファサードの作り方を知ってから
Laravelの勉強を開始したほうが良いと思いました。
Laravelの命名規則などがよくわからない段階で
コントローラーやテンプレート、バックエンドプロセスなどで
共通に使える処理を作成したい場合、
ファサードを作成して、そこに書くのが一番良いのではないかと思います。
ファサードはグローバル関数置き場のようなものですが、
クラスとして作成し、インスタンスも自動で作成されて
なおかつ1つのオブジェクトしか作られないようで
2回目の呼び出しからは
メンバ変数が静的変数のように使えます。
_SMPL という名前のサンプルファサードの追加例です。
下記の3つのファイルを作成します。
1. app/Facades/_SMPL.php
2. app/Providers/_SMPLServiceProvider.php
3. app/Services/_SMPLService.php
1.app/Facades/_SMPL.php
<?php
/**
* サンプル用 _SMPL ファサードファイル
*
* app/Facades/_SMPL.php
*
*/
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class _SMPL extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return ‘_SMPL’; // ファサードの名前を定義 ファイル名、クラス名も同じ
}
}
// ————————
2.app/Providers/_SMPLServiceProvider.php
<?php
/**
* サンプル用 _SMPL ファサード
*
* app/Providers/_SMPLServiceProvider.php
*
*/
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class _SMPLServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind(‘_SMPL’, ‘App\Services\_SMPLService’);
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
} // class
// ————————
3.app/Services/_SMPLService.php
<?php
/**
* _SMPL 共通処理ファサード
*
* app/Services/_SMPLService.php
*
* ここに実際にやりたい処理を追加していく
*
*/
namespace App\Services;
//use Illuminate\Support\Facades\DB;
//use Illuminate\Support\Facades\Log;
//use Illuminate\Support\Facades\Mail;
/**
* サンプル用ファサードで実際に処理を書くクラス
*/
class _SMPLService
{
public $seiteki_menba = ‘1’; // このメンバ変数が静的に使えます
/**
* test
*/
public function test()
{
return “test”;
}
/**
* set
*/
public function set_seiteki_menba($upate_seiteki_menba)
{
$this->seiteki_menba = $upate_seiteki_menba; // このようにセットしてその後の処理に反映できます
}
/**
* echo
*/
public function echo_seiteki_menba($upate_seiteki_menba)
{
echo $this->seiteki_menba;
}
} // class
// ————————
4.config/app.php にファサード登録
‘providers’ => [
/*
* Laravel Framework Service Providers…
*/
… 省略 …
App\Providers\RouteServiceProvider::class,
App\Providers\_SMPLServiceProvider::class, // 追加する
],
… 省略 …
‘aliases’ => [
… 省略 …
‘_SMPL’ => App\Facades\_SMPL::class, // aliase追加
],
3ファイル追加と
config/app.phpに記述を追記すれば
class _SMPLServiceに追加した関数が
どこからでも呼び出せます。
resources/views/
app/Http/Controllers
app/Console/Commands
など
// 呼び出し例
\_SMPL::test();
\_SMPL::set_seiteki_menba(‘change test’);
\_SMPL::echo_seiteki_menba();
以上、ファサードの作り方をぜひ把握してからLaravelをやったほうが良いと思ったので
ファサードの作り方を書きました。
既存システムをLaravelに置き換える開発に自信のある方、お待ちしております。
自信ない方も一緒に学びながらやっていきましょう。
写真は今年のお正月に東京に戻る時に撮った富士山です。
写真が特に何もなく全然関係なくてすみません・・・