Rails에서 스프레드시트를 정기적으로 다시 작성
9674 단어 Railsspreadsheet
소개
서비스의 KPI 등을 스프레드 시트로 관리하는 것이 많다고는 생각합니다만, 매회 데이터 취해 스프레드 시트에 기입해, 를 하고 있으면 뭐 그렇게 시간의 낭비이므로 Rails 앱으로부터 직접 스프레드시트 시트에 기입하도록 했습니다.
게다가 KPI의 계측이므로 매일 아침 데이터를 갱신할 수 있도록 배치도 짜도록(듯이) 했습니다.
이번에는 다음을 사용하고 있습니다.
구현
만드는 것
Rails 데이터베이스에서 당월 회원 가입한 사용자 수를 일별로 취득하도록 합니다.
사용자는 User 모델입니다.
자격 증명 얻기
API를 통해 스프레드시트를 편집하려면 자격 증명이 필요하므로 Google Developers Console에서 정보를 가져옵니다.
프로젝트 만들기
는 프로젝트를 만듭니다.
API 사용
그런 다음 라이브러리에서 스프레드시트를 검색하고 활성화하여 스프레드시트 API 사용을 활성화합니다.
자격 증명 만들기
우선은 OAuth 동의 화면에서 조작합니다. 응용 프로그램 등을 채우고 저장합니다.
계속해서 OAuth 클라이언트를 작성해 갑니다.
작성한 클라이언트 목록에서 이름을 클릭하여 클라이언트 ID와 클라이언트 비밀을 확인할 수 있습니다.
새로 고침 토큰 얻기
계속해서 방금 작성한 클라이언트의 정보를 바탕으로 리프레시 토큰을 취득합니다.
쓰기의 번거롭게 되어 버렸으므로 이쪽의 방법은 이 기사 를 참고로 해 봐 주세요.
Rails 측 구현
이번에는 여러가지 처리를 작업 속에 써 갑니다.
Google API를 이번 처리 이외에도 사용할 가능성을 가미하여
ApplicationJob
에 API 인증 처리를 작성하여 다른 작업에서도 호출할 수 있도록 했습니다. (사용 가능성을 가미해라고 할까, 나의 경우는 복수 사용하고 있기 때문에)app/jobs/application_job.rb
class ApplicationJob < ActiveJob::Base
def google_drive
credentials = Google::Auth::UserRefreshCredentials.new(
client_id: ENV['KPI_SHEET_CLIENT_ID'],
client_secret: ENV['KPI_SHEET_CLIENT_SECRET'],
scope: %w(https://www.googleapis.com/auth/drive https://spreadsheets.google.com/feeds/),
redirect_uri: 'http://storys.jp'
)
credentials.refresh_token = ENV['KPI_SHEET_REFRESH_TOKEN']
credentials.fetch_access_token!
GoogleDrive::Session.from_credentials(credentials)
end
end
실제로 스프레드시트에 쓰는 과정은 다음과 같습니다.
ws[1, 1]
는 시트의 1행째의 1열째, ws[1, 2]
는 1행째의 2열째입니다.마찬가지로
ws[2, 1]
는 두 번째 행의 첫 번째 열입니다.app/jobs/export_kpi_job.rb
class ExportKpiJob < ApplicationJob
def perform
spreadsheet = google_drive.spreadsheet_by_key('スプレッドシートのキー')
ws = spreadsheet.worksheet_by_title('該当のシートの名前')
ws[1, 1] = ''
ws[1, 2] = '新規登録ユーザー数'
current_date = Date.current
beginning_day_of_month = current_date.beginning_of_month
end_day_of_month = current_date.end_of_month
(beginning_day_of_month..end_day_of_month).each.with_index(2) do |date|
ws[index, 1] = date
ws[index, 2] = Users.where(created_at: date.beginning_of_day..date.end_of_month)
end
ws.save
end
end
정시 처리 설정
정시 처리에는
gem 'whenever'
를 사용합니다.whenever 자체의 사용법은 이쪽을 참고해 주세요.
우선 작업 만들기
lib/tasks/rails_sample.rake
namespace :rails_sample do
desc 'KPIをスプレッドシートに吐き出す'
task :export_kpi => :environment do
ExportKpiJob.perform_now
end
end
이번에는 매일 아침 4시에 태스크가 달리도록 합니다.
config/schedule.rb
every 1.day, at: '4:00 am', role: [:app] do
rake 'rails_sample:export_kpi'
end
요약
이상으로 Rails로부터 스프레드 시트를 정시에 재기록할 수 있었습니다.
이런 작은 자동화를 포함해, 자신은 물론 다른 사람의 일의 효율을 올려 주는 것이 엔지니어가 할 수 있는 공헌의 하나인가라고 생각하기 때문에 앞으로도 계속하고 싶은 소존.
Reference
이 문제에 관하여(Rails에서 스프레드시트를 정기적으로 다시 작성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirotakasasaki/items/9217ae6397140e6f110b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)