Java のクイックスタート

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

Google Workspace クイックスタートでは、API クライアント ライブラリを使用して認証と認可フローの詳細を処理します。独自のアプリではクライアント ライブラリを使用することをおすすめします。このクイックスタートでは、テスト環境に適した簡略化された認証方法を使用します。本番環境では、アプリに適したアクセス認証情報を選択する前に、認証と認可について確認することをおすすめします。

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

目標

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

前提条件

  • Google Keep が有効になっている Google アカウント。

環境を設定する

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

API を有効にする

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

サービス アカウントを作成する

サービス アカウントは、ユーザーではなくアプリケーションで使用される特別なアカウントです。サービス アカウントを使用すると、ロボット アカウントによるデータへのアクセスやアクションの実行、または Google Workspace や Cloud Identity のユーザーに代わってデータにアクセスできます。詳細については、サービス アカウントについてをご覧ください。

Google Cloud コンソール

  1. Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. [サービス アカウントを作成] をクリックします。
  3. サービス アカウントの詳細を入力し、[作成して続行] をクリックします。
  4. 省略可: サービス アカウントにロールを割り当てて、Google Cloud プロジェクトのリソースへのアクセス権を付与します。詳しくは、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
  5. [続行] をクリックします。
  6. 省略可: このサービス アカウントを使用してアクションを管理、実行できるユーザーまたはグループを入力します。詳しくは、サービス アカウントの権限借用を管理するをご覧ください。
  7. [完了] をクリックします。サービス アカウントのメールアドレスをメモします。

gcloud CLI

  1. サービス アカウント
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
    を作成します。
  2. 省略可: サービス アカウントにロールを割り当てて、Google Cloud プロジェクトのリソースへのアクセス権を付与します。詳しくは、リソースへのアクセス権の付与、変更、取り消しをご覧ください。

サービス アカウントの認証情報を作成する

公開鍵/秘密鍵のペアの形式で認証情報を取得する必要があります。これらの認証情報は、アプリ内のサービス アカウント アクションを認可するためにコードで使用されます。
  1. Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. サービス アカウントを選択します。
  3. [] > [鍵を追加] > [新しい鍵を作成] をクリックします。
  4. [JSON] を選択し、[作成] をクリックします。

    新しい公開鍵と秘密鍵のペアが生成され、新しいファイルとしてマシンにダウンロードされます。ダウンロードした JSON ファイルを credentials.json という名前で作業ディレクトリに保存します。この鍵のコピーはこのファイルのみです。鍵を安全に保管する方法については、サービス アカウント キーの管理をご覧ください。

  5. [Close] をクリックします。

サービス アカウントにドメイン全体の委任を設定する

Google Workspace 組織のユーザーの代わりに API を呼び出すには、特権管理者アカウントによって、Google Workspace 管理コンソールでサービス アカウントにドメイン全体の権限の委任を付与する必要があります。詳細については、ドメイン全体の権限をサービス アカウントに委任するをご覧ください。
  1. Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。

    [サービス アカウント] に移動

  2. サービス アカウントを選択します。
  3. [詳細設定を表示] をクリックします。
  4. [ドメイン全体の委任] でサービス アカウントの [クライアント ID] を確認します。[ をコピー] をクリックして、クライアント ID の値をクリップボードにコピーします。
  5. 関連する Google Workspace アカウントに対する特権管理者のアクセス権がある場合は、[Google Workspace 管理コンソールを表示] をクリックし、特権管理者ユーザー アカウントでログインして次の手順を続けます。

    関連する Google Workspace アカウントに対する特権管理者アクセス権がない場合は、そのアカウントの特権管理者に連絡し、サービス アカウントのクライアント ID と OAuth スコープのリストを送付して、管理コンソールで次の手順を実行できるようにします。

    1. Google 管理コンソールで、メニュー アイコン > [セキュリティ] > [アクセスとデータ管理] > [API の制御] に移動します。

      [API の制御] に移動

    2. [ドメイン全体の委任を管理] をクリックします。
    3. [新しく追加] をクリックします。
    4. [クライアント ID] に、先ほどコピーしたクライアント ID を貼り付けます。
    5. [OAuth スコープ] フィールドに、アプリケーションに必要なスコープをカンマ区切りのリストで入力します。これは、OAuth 同意画面の設定時に定義したスコープのセットです。
    6. [承認] をクリックします。

