Virtual Boxのハードウェア構成の見方

ここでは、amazon linux2のハードウェア構成を確認します。

### Oracle Virtual box マネージャを起動
OS:Linux 2.6 / 3.x / 4.x 64-bit
システム メインメモリー:1024MB
アクセラレーション: VT-x/AMD-V、ネステッドページング 、PAE/NX, KVM 準仮想化
ディスプレイ: ビデオメモリー16MB、グラフィックコントローラ VBoxVGA
ストレージ: box-disk001.vmdk(25.00GB)
ネットワーク アダプタ: Intel PRO/1000MT Desktop(NAT)

### CPU
ヘッダの設定から、システム、ディスプレイ、ストレージ、オーディオ、ネットワーク、ポート、共有フォルダなど設定可能

1CPU, メインメモリ1GBだと、t2.microと同じくらいのスペック

Laravel 6.x command(スケジューラ)の使い方

### make:command
$ php artisan make:command TestCommand

app/Console/Commands/TestCommand.php

protected $signature = 'command:testcommand';
public function handle()
    {
        //
        echo "test command execute!";
    }

app/Console/Kernel.php

 protected $commands = [
        //
        \App\Console\Commands\TestCommand::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')
        //          ->hourly();
        $schedule->command('command:testcommand')->daily();
    }

### command実行
$ php artisan list;
$ php artisan command:testcommand;

$ crontab -e

実用性から考えると、バッチ処理はcronで直書きの方が楽そうですが、Githubなどで全てソースコードで管理したい場合は使えるかもしれません。どちらが良いかは好みやコンセンサスでしょうか。

Laravel Logの設定

### .env
Log channelはdefaultでstackに設定されている

LOG_CHANNEL=stack

### config/logging.php
stackで、channelsは’single’に設定されています。

'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],
        // 省略
    ],

### ログの出力先
storate/logs/laravel.log

###コマンドラインで出力
less +F storage/logs/laravel.log

### controllerからログ出力
$ php artisan make:controller –resource LogController

Route::get('log', 'LogController@index');
public function index()
    {
        //
        \Log::info('ログ出力test');
        return 'test';
    }

heplerを使う場合

logger()->info('something has happened');

laravel.log

[2020-02-24 14:13:10] local.INFO: ログ出力test 
[2020-02-24 14:22:10] local.INFO: something has happened  

### ログレベル
emergency, alert, critical, error, warning, notice, info, debug

ログの設定は、運用体制と併せて柔軟に検討する必要がある。

Laravel 6.x softdeleteしたユーザ情報を取得

softdeleteしたユーザ情報を取得したい場合は、withTrashed();をコントローラやモデルで付与する。

### controller

User::withTrashed()->get();

### belongsToの場合

public function user(){
        return $this->belongsTo('App\User')->withTrashed();
    }

このようにすれば、わざわざViewで条件処理を加えなくて済む。

{{ $hoge->user ? $hoge->user->name : 'ユーザ削除済' }}

### User::query()の場合
-> 後ろにつける

$query = User::query()->withTrashed();

User::withTrashed()->query();とするとエラーになるので注意が必要

Carbonで今日の日付/現在時刻を表示

### 今日の日付のみを日本語で表示

use Carbon\Carbon;
setlocale(LC_ALL, 'ja_JP.UTF-8');
$this->date = Carbon::today()->formatLocalized("%Y年%m月%d日(%a)");

### 今日の日時を日本語で表示

$this->date = Carbon::now()->formatLocalized("%Y年%m月%d日(%a) %H時%M分");

日付の場合は、::today()ではなく、::now()に変更する。today()だと、日付までのunix timeしか持たないので、H時M分は00時00分になる。
こんな凡ミスに気づか付きに悶絶してしまいました。