【Ruby+Rails】ユーザ登録と一緒にMailchimpのメールリストに登録したいとき

# 背景

サービス開発にて、メルマガ配信をMailchimpで管理することとなった。

その際、ユーザ登録時に、Mailchimpの提供するAPIをたたくことで、

Mailchimp側のメーリングリストに登録するよう処理を実装した。

Mailchimp APIについては参考になる日本語文献も少ないので、

この記事がお役に立てるのであれば幸いです。


# アプリケーション構成

プログラミング言語：Ruby

フレームワーク：Rails

ごく一般的なRuby+Railsの環境でございます。


# Mailchimp APIのセッティング

## Gemのインストール
Gemfileに以下を記載

```
gem "mailchimp-api", require: "mailchimp"
```

## APIキーの取得

Mailchimp APIを使うためにAPIキーを用意しましょう。

まずはMailchimpのご自身のアイコンをクリック。

メニューが出てきますので、「Account」をクリックします。

<img width="367" alt="スクリーンショット 2020-07-19 0.26.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/82f02cb0-9b43-70c1-5dd5-33efdd6e89bf.png">

次に出てくる画面の「Extras」をクリック。

「API keys」を押下します。

<img width="679" alt="スクリーンショット 2020-07-19 0.27.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/9b9225c9-55ad-650d-ae28-862b479c432d.png">

そのあとに出てくる画面の「Create A Key」を押下。

<img width="1123" alt="スクリーンショット 2020-07-19 0.35.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/797a184f-7e46-610b-04ed-b770b295db80.png">

出てきた「API key」を取っておきます。

## Audiens IDの取得

Mailchimpにはユーザのメール情報を登録するリストの概念があります。

これを「Audience」といいます。

そのため、どのリストに登録するか？の指定が必要です。

そのために、リストのID、すなわち「Audiens ID」を取得します。

ここからもカチカチとMailchimpのコンソール操作です。

　

まずはヘッダーの「Audience」を押下。そのあと「Audience dashboard」を押下。

<img width="801" alt="スクリーンショット 2020-07-19 0.45.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/f7a47c50-b133-269a-c489-d70d82b0598a.png">

次に「Manage Audience」→「Settings」とクリック。

<img width="257" alt="スクリーンショット 2020-07-19 0.45.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/54563458-4f9e-3112-1a6d-2003c79e6538.png">

「Settings」→「Audience name and defaults」とクリック。

<img width="990" alt="スクリーンショット 2020-07-19 0.45.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/41ff333a-b57f-04d9-5e00-f53db46339a0.png">

やっとこさでました。Audience IDです。こちらを控えておきます。

<img width="1107" alt="スクリーンショット 2020-07-19 0.44.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/43ce8884-9811-9c97-3429-8aa6d4fd1ef3.png">

## 環境変数の設定

取得したAPIキーとAudience IDを.envに投入です。

```ruby:.env
# Mailchimp
MAILCHIMP_API_KEY= # APIキー
MAILCHIMP_LIST_ID= # Audience ID
```

##　実装

Mailchimp向けのモデルを作成します。

まずはclassを作成します。

この記事を一部参照しております(https://qiita.com/kon_yu/items/372bba35e60744633c94)。

```ruby:qiita.rb
class MailMagazine
  # Mailchimp API初期化
  def initialize
    @mailchimp = Mailchimp::API.new(ENV['MAILCHIMP_API_KEY'])
  end

  # リストに追加
  # 第三引数のhash値はアカウントのマージタグを参考(lists/settings/merge-tags?id=XXX)
  def add_member(email, first_name, last_name)
    @mailchimp.lists.subscribe(
      ENV['MAILCHIMP_LIST_ID'],
      {email: email},
      {FNAME: first_name, LNAME: last_name},
      "html",
      false
    )
  end
end
```

`add_member`なるメソッドを作って登録を行います。

第一引数はメールアドレス。

第二引数は名前。

第三引数は苗字。

です。

　

`add_member`内の`lists. subscribe`がAPIのメソッドでして、

Mailchimpにメールアドレスを登録してくれます。

第一引数は`Audience ID`。

第二引数は登録したいメールアドレスをHash値で。

第三引数はMailchimpで設定できる補助情報です。氏名や誕生日など登録できます。

内容については、Mailchimpコンソールの

「Audience」→「Settings」→「Audience fields and * |MERGE| * tags」

をご覧ください。

<img width="1272" alt="スクリーンショット 2020-07-19 10.14.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254597/81a55cb8-a84c-77a2-11f7-f655806e45b0.png">

こんな感じでメールアドレス以外の情報を確認・登録できます。

メールアドレス同様、MergetagをキーにしたHash値を入力します。


# Mailchimpにメールアドレスを登録

ユーザ登録処理に、こんな感じで組み込む。

```
mailchimp = MailMagazine.new
mailchimp.add_member(@user.email, @user.first_name, @user.last_name)
```

意外と簡単です^ ^

よきMailchimpライフを〜