やりたいこと
あるdeployを機にパフォーマンスやPV/売上が変ることってありますよね。最近のdeployなら追えますが、半年前のdeployってなると記憶も記録もなくて困りませんか?
そんな適当なのはウチだけですか?
deployの記録をSpreadSheetへ記録したくて、こんなもの考えました。
準備
Google Formを作成
Google SpreadSheet & Formで記録しておきたい項目のフォームを作ります。ウチではこんな項目を保存します。
- デバイス
- 変更概要
- 担当者
- リビジョン
- タイムスタンプ(自動で記録される項目)
フォームの設定で回答は誰でもできるようにしておきましょう。
回答者が記録されるシートを閲覧できないようにしておきましょう。
Google Formから必要な情報をメモ
作成したフォームのHTMLを表示し、次の項目を控えておきます。
- Form action URL
- 各入力項目のname属性
Capistranoタスクを作成
deploy/配下にこんなファイルを用意します。
deploy/record_history.rb
namespace :deploy do
task :record_history do
prompt = HighLine.new
this_deploy = {
description: prompt.ask('deployによる変更概要を入力してね'),
at: Time.now.strftime("%Y-%m-%dT%H:%M"),
device: 'PC',
who: `whoami`,
memo: current_revision
}
uri = URI.parse("https://docs.google.com/a/dongoon.jp/forms/d/[Formによって違います]/formResponse")
Net::HTTP.start(uri.host, uri.port, use_ssl: true){|http|
request = Net::HTTP::Post.new(uri.path)
params = {
"entry.123400001" => this_deploy[:description],
"entry.123400002" => this_deploy[:device],
"entry.123400003" => this_deploy[:who],
"entry.123400004" => this_deploy[:revision],
}
request.set_form_data(params)
http.request(request)
}
end
end
config/deploy/production.rb
load 'config/deploy/record_history'
after "deploy", 'deploy:record_history'
以上で本番環境のdeployの時のみ、変更概要を入力するプロンプトが表示され、その内容がSpreadSheetに記録されちゃいます。上の例では、操作するユーザIDとdeployするリビジョンを自動的に登録しています。