mosowave

sinamon129による(主に)技術ブログ。Ruby,Ruby on Rails,Elasticsearchやその他について書きます。

TodoistとTodoistAPIで、毎朝のタスク報告をするヾ(‘ω’)ノ

この記事はVOYAGE GROUP エンジニアブログ : Advent Calendar 2014の11日目の記事になります。

こんにちは、@sinamon129です。
VOYAGE GROUPで、新卒一年目のエンジニアをしておりますヽ|・ω・|ゞ

突然ですが、みなさんはタスク管理ツールってつかっていますか?
学生時代はTODOが多い時だけメモに書き出してみたりしていたものですが、
会社に入ると、今日や今週に自分が自分がやる仕事を把握したり、報告する場面が増えました。また、仕事だけじゃなくて、プライベートのタスクもあったりして、時間を有効活用するために、やるべきことをきちんと把握したいようになりました。

そこで、Todoistを使い始めたので、どこが使いやすいかと、普段の報告を簡単にするプログラムを書いた話をしようと思います〜

Todoistとは?

いい感じのタスク管理ツールです。詳しくは、

To-Doリストとタスク管理。無料、簡単、オンラインとモバイル用: Todoist

日記3日坊主的正確の私なので、あまり管理系のツールを使い続けられたことがないのですが、一週間ぐらい続いています…w

個人的にいいなと思ってるポイントを3つ。
f:id:sinamon129:20141211101715p:plain

今日&一週間のやることが見やすい

全体的に無駄がなくて、テンションのあがるUIだとおもいますw
今日と次の7日間がフォルダ分けされているので、
今日やることをみながらTODOをこなすし、明日のものを前倒しにしてやっといたほうが平和そうとか、そういう調整を一週間の予定を見ながらできます。
また、期限が切れたタスクも今日のフォルダに入ったままになっていて、やばいやばい感を持ちながら消化することもできます…w

やたら褒められる

当日のタスクを全て終了すると、お疲れ様でした的な文章がでたり、あなたの生産性という項目があって、タスクをこなすとカルマが加算されていったり、日や週煮立てた目標を達成すると、ボーナスポイントがもらえたりするので、楽しいですw

一人で使うのに適している

プロジェクトを共有して複数人でつかうこともできるのですが、一人で使う時に気軽に使えるのがすごくよいです。

日々のタスクを自動で報告してみる

会社で、毎朝Slackの所属チームのチャンネルに、昨日やったことと今日やることを投下して、メンバーに共有をしています。
せっかくTodoistをつかっているので、昨日終わらせたものと今日やることにはいってるものをそのままslackに投げたいなーとおもいました。
でもいちいち探してコピーするのは面倒だし…
ということで、Todoist APIとSlack APIをつかって、
Todoistで管理している仕事の昨日やったこと・今日やることをSlackに投げることにしました。

今回は、http://todoist.com/API/Todoist Standard APIの、

  • /API/getUncompletedItems
  • /API/getAllCompletedItems

を使って、昨日やったことと今日やることを取得することに。

どちらも、この日のという指定をして取ることができなかったので、
全部とってきて、プログラム側で処理をしています。
(コード適当でごめんなさい)

#todoist.rb 
require 'open-uri'
require 'json'

class Todoist
    API_URL = 'https://todoist.com/API/'
    TOKEN = 'とーくん。設定から取ってこれる'

    def getAllCompletedItems(project_id)
        request_url = create_url('getAllCompletedItems', {:token => TOKEN, :project_id => project_id})
        api_request(request_url)
    end

    def getUncompletedItems(project_id)
        request_url = create_url('getUncompletedItems', {:token => TOKEN, :project_id => project_id})
        api_request(request_url)
    end

    def api_request(request_url)
        res = open(request_url)
        code, message = res.status

        if code == '200'
            return JSON.parse(res.read)
        end
    end

    def create_url(action, params)
        API_URL + action + '?' + URI.encode_www_form(params) 
    end

end
#slack.rb
require 'uri'
require 'net/http'

class Slack
    TOKEN = 'slackのとーくん';

    def post_message(text)
        `curl -F "token=#{TOKEN}" -F "channel=#{'チャンネル名'}" -F "username=#{'投稿名'}" -F "text=#{text}" -F "icon_emoji=>#{'アイコン代わりの絵文字'}" https://slack.com/api/chat.postMessage`
    end
end
# daily_standup.rb
require 'date'
require './todoist.rb'
require './slack.rb'

project_id = 'とってきたいプロジェクトのID'

todoist = Todoist.new
all_complete_items = todoist.getAllCompletedItems(project_id)
uncomplete_items = todoist.getUncompletedItems(project_id)

yesterday_complete_tasks = ''
all_complete_items['items'].each do |task|
    if Date.today - 1 === Date.parse(task['completed_date']) then
        yesterday_complete_tasks << "#{task["content"]} \n"
    end
end

today_tasks = '' 
uncomplete_items.each do |task|
    unless task['due_date'].nil? then
        if Date.today === Date.parse(task['due_date']) then
            today_tasks << "#{task["content"]} \n"
        end
    end
end

daily_standup = <<"EOS"
:panerun: しなもん :panerun:
# 昨日やったこと
#{yesterday_complete_tasks}
# 今日やること
#{today_tasks}
EOS
print daily_standup

slack = Slack.new
slack.post_message(daily_standup);

あとで綺麗にして、githubにあげます(TODO)

そうすると、
f:id:sinamon129:20141211101316p:plain
こういう感じで投稿できるようになります!
あとは、cronで毎日9時半(定時)にセットすれば手を離してても報告できますね!(´・艸・`)

明日は、同期で音ゲーをこよなく愛する@gomachan46です!