JavaScript クイックスタート

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

クイックスタートでは、Google Workspace API を呼び出すアプリを設定して実行する方法について説明します。

Google Workspace のクイックスタートでは、API クライアント ライブラリを使用して認証と認可のフローの詳細を処理します。ご自身のアプリには、クライアント ライブラリを使用することをおすすめします。サンプルアプリを実行するには、各クイックスタートで認証と認可を有効にする必要があります。Google Workspace API の認証と認可に不慣れな場合は、認証と認可の概要をご覧ください。

Google Apps Script API にリクエストを送信する JavaScript コマンドライン アプリケーションを作成します。

目標

  • 環境を設定する。
  • サンプルを設定します。
  • サンプルを実行します。

Prerequisites

  • Google ドライブを有効にした Google アカウント。

環境の設定

このクイックスタートを完了するには、環境を設定します。

API の有効化

Google API を使用する前に、Google Cloud プロジェクトで API を有効にする必要があります。1 つの Google Cloud プロジェクトで 1 つ以上の API を有効にできます。
  • Google Cloud Console で Google Apps Script API を有効にします。

    API の有効化

ウェブ アプリケーションの認証情報を承認する

エンドユーザーとして認証し、アプリ内のユーザーデータにアクセスするには、1 つ以上の OAuth 2.0 クライアント ID を作成する必要があります。クライアント ID は、Google の OAuth サーバーで個々のアプリを識別するために使用します。アプリが複数のプラットフォームで実行される場合は、プラットフォームごとに個別のクライアント ID を作成する必要があります。
  1. Google Cloud コンソールを開きます。
  2. 左上にあるメニュー アイコン > [API とサービス] > [認証情報] をクリックします。
  3. [認証情報を作成] > [OAuth クライアント ID] をクリックします。
  4. [アプリケーションの種類] > [ウェブ アプリケーション] をクリックします。
  5. [名前] フィールドに認証情報の名前を入力します。この名前は Google Cloud Console にのみ表示されます。
  6. アプリに関連付けられた承認済み URI を追加します。
    • クライアントサイド アプリ(JavaScript)– [承認済みの JavaScript 生成元] で [URI を追加] をクリックします。次に、ブラウザ リクエストに使用する URI を入力します。これにより、アプリケーションが API リクエストを OAuth 2.0 サーバーに送信できるドメインを識別します。
    • サーバーサイド アプリ(Java、Python、.NET など) – [承認済みのリダイレクト URI] の下にある [URI を追加] をクリックします。次に、OAuth 2.0 サーバーがレスポンスを送信できるエンドポイント URI を入力します。
  7. [CREATE] をクリックします。OAuth クライアント作成画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  8. クライアント ID をメモします。クライアント シークレットはウェブ アプリケーションでは使用されません。
  9. [OK] をクリックします。新しく作成された認証情報が「OAuth 2.0 クライアント ID」の下に表示されます。
  10. 省略可: JavaScript クイックスタートの前提条件として認証情報を作成する場合も、API キーを生成する必要があります。

これらの認証情報は、このクイックスタートの後半で必要になるため、メモしておいてください。

