Skip to main content
Bring your team and maximize your impact at Dreamforce. Register three or more to unlock $999 passes.

詳細な制御のためにソフトウェア開発キットを使用する

学習の目的

この単元を完了すると、次のことができるようになります。

  • SDK で Slack インタラクションに対するイベント駆動型の制御が提供されるしくみを説明する。
  • さまざまなイベント種別を管理するためのリスナーパターンの利点を説明する。
  • Webhook では不可能なことを SDK 機能で実現できる状況を特定する。

Slack アプリを開発するときには、Webhook、直接 API コール、または Slack の Bolt フレームワークなどのソフトウェア開発キット (SDK) といった選択肢があります。では、SDK を使用するのはどのような場合でしょうか? この単元では、SDK を利用することでより詳細な制御と高度な機能の使用が可能になり、基本的な通知にとどまらないインタラクティブなアプリを作成しやすくなる理由について学習します。

シンプルなアプローチでの制御の問題

Webhook のみを使用して Slack 用のシンプルな投票アプリを作成しているとします。ユーザーが「/poll, What's for lunch?」(/poll, ランチに何を食べますか?) と入力すると、Webhook がコマンドを受信し、投票ボタン付きのメッセージを投稿します。素晴らしいですよね。

ここで問題があります。誰かがボタンをクリックしても何も起きません。その理由は、 Webhook は一方向であるため、Slack が送信したデータを受信するだけであるためです。ボタンのクリックやメニューの選択などのフォローアップインタラクションをリスンすることはできません。最初の応答後は会話を制御することができないのです。

SDK を使用すれば状況が変わります。

イベント駆動制御によってすべてをリスンする

Bolt SDK はイベント駆動型アーキテクチャを備えているため、リアルタイムで Slack 内のあらゆるイベントをリスンしてそれに応答できます。Bolt は一連のリスナーメソッドを中心に構築されています。これらのメソッドは Slack から送信されるさまざまなイベントをリスンしてやり取りを行います。

SDK では、次のことが可能です。

  • (app.message()) を使用してチャンネル内のメッセージをリスンする。
  • (app.action()) を使用してボタンクリックに応答する。
  • (app.command()) を使用してスラッシュコマンドを処理する。
  • (app.shortcut()) を使用してショートカットの呼び出しを捕捉する。
  • モーダルからのフォーム送信を処理する。

各インタラクション種別には専用のリスナーがあり、アプリが各イベントにどのように応答するかを正確に細かく制御できます。Slack から送信される内容を受信するだけではなく、何をリスンするかを選択できます。

リスナーパターンの効果

SDK の制御における最大の利点の 1 つがリスナーパターンです。未加工の JSON ペイロードを解析して、受信したイベントの種別を判断するのではなく、SDK ではすべてが、型付けされた明確なリスナーに整理されます。

これは開発者にとって次のような意味を持ちます。

  • Webhook を使用する場合: 汎用ペイロードを受信し、それがメッセージ、ボタンクリック、またはその他の何かであるかを手動で決定する必要があります。各ケースを処理するために条件ロジックを記述しますが、アプリが大きくなるとロジックが複雑になりエラーが発生しやすくなります。
  • SDK を使用する場合: 特定のイベントに対して特定のリスナーを登録します。「hello」を含むメッセージに応答するには、 app.message() を使用します。ボタンクリックを処理する必要があれば、 app.action() を使用します。SDK は自動的にイベントを適切なハンドラーに転送します。

そのため、コード構造を管理しやすく、デバッグも容易で、重要なイベント種別を見過ごすことはありません。

ステートフルインタラクションと複数ステップのワークフロー

SDK の制御の大きな利点は、複数のインタラクションにまたがって状態を管理できるということです。

サポートチケットのワークフローについて考えてみましょう。

  1. ユーザーが [Create Ticket (チケットを作成)] ショートカットを選択します。
  2. アプリにモーダルフォームが表示されます。
  3. ユーザーは入力して、[Submit (送信)] を選択します。
  4. チケットが作成され、[Assign to someone? (誰かに割り当てますか?)] という質問が表示されます。
  5. ユーザーはメニューから選択します。
  6. チケットが割り当てられ、確認が送信されます。

Webhook のみを使用する場合、このフローを管理するのは大変です。状態を外部で追跡し、どのユーザーがどのステップを実行中であるかを記憶し、さまざまな Webhook コールを関連付ける必要があります。

SDK にはそのための組み込みツールがあります。

  • ミドルウェアによってイベントを事前処理し、状態を管理できます。
  • コンテキストオブジェクトはステップ間のデータを保持します。
  • モーダルビューは自身の状態を維持し、動的に更新できます。
  • 確認パターンを使用すれば、すばやく応答し、バックグラウンドで処理できます。

複雑なオーケストレーションは SDK によって処理されるため、インフラストラクチャの管理に悩まされることなくワークフローロジックを制御できます。

ソケットモードを使用して複雑さのない開発を行う

SDK を使用することで、アプリが Slack へ接続する方法も制御できます。初心者にはソケットモードをお勧めします。ソケットモードでは、ポートを開いたりエンドポイントを公開することなく、Slack で発生したイベントをリスンすることができます。

これはどういう意味を持つのでしょうか?

  • Webhook を使用する場合: 公開 URL が必要です。つまり、開発中に ngrok などのツールを使用して自身のラップトップへのトンネリングを行ったり、HTTPS 証明書を処理したり、エンドポイントセキュリティを管理したりする必要があります。
  • ソケットモード (SDK 機能) を使用する場合: アプリが Slack への WebSocket 接続を確立します。この永続接続を経由してリアルタイムでイベントが送信されてきます。インターネットに何も公開せずに完全に localhost 上で開発を行うことができます。

これは、開発環境とデプロイアーキテクチャを強力に制御できるということです。

SDK を使用する高度な機能

SDK を使用することで、基本的な Webhook を超える高度な Slack 機能を利用できるようになります。

  • ホームタブ: ユーザー向けのカスタムアプリホームエクスペリエンスを作成します。
  • ショートカット: ユーザーが起動できるグローバルショートカットまたはメッセージショートカットを追加します。
  • Block Kit ビルダー: ボタン、メニュー、日付ピッカーを含むリッチでインタラクティブなメッセージをプログラムによって作成します。
  • ワークフローステップ: Slack ワークフロービルダーのカスタムステップを作成します。
  • リアルタイム更新: 即座にメッセージを変更したり、モーダルを更新したり、インタラクションに応答したりします。

このような機能には、SDK で提供される双方向通信、イベント処理、状態管理が必要です。Webhook では、そのような機能にはまったくアクセスできません。

まとめ

開発者が SDK を選択するのは、より詳細な制御が可能になるためです。

  • 任意の Slack インタラクションに対するイベント駆動型リスニング
  • コードをクリーンで管理しやすい状態に保つ、体系的なリスナーパターン
  • 複雑な複数ステップのワークフローのための状態管理
  • ソケットモードまたは HTTP エンドポイントを使用した柔軟なデプロイ
  • Webhook では利用できない高度な機能へのアクセス

単純な通知だけでなく、ユーザーのアクションに反応したり、コンテキストを保持したり、高度なワークフローを作成したりするアプリを作成する場合は、その実現に必要な制御を SDK によって得ることができます。

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む