クイックスタートでは、Google Workspace API を呼び出すアプリを設定して実行する方法について説明します。
Google Workspace のクイックスタートでは、API クライアント ライブラリを使用して、認証と承認フローの詳細の一部を処理します。ご自身でアプリを開発する際には、このクライアント ライブラリを使用することをおすすめします。このクイックスタートでは、テスト環境に適した簡素な認証方法を使用します。本番環境では、アプリに適したアクセス認証情報を選択する前に、認証と承認について学習することをおすすめします。
Google Keep API にリクエストを送信する Java コマンドライン アプリケーションを作成します。
目標
- 環境をセットアップする。
- サンプルを設定します。
- サンプルを実行します。
前提条件
- Java 1.8 以降。
- Gradle 7.0 以降。
- Google Cloud プロジェクト。
- Google Keep が有効になっている Google アカウント。
環境の設定
このクイックスタートを完了するには、環境を設定します。
API を有効にする
Google API を使用する前に、Google Cloud プロジェクトで API を有効にする必要があります。1 つの Google Cloud プロジェクトで 1 つ以上の API を有効にできます。Google Cloud コンソールで、Google Keep API を有効にします。
サービス アカウントを作成する
サービス アカウントは、ユーザーではなく、アプリケーションで使用される特別な種類のアカウントです。サービス アカウントを使用すると、ロボット アカウントでデータにアクセスしたり、アクションを実行したり、Google Workspace ユーザーまたは Cloud Identity ユーザーに代わってデータにアクセスしたりできます。詳細については、サービス アカウントについてをご覧ください。Google Cloud コンソール
- Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。
- [サービス アカウントを作成] をクリックします。
- サービス アカウントの詳細を入力し、[作成して続行] をクリックします。
- 省略可: Google Cloud プロジェクトのリソースへのアクセス権を付与するために、サービス アカウントにロールを割り当てます。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
- [続行] をクリックします。
- 省略可: このサービス アカウントで管理とアクションを実行できるユーザーまたはグループを入力します。詳細については、サービス アカウントの権限借用の管理をご覧ください。
- [完了] をクリックします。サービス アカウントのメールアドレスをメモします。
gcloud CLI
- サービス アカウントを作成します。
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - 省略可: Google Cloud プロジェクトのリソースへのアクセス権を付与するために、サービス アカウントにロールを割り当てます。詳細については、リソースへのアクセス権の付与、変更、取り消しをご覧ください。
サービス アカウントの認証情報を作成する
公開鍵と秘密鍵のペア形式の認証情報を取得する必要があります。これらの認証情報は、アプリ内のサービス アカウントのアクションを承認するためにコードで使用されます。- Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。
- サービス アカウントを選択します。
- [鍵] > [鍵を追加] > [新しい鍵を作成] をクリックします。
- [JSON] を選択し、[作成] をクリックします。
新しい公開鍵と秘密鍵のペアが生成され、新しいファイルとしてマシンにダウンロードされます。ダウンロードした JSON ファイルを作業ディレクトリに
credentials.json
として保存します。このファイルは、この鍵の唯一のコピーです。キーを安全に保存する方法については、サービス アカウント キーの管理をご覧ください。 - [閉じる] をクリックします。
サービス アカウントのドメイン全体の委任を設定する
Google Workspace 組織内のユーザーに代わって API を呼び出すには、特権管理者アカウントが Google Workspace 管理コンソールでサービス アカウントにドメイン全体の権限の委任を付与する必要があります。詳細については、ドメイン全体の権限をサービス アカウントに委任するをご覧ください。- Google Cloud コンソールで、メニュー > [IAM と管理] > [サービス アカウント] に移動します。
- サービス アカウントを選択します。
- [詳細設定を表示] をクリックします。
- [ドメイン全体の委任] で、サービス アカウントの [クライアント ID] を確認します。[コピー] をクリックして、クライアント ID の値をクリップボードにコピーします。
関連する Google Workspace アカウントに特権管理者としてアクセスできる場合は、[Google Workspace 管理コンソールを表示] をクリックし、特権管理者ユーザー アカウントを使用してログインして、次の手順に進みます。
関連する Google Workspace アカウントに対する特権管理者権限がない場合は、そのアカウントの特権管理者に連絡し、サービス アカウントのクライアント ID と OAuth スコープのリストを送信して、管理コンソールで次の手順を完了できるようにします。
- Google 管理コンソールで、メニュー > [セキュリティ] > [アクセスとデータ管理] > [API の制御] に移動します。
- [ドメイン全体の委任を管理] をクリックします。
- [新しく追加] をクリックします。
- [クライアント ID] フィールドに、先ほどコピーしたクライアント ID を貼り付けます。
- [OAuth スコープ] フィールドに、アプリケーションに必要なスコープのカンマ区切りリストを入力します。これは、OAuth 同意画面の構成時に定義したスコープと同じセットです。
- [承認] をクリックします。
職場環境を整える
作業ディレクトリに新しいプロジェクト構造を作成します。
gradle init --type basic mkdir -p src/main/java src/main/resources
src/main/resources/
ディレクトリで、先ほどダウンロードしたcredentials.json
ファイルをコピーします。デフォルトの
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' }
サンプルのセットアップ
src/main/java/
ディレクトリに、build.gradle
ファイルのmainClassName
値と一致する名前の新しい Java ファイルを作成します。新しい 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(); } }
サンプルの実行
サンプルを実行する
gradle run
-
サンプルを初めて実行すると、アクセスを承認するよう求められます。
- Google アカウントにログインしていない場合は、プロンプトが表示されたらログインします。複数のアカウントにログインしている場合は、承認に使用するアカウントを 1 つ選択します。
- [Accept] をクリックします。
Java アプリケーションが実行され、Google Keep API が呼び出されます。
認可情報はファイル システムに保存されるため、次回サンプルコードを実行するときに認可を求めるメッセージは表示されません。
次のステップ
- 認証と認可に関する問題のトラブルシューティング
- Google Keep API リファレンス ドキュメント
- Google APIs Client for Java のドキュメント
- Google Keep API Javadoc ドキュメント