読者です 読者をやめる 読者になる 読者になる

会社に打刻システムが導入されたんだけど打刻忘れしそうなのでChatworkにGAS使ってBot導入した話

最近会社に打刻用のWebシステム(たぶん自家製)が導入されて、出勤時と退勤時にアクセスして出勤もしくは退勤のボタンをポチッとな、っていう運用が始まったのだけれども、初めのうちはどうしても忘れる。

ということで、出勤前と退勤前の時間帯に忘れずに打刻してねって促すようなチャットBotChatwork上に作ることにした。

チャットBotっていうとHubotとかが一般的かと思うが、この程度でサーバー用意するのもなぁ、、、と思い今回はサーバー用意せずにGoogle Apps Script(以下、GAS)で作った。

事前準備

まず適当にBot専用のチャットワークアカウントを用意する。
また、ChatworkにBotを導入するにあたってチャットワークAPIが必要なので、Botアカウントでログインして申請する(承認まで数日かかった気がする)。

GASプロジェクト作成・ライブラリ追加

Google ドライブ上にGASのプロジェクトを作成する。
一度もGASのプロジェクトを作ったことがない場合は、まず自分のアカウントでドライブを開いて、「新規」>「その他」>「アプリを追加」、"google apps script"とかで検索して「Google Apps Script」を接続する。
接続以降は「新規」>「その他」>「Google Apps Script」で新しいプロジェクトが開くので、「chatwork-bot」とか適当にプロジェクト名をつけてあげればいい。

次に、GAS上でチャットワークAPIを扱うためにChatWork Client for Google Apps Scriptというチャットワークの中の人が作ったライブラリを追加する。

プロジェクトを開いたら、メニューの「リソース」>「ライブラリ」で、上記ライブラリのプロジェクトキーをコピペして選択。
ChatWorkClientというライブラリが追加されたら、最新バージョンを選択して保存。

スクリプト作成

GASからChatworkへ打刻しろよ的なことを促すスクリプト

