Google Apps Scriptのプロジェクトのコードを外部からダウンロード/アップロード(ダウンロード編)
※なんとなく難しくない言葉で優し目に書いています。
Google Appsのマクロ環境であるGoogle Apps ScriptのプロジェクトのコードをGoogle Drive APIを利用して、
外部からダウンロード/アップロード出来るようになりました!
今回はその話について書いてきます。
ドキュメントとか説明動画
ドキュメントは以下にあります。
英語がイケる人はこれを読めばいいです。
リファレンス
Google Apps Script Reference#Import/Export
また英語が更にいける方は、Google Developer Liveで放送された、Youtubeを見るといいと思います。
Youtube Google Developer Live
Apps Script Crush Course: Import/Export Apps Script Code
何ができるの?
Google Apps Scriptのプロジェクトのコードをローカル環境にダウンロードしたり、
ローカル環境で作成したコードを、既存のGASプロジェクトのコードに反映したり、新しいGASのプロジェクトを作成したりできます。
また既存のGASプロジェクトのファイルを追加したり、削除したり、名称を変更したりもできます。
ダウンロード(Export)
ダウンロードは3つのやり方があります。
すべての方法でjson形式でファイルがダウンロード(Export)できます。
1. 簡単なやり方
最も簡単にコードをダウンロードするには以下のURLにアクセスします。
https://script.google.com/feeds/download/export?id={Script Editorを開いた時にURLに記載されたID(DriveのFile ID)}&format=json
または
https://script.google.com/feeds/download/export?id={プロジェクトID}&format=json
2. Drive API経由で取得
Google Drive APIのdrive.file.get APIを利用して、上記のURLを取得する方法です。
この方法は他のプログラム(例えばローカル環境のエディタや、独自サービス)から取得する場合に利用できます。
Google APIは簡単にブラウザ上から試せるので、今回はその方法で試してみます。
ダウンロード用のURLを取得
-
API Explorerを開く
以下の何れかにアクセスします。
Google API Explorer#drive.files.get
Google Drive API Reference#files.get -
File IDの入力
いくつか入力欄があると思うので、fileId
にScript Editorを開いた時にURLに記載されたIDを入力します。
※下のリンクを開いた方、開いたページの下の方に入力欄があります。 -
認可(ログインみたいなもの)
入力欄の左上にAuthorize requests using OAuth 2.0:
と書かれたスイッチが有ると思うので、
それをクリックします。
ひたすらOKをクリックしていきます。 -
データの取得
認可が終わったら、Execute
ボタンをクリックします。
そうするとExecute
ボタンの下に結果が表示されます。
なんかエラーっぽいのがあったらFile IDが間違っているか、認可をやってない、またはGoogle先生がご機嫌斜めです。 -
ダウンロードリンクを探す
結果はJSON形式で返されます。
ダウンロードリンクはexportLinks
というプロパティに入っているのでexportLinks
を探して下さい。
それで上記のダウンロードURLが取得出来ます。
プログラムからダウンロード
プログラムからコードをダウンロードするにはOAuthフローなどで取得した認可コードが設定されたAuthorizationヘッダーが必要になります。
良い感じでやって下さい。( ー`дー´)キリッ
3. GASからダウンロードリンクを取得
実はGASからも簡単にダウンロードリンクは取得が可能です。
DriveAppから取得できるFileのgetDownloadUrl()を使って下さい。
サンプルコード
//File idは上とかでよく出てくるScript Editorを開いた時にURLに記載されたID
function getDownloadLink(fileId) {
return DriveApp.getFileById(fileId).getDownloadUrl();
}
またGAS上記ダウンロードリンクからソースコードを取得する場合は以下の様なコードになります。
以下のコードをScript Editorに貼り付けて、
ファイルID
を書き換えると、ログにソースコードが表示されます。
testメソッドを起動するとソースコードが表示されます。
GASでGASのコードをダウンロード
function downloadGASFiles(downloadUrl) {
//Google OAuth用の設定
var oauthConfig = UrlFetchApp.addOAuthService('drive');
var scope = 'https://www.googleapis.com/auth/drive+https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/drive.scripts';
oauthConfig.setConsumerKey('anonymous');
oauthConfig.setConsumerSecret('anonymous');
oauthConfig.setRequestTokenUrl('https://www.google.com/accounts/OAuthGetRequestToken?scope='+scope);
oauthConfig.setAuthorizationUrl('https://accounts.google.com/OAuthAuthorizeToken');
oauthConfig.setAccessTokenUrl('https://www.google.com/accounts/OAuthGetAccessToken');
//UrlFetchAppの設定
var options = {
method:'get',
oAuthServiceName: 'drive',
oAuthUseToken: 'always'
};
//ダウンロード
var jsonString = UrlFetchApp.fetch(url,getParams).getContentText();
//JSON形式なのでパース
return JSON.parse(json);
}
function test() {
var gasFiles = downloadGASFiles("ファイルID");
for(var i = 0;i < gasFiles.files.length; i++) {
Logger.log("ファイル名:%s", gasFiles.files[i].name);
Logger.log("コード:%s", gasFiles.files[i].source);
}
}
補足:ダウンロードしたJSONの内容
ダウンロードしたJSONは以下の様な形式に成っています。
{
'files':[
{
'id' : 'GASプロジェクト内の多分一意なファイルID',
'name' : 'ファイル名',
'type' : 'ファイルのタイプ server_js:.gs形式のGASのコード html:HtmlServiceで利用するhtml',
'source' : '実際のコード'
}
//プロジェクト内のファイルの数だけ上があります。
]
}
終わり
ということで今回はImport/ExportのImport編でした。
今回書いたことを使うことで、GASファイルのバックアップをしたりすることがかなり簡単に出来ます。
多分開発をやっている方は次回のExport編が気になると思いますので、なるべく頑張って直ぐ書きます。