Help us understand the problem. What is going on with this article?

Rubyで簡単自動化(Confluence/Hipchat/Google Spreadsheets)

More than 3 years have passed since last update.

自己紹介

 初めての方ははじめまして、そうでない方はいつもありがとうございます

  • 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から

bash
gem install 'google_drive'

もしくは

Gemfile
gem 'google_drive'

そして

spreadsheet.rb
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.rb
spreadsheet = session.spreadsheet_by_key('[この辺の文字列]')
worksheet = spreadsheet.worksheet_by_title('[こねたいシート名]')

これでシートの取得まで完了。あとは

spreadsheet.rb
# 行数
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が期限切れすることがあるのでその場合は
spreadsheet.rb
auth_token = OAuth2::AccessToken.from_hash(oauth2, refresh_token: [TOKEN], expires_at: 86_400)
  • 当たり前かもしれませんが、セルをまるごと削除したり(値の削除ならOK)、シートを削除したりするとリンクしている他のシートからの参照がはがれます

コンバージョンイベント毎の連絡の自動化(HipChat)

おなじのりでHipChat

bash
gem install 'hipchat'

もしくは

Gemfile
gem 'hipchat'

そんでもって

hipchat.rb
require 'hipchat'

client = HipChat::Client.new('[TOKEN]')

[TOKEN]のとこに入れるtokenの取得方法についてはHipChat API Documentation VERSION 2を参照

hipchat.rb
# 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

bash
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成分

confluence.rb
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

こんな関数を用意して

confluence.rb
# ページの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とさせていただきます
来年も手作業を撲滅する一年でありますように

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした