Slack / Functions FrameworkでサクッとCloud Functionsをカスタマイズ

前回の記事では、基本的な連携のみ書きました。
Slack / Google Cloud Platformと連携してスラッシュコマンドを作成する

今回はローカル環境でコードをカスタマイズして、本番にデプロイするところまで。

Node.js

まずは Node が必要です。
Google Cloud Platform のこちらの記事に詳しく解説されています。
https://cloud.google.com/nodejs/docs/setup

NVM をインストール
・Node.js と npm をインストール

Functions Framework

Functions Framework を使うと簡単にCloud Functionの環境を用意することができます。
まずはプロジェクトの初期設定。

bash
1
2
$ npm init
$ npm install @google-cloud/functions-framework --save

同ディレクトリに index.js を作成。
helloWorld というエンドポイントを設定します。

index.js
1
2
3
exports.helloWorld = (req, res) => {
  res.send('Good morning, World');
};

ローカルでサーバーを立ち上げ。

bash
1
2
3
4
5
$ npx @google-cloud/functions-framework --target=helloWorld

Serving function...
Function: helloWorld
URL: http://localhost:8080/ => localhost:8080 が立ち上がる。

ターミナルで別タブを開いて次の curl コマンドを実行。

bash
1
2
$ curl localhost:8080
=> Good morning, World

となれば成功。

便利な設定

package.json に下記を追加。

package.json
1
2
3
  "scripts": {
    "start": "functions-framework --target=helloWorld"
  }

こうすれば、下記のコマンドだけでサーバーを実行することができます。

1
$ npm start

デプロイ

このコマンドをCloud Functionsに反映してインターネットからアクセスできるようにしましょう。

こちらで 既に gcloud コマンドがインストールできていると思いますので、このコマンドでデプロイします。
helloWorld で先程カスタマイズした処理を指定。
--runtime nodejs8 --trigger-http はひとまず定形として覚えておいておけばOK。

bash
1
2
3
4
$ gcloud functions deploy helloWorld --runtime nodejs8 --trigger-http

=> httpsTrigger:
  url: https://us-central1-test-project-1-xxxxx.cloudfunctions.net/helloWorld

デプロイが終わったらURLが取得できるので、
このURLをSlackのスラッシュコマンドのRequest URLに設定。

workabroad

これでスラック上で /post コマンドを実行すれば Good morning, World と表示されるはず。

Screen_Shot_2019-09-03_at_0.04.01

前回の記事ではCloud Functionsのデフォルトの処理を実行しましたが、今回はローカル環境で作った処理を本番に反映、そして実行する流れを書きました。

  

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた