QiitaとZennのトレンドをGASでLarkに通知してみた!

マーベリックスでは、今年度から社内ツールをLarkに統合しています。
社内のコミュニケーションツールとして利用しているLarkメッセージは、ボットを利用することでLark内のアプリケーションだけでなく、外部アプリケーションとも連携することが可能です。
今回は、Lark APIとGoogle Apps Script(GAS)を使用して、グループチャットに技術トレンド情報を通知してみたので、その方法をご紹介します!
Larkにカスタムボットを追加する
グループチャットを開き、画面右上にある … アイコンより、設定 > ボット をクリックします。

一覧からカスタムボットを選択し、ボットの詳細画面で 次へ をクリックして追加します。

追加完了後、Webhook URLが生成されるので保存しておきましょう!

Google Apps Script(GAS)を作成する
トレンド情報をLarkのチャットグループに通知するための関数を作成します。
今回はQiitaとZennからそれぞれのトレンド情報を取得して通知します。
(トレンド情報の取得方法については割愛します!)
// トレンド情報を取得してPOSTする
function todayTrend() {
// コンテンツ配列の初期化
const contentArray = [];
// Zennのトレンド情報を取得
const zennTrends = fetchZennTrends();
// Qiitaのトレンド情報を取得
const qiitaTrends = fetchQiitaTrends();
// コンテンツ配列にZennとQiitaのトレンド情報を追加
contentArray.push(
...zennTrends,
[
{
tag: "text",
text: "\n", // ZennとQiitaのトレンド情報の間に改行を追加
},
],
...qiitaTrends
);
// JSONデータの構築
const data = {
msg_type: "post",
content: {
post: {
en_us: {
content: contentArray,
},
},
},
};
// POST処理
post("ここにカスタムボットのWebhook URLを設定する", data);
}
// POST処理
function post(url, data) {
// POSTリクエストのオプションを設定
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify(data),
};
// POSTリクエストを送信
UrlFetchApp.fetch(url, options);
}
次にトリガーの追加処理です。
指定した時間に通知が飛ぶようにトリガーを設定します。
土日に通知が飛ぶと困るので、平日のみ実行するようにしています。
(とりあえず祝日の対応はしてません…!)
// Googleのトリガーを作成する
function setTime(app, hour, minutes) {
const now = new Date();
const dayOfWeek = now.getDay();
// 平日のみ実行
if (dayOfWeek !== 0 && dayOfWeek !== 6) {
now.setHours(hour);
now.setMinutes(minutes);
ScriptApp.newTrigger(app).timeBased().at(now).create();
}
}
トリガー設定用の関数です。
ここに関数を追加することで、他の通知処理も定時実行出来るようになります。
平日の10時に実行されるよう設定しました。
// トリガーを設定
function setTrigger() {
// 実行するファンクションとPOSTしたい時分を設定
setTime("todayTrend", "10", "00");
}
最後にトリガーの削除処理です。
一度実行したトリガーは不要になるため、都度削除します。
// トリガーを削除
function delTrigger(target) {
const triggers = ScriptApp.getProjectTriggers();
for (let i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == target) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
トレンド取得関数の最初で呼び出すようにします。
// トレンド情報を取得してPOSTする
function todayTrend() {
// トリガー削除(無駄なトリガーが増えていくので、実行されたら登録したトリガーを消します)
delTrigger("todayTrend");
これで準備が完了しました。
トリガーに作成した関数「setTrigger」を追加します。

以下のように設定しました。

通知された!
ちゃんと通知されるか心配でしたが、翌日の10時にグループチャットに通知されました!

メンバー間で記事の感想を共有したり、関連する情報をおすすめし合ったりすることで、グループチャットがより活発になったように感じます!
こうして定期的に面白い記事が目に入ることで、新しい知識や視点を得るきっかけが増えるのではないでしょうか。
Larkを導入している場合は、ぜひ活用してみてください!