Node-REDで作る空メール登録システム
- 2021年9月17日
- by 佐藤 航
- Category: 技術ネタ
SendGridサポートエンジニアの佐藤(@awwa500)です。「空メール登録システム」は、指定のアドレス宛に空メールを送ることでユーザ登録を行える仕組みです。利用者がメールアドレスを入力する必要が無いため、入力ミスの防止にもつながります。本記事ではSendGridとNode-REDを利用して作成した空メール登録システムのサンプルアプリケーションをご紹介します。
Node-REDとは
その前に、今回利用する「Node-RED」について簡単に説明します。Node-REDはさまざまなハードウェアデバイスやAPI、オンラインサービスを接続するローコードプログラミング環境です。IoTの分野でよく利用されていますが、SendGridのようなWebサービスとも相性が良いツールです。
以下の画面はNode-REDのフローエディタです。エディタ上に「ノード」と呼ばれる箱のようなものを配置していき、「ワイヤー」と呼ばれる線でつなぎ合わせることでフローを組み立てていきます。各ノードのプロパティを編集することによりプログラミングを行います。
フローがグラフィカルに表示されるため、直感的に流れを把握することができます。
アプリケーションの概要
今回作成したアプリケーションは、トンネリングツール「ngrok」を経由して外部(Webhookやブラウザ)からのアクセスを受け付けます。Node-REDでは、アクセスしたURLに応じた処理を行いMySQL上の「world」DBにデータを格納します。また、メール送信にはSendGridのWeb APIを利用します。
外部コンポーネントを含めた全体的な構成は以下のようになります。
フローの詳細
フローは3つのパートから構成されます。順を追って説明します。
Inbound Parse Webhook受信〜自動応答メール返信
最初のパートは、Inbound Parse Webhookの受信(利用者からの空メール受信)から自動応答メール返信までです。
- 正常系
- httpInMultipartノードによりInbound Parse Webhookを受信します
- 送信元メールアドレスをDBに保存します
- サインアップURLを本文に含めて、空メールの送信元にメールを返信します
- 異常系
- DBへの保存に失敗したらInbound Parse Webhookサーバにエラーを返します(これによりSendGridがWebhookをリトライします)
サインアップURLアクセス〜登録フォーム表示
次のパートでは、サインアップURLへのアクセスをきっかけにして簡単なユーザ登録フォームを表示します。
- 正常系
- サインアップURLへのアクセスを受け付けます
- DBに該当するレコードが登録されていることを確認して、ユーザ登録フォームを返します
- 異常系
- DBから該当するレコードが取得できない場合、サインアップ不可のエラーメッセージを返します
登録フォームサブミット〜ユーザ情報登録
最後のパートでは、ユーザ登録フォームのサブミットをきっかけにしてユーザ登録処理を完了します。
- 正常系
- ユーザ登録フォームのサブミットを受信します
- DBを更新してユーザ登録処理を完了します
- ユーザ登録完了メッセージを返します
- 異常系
- DBの更新に失敗した場合、ロールバックします
- ユーザ登録失敗メッセージを返します
環境構築と動作確認
サンプルアプリケーションはGitHubリポジトリで公開しています。環境構築と動作確認の手順はREADMEをご確認ください。
さいごに
サンプルアプリケーションを動かすことができたら、各ノードのプロパティでより細かな内部処理を見ることができます。一つ一つの設定はとてもシンプルなので、理解しやすいと思います。実行時の挙動を確認する場合は、「debug」ノードを追加してログを出力してみてください。
Node-REDは手軽にプログラミングできるプロトタイピングに向いたツールです。フローライブラリではさまざまな拡張ノードが公開されているので、標準機能で対応していない場合は、検索してみることをおすすめします。必要な拡張ノードが見つからない場合は、自分でノードを開発して公開することもできます。日本語ドキュメントも充実しているので興味がある方は是非お試しください。