1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Part3🤘🏻コピペOK🤘🏻GASを使ってSlackに当番通知する生産性向上をしれっと紹介します🤪

Last updated at Posted at 2024-12-21

この記事は ex-crowdworks Advent Calendar 2024の22日目の記事です。

はじめに

今年、株式会社クラウドワークスを退職した@nisyuuです。新幹線に乗ると崎陽軒のシュウマイ弁当をよく食べます。
エンジニアとしてクラウドワークステック(旧クラウドテック)というフリーランスと企業をマッチングするエージェントサービスを開発していました。

ex-crowdworks Advent Calendar 2024でPart1とPart2に分けてGASを使った生産性向上を紹介してきました。

今回も、GASとSlackを使った生産性改善について紹介していきます。

Part1では当番通知の作り方について解説しました。決まったタイミングに通知するような仕組みでしたが、中には担当者が必ずしも実施しない可能性のある作業もあると思います。例えば、リリースを当番制にしている場合は、リリース物がないとスキップにしたいということもあるでしょう。

そこで本記事では、作業の実施状況に応じて当番を制御する機能の作り方を紹介します。
説明は、リリース当番通知を前提に進めていきます。

仕組み

GASとSlackの連携は、Slack ワークフロービルダーを使います。

GASでスプレッドシートからユーザー情報を取得し、ファシリテーターをSlackへ通知させます。
通知をする際にボタンを設置することができるため、ボタンが押されたら次の担当者へ通知されるようにします。ボタンが押されなければ、再度同じ担当者へ通知されるようにします。

GASの実装

ユーザーをスプレッドシートから取得する実装や通知の実装は、Part1で紹介しているものが再利用できるため参照してください。

再利用する関数の呼び出しは、このようになります。

function sendSlackMessageToReleasePersonInCharge() {
  const spreadsheetId = 'xxxxxxxxxxxxxxxxxxx';
  const sheetName = '定期リリース';
  const sheet = getSheet(spreadsheetId, sheetName);
  const data = sheet.getDataRange().getValues();
  const personInChargeInfo = getPersonInChargeInfo(data);
  const webhookUrl = 'https://hooks.slack.com/triggers/xxxxx/xxxxxxxxxxxxxx';
  const payload = {
    currentSlackUserId: personInChargeInfo.current.slackUserId,
    nextSlackUserId: personInChargeInfo.next.slackUserId
  };

  sendSlackMessage(webhookUrl, payload);
}

次に、担当者を切り替えるための処理を用意します。

実施した担当者をチェックするのに必要なシートを作成してください。

current_slack_user_id
UAEUET2N4

current_slack_user_idカラムには、SlackのユーザーIDが入ります。IDはSlackワークフローから送信されたものが入ります。ワークフローの設定については以降で説明します。

担当者切り替えのGAS実装はこちらです。

function updateReleasePersonInCharge(e) {
  const activeSheet = e.source.getActiveSheet();
  
  if (activeSheet.getSheetName() !== '定期リリース実施済み者') return;

  const spreadsheetId = 'xxxxxxxxxxxxxxxxxxxxxx';
  const sheetName = '定期リリース';
  const sheet = getSheet(spreadsheetId, sheetName);
  const data = sheet.getDataRange().getValues();
  const personInChargeInfo = getPersonInChargeInfo(data);
  updatePersonInCharge(sheet, personInChargeInfo);
}

トリガーはスプレッドシートの値が変更されたタイミングで実行するようにしてください。
変更時に実行することで、Slackワークフローから送信されたユーザーIDがスプレッドシートへ入力されたときに自動で次の担当者が通知されるようになります。

ワークフローの設定

Slackの自動化から新しいワークフローを作成します。ウェブフックの設定からURLを発行してください。
設定時にリクエスト元から受け取るキーは、前回担当者と今回担当者のSlackユーザーIDを指定します。

前回担当者のユーザーIDは、担当者を切り替える処理のために用意したシートを更新するために必要です。
シートに値を入力する際、更新場所の指定を値指定で行う必要があるため前回担当者のIDを送信します。
今回担当者のユーザーIDは、作業を実施してもらいたい担当者を通知するために使用します。

メッセージ通知のステップにはボタンを設置できるため、「作業実施後押してください」などのボタン名で設定します。
ボタンを設置しておくと、ボタンが押された後に、メッセージ通知後に続くステップが実行されます。
スプレッドシートの値更新は、メッセージ通知の直後に設定します。
Slackワークフローには、スプレッドシートの値を更新するためのステップがあるため、追加と設定をしてください。

おわりに

GASを使った生産性向上の紹介は、ひとまずPart3で終わります。
ぜひ、将来有望な未来ある皆様には、ここまでに紹介した内容をチームに導入していただき、日本の経済発展のために貢献いただけるとことを強く、切実に願っています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?