はじまり

Google Apps Scriptって、Gitで簡単に管理して公開できないのかなあ?
毎回編集してGitHubに貼り付けるのもメンドイしなあ〜。

おお〜、じゃあ、GitHubを使って簡単に公開できる方法を紹介するかあ。

YO・RO・SHI・KU!!
前提
以下、今回紹介する方法の前提になります。
- Google Apps Scriptのエディタを使う。
- Google Chromeの拡張機能を使う。
手順1:GitHubにpushできる拡張機能を入れる
まず、Google Apps ScriptのエディタからソースをGitHubにpushできる拡張機能をインストールします。
そして、Chromeにインストールするとオプションから、Google Apps Script GitHub アシスタントにGitHubアカウントでログインします。

usernameと、GitHubのAccess Tokenを入力する必要があります。

ログインするために、GitHubでPersonal Access Tokenを発行します。
repoとgistにチェックを付けるを忘れないように気を付けます。

そして、ユーザーネームと発行したAccess Tokenを入力して、ログインします。成功すると、こんな画面が表示されます。

「Please make sure you have enabled Script API」と書いてあるので、Google Apps Script APIを利用できるようにします。
自分のGASのトップページから、設定メニューからGoogle Apps Script APIをオンにします。

これらの設定をすると、Google Apps ScriptのエディタからGitHub Assistantの拡張機能が利用できるようになります。
この画面から、リポジトリを新規作成できたり、既存のリポジトリとブランチを選んで、pullおよびpushできるようになります。

手順2:TokenやID管理用のGASライブラリを作る
Gitリポジトリを公開する場合、TokenやIDをコードに載せるわけにはいきません。しかし、GASソースを実行する際には、TokenとかIDをソースに貼る必要がありますし、それをGitの監視外にするのも何か微妙です・・・。
そこで、以下の流れで、GASのソースをGitHubリポジトリで管理します。
- TokenやIDだけを別のGASライブラリで作って、そのリポジトリも手順1の方法でPrivateリポジトリにプッシュする。
- そして、Publicリポジトリで公開しているGASライブラリで、1のGASライブラリのTokenやIDを参照する。
- TokenやIDはハードコードでGitに載らず、1のGASライブラリを参照しているソースが公開される。
こうすることで、Publicリポジトリで公開しているGASライブラリではTokenやIDがGitに載らず、そのGASライブラリを参照している形でソースが公開されます。
例えば僕は、1.のGASライブラリ(Privateリポジトリで管理する方)でただTokenやIDを返すだけの関数を作ります。

/**
* Folder ID of blog draft files.
* @return {string}
*/
function BMS_DRAFT_FOLDER_ID(){
return "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
}
そして、Publicリポジトリで公開するGASソースでは、先程作った関数を取得するようにします。
このライブラリのところから、「+」ボタンをクリックして、1.のGASライブラリ(Privateリポジトリで管理する方)のスクリプトIDを入力して、参照できるようにします。
この時点だと、まだParserのライブラリしか参照していません。

例えば、先程作ったGASライブラリの名前が「TokenManager」だったら、TokenManagerからTokenやIDを返す関数を読み取ります。これで別のライブラリにあるTokenやIDを定数として利用できます。

const DRAFT_FOLDER_ID = TokenManager.BMS_DRAFT_FOLDER_ID();
手順3:Git履歴からTokenがあった記録を消す
手順2をやる前に、既にTokenやIDをGitに上げた事がある場合は、以下のどちらかの方法でを消しましょう。
- 新しくリポジトリを作り直す。
- Git historyからTokenやIDがあったファイルを消す。
この章では、GIt historyからTokenやIDがあったファイルを消す方法を紹介します。
まず、GitHubからコミット履歴の中にTokenやIDが、直打ちされていないかどうかを確認します。

直打ちされているのを発見しました・・・。

この直打ちされているファイルを一旦、Git historyから消します。
今回は、VSCodeでリポジトリをcloneして、Git historyを消したいと思います。
Cloneした状態で、ターミナルから以下のコマンドでGitのログを確認します。
git log --all --name-status --pretty=short --graph
すると、先程TokenやIDが載っていたファイルがあることを確認できます。(qでログの表示を終了。)

そして、以下のコマンドでGit historyを消します。今回は、「constants.gs」というファイルを消したいのでこうなります。
git filter-branch --tree-filter 'rm -f constants.gs' HEAD --all
今回のリポジトリで3箇所あったcommit履歴が消えたことを確認します。

今回の変更をpushします。
git push --all --force origin
pushしたことで、リモートリポジトリにも反映されたことを確認します。

念の為、GitHubで先程TokenやIDがあったファイルが消えていることを確認します。なくなっています。

これで、手順1の拡張機能でpushすればソースを管理できて、TokenやIDを公開せずにロジックだけ公開できるようになります。
おしまい

よっしゃあああ、GitHubにあるリポジトリを公開できるようになったぜえええ。

Twitter APIやSlack APIのTokenなどを貼らずに自分のソースを公開したい場合は、今回の方法をお試し下さい。
以上になります!
コメント