Published on

Part3🀘🏻コピペOK🀘🏻GASを䜿っおSlackに圓番通知する生産性向䞊をしれっず玹介したす🀪

Authors
  • avatar
    Name
    nisyuu (にしゅう)
    Twitter
    @nishilyuu

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

はじめに

今幎、株匏䌚瀟クラりドワヌクスを退職した@nisyuuです。新幹線に乗るず厎陜軒のシュりマむ匁圓をよく食べたす。 ゚ンゞニアずしおクラりドワヌクステック旧クラりドテックずいうフリヌランスず䌁業をマッチングする゚ヌゞェントサヌビスを開発しおいたした。

ex-crowdworks Advent Calendar 2024でPart1ずPart2に分けおGASを䜿った生産性向䞊を玹介しおきたした。

https://qiita.com/nisyuu/items/4bf85d1d73a642e0558b

https://qiita.com/nisyuu/items/24a251424b412ef283d3

今回も、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で終わりたす。 ぜひ、将来有望な未来ある皆様には、ここたでに玹介した内容をチヌムに導入しおいただき、日本の経枈発展のために貢献いただけるずこずを匷く、切実に願っおいたす。