サンプルのセットアップ

  1. 作業ディレクトリに index.html という名前のファイルを作成します。
  2. index.html ファイルに、次のサンプルコードを貼り付けます。

    apps-script/quickstart/index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>Google Apps Script API Quickstart</title>
        <meta charset="utf-8" />
      </head>
      <body>
        <p>Google Apps Script API Quickstart</p>
    
        <!--Add buttons to initiate auth sequence and sign out-->
        <button id="authorize_button" onclick="handleAuthClick()">Authorize</button>
        <button id="signout_button" onclick="handleSignoutClick()">Sign Out</button>
    
        <pre id="content" style="white-space: pre-wrap;"></pre>
    
        <script type="text/javascript">
          /* exported gapiLoaded */
          /* exported gisLoaded */
          /* exported handleAuthClick */
          /* exported handleSignoutClick */
    
          // TODO(developer): Set to client ID and API key from the Developer Console
          const CLIENT_ID = '<YOUR_CLIENT_ID>';
          const API_KEY = '<YOUR_API_KEY>';
    
          // Discovery doc URL for APIs used by the quickstart
          const DISCOVERY_DOC = 'https://script.googleapis.com/$discovery/rest?version=v1';
    
          // Authorization scopes required by the API; multiple scopes can be
          // included, separated by spaces.
          const SCOPES = 'https://www.googleapis.com/auth/script.projects';
    
          let tokenClient;
          let gapiInited = false;
          let gisInited = false;
    
          document.getElementById('authorize_button').style.visibility = 'hidden';
          document.getElementById('signout_button').style.visibility = 'hidden';
    
          /**
           * Callback after api.js is loaded.
           */
          function gapiLoaded() {
            gapi.load('client', initializeGapiClient);
          }
    
          /**
           * Callback after the API client is loaded. Loads the
           * discovery doc to initialize the API.
           */
          async function initializeGapiClient() {
            await gapi.client.init({
              apiKey: API_KEY,
              discoveryDocs: [DISCOVERY_DOC],
            });
            gapiInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Callback after Google Identity Services are loaded.
           */
          function gisLoaded() {
            tokenClient = google.accounts.oauth2.initTokenClient({
              client_id: CLIENT_ID,
              scope: SCOPES,
              callback: '', // defined later
            });
            gisInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Enables user interaction after all libraries are loaded.
           */
          function maybeEnableButtons() {
            if (gapiInited && gisInited) {
              document.getElementById('authorize_button').style.visibility = 'visible';
            }
          }
    
          /**
           *  Sign in the user upon button click.
           */
          function handleAuthClick() {
            tokenClient.callback = async (resp) => {
              if (resp.error !== undefined) {
                throw (resp);
              }
              document.getElementById('signout_button').style.visibility = 'visible';
              document.getElementById('authorize_button').innerText = 'Refresh';
              await createScript();
            };
    
            if (gapi.client.getToken() === null) {
              // Prompt the user to select a Google Account and ask for consent to share their data
              // when establishing a new session.
              tokenClient.requestAccessToken({prompt: 'consent'});
            } else {
              // Skip display of account chooser and consent dialog for an existing session.
              tokenClient.requestAccessToken({prompt: ''});
            }
          }
    
          /**
           *  Sign out the user upon button click.
           */
          function handleSignoutClick() {
            const token = gapi.client.getToken();
            if (token !== null) {
              google.accounts.oauth2.revoke(token.access_token);
              gapi.client.setToken('');
              document.getElementById('content').innerText = '';
              document.getElementById('authorize_button').innerText = 'Authorize';
              document.getElementById('signout_button').style.visibility = 'hidden';
            }
          }
    
          /**
           * Creates a new 'Hello world' script.
           */
          async function createScript() {
            let response;
            try {
              const createRequest = {
                resource: {
                  title: 'My Script',
                },
              };
              response = await gapi.client.script.projects.create(createRequest);
    
              const updateContentRequest = {
                scriptId: response.result.scriptId,
                resource: {
                  files: [{
                    name: 'hello',
                    type: 'SERVER_JS',
                    source: 'function helloWorld() {\n  console.log("Hello, world!");\n}',
                  }, {
                    name: 'appsscript',
                    type: 'JSON',
                    source: '{"timeZone":"America/New_York","' +
                       'exceptionLogging":"CLOUD"}',
                  }],
                },
              };
              response = await gapi.client.script.projects.updateContent(updateContentRequest);
              const output = `Script URL: https://script.google.com/d/${response.result.scriptId}/edit`;
              document.getElementById('content').innerText = output;
            } catch (err) {
              document.getElementById('content').innerText = err.message;
              return;
            }
          }
        </script>
        <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>
        <script async defer src="https://accounts.google.com/gsi/client" onload="gisLoaded()"></script>
      </body>
    </html>

    以下を置き換えます。

サンプルの実行

  1. 作業ディレクトリで、ウェブサーバーを起動します。

    Python 2.x

    python -m SimpleHTTPServer 8000
    

    Python 3.x

    python3 -m http.server 8000
    
  2. ブラウザで、http://localhost:8000 に移動します。

  3. サンプルを初めて実行すると、アクセスの承認を求めるメッセージが表示されます。

    1. まだ Google アカウントにログインしていない場合は、ログインするように求められます。複数のアカウントにログインしている場合は、承認に使用するアカウントを 1 つ選択します。
    2. [同意する] をクリックします。
    3. ブラウザからコードをコピーし、コマンドライン プロンプトに貼り付け、Enter を押します。

    認可情報はファイル システムに保存されるため、次にサンプルコードを実行するときに、承認を求めるプロンプトは表示されません。

Google Apps Script API にリクエストを送信する最初の JavaScript アプリケーションが正常に作成されました。

次のステップ