SlideShare a Scribd company logo
Github Actionsで
GASのデプロイを自動化した
2021/8/12 #自動化エンジニアのLT会 Shiori Sawada
Twitter @jamgodtree
株式会社ログラス所属
趣味: 美味しい野菜を食べること
Topic
● GASをログラスではどう活用しているのか?
● これまでのデプロイ方法と課題点
● どのように自動化したか?
GASとはなにか?
● GAS = Google Apps Scriptの略
● JavaScriptベースのスクリプト言語
● Googleのサービスと連携し、自動化できる
○ カスタムメニューをGoogleドキュメントに追加する
○ Googleスプレットシートにカスタム関数を作成
○ Googleサービスの拡張するアドオンとを作成する
○ 公式ドキュメントより
GASをログラスではどう活用しているのか?
ログラスについて
GASをログラスではどう活用しているのか?
● Googleスプレッドシートからアドオン経由で予算策定の数値を更新するため
に使われています
...
{
"code": "科目コード1",
"yearMonth": "2020年10月",
"value": 200
},
{
"code": "科目コード1",
"yearMonth": "2020年10月",
"value": 200
},
...
ログラスにとって大事な機能の一つ
● 手動リリースによるミスを防ぎたい
● 自動化されていないことによりリリースを忘れたくない
これまでのデプロイ方法と課題点
一般的なアドオンのリリースの流れ
今回はここまで自動化しました
GASへのデプロイ操作は、CLIで(claspコマンド)
● Google公式のGASデプロイ用CLIツールを使用しています
GASへのデプロイ操作は、CLIで(claspコマンド)
● Google公式のGASデプロイ用CLIツールを使用しています
● コマンド実行するディレクトリ直下に以下のファイルを配置
● 検証環境用と本番環境用とpushする先を変えるために以下のファイルを書き
換えている
課題点
● ローカル環境でソースコードをpushすると以下の危険性がある
○ ブランチを正しく切り替えなければ、開発途中のソースコードをpushし
てしまう
○ ブランチを正しく切り替えていても最新のソースコードをpullしていな
ければ同じ事がおきる
● プロジェクトIDを間違えてGASへpushすると検証環境に反映したつもりが、
本番のGASへpushしてしまう可能性がある
● ローカル環境の環境差異(Version)による影響がある
● リリースすることを忘れる
● リリースのやり方を知っている一部の人しかできない
どのように自動化したのか?
Github Actionsへ移行
Hello World
GASのデプロイを自動化するためのポイント3選
①テストとデプロイのタイミングを分ける
● デプロイは、GASのコードが管理されているPathかつ、developとmasterブ
ランチにpushされた場合にのみ実行する
①テストとデプロイのタイミングを分ける
● GASのテスト実行は、ブランチの指定なくGASのコードが管理されている
Pathにpushされたら毎回実行する
②検証環境と本番環境へ環境差分の吸収
③GASの認証について
● GASへpush時にGoogleアカウントの認証が必要になるのですが、ブラウザ
へ遷移しブラウザ上での確認が必要になります。
● そのままCIで動作させると一生終わらないJobに.....
● また、ログイン後、1週間でアクセストークンが切れてしまう
③GASの認証について
● GASへpush時にGoogleアカウントの認証が必要になるのですが、ブラウザ
へ遷移しブラウザ上での確認が必要になります。
● そのままCIで動作させると一生終わらないJobに.....
● また、ログイン後、1週間でアクセストークンが切れてしまう
③GASの認証について
● GASの認証は1度認証すれば、ずっと使い続けられる仕様
○ 認証するとローカルにjsonファイルが作成される
○ 仕組みとして、アクセストークンの期限が切れていたらリフレッシュトークンでアクセスト
ークンを再取得する
○ ローカルに作成された認証用のjsonファイルをCI上に設置することで解決しました。
● ただ、issueにもあるようにサービスアカウントでの認証ができるようになる
ともっとモダンに自動化できるようになりますね
○ https://github.com/google/clasp/issues/225
○ 参考
おまけ: 地味に大事Slack通知
● 成功時
○ リリースバージョンの通知
○ リリースへの促し
● 失敗時
解決できたかな!!
● ローカル環境でソースコードをpushすると以下の危険性がある
○ ブランチを正しく切り替えなければ、開発途中のソースコードをpushし
てしまう
○ ブランチを正しく切り替えていても最新のソースコードをpullしていな
ければ同じ事がおきる
● プロジェクトIDを間違えてGASへpushすると検証環境に反映したつもりが、
本番のGASへpushしてしまう可能性がある
● ローカル環境の環境差異(Version)による影響がある
● リリースすることを忘れる
● リリースのやり方を知っている一部の人しかできない
まだやりきれていないこと
● アドオンへのリリースはGCPから手動なので、第2弾として自動化へ!!
Hello World
We are Hiring!!
https://job.loglass.jp/

