Slack のコマンドを使って TeamSpirit に打刻する

CAMPFIRE の従業員は、勤怠・経費・工数などの管理を TeamSpirit を使って行っています。

勤怠情報は SalesForce Force.com 上にインストールされた TeamSpirit の勤怠管理画面などから行います。

ref: 【利用環境・機能】知っていると得をする!チームスピリットと Force.com との関係を理解しよう!

勤怠情報は、毎日リアルタイムに付けないと、月末にまとめて、過去を振り返って記入する必要があり、従業員に負荷がかかっています。

この打刻作業を毎日習慣づけて、負荷なく行うため、いつも使っている Slack のコマンドで行える、Slack のアプリケーションを作成しました。

ソースコードは GitHub 上で公開しています。

TeamSpirit と Slack を利用している企業であれば、Heroku などを使ってアプリケーションを立ち上げ、全ての従業員が利用できます。

ref: ngs/ts-dakoku

以下に導入手順を記載します。

手順

  1. TeamSpirit が動く Force.com 環境から Sandbox 環境を作成する
  2. Sandbox に Apex のソースコードを追加する
  3. Sandbox より、送信変更セットを使い、Apex コードを本番環境にアップロードする
  4. TeamSpirit 本番環境で 接続アプリケーション を作成する
  5. Slack でアプリケーションを作成する
  6. アプリケーションを Heroku 上にデプロイする

1. Force.com Sandbox 環境を作成する

TeamSpirit は外部に公開されている API がありません。

そこで、Force.com に Apex REST のエンドポイントを作成します。

ref: Creating REST APIs using Apex REST

TeamSpirit が動いている本番環境の Force.com では、Apex クラス、トリガーなどの開発資材を直接作成することはできません。

[設定] 画面より、 リリース > Sandbox 画面を表示し、 新規 Sandbox ボタンをクリックして、Sandbox 環境を作ります。

名前説明 欄には 任意の内容 を入力し、 Sandbox ライセンスDeveloper を選択します。

次にでてくる、 Sandbox オプションApex クラス は空欄のまま、 作成ボタン をクリックします。

しばらくすると、Sandbox 環境の使用準備が整った旨のメールが届きます。

メールに記載されているログイン URL を開き、ログインユーザ名の欄に、TeamSpirit のログインメールアドレスの末尾に小文字で Sandbox 環境名、パスワードは TeamSpirit と同じものを入力し、ログインします。

2. Sandbox に Apex のソースコードを追加する

Sandbox 環境画面右上にある、ログインユーザーの名前をクリックし、ナビゲーションを展開、 開発コンソール を開きます。

管理コンソール左上メニューバーから File > New > Apex Class を選択し、 TSTimeTableAPIController, TSTimeTableAPIControllerTest という名前の Apex クラスを作成します。

コードエディター上に、それぞれリポジトリからコピーしたソースコードを貼り付け、保存します。

ts-dakoku/apex/src/classes at master · ngs/ts-dakoku

リポジトリ内の apex ディレクトリは Force.com IDE のプロジェクトとしても取り込んで利用することができます。

3. 本番環境に Apex クラスをアップロードする

[設定] 画面より、 リリース > 送信変更セット 画面を表示し、 新規 ボタンをクリックして、新しい変更セットを作成します。

変更セットコンポーネント セクションにある、 追加 ボタンより、資材選択画面を表示、Apex クラス TSTimeTableAPIController, TSTimeTableAPIControllerTest を選択し、 変更セットに追加 ボタンをクリックします。

変更セットコンポーネント セクションに、選択した Apex クラスが表示されていることを確認したら、 アップロード ボタンをクリック、次の画面で 対象組織 から 本番 を選択し アップロード ボタンをクリックします。

しばらくすると、変更セットのアップロードが成功した旨のメールが届きます。

TeamSpirit 本番環境の [設定] 画面より リリース > 受信変更セット 画面を表示し、 リリース待ちの変更セット セクションより、該当の変更セットを選択、リリース ボタンをクリックし、次の画面の テストオプションの選択 から デフォルト を選択、 リリース ボタンをクリックします。

反映が終わると、 [設定] 画面より、 開発 > Apex クラスTSTimeTableAPIController, TSTimeTableAPIControllerTest が追加されます。

TSTimeTableAPIController を選択し、 セキュリティー ボタンをクリック、 有効にされたプロファイル に全てのプロファイルを追加し、保存してください。

4. Force.com 接続アプリケーション を作成する

TeamSpirit 本番環境の [設定] 画面より、 ビルド > 作成 > アプリケーション 画面を表示し、 接続アプリケーション セクションの 新規 ボタンをクリック、 新規接続アプリケーション 画面を表示します。

基本情報 セクション内 接続アプリケーション名 , API 参照名 , 取引先責任者 メール は任意の内容を入力します。

API (OAuth 設定の有効化) セクション内 OAuth 設定の有効化 チェックボックスをオンにし、入力項目を展開します。

コールバック URL は、後述のアプリケーションデプロイ先を URL を元に、 https://{ホスト名}/oauth/salesforce/callback の形式で入力します。

選択した OAuth 範囲 は、 フルアクセス (full) , ユーザに代わっていつでも要求を実行 (refresh_token, offline_access) を選択します。

上記を入力した上、保存ボタンをクリックします。

アプリケーション詳細画面に遷移するので、 API (OAuth 設定の有効化) セクションより、 コンシューマ鍵 , コンシューマの秘密 の内容をテキストファイルなどに保存しておきます。

5. Slack でアプリケーションを作成する

Slack の API サイトを開き、 Create New App ボタンをクリック、 App NameDeveloper Slack Workspace を入力し、Slack アプリケーションを作成します。

Add features and functionality のセクション内にある、 Slash CommandsInteractive Components を設定します。

Slash Commands

Slash Commands 画面より、 Create New Command ボタンをクリック、新規作成画面で以下のように入力します。

  • Command: /ts
  • Request URL: https://{ホスト名}/hooks/slash
  • Short Description (任意): 例: TeamSpirit で打刻します

Interactive Components

Interactive Components 画面で、 Enable Interactive Components ボタンをクリック、 Request URLhttps://{ホスト名}/hooks/interactive のフォーマットで URL を入力し、緑の Enable Interactive Components ボタンをクリックし、保存します。

アプリケーションをインストール

Install your app to your workspace セクションを展開し、 Install App to Workspace ボタンをクリックします。

App Credentials より、 Verification Token をコピーし、先程コンシューマー鍵を保存したテキストファイルに貼り付け、保存します。

6. アプリケーションをデプロイする

ここでは Heroku を使ってホスティングする例を記載します。

GitHub リポジトリ の README 内にある、 Deploy to Heroku ボタンをクリックし、Heroku のアプリケーション設定を入力画面を開きます。

Config Variables セクション内の環境変数欄にこれまでテキストファイルに保存していた情報を入力します。

以上で設定は完了です。

お使いの Slack ワークスペースで /ts コマンドを実行してみてください。

導入でお困りのことがありましたら、連絡先Twitter などでお気軽にお問い合わせください。

バグ報告は GitHub Issues に起票頂けると幸いです。

comments powered by Disqus