職場環境を整える

  1. 作業ディレクトリに新しいプロジェクト構造を作成します。

    gradle init --type basic
    mkdir -p src/main/java src/main/resources 
    
  2. src/main/resources/ ディレクトリで、以前にダウンロードした credentials.json ファイルをコピーします。

  3. デフォルトの build.gradle ファイルを開き、内容を次のコードに置き換えます。

      apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'KeepQuickstart'
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    version = '1.0'
    
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.api-client:google-api-client:1.23.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
        implementation 'com.google.apis:google-api-services-keep:v1-rev20210528-1.31.0'
    }
    

サンプルのセットアップ

  1. src/main/java/ ディレクトリに、build.gradle ファイルの mainClassName 値と一致する名前で新しい Java ファイルを作成します。

  2. 新しい Java ファイルに次のコードを追加します。

    import com.google.api.client.auth.oauth2.Credential;
    import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
    import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
    import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
    import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
    import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.javanet.NetHttpTransport;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.keep.v1.Keep;
    import com.google.api.services.keep.v1.model.Note;
    import com.google.api.services.keep.v1.model.Section;
    import com.google.api.services.keep.v1.model.TextContent;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.security.GeneralSecurityException;
    import java.util.Collections;
    import java.util.List;
    
    public class KeepQuickstart {
    
      private static final String APPLICATION_NAME = "Google Keep API Java Quickstart";
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
    
      /**
       * Global instance of the scopes required by this quickstart. If modifying these scopes, delete
       * your previously saved tokens/ folder.
       */
      private static final List<String> KEEP_SCOPES =
          Collections.singletonList("https://www.googleapis.com/auth/keep");
    
      private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
    
      /**
       * Creates an authorized Credential object.
       *
       * @param HTTP_TRANSPORT The network HTTP Transport.
       * @return An authorized Credential object.
       * @throws IOException
       */
      private static Credential getOAuthCredentials(final NetHttpTransport HTTP_TRANSPORT)
          throws IOException {
        // Load client secrets.
        InputStream in = KeepQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
        if (in == null) {
          throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
        }
        GoogleClientSecrets clientSecrets =
            GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    
        // Build flow and trigger user authorization request.
        GoogleAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, KEEP_SCOPES)
                .setDataStoreFactory(new FileDataStoreFactory(new java.io.File("tokens")))
                .setAccessType("offline")
                .build();
        LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
        return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
      }
    
      public static void main(String... args) throws IOException, GeneralSecurityException {
        // Build a new authorized API client service.
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        Keep service =
            new Keep.Builder(HTTP_TRANSPORT, JSON_FACTORY, getOAuthCredentials(HTTP_TRANSPORT))
                .setApplicationName(APPLICATION_NAME)
                .build();
    
        Section noteBody =
            new Section().setText(new TextContent().setText("Finish preparations by tomorrow!"));
        Note newNote = new Note().setTitle("Customer call next week").setBody(noteBody);
    
        // Creates a new text note.
        service.notes().create(newNote).execute();
      }
    }
    
    

サンプルの実行

  1. サンプルを実行する

    gradle run
    
  1. サンプルを初めて実行すると、アクセスの承認を求められます。
    1. Google アカウントにまだログインしていない場合は、ログインを求められたらログインします。複数のアカウントにログインしている場合は、認証に使用するアカウントを 1 つ選択してください。
    2. [Accept] をクリックします。

    Java アプリケーションが Google Keep API を実行し、呼び出します。

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

次のステップ