More Related Content

PDF
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PDF
はじめてのGit forデザイナー&コーダー
PDF
입문 Visual SLAM - 5장 카메라와 이미지
PPTX
GameInstance에 대해서 알아보자
PDF
Gofのデザインパターン stateパターン編
PDF
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
PPT
ジェネリクスの基礎と クラス設計への応用
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
メルカリ・ソウゾウでは どうGoを活用しているのか?
はじめてのGit forデザイナー&コーダー
입문 Visual SLAM - 5장 카메라와 이미지
GameInstance에 대해서 알아보자
Gofのデザインパターン stateパターン編
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
ジェネリクスの基礎と クラス設計への応用

What's hot (20)

PDF
規格書で読むC++11のスレッド
PDF
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
PDF
[NDC 2018] 유체역학 엔진 개발기
PDF
シェーダだけで世界を創る!three.jsによるレイマーチング
PPTX
つぶやきGLSLのススメ
PDF
【Unity】 Behavior TreeでAIを作る
PPTX
Unreal python
PDF
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
PDF
게임 스타트업 시작하기
PDF
いつやるの?Git入門 v1.1.0
PDF
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
PDF
物体検出エラーの分析ツール TIDE
PDF
Singularityで分散深層学習
PDF
Code Review - DevOn2013
PDF
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
PPTX
レガシーコードに向き合ってみた話
PDF
ノンプログラマでも今日から使える「Git」でバージョン管理
PDF
NDC2019 - 게임플레이 프로그래머의 역할
PDF
(책 소개) 실전 카프카 개발부터 운영까지
PPTX
PostGIS - National Education Center for GIS: Open Source GIS
規格書で読むC++11のスレッド
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
[NDC 2018] 유체역학 엔진 개발기
シェーダだけで世界を創る!three.jsによるレイマーチング
つぶやきGLSLのススメ
【Unity】 Behavior TreeでAIを作る
Unreal python
DeepVIO: Self-supervised Deep Learning of Monocular Visual Inertial Odometry ...
게임 스타트업 시작하기
いつやるの?Git入門 v1.1.0
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
物体検出エラーの分析ツール TIDE
Singularityで分散深層学習
Code Review - DevOn2013
UE4ディープラーニングってやつでなんとかして!環境構築編(Python3+TensorFlow)
レガシーコードに向き合ってみた話
ノンプログラマでも今日から使える「Git」でバージョン管理
NDC2019 - 게임플레이 프로그래머의 역할
(책 소개) 실전 카프카 개발부터 운영까지
PostGIS - National Education Center for GIS: Open Source GIS
Ad

Github Actionsで GASのデプロイを自動化した

