「Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ」を読んで

## きっかけ

Facebookをだらーっと見ながら朝通勤していたら、 @imura_design さんが以下の記事を紹介しているのをみた。(全然関わりはないんですけど、いろいろ参考にさせていただいています)

■Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ
 〜 Problemが10分で解決するチャットを作ろう
<a href="http://c16e.com/1511101558/">http://c16e.com/1511101558/</a>

これもまたざーっと読んでいたんですが、単純におもしろーってなりました。

## 実際

実際自分と近しいことをしている人で常駐の人はいないわけで、上の記事の効果が発揮されるような環境でもないかなと思ったわけだけども、もしかしたら自分の環境でも以下の2つの効果はあるかもしれないと思った。

* やるべきことをつぶやいていくことで、自分が外部から見られている感を演出できる
* ある程度リアルな感じでつぶやいていくことで、非エンジニアの人からの「あの人何やっているんだろ感」を減らせるかもしれない、なんかゆるい感じがすごくいい。

というわけで善っぽいことは急げ、早速今日から始めてみた。

## やったこと

* slackのchannelに#times_<name>を作った。
* とりあえずつぶやき続きてみた。

これだけ笑

集中するとき音楽を聞くことが許されるているの環境なので、聞いている音楽とかつぶやいてみた。
あとはやったことをとりあえずつぶやいてみた。
もともと書くの好きだからそんなに手間じゃないのと、なんとなく上記記事とは違う良い効果がありそうな気がした。
ディレクションの人にもさらっとこんなこと勝手にやってますよーって伝えて、みてもらうことにした。

## 今後

記事にも書いてあったんだけど、やっぱりこのシステムはチームの人間関係がひどく大事な気がした。ひとりでも乱す人がいるだけで全部おじゃんになりそうな気がする。だから雰囲気作る人も同様に大事そうだ。

自分もたぶんtimesをみられて、圧っぽいのかけてくる人がいたら即効やめる。たぶん。

### せっかくなので

思い立ったタイミングでslackにつぶやいていくと、一日何していたかがなんとなく掴めそうなデータになりそうだったので
このチャネルの発言をまとめて自分用の日報にすることにした(今のところ特に会社に日報はない)。

業務終了後にサササッと書こうと思ったら意外と時間かかってしまった。

```times.rb
require 'open-uri'
require 'json'
require 'time'
​
module Slack
  class Times
    def initialize(team, user, token)
      @team    = team
      @user    = user
      @channel = "times_#{user}"
      @token   = token
    end
​
    # 今日一日のメッセージをコピペする形にするところ
    def today
      today = Date.today
      from  = Time.parse(today.to_s)
      to    = Time.parse((today + 1).to_s)
​
      today_history = channel_history(from, to).sort
​
      puts "今日の感じ"
      puts "```"
      today_history.each do |time, message|
        puts time
        puts "#{message['user']}: #{message['text']} \n\n"
      end
      puts "```"
    end
​
    private
​
    # 特定期間のメッセージを抽出
    # ※今気づいたけどfrom toの使い方間違えたAPIに投げる予定だったのに使っていない
    def channel_history(from, to)
      channel_id()
      uri = "https://slack.com/api/channels.history?token=#{@token}&amp;channel=#{@channel_id}"
      responce = open(uri)
      if responce.status[0] == '200'
        json = JSON.parse(responce.read)
      else
        puts "HTTP STATUS ERROR. It is #{responce.status[0]}"
        exit 1
      end
      messages = {}
      json["messages"].each do |message|
        user = convert_to_user(message["user"])
        text = message["text"]
        time = Time.at(message["ts"].to_i)
​
        if (time &gt; from and time &lt; to)
          messages[time] = {
            "user" =&gt; user,
            "text" =&gt; text,
          }
        end
      end
      messages
    end
​
    # メッセージをとった時にuserのidがでるんだけど、名前がほしいので取りに行く人
    def convert_to_user(id)
      uri = "https://slack.com/api/users.info?token=#{@token}&amp;user=#{id}"
      responce = open(uri)
      if responce.status[0] == '200'
        json = JSON.parse(responce.read)
      else
        puts "HTTP STATUS ERROR. It is #{responce.status[0]}"
        exit 1
      end
      json["user"]["name"]
    end
​
    # channel名は知っているんだけど、idじゃないとhistoryを呼べないので変換
    def channel_id
      uri = "https://slack.com/api/channels.list?token=#{@token}"
      responce = open(uri)
      if responce.status[0] == '200'
        json = JSON.parse(responce.read)
      else
        puts "HTTP STATUS ERROR. It is #{responce.status[0]}"
        exit 1
      end
      json["channels"].each do |channel|
        if channel["name"] == @channel
          @channel_id = channel["id"]
        else
          "The channel is not found."
        end
      end
    end
  end
end
```

newしてtodayするとなんとなく雑な感じにだだだと文字列が表示されると思います。
明日になったら重複しているコードとかまとめよう。

例えば

```run.rb
$LOAD_PATH << __dir__
require 'class/times'

TEAM      = "teamname"
USER      = "name"
TOKEN     = "xoxp-0000000-00000000000-00000000000"

times = Slack::Times.new(TEAM, USER, TOKEN)
times.today

exit 0
```

みたいな。

## そんな感じで

今日から始まったこれですがどうなるかわかりません。
進展があったら報告しませう。しませう。