上に示したスクリプトには含まれていないが、実際は変数TOKENROOM_IDKINTAI_SYSTEM_URLも定義している。
TOKENには申請して取得したチャットワークAPIトークンを、ROOM_IDには投稿したいチャットのルームID(チャットワークURLの#!ridに続く8桁の数字)を入れておく。
KINTAI_SYSTEM_URLは会社で使っているシステムのURLを入れている。

このあとトリガーを設定して定時実行させるのだけど、今の時点で動作確認も含めて手動実行してみるといい。
helloMessagegoodbyeMessageのどちらか実行したい関数を選択して、実行ボタンを押すだけ。
うまくいけば、指定したルームIDのチャットグループにメッセージが飛ぶ。

トリガー設定

定時実行するためのトリガーを最後に設定する。
メニューの「リソース」>「現在のプロジェクトのトリガー」からトリガーを追加する。
helloMessagegoodbyeMessageの2つ分のトリガーを追加して、時間主導型の日タイマー、あとはそれぞれの関数を実行させたい時間帯を選択すれば完了。

導入してみて

トリガーが正しく設定されていれば、指定した時間帯にそれぞれの関数が実行されてメッセージが飛んで来る。
事前準備とかを除けば、1時間もかからずこの程度のチャットBotはできてしまうのはイイ。サーバーも不要。
ただ、これだと課題もあって、

  • 日タイマーの時間選択が「午前8時〜9時」みたいなざっくりしたものしかない
  • 土日祝日関係なしに打刻しろってBotが言ってくる

とか。

今回の用途はそこまでシビアじゃないので別に良いのだけど、カッチリ作ろうと思ったらこのあたりちゃんと考えてスクリプト組もうね、という感じ。

SOFT SKILLSを読み始めたので生産性(プロダクティビティ)を高めるためにやっていることをふりかえってみた

最近「SOFT SKILLS」を読み始めた。
ソフトウェア開発者向けのライフハック本という感じで、内容は幅広い。
比較的ストイックな内容になっているので、すべてを真似するのは簡単ではないかもしれない。
それでもソフトウェア開発者としての豊かな生き方を目指すなら、読んでおいて損はない。と思う。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

本書は7部構成になっているが、そのうち1部は「生産性(プロダクティビティ)を高める」ことについて書かれている。

生産性を高めることは個人的に重要なテーマで、日々降ってくる膨大な仕事を捌きつつ、家族との時間も持ちたいし、自分だけのための時間も勿論ほしい。
そのためには、やはり生産性を高めるということが重要なテーマのひとつになってくる。
そこでこの機会に改めて、生産性を高めるためにやっていることをふりかえってみた。

生産性向上を阻害する要因を絶つ

生産性を手っ取り早く高めるには、生産性向上を阻害する要因を可能なかぎり絶てばいい。
まず、基本的にSNSは開かない。
見ないようにするのではなく、「開かない」「起動しない」ようにする。
一時期、僕は意味もなく常にブラウザのタブの1つがFacebookだったり、Twitterのクライアントアプリを立ち上げていたりしていたのだが、このような状態だと、ちょっと気を緩めたときに見てしまって、そのままダラダラ眺め続けてしまいがちだった。
SNSの利用を強制的にコントロールするアプリなどもあるが、仕事上SNSをツールとして扱う必要もあるので、僕はそこまでしていない。
必要がなくなったら「閉じる」ということを徹底するだけでも、結構効果がある。

あと、メーラーも基本的に閉じるようにしていて、開きっぱなしにはしない。
チャットツールは常時起動しているものの、通知やポップアップは切ったうえで、使わないときは常に画面を最小化するようにしている。
どうしても集中したいときにはヘッドホンをつけるが、「音楽を聴いて集中力アップ&まわりの音を絶つ」ためというよりは、「話しかけられるのを極力抑える」ためにつけている。
なので、ヘッドホンからは何も流れていないこともある。
嫌われそうなので多用はしづらい。

ちなみにSOFT SKILLSではチャットは完全に時間の無駄だ、メールのほうが良いよって書かれていて面白い。
確かにチャットは非同期コミュニケーションではあるが、同期コミュニケーションを暗黙的に求められるところがあるので、難しいところ。。。

集中している状態に強制的に引き込む

何に取り掛かるにしてもそうだが、取り掛かる瞬間が一番ツライ。
SOFT SKILLSにも、集中モードに入るためには最初の苦痛に耐え抜く必要があるが、それは一時的なものに過ぎず、それを乗り越えてしまえば集中モードは簡単に途切れないといったことが書かれている。
そのため、如何に苦痛に耐えて集中モードに早く入れるかが勝負になってくるわけだが、僕は今のところポモドーロテクニックを使って、このあたりをなんとかしている。

ポモドーロテクニックは25分作業+5分休憩のサイクルを回して、高い集中力を継続的に保つためのテクニックだが、僕は集中モードに入るスイッチとして使っている。
先に挙げた阻害要因を一通り絶ったらタイマーをスタート。
タイマーがスタートしたら集中モードに入り(入ってなくても入ったと思い込んで)、タイマーが進み続けている間は設定したタスクのみにフォーカスして作業し続ける。
本当に集中モードに入れば、あとは楽なので、意識しなくても作業に没頭できることが多い。
そのあとのサイクルは守れそうであれば守るが、キリが悪ければ休憩を挟まずにそのまま作業を続けたりもしている。
あくまで、僕の中ではスイッチとしての役割が大きい気がしている。
なお、僕はポモドーロテクニック導入にあたって、『Pomodoro Time』というアプリを使っている。

悩む時間を減らす

悩むという時間が入り込んでくると集中モードは一気に冷める。
タスクが終わったあとに「次の作業、何をしようか。。。」と手が止まったり、常に「次はあれをやって、そのあとはこれをやって。。。」と考えていたり。
月並みではあるが、思いついたタスクは即書き留めること、書き留めたタスクを見直し、細分化・整理する時間を意図的にとることで回避している。
この辺りはGTDの考え方に近いかもしれない。GTDよくわからないけど。

思いついたタスクを即書き留めるっていうのは当たり前に思えて、実は徹底できていなかったりする。
徹底させるためには、ちょっと思いついた些細な事もとにかく書き出す気持ちでやる必要があるので、書き出すという行為自体とにかく簡単にしないといけない。

僕は『Todoist』を使っているので、アプリを常時立ち上げて、タスクを思いついたら粒度もジャンルも考えず即座にインボックスに突っ込んでいる。
あとは、会社でのチャットツールが『Chatwork』なので、何かチャットで依頼されたら、Chatworkのタスク機能でメッセージをまるごとタスクに登録している。
こんな形でタスクは粗かったり散っていたりするのだが、後々整理する時間をとって粒度を細かくしたり整理し直したりして、Pomodoro Timeにセットしてから作業を開始するというような形でやっている。

ふりかえってみて

今のところ、これらはそれなりに上手くいっているよなー、と。
継続していくことが一番なのは言うまでもないので、ストイックにし過ぎず、自分に合ったところまで落とし込んで、無理のない程度でやっていけると良いなと思う。
ちなみに、最初に述べたとおりSOFT SKILLSはもっともっとストイックなので、ここまでやればもっと生産性上がるのかなーとも思うが、まず続かなそうなので試すの怖い。

Dockerの勉強を兼ねてWordPress開発環境構築のための構成を考えた

Docker WordPress

本番環境をローカルの開発環境へ持ってくる想定で構成してるつもり。
手動でセットアップしなきゃいけないところ多いし、まだ色々やれる感あるし、そもそももっと良いやり方あるだろうし、っていうのが正直なところなのだけども。

使い方はREADMEにざっと書いてる。

  • themesとpluginsとuploadsを本番環境からまるっとコピーしてdocker-compose.ymlに合わせて配置
  • 本番環境DBのダンプファイルもとってきてmysql/Dockerfileに合わせて配置
  • Search Replace DBをダウンロードしてきてdocker-compose.ymlに合わせて配置
  • docker-compose up -dでコンテナ起動
  • docker exec dockerdir_db_1 sh -c "/setup.sh"でダンプファイルのインポート
  • 最後にSearch-Replace-DBにアクセスしてURL変更

こんな感じ。

雑感

関係ないんだけど久しぶりにブログ書いた。
GitHubにも久しぶりにあげた。
英語も久しぶりに書いた。
いろんなことが未熟だけどこんな気持ちで少しずつ積み上げていければと思う。