見出し画像

Slackアプリ開発の素人が次世代プラットフォームを触ってみた話


はじめに

みなさん、こんにちは😎
今日はSlackアプリ開発の素人が次世代プラットフォームというものを触ってみた感想などを記したいなと思います。生意気ですが素人がいきなり次世代をノックしてみました。

従来のBoltによるSlackアプリケーション開発は独自でアプリをホストするインフラを構築する必要があったのですが、次世代プラットフォームというものを利用する事で、Slackプラットフォーム上にSlackアプリをデプロイ出来るようになる!という情報を公式サイトから仕入れました。
これはすごい進化だなーと思い、色々な方のドキュメントを見ながら実装してみました、というお話です。


開発環境

次世代プラットフォームはDenoというランタイムで動く事を前提としていて、実装はTypescriptで行なっていきます。
そして誰にでもSandboxが提供されているので興味のある方はSandboxでガチャガチャ試すのが良いと思います。(実はここに一番感動したかもしれないです)
開発環境構築などは分かりやすい記事や公式情報がありますので、そちらをご参照いただくとして、ここではプロトタイプしてみたものや、苦戦した点なんかを記載できればと思います。

Quickstart


ちょっと一息

ちなみに私の所属する組織でもSlackは利用していますが、わざわざ別にホスト環境を構築しなければならない事もあり、簡易的な仕組みの活用に留まっていました。よくある別の環境からSlack APIを叩く、みたいな類のものですね。ただ次世代プラットフォームは有償プランであれば利用出来るのに加えて開発もスムーズに出来そうな印象だったので、各組織において活用の場も広がりそうな印象を持っています。
Slack上で色々な自動化が出来るならDevOpsにも貢献してくれそう!


開発したもの

サンプルコードだとコピペくらいで出来ちゃいそうだったので、TypeScriptの勉強も含めてあまり情報がなく、少し難易度が高そうな事にチャレンジしてみました。

そこでユーザから受け取ったパラメータ情報をもとに動的にイベントトリガーを作成する仕組みを簡易的に作ってみました。
これも公式情報のものをそのまま実装すればそこまで難しくないと思うのですが、簡易的ではありますがイベント自体をユーザが指定出来る仕組みにチャレンジしてみました。

動的なイベントトリガー生成はちょっと混乱しがちな仕組みなので、ざっくりとした流れをシーケンス図を載せておきますね。
まずはイベントトリガー登録時の処理です。

登録時

それから、登録したイベントトリガーが発動した際の処理です。
例えばイベントトリガー生成時にpin_added(ピンされたイベント)を
指定していた場合、該当チャンネルで何かがピンされると以下が発動します。
またWebhookも登録時にフォームで入力しているので、コールバックで登録しておいたWorkflowから該当のWebhookへfetchする仕組みです。


画面イメージ

トリガーを登録するワークフローのフォーム画面です。パラメータはTriggerEventTypes/Webhook URL/チャンネルを受け付けます。
TriggerEventTypesはチャンネルイベントのみを指定できる様にしましたが、必要に応じてワークスペースイベントなども追加すれば良いかと思います。
ただここで注意なのが、deno-slack-api側でイベント型が厳格に指定されているので渡す型もしっかりと準拠する必要があります。
最近Apexばかり触っていたTypeScript初心者の私でもユニオン型なども触れる事が出来てとても良かったです。

チャンネルイベント一覧

モチベーション

なんでこれを作ってみたかったかというと、
GUIベースのワークフロービルダーで定義できるイベント条件がまだまだ充実していないのですよね。
開発者以外のユーザでももう少し幅広くトリガーを定義出来る仕組みを作れば、「〜のイベントをキャッチして〜したいんだよね」みたいなユースケースのフレームワークを提供出来るんではないかなと考えました。

GUIから定義出来るワークフロービルダーの場合、以下の様なトリガーに限定されています。(2024/05時点)


苦戦した点

TypeScriptの実装をした事がなかったのでここが一番苦戦しました。
サバイバルTypeScriptやChatGPTさんには大いにお世話になりました🙇🏼
一方で全く知らない分野での生成AI活用はなかなか難しいなという体験も出来ました。

そして実装を進める中でTypeScriptという名前の意味がようやく理解できた気がします。型(type)がとても厳格で、これくらいいいだろうという事が許容されず静的解析では何度エラーが出たか覚えていません😂
最近はSalesforceのApexなんかを触る機会がほとんどだったのでGenericsなども実際に触れる事が出来てとても良かったです。
TypeScriptにたくさん触れる事で、LWCや他プラットフォームでの開発などにも大いに役立ちそうです。


さいごに

今回はSlackの次世代プラットフォームというものを実際に触ってみる事で、色々なビジネスや開発活動において活躍してくれそうな印象を持ちました。
個人的にはGitHubとの連携も実業務で適用してみたいなと思っております。またアップデートがあれば記事を投稿しますね🖋️

みなさんも良いSlack Lifeを!!




この記事が気に入ったらサポートをしてみませんか?