paint-brush
NodeJs でイベント スケジューラを構築する方法@arindam1729
新しい歴史

NodeJs でイベント スケジューラを構築する方法

Arindam Majumder 12m2024/08/18
Read on Terminal Reader

長すぎる; 読むには

この記事では、イベントを作成し、Google Meet リンクを含むメール招待状を自動的に送信できる Node.js アプリケーションの作成方法を説明します。イベント スケジューラの作成には Express フレームワークを使用します。まず、node.js 環境をセットアップし、Express サーバーをセットアップする必要があります。
featured image - NodeJs でイベント スケジューラを構築する方法
Arindam Majumder  HackerNoon profile picture

導入

COVID-19以来、私のカレンダーはスタンドアップミーティング、チームミーティング、クライアントとの電話会議でいっぱいです。


しかし、イベントのスケジュールを立てたり、ゲストを招待したりするのは退屈な作業です。ある金曜日、これに時間をかけすぎた後、私は思いました。

なぜ私はこれにこれほど多くの時間を費やしているのでしょうか?

本気でイライラするGIF

そこで、作業を簡素化するためにイベント スケジューラを作成するというアイデアが浮かびました。


この記事では、イベントを作成し、Google Meet リンクを含むメール招待状を自動的に送信できる Nodejs アプリケーションを作成する方法を説明します。


興奮してる?私もだよ。


では、これ以上遅れずに!


さあ始めましょう!

プロジェクトのセットアップ:

1. Node.js プロジェクトを作成する:

プロジェクトを開始するには、Node.js 環境をセットアップする必要があります。それでは、Node プロジェクトを作成しましょう。ターミナルで次のコマンドを実行します。

 npm init -y


これにより、新しい Node.js プロジェクトが初期化されます。

2. 依存関係をインストールします。

ここで、プロジェクトに必要な依存関係をインストールします。

 npm install express googleapis dotenv


これにより、次のパッケージがインストールされます。

  • express: Node.js 用の人気の Web フレームワーク


  • dotenv: .envファイルから環境変数を読み込みます。


  • googleapis: さまざまなGoogle APIへのアクセスを提供します

3.環境変数を設定する:

次に、API 認証情報などの機密情報を安全に保存するための.envフォルダーを作成します。

 //.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY

4. Expressサーバーを作成する:

ここで、ルート ディレクトリにindex.jsファイルを作成し、基本的な Express サーバーをセットアップします。次のコードを参照してください。

 const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });

ここでは、「dotenv」パッケージを使用して、 .envファイルからポート番号にアクセスしています。


プロジェクトの先頭で、 dotenv.config()を使用して環境変数を読み込み、ファイル全体でアクセスできるようにしています。

Google コンソールの設定

まず、 Google Cloud Consoleに移動します。


すると、このダッシュボードが表示されます。(以前に 1 つのプロジェクトを作成したので、これが表示されます。別のものが表示される可能性があります)。

Google Cloud コンソール

ここで、「新しいプロジェクト」ボタンをクリックして、新しいプロジェクトを開始します。

新しいプロジェクトページ


次に、次のような画面が表示されます。ここで、プロジェクトの名前と組織を追加します。このプロジェクトでは、「Mail-integration-Demo」のままにします。次に、作成ボタンをクリックして続行します。


新しいプロジェクトの詳細

次に、サイドナビゲーションバーに「API とサービス」が表示されます。このセクションには、API とサービスを有効にするサブメニューがあります。これをクリックして続行します。

APIとサービス

次に、このプロジェクトで使用する API、つまり Google カレンダー API を有効にします。

Google カレンダー API

その後、OAuth 同意画面に進みます。ここで、ユーザー タイプとして外部を選択します。次に、[作成] ボタンを押して続行します。

OAuth 同意画面


次に、アプリ登録ページに移動します。ここで、アプリケーションに関する詳細情報を追加します。まず、アプリの名前とユーザー サポート用のメール アドレスを追加します。


このプロジェクトでは、「Arindam のメール統合」という名前を付け、サポート用に自分のメール アドレスを使用します。

アプリ情報ページ

次に、アプリケーションの範囲を定義する必要があります。

スコープページ

スコープでは、このプロジェクトに必要なuserinfo.emailuserinfo.profileなどの権限を追加します。

選択されたスコープ

その後、アプリケーションにテストユーザーを 1 人追加します。

テストユーザーページ

これで完了です。アプリケーションがプラットフォームに登録されました。


ここで、OAuth クライアント ID シークレットを作成します。そのためには、「資格情報の作成」部分に進みます。

Google コンソール ダッシュボード

ここで、アプリケーションの種類と名前を追加します。このプロジェクトでは、Web アプリケーションであり、名前は Arindam's Mail Demo です。

OAuth クライアント ID

また、リダイレクト URL を 1 つ追加しました。このプロジェクトでは、 http://localhost:8000/auth/redirectになります。

リダイレクトURL

次に、OAuth 認証情報を取得します。

OAuth クライアントが作成されました

次に、API キーを作成します。

API キー生成ページ

これをすべて実行したら、先ほど生成した API キーと OAuth 認証情報を使用して.envファイルを更新します。


