Laravelでのメール送信：Rails Action Mailerとの違い

### はじめに
LaravelとRailsは、それぞれPHPとRubyを代表するWebフレームワークであり、どちらもメール送信の仕組みを提供しています。しかし、両者にはいくつかの設計思想や実装方法の違いがあります。本記事では、Laravelのメール送信方法を解説しながら、RailsのAction Mailerとの違いにも触れていきます。

### 前提条件

Laravelのバージョンは10以上を想定。

Railsのバージョンは7以上を想定。

メールサーバーとしてSMTPを使用。


### Laravelでのメール送信

#### 1. 環境設定

Laravelでは、`.env`ファイルでメールサーバーの設定を行います。

```
MAIL_MAILER=smtp
MAIL_HOST=smtp.example.com
MAIL_PORT=587
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your_email@example.com
MAIL_FROM_NAME="Example Name"
```

これらの設定は、`config/mail.php`にマッピングされ、アプリケーション全体で使用されます。

#### 2. Mailableクラスの作成

メール送信ロジックは、`php artisan make:mail`コマンドでMailableクラスとして作成します。

```
php artisan make:mail SampleMail
```

以下のようなクラスが生成されます。

```php
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class SampleMail extends Mailable
{
    use Queueable, SerializesModels;

    public function __construct()
    {
        // 必要なデータを渡す
    }

    public function build()
    {
        return $this->view('emails.sample')
                    ->subject('サンプルメールの件名');
    }
}
```

#### 3. メールテンプレートの作成

ビューを`resources/views/emails/sample.blade.php`に作成します。

```php
<!DOCTYPE html>
<html>
<head>
    <title>サンプルメール</title>
</head>
<body>
    <h1>こんにちは！</h1>
    <p>これはサンプルメールです。</p>
</body>
</html>
```

#### 4. メール送信

コントローラーやその他の場所でMailableクラスを使用してメールを送信します。

```php
use App\Mail\SampleMail;
use Illuminate\Support\Facades\Mail;

Mail::to('recipient@example.com')->send(new SampleMail());
```

#### 特徴

直感的なAPI：Mail::to()->send()のように簡単に利用可能。

テンプレートエンジン：Bladeを使用して柔軟にメールのレイアウトを設計可能。

### Railsでのメール送信

#### 1. 環境設定

Railsでは、`config/environments/development.rb`や`production.rb`で設定します。

```ruby
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: "smtp.example.com",
  port: 587,
  user_name: "your_username",
  password: "your_password",
  authentication: :plain,
  enable_starttls_auto: true
}
```

#### 2. メールクラスの作成

`rails generate mailer`コマンドでメールクラスを作成します。
```
rails generate mailer SampleMailer
```
以下のようなクラスが生成されます。

```rb
class SampleMailer < ApplicationMailer
  def sample_email
    @greeting = "こんにちは"
    mail(to: "recipient@example.com", subject: "サンプルメールの件名")
  end
end
```

#### 3. メールテンプレートの作成

ビューを`app/views/sample_mailer/sample_email.html.erb`に作成します。

```erb
<!DOCTYPE html>
<html>
<head>
    <title>サンプルメール</title>
</head>
<body>
    <h1><%= @greeting %></h1>
    <p>これはサンプルメールです。</p>
</body>
</html>
```

#### 4. メール送信

コントローラーやジョブから以下のように送信します。

```
SampleMailer.sample_email.deliver_now
```

#### 特徴

Active Recordとの統合：Railsならではのシームレスなデータ操作。

設定の柔軟性：環境ごとに簡単にメール設定を切り替え可能。

### LaravelとRailsの比較

|項目|Laravel|Rails
|:--|-------|-----
|メールクラスの作成|artisanコマンドでMailable生成|generatorコマンドでMailer生成
|テンプレートエンジン|Blade|ERB
|メール送信方法|Facade（Mailクラス）を利用|メールクラスのインスタンスから送信
|環境設定の場所|`.env` + `config/mail.php`|`config/environments/*.rb`

### まとめ

LaravelとRailsのメール送信機能には多くの類似点があり、どちらも強力で柔軟なフレームワークです。LaravelはFacadeによる直感的なAPIを提供し、RailsはActive Recordとの統合が強みとなっています。

### 参考ドキュメント

[Laravel Mail](https://laravel.com/docs/11.x/mail)

[Rails Action Mailer](https://railsguides.jp/action_mailer_basics.html)