ハウテレビジョン開発者ブログスマートフォン用の表示で見るハウテレビジョン開発者ブログ『外資就活ドットコム』を日夜開発している技術陣がプログラミングネタ・業務改善ネタ・よしなしごとについて記していきます。皆さんも毎日お忙しいですよね。今回は時間管理とその補助ツール、そしてその補助ツールの開発についてのお話です。Qiita:Team弊社では情報共有にQiita:Teamを利用しているのですが、日報/週報にも用いています。設定によってはメンションが含まれたページをメールで配信してくれるため、同僚のその日の作業内容を帰りの電車の中で確認することができ、メンバー間のコミュニケーションの促進に貢献しています。日報はその他にも、その日に発生した問題や現在抱えている悩みなどを共有するための重要な文書となっており、弊社にとっては欠かせないツールとなっています。Toggl一方で日報などの報告書は自分のための振り返りの材料でもあります。どの作業に何時間くらい使っていたのかを記載しておけば、ボトルネックを知ることにより、さらなる効率化を図る事ができるでしょう。推測するな計測せよという言葉が示している通り、作業時間を計測しておくことは必要です。私は最近、Togglというタイムトラッキングサービスを用いて作業時間を計測しています。TogglはWebやデスクトップアプリ、モバイルアプリでトラッキング操作ができる優れた環境を提供してくれており、お勧めです。計測した結果を日報に書いてみましょう。最初は百分率(%)で作業時間を記載していたのですが、振り返る際、日報の粒度では実際に何時間作業したのかを知りたくなりました。一方で、週単位では何時間作業したのかよりも、俯瞰するために割合を把握して見たいと思うようになりました。そこで私は毎日作業時間を集計して日報に記載し、週末にはその週の全体の作業時間から各作業の割合を手計算して週報に記載していました。その作業のあまりの煩雑さ、そして作業の単純さに次第にイライラが募ってきました。イライラに計測をやめる日もありました。それでは本来の目的が達成できません。楽をするためならどんな苦労もいとわないのがプログラマーの美徳です。この開発者ブログを書く時期も近づいていたので、ブログ駆動開発(BDD)でレポート出力プログラムを作成したいと思い立ちました。自宅に戻り、ビールを1本(500ml)ひっかけ、ビール駆動開発(BDD)で最初のバージョンを実装しました。API最近の多くのイケてるサービス同様、TogglにもAPIがあります。TogglのAPIドキュメントはGitHubのリポジトリとしてホストされています。日報/週報を作成するためには期間を指定してレコードを取得できる必要がありますが、ちゃんとあるようですね。記録した作業内容と時間をAPIから取得して日報を作成することにしましょう。Thor日報を作成するきっかけは自分で「今日はもう帰ろう」と思うことですよね。時刻(例えば定時)によって単純に決められるものでもないでしょう。今回はコマンドラインツールとして実装し、レポート作成プログラムを手動で実行することにします。私の母国語はPerlなのですが、今回、プログラミング言語として採用したのはRubyです。Rubyに慣れたかったというのが主な理由です。BDDですから、大した理由は必要ありません。operating_reportgemとしてインストールできるように作成します。良いでしょうかね?まずはgemの骨組みを作成します。下記の通りにコマンドを実行します。/Users/hoge/work/operating_reportこれでテストと実行コマンドを備えたgemの骨組みが作成できました。それでは、プログラムを実装していきましょう。コマンドラインのフロントとなる部分です。'operating_report'OperatingReport::CLI.start(ARGV)スケルトンに最後の一行を足すだけです。Thorを継承しています。呼ぶことが責務であるという認識で良いでしょう。endend設定ファイルの処理とレポート作成のための時間の処理、取得した情報の出力処理などを記載しています。即席で作った臭いがプンプンしますが、そこはこらえてください。今後少しずつリファクタリングしていきますから。対話的データ取得の部分は何か良いモジュールを使いたいですね。次にAPIアクセス部分です。endend手習いとして書いたのものですのでいろいろなところを大目に見てください。言え、Redirectがあった場合にも地味に対応しています。それでは実行してみましょう。cloneしてきた状態を想定してます。トラッキングデータを取得する前に、設定ファイルを作成します。Tokenを保存するだけです。Token:対話形式で入力します。いうファイルが生成されていると思います。汎用的すぎる名前ですね。データの取得を行います。(2.5h)やったね!これで、本日分の作業内容が、作業時間を含めてリストされました。Markdownのリストになっているので、これをQiitaのページにコピー&ペーストして日報の骨組みは完成です。あとは細かく肉付けしていきましょう。今回のプログラムはGitHubで公開しています。operating_report少しずつ修正/機能追加していく予定ですので乞うご期待です。何?テストが書いてない?今日はTDDの話じゃなくてBDDの話なので、悪しからず。年末に改修するときに書きます。終わりに実装してみると、日報全体を生成したいと思ったり、カテゴリー/タグを駆使したいと思ったり、週報も生成したいと思ったりと要望がどんどん膨らんでくるのですが、時間の都合で今回はここまで。折を見て開発を進めたいと思います。今回の私の収穫としては下記のような点でしょうか?Rubyの基本的な書き方がわかった。Thorというモジュールがコマンドラインツールの作成に使えることがわかった。Net::HTTPは基本的に使えることがわかった。Togglというサービスが作業時間のトラッキングに使えることを伝えられた。Togglに作業時間をトラッキングしておくといいことがあると伝えられた。使って下書きを投稿するところくらいまではやりたいのですが、Qiitaテンプレートの独自タグを展開する方法が見つかりませんでした。ご存知の方がいらっしゃいましたら、Twitterの私のアカウントへメンションを飛ばしてください。