これで、このプロジェクト用のGoogle Cloudコンソールの設定が完了しました。次のセクションに進みましょう。

OAuth 2 認証:

これまで、基本的なプロジェクト設定は完了しました。次に、OAuth2 認証をプロジェクトに統合します。これにより、アプリケーションは Google サービスと安全にやり取りできるようになります。そのためには、まず、必要なパッケージをindex.jsファイルにインポートします。

 const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');


次に、Google カレンダー API に必要なアクセスの範囲を定義します。

 const scopes = ['https://www.googleapis.com/auth/calendar'];


次に、 .envファイルに保存した資格情報を使用して OAuth 2 クライアントを構成します。

 // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );


OAuth 2 構成の後、ユーザーを認証するためのルートを作成します。

 app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );

ユーザーがこのルートに進むと、Google の認証ページにリダイレクトされ、アプリケーションに対する特定の権限が求められます。


認証が成功すると、Google はユーザーをリダイレクト URL ( /auth/redirect ) にリダイレクトします。

 app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );


ここでは、クエリから更新トークンを取得し、 oauth2Clientに資格情報として保存しています。これらの資格情報は、Google Calendar API へのリクエストを行う際に役立ちます。


以下はindex.jsの完全なコードです。

 //index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );

Google カレンダーでイベントをスケジュールする

ここからが最も重要な部分です。このセクションでは、Google カレンダーでイベントをスケジュールします。


まず、Google カレンダー API クライアントを初期化します。

 const calendar = google.calendar({ version: 'v3', auth: oauth2Client });


次に、イベント オブジェクトを作成し、概要、場所、開始時刻、終了時刻など、イベントの詳細をすべて追加します。

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };

その後、イベントを作成するルート ( /create-event ) を作成します。


ここでは、 calendar.events.insert()メソッドを使用して、ユーザーのカレンダーにイベントを挿入しています。

 app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );

これにより、Google カレンダーでイベントを動的にスケジュールできるようになります。

Google Meet リンクの追加:

これまで、Google カレンダーで簡単なイベントを作成する方法について説明してきました。このセクションでは、そのイベントに Google Meet リンクを追加する方法について説明します。


そのために、前のセクションで作成したイベント オブジェクトを更新します。Google Meet リンクの作成リクエストを指定するために、 conferenceDataプロパティを追加します。

 conferenceData: { createRequest: { requestId: uuid(), } },


また、ゲストをイベントに招待するためのattendeesプロパティも追加します。以下に簡単な例を示します。

 attendees: [ {email: '[email protected]'}, ]


これで、Event オブジェクトは次のようになります。

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };


次に、イベント挿入手順で、 conferenceDataVersionパラメータを追加します。

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });


これにより、Google Meet リンクを含むイベントが作成されます。次のように、応答としてリンクを共有することもできます。

 res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });

参加者へのリマインダーの送信:

これでプロジェクトはほぼ完了です。あとは最後の仕上げを残すのみです。今のところ、私たちのプロジェクトは招待されたゲストのカレンダーにイベントを直接追加します。


ただし、これらのイベントについて通知するには、メールを 1 つ送信する必要があります。そのためには、イベント作成部分にパラメータsendUpdates: 'all', 1 つ追加する必要があります。これにより、アプリケーションは招待されたゲストに自動的にメールを送信します。

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });

この追加により、プロジェクトではイベントの作成と電子メール通知の両方をシームレスに処理できるようになりました。

アプリケーションのテスト:

プロジェクトのコーディング部分は完了しました。それでは、動作するかどうか確認してみましょう。


そのためにプロジェクトを始めます!

 npm run start


これで、ポート 8000 でサーバーを起動できました。次に、ユーザーを認証するためにhttp://localhost:8000/auth/ルートに移動します。次のようにリダイレクトされます。

サインインページ

アプリケーションに対して何らかの許可を求められます。

許可ページ

codeクエリ パラメータを使用して/auth/redirectルートにリダイレクトします。

/auth/redirect ルート

ユーザーの認証に成功したら、 http://localhost:8000/create-eventルートに移動してイベントをスケジュールします。

http://localhost:8000/create-event ルート

素晴らしい!これは、Google Meet リンクを使用してイベントが作成されたことを意味します。


イベント作成プロセスが正しく機能していることを確認するには、Googleカレンダーを確認しましょう。

Googleカレンダー

すごいですね!イベントが作成されました。つまり、イベント作成ルートは完璧に機能しています!また、招待メールも届きました。

イベント招待メール。

素晴らしい!アプリケーションは完璧に動作しています!


これで、Google カレンダーを Node.js アプリに統合できました。次の記事では、Google カレンダーのさらなる使用例について説明します。


それまで、お楽しみに!

結論

このブログ投稿が役に立った場合は、役に立つと思われる他の人と共有することを検討してください。また、Javascript、React、その他の Web 開発トピックに関するその他のコンテンツについては、私をフォローしてください。


有料コラボレーションについては、 [email protected]までメールでお問い合わせください。


TwitterLinkedInYouTubeGitHubで私とつながりましょう。


読んでくれてありがとう:)

ありがとう