INNOVATE HACK KYUSHU に行ってきた

8月27日(土)・28日(日)に福岡市で行われた INNOVATE HACK KYUSHU に参加した。

INNOVATE HACK KYUSHUとは

INNOVATE HACK KYUSHU

日本アイ・ビー・エムさんが主催されているハッカソンイベント。
INNOVATE HUB KYUSHUというプログラムの一つという位置づけで、今回のハッカソンで生まれた優れたサービスは、事業展開を見据えて支援するというのも特徴の一つ。
ハッカソンでは IBM Bluemix を使うことが条件となっており、そのほか様々なデータ・ツール・APIが提供された。

イベント当日の様子

ハッカソン一日目!
わくわく。。。
f:id:tomcky:20160829174743j:plain

ハッカソン二日目!
開発も終盤に差し掛かってみんな追い込み半端ない。
f:id:tomcky:20160829174750j:plain

発表会の写真も撮りたかったけど、自分のことで手一杯で一枚も撮れず。。。

発表会後の懇親会ではペッパーくん登場!!
ペッパーくんによる乾杯の音頭で懇親会がスタート。
ペッパーくん「かんぱーい」
f:id:tomcky:20160829174757j:plain

懇親会は大盛り上がり。
f:id:tomcky:20160829174804j:plain

結果発表!!
僕らのチームは選ばれず。。。残念。
f:id:tomcky:20160829174808j:plain

所感

今回僕が参加させてもらったチームでは「まち・くらし」をテーマにサービスを作ったのだが、個人的には、WatsonをはじめとするBluemixの強みを活かせなかったこと(結果としてPaaSとしてBluemixを使っただけになってしまったし、それも終盤にデプロイ失敗してデモではBluemix上で動かせずという残念な結果に。。。)や、提供していただいた色んなデータを十分に活かせなかったことがすごく勿体無かったなと思っていて、事前にもっとBluemix触って、サービスにうまく絡めていくアイディアを練っておくべきだったなー、と反省した。

2日間という短い時間で実装していくうえで、プロダクトを作り上げていくスピードやトラブルシュートにかかる時間とか、まだまだ頑張らないとなーと思うところが多々あったので、モチベーションの高まるすごく良い機会だったと思う。

あと、単純にBluemixは触っていて楽しくて、こういう機会がないとガッツリ触っていなかったと思うので良かったなっていうのと、最近はチームで開発するということがほとんどなくて、チーム組んでガッツリ開発ってやっぱり楽しいなって思った。
良い出会いもたくさんあったし、ハッカソンの醍醐味ってこういうところだよなと思う。
ステッカーもたくさんもらえたし、誘ってくれたチームメンバーと快く送り出してくれた会社に感謝。
f:id:tomcky:20160829162212j:plain

宮崎でもこういうイベントが盛んになればいいなー。。。

INNOVATE HACK KYUSHUの今後

9月6日(火)にファイナリストによる最終プレゼンが開催されるDemo Dayがあるので興味ある方は行ってみるといいかも。

INNOVATE HACK KYUSYU

会社に打刻システムが導入されたんだけど打刻忘れしそうなので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はもっともっとストイックなので、ここまでやればもっと生産性上がるのかなーとも思うが、まず続かなそうなので試すの怖い。