このチュートリアルでは Cloud Run 関数を使用して、Google Knowledge Graph API を検索する Slack スラッシュ コマンドの実装方法について説明します。
目標
- Slack でスラッシュ コマンドを作成する。
- Cloud Run HTTP 関数を作成してデプロイする。
- Slash コマンドを使って Google Knowledge Graph API を検索する。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- Cloud Run functions
- Cloud Build
- Artifact Registry
- Cloud Logging
For details, see Cloud Run functions pricing.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, and Logging APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
開発環境を準備します。
Node.js
Python
Go
Java
C#
Ruby
PHP
gcloud CLI がすでにインストールされている場合は、次のコマンドを実行して更新します。
gcloud components update
データの流れ
Slack のスラッシュ コマンドのチュートリアル アプリケーションでのデータの流れは次のとおりです。
- ユーザーが Slack チャネルで
/kg <search_query>
スラッシュ コマンドを実行します。 - Slack がコマンドのペイロードを Cloud Run 関数のトリガー エンドポイントに送信します。
- Cloud Run 関数がユーザーの検索クエリとともにリクエストを Knowledge Graph API に送信します。
- Knowledge Graph API は、レスポンスで一致した結果を返します。
- Cloud Run 関数はフォーマット化したレスポンス内容を Slack メッセージに保存します。
- Cloud Run 関数はメッセージを Slack に送信します。
- ユーザーは Slack チャンネルでフォーマット化されたレスポンスを確認します。
次はこの手順を可視化した図です。
認証情報の取得
関数をデプロイするには、Google Cloud コンソールで提供される API キーと Slack 署名シークレットが必要です。
Knowledge Graph API キーの取得
Google Cloud コンソールの [認証情報] ページで、[認証情報を作成] ボタンをクリックして [API キー] を選択します。このキーは deploy
コマンドの一部として使用するので、覚えておいてください。このキーにより、関数から Knowledge Graph API にアクセスできます。
Slack の署名シークレットの取得
関数をデプロイするには、Slack 署名シークレットも必要です。Slack の署名シークレットを取得するには、Slack のスラッシュ コマンドをホストする Slack アプリを作成します。このアプリは、統合をインストールする権限のある Slack チームに関連付ける必要があります。
Slack の [Your Apps] ページに移動して、[Create New App] をクリックします。
[From Scratch] を選択します。
アプリの名前を指定し、統合をインストールする権限のある Slack ワークスペースを選択します。
[Create App] をクリックします。
アプリが作成され、表示が [Basic Information] に変わります。
[Basic Information] ページで、Slack の署名シークレットをコピーして保存します。
変更を保存します。
次に、ソースコードを取得し、関数をデプロイする必要があります。関数をデプロイしたら、アプリケーションの構成の説明に沿って、デプロイされた関数と統合するように Slack アプリを構成します。
関数の作成
ローカルマシンにサンプルアプリのリポジトリのクローンを作成します。
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Ruby
git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
PHP
git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git
または、zip 形式のサンプルをダウンロードしてファイルを抽出してもかまいません。
Cloud Run 関数のサンプルコードが含まれているディレクトリに移動します。
Node.js
cd nodejs-docs-samples/functions/slack/
Python
cd python-docs-samples/functions/slack/
Go
cd golang-samples/functions/functionsv2/slack/
Java
cd java-docs-samples/functions/slack/
C#
cd dotnet-docs-samples/functions/slack/SlackKnowledgeGraphSearch/
Ruby
cd ruby-docs-samples/functions/slack/
PHP
cd php-docs-samples/functions/slack_slash_command/
関数のデプロイ
ユーザー(または Slack)が関数のエンドポイントに HTTP POST リクエストを送信したときに実行される関数をデプロイするには、サンプルコード(または Java の pom.xml
ファイル)を含むディレクトリで次のコマンドを実行します。
YOUR_SLACK_SIGNING_SECRET
は、アプリの構成の [Basic information] ページで、Slack から提供された署名シークレットに置き換えます。YOUR_KG_API_KEY
は、前に作成した Knowledge Graph API Key で置き換えます。
Node.js
gcloud functions deploy nodejs-slack-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=kgSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている Node.js バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Python
gcloud functions deploy python-slack-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている Python バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Go
gcloud functions deploy go-slack-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=KGSearch \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている Go バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Java
gcloud functions deploy java-slack-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.SlackSlashCommand \ --memory=512MB \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている Java バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
C#
gcloud functions deploy csharp-slack-function \ --gen2 \ --runtime=dotnet6 \ --region=REGION
\ --source=. \ --entry-point=SlackKnowledgeGraphSearch.Function \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている .NET バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
Ruby
gcloud functions deploy ruby-slack-function \ --gen2 \ --runtime=ruby32 \ --region=REGION
\ --source=. \ --entry-point=kg_search \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている Ruby バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
PHP
gcloud functions deploy php-slack-function \ --gen2 \ --runtime=php82 \ --region=REGION
\ --source=. \ --entry-point=receiveRequest \
--trigger-http \
--set-env-vars "SLACK_SECRET=YOUR_SLACK_SIGNING_SECRET
,KG_API_KEY=YOUR_KG_API_KEY
" \
--allow-unauthenticated
サポートされている PHP バージョンのランタイム ID を指定して関数を実行するには、--runtime
フラグを使用します。
アプリケーションの構成
関数をデプロイした後、Slack スラッシュ コマンドを作成する必要があります。このコマンドがトリガーされるたびに関数にクエリが送信されます。
アプリを選択し、[Slash commands] に移動して [Create New Command] ボタンをクリックします。
コマンドの名前として「
/kg
」を入力します。[Request URL] フィールドに、関数の URL を入力します。
deploy
コマンド出力から URL をコピーするか、Google Cloud コンソールで Cloud Run 関数の概要ページに移動し、関数をクリックして [関数の詳細] ページを開き、そのページの URL をコピーします。簡単な説明を入力して [Save] をクリックします。
[Basic Information] に移動します。
[Install to Workspace] をクリックします。画面の指示に従って、ワークスペース用にアプリケーションを有効にします。
少し待つと、Slack Slash コマンドがオンラインになります。
コードについて
依存関係をインポートする
アプリケーションが Google Cloud Platform サービスとやり取りするには、いくつかの依存関係をインポートする必要があります。
Node.js
Python
Go
Java
C#
Ruby
PHP
Webhook の受け取り
ユーザー(または Slack)が関数のエンドポイントに HTTP POST リクエストを送信すると、次の関数が実行されます。
Node.js
Python
Go
Java
C#
Ruby
PHP
次の関数は、Slack から提供された X-Slack-Signature
ヘッダーを検証することで、受信リクエストを認証します。
Node.js
Python
Go
Java
C#
Ruby
PHP
Knowledge Graph API のクエリ作成
次の関数はユーザーの検索クエリとともにリクエストを Knowledge Graph API に送信します。
Node.js
Python
Go
Java
C#
Ruby
PHP
Slack メッセージのフォーマット化
最後に、次の関数は Knowledge Graph の結果をフォーマット化し、ユーザーに表示される適切な形式の Slack メッセージにします。
Node.js
Python
Go
Java
C#
Ruby
PHP
Slack API のタイムアウト
Slack API では、関数が Webhook リクエストを受け取ってから 3 秒以内に応答することが想定されています。
通常、このチュートリアルのコマンドは 3 秒以内に応答します。実行時間が長いコマンドの場合、タスクキューとして機能する Pub/Sub トピックに(リクエストの response_url
フィールドを含む)リクエストを push する関数を構成することをおすすめします。
この構成によって、2 番目の関数を作成して Pub/Sub によってトリガーすることで、それらのタスクを処理し、Slack の response_url
に結果を送信できます。
Slash コマンドの使用
関数のデプロイが完了したら、Slack チャンネルに次のコマンドを入力します。
/kg giraffe
「giraffe」のナレッジグラフ エントリが表示されます。
ログを確認して、関数実行の出力を確認します。
gcloud functions logs read --limit 100
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
関数の削除
このチュートリアルでデプロイした Cloud Run 関数を削除するには、次のコマンドを実行します。
Node.js
gcloud functions delete nodejs-slack-function --gen2 --region REGION
Python
gcloud functions delete python-slack-function --gen2 --region REGION
Go
gcloud functions delete go-slack-function --gen2 --region REGION
Java
gcloud functions delete java-slack-function --gen2 --region REGION
C#
gcloud functions delete csharp-slack-function --gen2 --region REGION
Ruby
gcloud functions delete ruby-slack-function --gen2 --region REGION
PHP
gcloud functions delete php-slack-function --gen2 --region REGION
Google Cloud コンソールから Cloud Run 関数を削除することもできます。