Google Apps ScriptをGitHubで管理するには
この記事は ゲームエイト開発部 Advent Calendar 2023 の記事です。
GAS の不便なところ、それはエディタだ!
Google Apps Script(GAS)使ってますか?ちょっとしたことを実現するのにGASを使うこと多いですよね。
私も業務でよく使用します。
その際、一番気になるのが「普段使っているエディタで開発して、Githubで管理できればいいのに」ってことではないでしょうか。普段からGithubを使用して開発している人なら特にそう感じますよね。
(※ GASにもバージョン管理の機能が 2023/8/23 のアップデートで追加されています。View & compare script versions with Apps Script project history)
例に漏れず、私もそう思っていました。調べると3種類(clasp・aside・Google App Script Github アシスタント)方法があるようですが、個人的な備忘録兼ねてclaspを使った方法を書いておこうと思います。
GASとGithubの連携準備
-
GitHubリポジトリの作成
まず、GitHubに新しいリポジトリを作成し、GASプロジェクトのコードを保存する場所を作成します。 -
Google Apps Scriptプロジェクトのclone
次に、Google Apps ScriptのIDEからプロジェクトをエクスポートし、ローカル環境にcloneします。npm install -g @google/clasp clasp login clasp clone <scriptId>
-
claspコマンドを使う
claspコマンドを使って、ローカルの変更をpushしたり、pullしたりできます。clasp push # ローカルの変更をpush clasp pull # GASから最新のコードをpull
することはたったこれだけです。
これさえやってしまえば、いつも扱っているコードと同様に自分の好きなエディタで開発できます。
コードレビューをチームメンバーで行ったり、GitHub ActionsでCI/CDを構築をするなど、自分たちの開発スタイルに当てはめることができますね!
おっと、あまりにも簡単にできちゃったので、GASでよく使うシートの操作と、外部APIとの連携も書いておきますね。
基本的なスプレッドシート操作方法
シートを開く
GASでスプレッドシートを開くには、スプレッドシートのIDを使用します。IDはスプレッドシートのURLから取得できます。
const spreadsheet = SpreadsheetApp.openById('スプレッドシートのID');
アクティブなスプレッドシートを開くこともできます。
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
シートの選択と操作
スプレッドシート内の特定のシートを選択し、データ操作します。
const sheet = spreadsheet.getSheetByName('シート名');
データの読み書き
セルにデータ書き込みをするには、setValue
、データを読み取るには、getValue
をつかいます。
sheet.getRange('A1').setValue('hogehoge');
const value = sheet.getRange('A1').getValue();
Logger.log(value);
簡単ですね!
Google Apps Scriptで外部API連携
URL Fetchを使う
GASで外部APIにアクセスするには、URL Fetchを使います。
これにより、 HTTPリクエストを送信できます。
もちろん、リクエストヘッダー、クエリパラメータ、ペイロードも設定できます。
const options = {
'method' : 'get',
'headers': {'Authorization': `Bearer ${API_KEY}`}
};
const response = UrlFetchApp.fetch('https://api.example.com/data', options);
この際、 APIキーなど機密情報は GASのプロパティストアや環境変数を使用して安全に管理しましょう。
決してコード内にそのまま記述するなんてことはやめてくださいね。
また、APIの呼び出しは失敗する可能性があるので、try-catchで囲って、ちゃんと例外を処理してくださいね。
使用するAPIによってはリクエスト間隔で制限がある場合もありますので、API側の仕様に従って、適切な間隔を調整するようにしてください。 API側のサーバー負荷を高めるようなコードにならないよう注意しましょう。
ではでは楽しいGASライフを!
Discussion