高木のブログ

GASで作った「Togglの作業時間をPixelaで可視化する」やつをRuby + GitHub Actionsにリプレイスした

2020/10/11

表題通り、以前書いた記事(Togglの作業時間をPixelaで可視化する)で作ったGASのリプレイス

GASからRuby + GitHub Actionsにリプレイスした理由

  • Github Actionsの利用規約が変更され、サーバーレスコンピューティング目的で使用しても良くなった
  • 上記により、わざわざGASにする理由がなくなった
  • GASより慣れているRubyの方がメンテしやすい

コード

https://github.com/ytkg/toggl_to_pixela

変更点は実行間隔を1日毎から1時間毎に変えたくらいでロジック等は変更していない
そっくりそのままRubyに移植しただけ
コケたらGithubからの通知で気づけるのでエラーハンドリングも追加していない

スクリプトファイル

app.rb
require 'dotenv/load'
require 'base64'
require 'faraday'
require 'json'
require 'pixela'

class Toggl
  def initialize(token)
    @token = token
  end

  def summary(user_agent, workspace_id, since, _until)
    url = 'https://api.track.toggl.com/reports/api/v2/summary'
    params = {
      user_agent: user_agent,
      workspace_id: workspace_id,
      since: since,
      until: _until
    }
    headers = { 'Authorization' => "Basic #{Base64.encode64(@token + ':api_token')}" }
    res = Faraday.get(url, params, headers)
    JSON.parse(res.body)
  end
end

date = Date.today - 1

toggl = Toggl.new(ENV['TOGGL_API_TOKEN'])
summary = toggl.summary('toggl_to_pixela', ENV['TOGGL_WORKSPACE_ID'], date, date)
minutes = summary['total_grand'] / 1000 / 60

client = Pixela::Client.new(username: ENV['PIXELA_USERNAME'], token: ENV['PIXELA_TOKEN'])
client.create_pixel(graph_id: 'task-durations', date: date, quantity: minutes)

ワークフローファイル

.github/workflows/ruby.yml
name: Ruby

on:
  schedule:
    - cron:  '0 * * * *'
jobs:
  ruby:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby
      uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
      with:
        ruby-version: 2.7
    - name: Install dependencies
      run: bundle install
    - name: Run script
      env:
        TOGGL_API_TOKEN: ${{ secrets.TOGGL_API_TOKEN }}
        TOGGL_WORKSPACE_ID: ${{ secrets.TOGGL_WORKSPACE_ID }}
        PIXELA_USERNAME: ${{ secrets.PIXELA_USERNAME }}
        PIXELA_TOKEN: ${{ secrets.PIXELA_TOKEN }}
      run: bundle exec ruby app.rb

おわり

Github Actionsにもだいぶ慣れてきて良きだな

参考


Pixela