chatwork

定常作業をchatwork連携して自動化した話

More than 1 year has passed since last update.

グレンジ Advent Calendar 2017 11日目の記事を担当しました、 yoshida029と申します。
グレンジでサーバサイドエンジニアをしております。

今回は、定常作業をchatwork連携して自動化した話になります。

はじめに

日々の定常作業があります。

定常作業の例

  • KPI情報を集計する
  • アプリのランキング変動
  • 社内レビュー結果の集計
  • 定例作業の開始と終了の合図
  • アプリビルド完了通知
  • 毎回のリリース前にマスタのバリデート結果の報告
  • (今日の天気、電車遅延情報、トレンドワードの投稿など趣味に寄った通知)

単純な作業ですが、手動だと漏れやミスが起こりうるので
自動化対応を進めました。

chatworkのトークン取得

発行方法はこちらにて

API Tokenを発行する
https://help.chatwork.com/hc/ja/articles/115000172402-API-Tokenを発行する

連携手段

  • curlによる投稿
  • Google Apps Scriptから投稿
  • phpから投稿

curlによる投稿

サンプルコード

curl -X POST -H "X-ChatWorkToken: トークン" -d "body='メッセージ'" "https://api.chatwork.com/v2/rooms/{ルームID}/messages"

実際にはjenkinsから叩いて使います。
「毎日○○時からあれがはじまるよー」の開始・終了を投稿しています。

Google Apps Scriptからchatwork投稿

スプレッドシートからchatworkに投稿します。

スクリプトエディタを開く
611053d0-c1fa-bbd7-9639-24d96d099925.png

[リソース]->[スクリプト...]で、スクリプトの追加ダイアログが開きます。
ここでChatWorkClientのプロジェクトキーを検索して追加します。

https://github.com/cw-shibuya/chatwork-client-gas

バージョンは17以上を選択しました。

d3de18ec-8198-c63c-d9de-a1c9350524cb.png

サンプルコード

function myFunction() {
  var cwClient = ChatWorkClient.factory({token: 'トークン'});
  cwClient.sendMessage({
        room_id: 'ルームID',
        body: 'メッセージ'
  });
}

chatworkの内容をスプレッドシートに書き出し

chatwork投稿内容をスプレッドシートに書き出します。

function myFunction() {
    var cwClient = ChatWorkClient.factory({token: 'トークン'});
    var messageList = cwClient.get('/rooms/ルームID/messages', {
        force: 1
    });

    var logsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート名');
    for (var i in messageList) {
      var date = new Date(messageList[i].send_time * 1000);
      var sendDate = new Date(date.getFullYear(), date.getMonth(),date.getDate(), 0, 0, 0);
      // 最終行に追加
      logsheet.appendRow([sendDate, messageList[i].account.name, messageList[i].body]);
    }
}

ちょっとしたディスカッションを議事録にあげるとかに使うと便利。

phpから投稿

phpからchatworkに投稿します。

public static function send() {
    $url = sprintf('https://api.chatwork.com/v2/rooms/%d/messages', 'ルームID');
    $option = [
        'body' => '[info][title]タイトル[/title]本文[/info]',
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-ChatWorkToken: ' . 'トークン']);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($option, '', '&'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_exec($ch);
    curl_close($ch);
}

gitプッシュ時にバリデート結果がNGの場合通知します。
本番環境からのアラートメールの代わりにchatworkにしたり。

導入してみた結果

  • 朝昼晩気づいたときに誰かが集計するという人任せの運用がなくなりました
  • 平日朝集計、土日祝日分は月曜日にまとめてやる運用がなくなりました
  • 集計してもメール見ない、webページ作っても見ない人でもchatworkなら見ている可能性高い(気がする)
  • サーバーにログインする回数が多少減るので気分的に楽になります
  • マスタデータのチェックを代わりに返答してくれるのでエンジニアが調査する回数が減りました

最後に

非エンジニアは定常作業かどうかも気づいてない場合があります。
巻き込んでやってしまいましょう。
大抵喜んでくれます。

定常作業を自動化してクリエイティブな時間を増やしていきましょう。

以上となります。