自己紹介
初めての方ははじめまして、そうでない方はいつもありがとうございます
- IT技術者 7年生
- PHPer 5年生(休学中)
- Rubyist 2年生
- Vimer 4年生
- Scrum Master 3年生
だいたいそんな感じのエンジニアがお送りするLivesense Advent Calendar 2015の17日目になります
今年やったこと
今年私がやったことをふりかえってみると
- 社内ツールの移行(RoR)
- 社内バッチの移行(Rake)
- 人力でやっていたKPIエクスポートの自動化(Google Spreadsheet)
- 人力でやっていたコンバージョンイベント毎の連絡の自動化(HipChat)
- 人力でやっていたデプロイ毎の連絡の自動化(HipChat)
- 人力でやっていたイベントアジェンダのコピペ自動化(Confluence)
- 社内でのM:tG部の立ち上げ
とこんなかんじでした
せっかくなので自分の備忘も兼ねて、Spreadsheet/HipChat/Confluenceの自動化について記事にしたいと思います
KPIエクスポートの自動化(Google Spreadsheet)
まずはGoogle Spreadsheetから
gem install 'google_drive'
もしくは
gem 'google_drive'
そして
require 'google_drive'
oauth2 = OAuth2::Client.new(
'[ID]',
'[SECRET]',
site: 'https://accounts.google.com',
token_url: '/o/oauth2/token',
autorize_url: '/o/oauth2/auth'
).refresh!
auth_token = OAuth2::AccessToken.from_hash(oauth2, refresh_token: '[TOKEN]')
session = GoogleDrive.login_with_oauth(auth_token.token)
この"session"を使ってGoogle Spreadsheetをこねこねします
ここで書いてる[ID][SECRET][TOKEN]あたりはGoogle API OAuth2.0のアクセストークン&リフレッシュトークン取得手順メモをご参考に各自ご取得ください(放り投げ)
次にこねこねしたいGoogle SpreadsheetのURLを確認してhttps://docs.google.com/spreadsheets/d/[この辺の文字列]/edit
を控えてください
spreadsheet = session.spreadsheet_by_key('[この辺の文字列]')
worksheet = spreadsheet.worksheet_by_title('[こねたいシート名]')
これでシートの取得まで完了。あとは
# 行数
worksheet.num_rows
# 列数
worksheet.num_cols
# セル値を取得
puts worksheet[1,1]
# セル値を書き換え
worksheet[1,1] = 'AA'
# 変更を保存
worksheet.save
# 1行目の文字列をキーとした連想配列として各行を取得
worksheet.list.each { |row| puts row.to_h }
あとは良しなに
注意
- あんまり長時間の作業だとAuth Tokenが期限切れすることがあるのでその場合は
auth_token = OAuth2::AccessToken.from_hash(oauth2, refresh_token: [TOKEN], expires_at: 86_400)
- 当たり前かもしれませんが、セルをまるごと削除したり(値の削除ならOK)、シートを削除したりするとリンクしている他のシートからの参照がはがれます
コンバージョンイベント毎の連絡の自動化(HipChat)
おなじのりでHipChatも
gem install 'hipchat'
もしくは
gem 'hipchat'
そんでもって
require 'hipchat'
client = HipChat::Client.new('[TOKEN]')
[TOKEN]のとこに入れるtokenの取得方法についてはHipChat API Documentation VERSION 2を参照
# Roomへのポスト
client['[ルーム名orルームID]'].send('[ポストに表示させたいユーザー名]', 'Hello World')
# メンション名取得
puts client.user('[登録メールアドレス]').view.user['mention_name']
あとは良しなに
注意
- なんかメンションがとばない、とかいう場合には
# メッセージ大量発行時には注意!!
client[[ルーム名orルームID]].send([ポストに表示させたいユーザー名], 'Hello World', notify: true)
イベントアジェンダのコピペ自動化(Confluence)
これもrubyで…って言いたかったんですがなんかいいのがみつからなかったのでconfluence-cliで
wget https://marketplace.atlassian.com/download/plugins/org.swift.confluence.cli/version/390 -O confluence-cli.zip
unzip confluence-cli
cd confluence-cli-3.9.0
# 下記でHelpっぽいのがでればおk
sh ./confluence.sh
そして申し訳程度のRuby成分
def confluence(options)
command = './confluence.sh -s [confluenceのURL] -u [ユーザ名] -p [パスワード]'
options.each do |k, v|
command = "#{command} #{k.length == 1 ? "-#{k}" : "--#{k}"} #{v}"
end
end
こんな関数を用意して
# ページのID(https://[confluenceのURL]/pages/viewpage.action?pageId=[この辺の数字])
page_id = '[この辺の数字]'
# 小ページ一覧をCSV形式で取得
puts confluence(a: 'getPageList', id: page_id, children: '', outputFormat: 2)
# ページをコピペ
confluence( a: 'copyPage', id: page_id, newTitle: 'Qiita用コピペ', parent: page_id)
# ページ中の文字列を正規表現で検出して置換(例として日付を2015/12/16に置換)
confluence( a: 'modifyPage', id: page_id, findReplaceRegex: '"[0-9]{4}/[0-9]{2}/[0-9]{2}:2015/12/16"')
こんなかんじのを組み合わせて良しなに
あわせて読みたい
上記のコマンドで言うところの「:a」、実際のコマンド上で言うところの「--action(-a)」の使用例が一杯のってます(が正直試してみないとわからんことだらけ)
Confluence Command Line Interface / User's Guide / Examples
おわりに
とまあいろんなひととネタかぶりしつつ、本年のAdvent Calenderとさせていただきます
来年も手作業を撲滅する一年でありますように