Laravelの送信メールのテストでメールの件名が取得できない問題の対策

下記のLaravelの送信メールをテストする一般的なコードでは、メールの件名($mail->subject)が空欄になりました。
$mail->hasTo(…)や$mail->hasCc(…)のアサートは正しく動作します。

    public function testSendMail()
    {
        Mail::fake();
        Mail::assertNothingSent();

        // メールの送信コード...

        Mail::assertSent(OrderShipped::class, function (OrderShipped $mail) {
            return $mail->subject == "注文内容の確認";
        });
    }

Mailableのbuild()メソッドが実行されてなかったので、buildメソッドを実行してみました。
そうするとメールの件名($mail->subject)に値が設定され、テストができるようになりました。

    public function testSendMail()
    {
        Mail::fake();
        Mail::assertNothingSent();

        // メールの送信コード...

        Mail::assertSent(OrderShipped::class, function (OrderShipped $mail) {
            $mail->build();
            return $mail->subject == "注文内容の確認";
        });
    }

iOSアプリを作るときにReleaseビルドのときはデバッグログを出力しない

iOSアプリを開発するときには、デバッグ中にログを出力して、アプリの動作を確認したい場合があります。
しかし、アプリをリリースするときには、デバッグログを残しておくと、ユーザーに見られてしまいます。

そこで、以下の方法で、デバッグビルドのときはログを出力し、リリースビルドのときはログを出力しないようにしました。

Objective-Cのとき

アプリ名-Prefix.pchに以下の行を追加する。

#ifndef DEBUG
#   define NSLog(...)
#endif

デバッグモードではNSLogが有効になり、実際のログメッセージがコンソールに出力されます。
リリースモードではDEBUGが定義されていないため、NSLogマクロの定義が無効化され、何も出力されなくなります。

Swiftのとき

#if !DEBUG
func print(
    _ items: Any...,
    separator: String = " ",
    terminator: String = "\n"
) {
}

func debugPrint(
    _ items: Any...,
    separator: String = " ",
    terminator: String = "\n"
) {
}
#endif

リリースモードではprint関数やdebugPrint関数の中身が空になり、何も出力されなくなります。

Laravel8でLaravel Breezeを使用するには

Laravel9からMixの代わりにViteを使用するようになりました。

ドキュメントに書かれている以下のコマンドを実行すると、Viteを使用するバージョンのLaravel Breezeがインストールされます。

composer require laravel/breeze --dev

Laravel8でLaravel Breezeを使用するには、バージョン1.9.4のLaravel Breezeを使用します。

以下のコマンドで、バージョンを指定してLaravel Breezeをインストールします。

composer require laravel/breeze:1.9.4

これで、Laravel8でLaravel Breezeが使用できます。

Linux Mint 21にsnapでdockerをインストールする

snapをインストールする

$ sudo rm /etc/apt/preferences.d/nosnap.pref
$ sudo apt update
$ sudo apt install snapd

dockerをインストールする

$ snap install docker

一般ユーザーでdockerを実行する

Dockerを一般ユーザーで実行すると次のようなエラーになる。

$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied

一般ユーザーをdockerグループに所属させる。

$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker
$ sudo snap disable docker
$ sudo snap enable docker

一般ユーザーで実行できる。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES