35
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Apps Scriptのプロジェクトのコードを外部からダウンロード/アップロード(ダウンロード編)

Last updated at Posted at 2013-06-21

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を取得

  1. API Explorerを開く
    以下の何れかにアクセスします。
    Google API Explorer#drive.files.get
    Google Drive API Reference#files.get

  2. File IDの入力
    いくつか入力欄があると思うので、fileIdにScript Editorを開いた時にURLに記載されたIDを入力します。
    ※下のリンクを開いた方、開いたページの下の方に入力欄があります。

  3. 認可(ログインみたいなもの)
    入力欄の左上にAuthorize requests using OAuth 2.0:と書かれたスイッチが有ると思うので、
    それをクリックします。
    ひたすらOKをクリックしていきます。

  4. データの取得
    認可が終わったら、Executeボタンをクリックします。
    そうするとExecuteボタンの下に結果が表示されます。
    なんかエラーっぽいのがあったらFile IDが間違っているか、認可をやってない、またはGoogle先生がご機嫌斜めです。

  5. ダウンロードリンクを探す
    結果はJSON形式で返されます。
    ダウンロードリンクはexportLinksというプロパティに入っているのでexportLinksを探して下さい。
    それで上記のダウンロードURLが取得出来ます。

プログラムからダウンロード

プログラムからコードをダウンロードするにはOAuthフローなどで取得した認可コードが設定されたAuthorizationヘッダーが必要になります。
良い感じでやって下さい。( ー`дー´)キリッ

3. GASからダウンロードリンクを取得

実はGASからも簡単にダウンロードリンクは取得が可能です。

DriveAppから取得できるFileのgetDownloadUrl()を使って下さい。

サンプルコード

ダウンロードリンクを取得.js

//File idは上とかでよく出てくるScript Editorを開いた時にURLに記載されたID
function getDownloadLink(fileId) {
    return DriveApp.getFileById(fileId).getDownloadUrl();
}

またGAS上記ダウンロードリンクからソースコードを取得する場合は以下の様なコードになります。
以下のコードをScript Editorに貼り付けて、
ファイルIDを書き換えると、ログにソースコードが表示されます。

testメソッドを起動するとソースコードが表示されます。

GASでGASのコードをダウンロード

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は以下の様な形式に成っています。

JSON形式.js
{
    'files':[
        {
            'id' : 'GASプロジェクト内の多分一意なファイルID',
            'name' : 'ファイル名',
            'type' : 'ファイルのタイプ server_js:.gs形式のGASのコード  html:HtmlServiceで利用するhtml',
            'source' : '実際のコード'
        }
        //プロジェクト内のファイルの数だけ上があります。
    ]
}

終わり

ということで今回はImport/ExportのImport編でした。
今回書いたことを使うことで、GASファイルのバックアップをしたりすることがかなり簡単に出来ます。

多分開発をやっている方は次回のExport編が気になると思いますので、なるべく頑張って直ぐ書きます。

35
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
31

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?