Java のクイックスタート

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

Google Workspace のクイックスタートでは、API クライアント ライブラリを使用して、認証と承認フローの詳細の一部を処理します。ご自身でアプリを開発する際には、このクライアント ライブラリを使用することをおすすめします。このクイックスタートでは、テスト環境に適した簡素な認証方法を使用します。本番環境では、アプリに適したアクセス認証情報を選択する前に、認証と承認について学習することをおすすめします。

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

目標

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

前提条件

  • Google アカウント。

環境の設定

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

API を有効にする

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

    API の有効化

このクイックスタートを完了するために新しい Google Cloud プロジェクトを使用している場合は、OAuth 同意画面を構成し、自分自身をテストユーザーとして追加します。Cloud プロジェクトでこの手順をすでに完了している場合は、次のセクションに進みます。

  1. Google Cloud コンソールで、メニュー > [API とサービス] > [OAuth 同意画面] に移動します。

    OAuth 同意画面に移動

  2. [ユーザーの種類] で [内部] を選択し、[作成] をクリックします。
  3. アプリ登録フォームに入力し、[保存して続行] をクリックします。
  4. ここではスコープの追加をスキップして、[保存して次へ] をクリックします。今後、Google Workspace 組織の外部で使用するアプリを作成する場合は、[ユーザータイプ] を [外部] に変更し、アプリに必要な認可スコープを追加する必要があります。

  5. アプリ登録の概要を確認します。変更するには、[編集] をクリックします。アプリの登録に問題がなければ、[ダッシュボードに戻る] をクリックします。

デスクトップ アプリケーションの認証情報を承認する

エンドユーザーを認証し、アプリ内のユーザーデータにアクセスするには、1 つ以上の OAuth 2.0 クライアント ID を作成する必要があります。クライアント ID は、Google の OAuth サーバーで個々のアプリを識別するために使用します。アプリが複数のプラットフォームで実行される場合は、プラットフォームごとに個別のクライアント ID を作成する必要があります。
  1. Google Cloud コンソールで、メニュー > [API とサービス] > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] > [OAuth クライアント ID] をクリックします。
  3. [アプリケーションの種類] > [デスクトップ アプリ] をクリックします。
  4. [名前] フィールドに、認証情報の名前を入力します。この名前は Google Cloud コンソールにのみ表示されます。
  5. [作成] をクリックします。[OAuth クライアントを作成しました] 画面が表示され、新しいクライアント ID とクライアント シークレットが表示されます。
  6. [OK] をクリックします。新しく作成された認証情報が [OAuth 2.0 クライアント ID] の下に表示されます。
  7. ダウンロードした JSON ファイルを credentials.json として保存し、ファイルを作業ディレクトリに移動します。

職場環境を整える

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

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

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

    vault/quickstart/build.gradle
    apply plugin: 'java'
    apply plugin: 'application'
    
    mainClassName = 'Quickstart'
    sourceCompatibility = 11
    targetCompatibility = 11
    version = '1.0'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'com.google.api-client:google-api-client:2.0.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1'
        implementation 'com.google.apis:google-api-services-vault:v1-rev20220423-2.0.0'
    }
    

サンプルのセットアップ

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

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

    vault/quickstart/src/main/java/Quickstart.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.HttpTransport;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.client.json.JsonFactory;
    import com.google.api.client.util.store.FileDataStoreFactory;
    import com.google.api.services.vault.v1.VaultScopes;
    import com.google.api.services.vault.v1.model.*;
    import com.google.api.services.vault.v1.Vault;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.List;
    
    public class Quickstart {
      /**
       * Application name.
       */
      private static final String APPLICATION_NAME =
          "Google Vault API Java Quickstart";
    
      /**
       * Directory to store authorization tokens for this application.
       */
      private static final java.io.File DATA_STORE_DIR = new java.io.File("tokens");
      /**
       * Global instance of the JSON factory.
       */
      private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
      private static final String CREDENTIALS_FILE_PATH = "/credentials.json";
      /**
       * Global instance of the scopes required by this quickstart.
       * <p>
       * If modifying these scopes, delete your previously saved credentials
       * at ~/.credentials/vault.googleapis.com-java-quickstart
       */
      private static final List<String> SCOPES =
          Arrays.asList(VaultScopes.EDISCOVERY_READONLY);
      /**
       * Global instance of the {@link FileDataStoreFactory}.
       */
      private static FileDataStoreFactory DATA_STORE_FACTORY;
      /**
       * Global instance of the HTTP transport.
       */
      private static HttpTransport HTTP_TRANSPORT;
    
      static {
        try {
          HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
          DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
        } catch (Throwable t) {
          t.printStackTrace();
          System.exit(1);
        }
      }
    
      /**
       * Creates an authorized Credential object.
       *
       * @return an authorized Credential object.
       * @throws IOException
       */
      public static Credential authorize() throws IOException {
        // Load client secrets.
        InputStream in =
            Quickstart.class.getResourceAsStream("/credentials.json");
        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, SCOPES)
                .setDataStoreFactory(DATA_STORE_FACTORY)
                .setAccessType("offline")
                .build();
        Credential credential = new AuthorizationCodeInstalledApp(
            flow, new LocalServerReceiver()).authorize("user");
        System.out.println(
            "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
        return credential;
      }
    
      /**
       * Build and return an authorized Vault client service.
       *
       * @return an authorized Vault client service
       * @throws IOException
       */
      public static Vault getVaultService() throws IOException {
        Credential credential = authorize();
        return new Vault.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
      }
    
      public static void main(String[] args) throws IOException {
        // Build a new authorized API client service.
        Vault service = getVaultService();
    
        // List the first 10 matters.
        ListMattersResponse response = service.matters().list()
            .setPageSize(10)
            .execute();
        List<Matter> matters = response.getMatters();
        if (matters == null || matters.size() == 0) {
          System.out.println("No matters found.");
          return;
        }
        System.out.println("Matters:");
        for (Matter matter : matters) {
          System.out.printf("%s (%s)\n", matter.getName(),
              matter.getMatterId());
        }
      }
    }

サンプルの実行

  1. サンプルを実行する

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

    Java アプリケーションが実行され、Google Vault API が呼び出されます。

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

次のステップ