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にもだいぶ慣れてきて良きだな
参考
GitHub Actions、いつのまにかサーバレスコンピューティング目的でも使えるようになっていてビビった、最強じゃんhttps://t.co/uFWTJVU89E pic.twitter.com/nokVFryKj2
— hpp (@hpp_ricecake) September 4, 2020