26
16

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.

clasp run できないとき。2018-09-25

Last updated at Posted at 2018-09-25

概要

GAS のGoogle謹製CLIツール clasp を参考に、claspを導入しました。
push/pullは問題なく使えて非常に便利です。

claspのhelpを見ると run というオプションがあり、ターミナルからGASの関数を実行できるようです。
試してみたところいろいろエラーで実行できなかったので、実行できるようにします。

その前に

2018-09-25現在でinstallされる以下バージョンだとエラーが出て動きません。
GitHubの最新のコードで試しましょう。

% clasp -v
1.5.3

しばらく待てば修正版がリリースされると思います。
追記: 1.6以上がリリースされました。それを使えばエラーが出ないのでふつうにnpm installで入れれば問題ないです。

初回(.clasp.jsonprojectId がない状態)の run

初回(.clasp.jsonprojectId がない状態)で run をすると必要な準備の手順が示されます。その通り設定していきます。

以下の通り、実施すべきことが出力され、.clasp.jsonprojectIdが追加されます。
英語ではありますが書いてある通りに設定していくのみです。

% clasp run FUNCTION_NAME

BASIC SCRIPT EXECUTION API SETUP

Open this link:  https://script.google.com/d/<<<SCRIPT_ID>>>/edit
Go to *Resource > Cloud Platform Project...* and copy your projectId
(including "project-id-")

? What is your GCP projectId? <<<PROJECT_ID>>> # ここにprojectIdを入力します。
1. Enable the Script & Logging APIs for the project:
  a. Open this link: https://console.cloud.google.com/apis/library/script.googleapis.com/?project=<<< PROJECT_ID >>>
      Click ENABLE.
  b. Open this link: https://console.cloud.google.com/apis/library/logging.googleapis.com?project=<<< PROJECT_ID >>>
      Click ENABLE.

2. Create a client ID and secret:
    Open this link: https://console.developers.google.com/apis/credentials?project=<<< PROJECT_ID >>>
    Click Create credentials, then select OAuth client ID.
    Select Other.
    Give the client a name.
    Click Create.
    Click Download JSON for the new client ID: name (right-hand side).

3. Authenticate clasp with your credentials json file:
    clasp login --creds <client_credentials.json>

最後にダウンロードした <client_credentials.json> を指定してログインし直します。
ログインが終わると、プロジェクト配下に .clasprc.json が作成されます。 (--creds オプション無しの場合は $HOME 以下に .clasprc.json が作成されました)

さらに追加で設定

「実行可能APIとして導入」のONにする

今の状態で run しても以下のようなエラーが出るので「実行可能APIとして導入」からポチポチ実行可能なAPIとして導入します。

Script API executable not published/deployed.

スクリーンショット 2018-09-21 14.00.39.png

clasp から 「実行可能APIとして導入」 する方法があれば教えていただけると嬉しいです

scopeの設定

SpreadsheetApp などを使っている場合は、scopeを追加する必要があります。
scopeを設定しないと以下のようなエラーが出ます。

Error: Local client credentials unauthenticated. Check scopes/authorization.

scopeの設定方法

clone したときについてくる appsscript.json に設定します。
以下のような設定を追加します。
UrlFetchApp を利用している場合は https://www.googleapis.com/auth/script.external_request を追加する必要があります

  "oauthScopes": [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.external_request"
  ]

参考: https://github.com/google/clasp/issues/11#issuecomment-358111971

全体のJSON例:

appsscript.json
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.external_request"
  ]
}

socpeの設定後、初回の run

以下のように質問され、追加のscopeありの状態で承認します。(いつも通り承認用にブラウザが立ち上がるので承認します。)

% clasp run FUNCTION_NAME
New authoization scopes detected in manifest:
 [ 'https://www.googleapis.com/auth/drive',
  'https://www.googleapis.com/auth/spreadsheets',
  'https://www.googleapis.com/auth/script.external_request' ]
? Authorize new scopes? Yes
? Use localhost? Yes

run する

ここまで終わればあとは run できます。

実行中

% clasp run FUNCTION_NAME
\ Using local credentials: ...(省略)

実行中はくるくるしてるので待ちます。

実行結果例

returnのないfunctionの場合は undefined と表示されます。

% clasp run FUNCTION_NAME
Result: undefined

return していればその内容が表示されます。

% clasp run FUNCTION_NAME
Result: <returnした値>

Logger.logの内容は表示されないようです
追記: ログを確認したい場合は clasp logs を使います

まとめ

clasp run できました

26
16
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
26
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?