Editor's Notes

  • #2: github actionsでGASのデプロイを自動化した話をしていきたいと思います。
  • #3: 澤田史織といいます。 今はログラスという会社で働いています。
  • #4: 今日は、 ログラスでGASをどう活用しているのか 今までどんな方法でデプロイシどんな課題があったのか、 そこから自動化しどう改善されたか のこの3つのtopicについて話していきます。
  • #5: GASとはなにか? Google Apps Scriptのことで略してGASですといいます。 使ったことある方もいるかたも結構いるかもしれませんが、 スクリプト言語でもあるため、比較的手軽な開発で向きかなと思います。 googleのサービスと連携し、拡張してくれるサービスです。
  • #6: GASをログラスではどのように活用しているのか
  • #8: loglassでは、事業や会社のデータを一括で管理しその進捗を可視化することで より良い経営判断を推進をすること可能にすることができるSaasプロダクトです。
  • #9: その中でも 会社の予算を更新するときにログラスとGoogleスプレットシートを連携させる所で利用しています。 左の画像のGoogleスプレッドシートからアドオンタブからの更新申請ボタンを押してもらう裏でGASが動作し、更新すべき予算データをログラスへ送ってくれる仕組みです。
  • #10: 重要機能のひとつなので、とにかくリリースによる事故をなくしたいというのとわすれ
  • #11: コレまでのデプロイ方法と課題点
  • #12: 一般的なアドオンのリリースについて紹介します。 ログラスでもおなじ手法です。 アドオンへのリリースでは3段階あります。 まず ソースコードをGASへpuhsし、、pushした成果ぶつに対しversionをきります。versionをGCP画面から更新することでリリースが完了します。
  • #13: 今回はこの赤枠の部分を自動化したので、この部分にフォーカスして話していきます。 まず①でソースコードをGASへpushですが、 こちらはGoogle公式のcliツールを使用ししてローカルからコマンドを実行することで対応していました。
  • #14: ソースコードをGASへpushするのにcliを使っています。 Google公式が作っているcliツールなのでGAsの開発する人は大体コレを使うかと思います。
  • #15: コマンド実行時にjsonファイルを設置するのですが、 ここにどのディレクトリ配下をpushするかの指定と、GASのプロジェクトのIDを設定します。 検証環境と本番環境でGASのプロジェクトを分けているため、ここの向き先を変えることによりわけてデプロいができます。 がドキュメントを見るかGASプロジェクトを見に行ってIDを書き換えてpushするのが毎回手間でした。
  • #16: そいう事情からいくつか課題点がありました。 ローかる環境でソースコードをpushすると、ブランチの切り替え忘れによる中途半端なソースコードのpush。や最新化忘れ等があります。 また、先程の検証環境と本番環境のID切り替えを人力でやっていたこともあり、検証環境にpushするつもりが本番にpushしてしまったりヒヤリ・ハットは何回かありました。 ローカル環境のnode versionやnpm cliのversionによりリリース時の事故もありました。 コレは私が踏み抜いたのですが、ある設定が1年以上前から入っていたのに、私がローカルからリリースしたら正しく適用され動作しはじめてリリース失敗したことがありました。 知っているい人いないとリリースできないという属人化が起きていました・
  • #17: コレをどのように自動化したのか
  • #18: Github actionsへ移行しました!
  • #19: GASのデプロイ自動化するのに気をつけた3点紹介します。
  • #20: ①テストとデプロイのタイミングを制御しました。 デプロイは、developマージ時に検証環境へdeployする masterマージ時に本番環境へdeployする 仕組みにしています。
  • #21: GASのテストはブランチ関係なく、pushされた場合にテスト実行するようにしています
  • #22: ②つめは、検証環境へpushするのか本番環境にpushするのかでプロジェクトのIDが変わるので画像のように設定を入れています。 branchでの制御をしているためどちらか一方の設定が適用される様になっています。
  • #23: ③ GASの認証です。 GASへソースコードをpushする時にまず、Googleアカウントでの認証が必要になります。 ローカルで実行するとブラウザに遷移しブラウザ上で アクセプトが必要になります。 これがCIで毎回動かすとなると一生終わらないjobに 1習慣でアクセストーくん期限が切れてしまうので、ただ、コマンドを動かしていればよいわけではないため、何かしら対応しなければ。、と
  • #24: どうしよう・・・
  • #25: GASは一度認証すればずっと使い続けられる仕様 認証するとローカルにjsonファイルが作成され、そこにトークンが書かれている。 仕組みとして、アクセストークンの期限が切れていたらリフレッシュトークンでアクセストークンを再取得する。リフレッシュトークンも期限がないようでした。 一度ローカルで認証して、 ローカルに作成された認証用のjsonファイルをCI上に設置し、トークンをgithubactionsのシークレットに設定しました。 他に人も悩んでいるようで、
  • #26: 地味に大事だと思っています。slackの通知も追加しました。
  • #27: ということで上記の問題は一通り解決でき、安心安心
  • #28: まだやりきりれていないこととして、アドオンリリース。GCP画面から②のversionをコピペして保存するだけなのですが、自動反映して欲しいよねって声聞こえてきたので、対応しようと思っています。
  • #29: おわり。