🐷

Google Apps ScriptをGitHubで管理するには

2023/12/19に公開

この記事は ゲームエイト開発部 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の連携準備

  1. GitHubリポジトリの作成
    まず、GitHubに新しいリポジトリを作成し、GASプロジェクトのコードを保存する場所を作成します。

  2. Google Apps Scriptプロジェクトのclone
    次に、Google Apps ScriptのIDEからプロジェクトをエクスポートし、ローカル環境にcloneします。

    npm install -g @google/clasp
    clasp login
    clasp clone <scriptId>
    
  3. 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