飛ばねぇ馬はただの馬。

Life is too short for bad code.

Geekbotのgemを作った話

こんにちは、Misoca開発チームの@Pranc1ngPegasusです。

今年の7月からMisocaにjoinしました。自己紹介はこちら

この記事は、Misoca Advent Calendar 2017の11日目の記事です。

突然ですが、みなさんはGeekbot(https://geekbot.io) を使っていますか? GeekbotはSlackプラグインの1つで、設定した時間に質問をしてくれて、回答内容をSlackチャンネルに流してくれるというツールです。 Misocaでは主にプロジェクト朝会前の情報共有に使っています。

プロジェクト開始時には必ず設定するので、自動化ツールを作ることにしましたが、Geekbotにはgemがなかったので作りました。

github.com

使い方

リポジトリのREADMEにも書いてあるのですが、改めて紹介します。 レスポンスは全てjson形式で返ってきます。

使い始めるまで

  1. まず、ここにアクセス、Slack認証をしてGeekbotのAPI_TOKENを取得します。
  2. それを.envなどの設定ファイルに貼り付けます(もちろん直書きしてもいいです)。
  3. client = Geekbot::Client.new(access_token: ENV['<your_access_token>'])のようにして準備完了です。

チームメンバーの一覧を取得する

client.index_teams
#=> GET /v1/teams

reportの一覧を取得する

client.index_reports
#=> GET /v1/reports

standupの一覧を取得する

client.index_standups
#=> GET /v1/standups

特定のstandupを取得する

client.show_standup(id: xxx)
#=> GET /v1/standups/:id

standupを作成する

※ 現在Geekbot管理元に問い合わせ中ですが、APIから作成したstandupをUI側から操作することができません。

client.create_standup(params: param)
#=> POST /v1/standups

standupを更新する

client.update_standup(id: xxx, params: param)
#=> PATCH /v1/standups/:id

standupを置き換える

※ 現在Geekbot管理元に問い合わせ中ですが、現在リクエストを送ると500エラーが返ってきます。

client.replace_standup(id: xxx, params: param)
#=> PUT /v1/standups/:id

standupを削除する

client.destroy_standup(id: xxx)
#=> DELETE /v1/standups/:id

必要なparams

standupを作成したり、更新したりする場合に必要なパラメータは以下のようになっています。 リクエストを送信する際には全てのパラメータを送ってあげる必要があるようです。

{
  "name": "MyStandup",
  "channel": "#general",
  "time": "10:30:00",
  "timezone": "Europe/London",
  "wait_time": 15,
  "days": [ "Mon", "Wed", "Fri" ],
  "questions": [ { "question": "What did you do since yesterday?" }, { "question": "What will you do today?" } ],
  "users": [ 10, 11, 12 ]
}

感謝

Geekbot管理元のチャットサポートに問い合わせをしたときに、所在地のギリシャが早朝4:30にも関わらず爆速で返答をしてくれたPanosさんに感謝します。

f:id:pranc1ngpegasus:20210828211150p:plain

gemを作成する上で、APIから作ったものがUIで編集できなかったり、エラーが返ってくるメソッドがあったりしましたが、 Panosさんに報告したところ、開発チームに連絡をして、現在改修に向かっているとのことなので、近いうちに全てのメソッドが使えるようになると思われます。

最後に

ないものは作る!というものづくりの精神でgemを作ってみました。 はじめてgemを作ってみたのですが、APIの動きやレスポンスに対するRuby側の動きなど、私自身のRubyへの理解が深まり、とても良い経験だったと感じています。

Misoca Advent Calendar 2017、明日の担当は@lulu-ululです。