Google Classroom API の一般的なエラー メッセージ

このページでは、次の種類のエラーに関する一般的な Google Classroom API エラー メッセージ、問題、考えられるアクションについて説明します。

HTTP 400: FAILED_PRECONDITION

ユーザーが制限に達したため、またはアプリの状態(CourseNotModifiable など)が原因で許可できない操作を試行すると、FAILED_PRECONDITION が返されます。FAILED_PRECONDITION を修正するには、なんらかの操作を行ってから再試行するようユーザーに伝えます。場合によっては、別のエンドポイントを使用して、ユーザーに代わって状態を修正することもできます。

AttachmentNotVisible

AttachmentNotVisible は、指定された 1 つ以上のアタッチメントがユーザーに表示されない、リクエストされたタイプではない、または存在しないことを示します。たとえば、ユーザーと共有されていないドライブ アイテムは、このエラーを返します。

考えられる対応: エラーの原因を説明し、指定した ID(ドライブ ファイル ID など)を再確認するようお客様に伝えます。また、ユーザーに添付ファイルを表示するための適切な権限があることを確認します。

CannotRemoveCourseFolderOwner

CannotRemoveCourseFolderOwner は、コースの Google ドライブ フォルダのオーナーを削除できないことを示します。

対処方法: 失敗の原因を説明し、コースの Google ドライブ フォルダのオーナー権限を別のユーザーに譲渡してもう一度試すようユーザーに伝えます。

CannotRemoveCourseOwner

CannotRemoveCourseOwner は、コース オーナーを削除できないことを示します。

対処方法: 失敗の原因を説明し、コース オーナーを削除できないことを提案します。ほとんどの場合、ユーザーは自身を削除しようとしていますが、これは許可されていません。

CannotRemoveCourseOwnerTransferIncomplete

CannotRemoveCourseOwnerTransferIncomplete は、このクラスのオーナー権限の移行がまだ進行中であるため、コース オーナーを削除できないことを示します。

対処方法: 失敗の原因を説明し、クラスのオーナー権限を移行する非同期アクションが完了するまで数分待ってから、もう一度試すようユーザーに伝えます。

CannotRemoveTeacherWithNoCourseOwner

CannotRemoveTeacherWithNoCourseOwner は、オーナーがいないコースから教師を削除できないことを示します。

対処方法: 失敗の原因を説明し、教師を削除できないことを提案します。ほとんどの場合、コース所有者のユーザー アカウントが削除され、コースの状態が無効になっています。

CourseMemberLimitReached

CourseMemberLimitReached は、試行されたアクションがコース メンバーの最大許容数を超えることを示します。このコードは通常、students.create() によって返されます。詳しくは、生徒をクラスに招待するヘルプセンター記事の「クラスの人数の上限」セクションをご覧ください。

対処方法: 失敗の原因を説明し、不要なコースメンバーを削除するようユーザーに提案します。

CourseNotModifiable

CourseNotModifiable は、関連するコースのプロパティを変更できない状態(コースの状態自体を除く)であることを示します。

考えられる対応: コースを変更可能なコースの状態に変更するようユーザーに伝えます。状態を変更するには、courses.patch() を使用します。コースのステータスは、他のプロパティを変更するリクエストで変更できます。

CourseTeacherLimitReached

CourseTeacherLimitReached は、リクエストされたアクションが、コースの教師の最大許容数を超えることを示します。このコードは通常、teachers.create() によって返されます。詳しくは、クラスに共同教師を追加するヘルプセンター記事の「クラスの人数制限」セクションをご覧ください。

対処方法: 失敗の原因を説明し、不要なコースの教師を削除するようユーザーに提案します。アプリに該当する場合は、teachers.delete() を使用して、ユーザーに代わって教師名簿を管理できます。

InactiveCourseOwner

InactiveCourseOwner は、コース所有者のアカウントが削除されているため、リクエストされたアクションが許可されていないことを示します。リクエストされたアクションを実行する前に、コース オーナーの管理者がコース オーナーのアカウントを復元する必要があります。

対処方法: 失敗の原因を説明し、管理者に、オペレーションを再試行する前にコース オーナーのアカウントを復元することを提案します。

IneligibleOwner

IneligibleOwner は、ユーザーが共同教師ではないため、コースのオーナーとして追加できないことを示します。

考えられる対応: 障害の原因を説明します。リクエストしたユーザーが管理者でない場合は、オーナーを更新する前に、まずそのユーザーにコースの教師になるよう招待することをおすすめします。リクエストしたユーザーが管理者である場合は、まずそのユーザーをコースの副教師として追加することをおすすめします。

PendingInvitationExists

PendingInvitationExists は、コースの所有権を取得するようすでに招待されていることを示します。このエラーは、コースのオーナー権限の移行中に、移行が開始されたものの、新しいオーナーがまだ承諾していない場合に発生します。

UserCannotOwnCourse

UserCannotOwnCourse は、ユーザーをコースの所有者として追加できないことを示します。

対処方法: 失敗の原因を説明し、ユーザーをコース オーナーとしてコースを作成できないことを提案します。管理者以外のリクエスト元のユーザーが、自分以外のユーザーをオーナーとしてコースを作成しようとすると、このエラーが表示されることがあります。オーナーとして指定されたユーザー アカウントが存在しない場合や、ユーザーがドメインにない場合、ユーザーをリクエストした管理者にこのエラーが表示されることがあります。

UserGroupsMembershipLimitReached

UserGroupsMembershipLimitReached は、ユーザーがすでに許可されている最大数のグループのメンバーであり、コースに参加できないことを示します。このコードは通常、students.create() または teachers.create() によって返されます。詳しくは、生徒をクラスに招待するヘルプセンター記事の「クラスの人数制限」セクションをご覧ください。

対処方法: 失敗の原因を説明し、参加していないコースを退出することをユーザーに提案します。ユーザーは、さらに多くのコースに参加する必要がある場合は、追加のアカウントの作成を検討できます。アプリに該当する場合は、students.create() または teachers.delete() を使用して、ユーザーに代わってロースターを管理できます。

HTTP 403: PERMISSION_DENIED

エンドユーザーがアクセスの前提条件を満たしていない場合、すべての Classroom API メソッドで PERMISSION_DENIED(HTTP 403)エラーが返されることがあります。エラーに付随するメッセージには、原因を特定し、適切な対応をユーザーに指示するのに役立つエラー メッセージが含まれています。

以降のセクションでは、Classroom API の一般的なエラー メッセージについて説明します。

CannotDirectAddUser

CannotDirectAddUser は、ユーザーをコースに直接追加できないことを示します。このコードは、ドメイン管理者がコースにユーザーを追加しようとしたときに、そのユーザーにメールアドレスがないか、ドメインに属していない場合に発生します。

対処方法: エラーの原因を説明し、ユーザー アカウントが存在し、コース管理者のドメイン内にあることをドメイン管理者に確認するよう提案します。

ClassroomApiDisabled

ClassroomApiDisabled は、リクエスト元のユーザーが Classroom API にアクセスできないことを示します。

対処方法: Classroom データへのアクセスを有効にする手順をお客様にご案内します。ユーザーが間違ったアカウントを使用している可能性があるため、ClassroomDisabled も確認してください。

ClassroomDisabled

ClassroomDisabled は、リクエスト元のユーザーが Classroom にアクセスできないことを示します。

対処方法: Classroom へのアクセスを有効にする手順をユーザーに案内します。ユーザーが間違ったアカウントを使用している可能性もあるため、複数のアカウントの使用のリンクを案内して、ユーザーが正しいアカウントを選択できるようにすることもできます。

ExpiredAddOnToken

ExpiredAddOnToken は、API の呼び出しに使用されているアドオン トークンが期限切れであることを示します。

対処方法: ページを更新するか、アドオンに再度ログインするようユーザーに求めて、リクエスト URL から新しい addOnToken クエリ パラメータを取得します。

InvalidAddOnToken

InvalidAddOnToken は、リクエストで渡されたアドオン トークンが、課題にアドオンの添付ファイルを作成する権限を持っていないことを示します。

考えられる対応: このエラーは、ユーザーが Classroom のアカウントとは異なるアカウントでアドオンにログインした場合に発生することがあります。ブラウザで他のすべてのアカウントからログアウトするか、シークレット モードの Chrome ウィンドウで Classroom を開くよう、ユーザーに伝えます。

ProjectPermissionDenied

ProjectPermissionDenied は、リクエストで別の Developer Console プロジェクトに関連付けられたリソースの変更が試行されたことを示します。

対処方法: アプリが目的のリクエストを実行できないことを示します。リソースを作成した OAuth クライアント ID の Developer Console プロジェクトでのみ作成できます。

UserIneligibleToUpdateGradingPeriodSettings

UserIneligibleToUpdateGradingPeriodSettings は、リクエストしたユーザーまたはコース オーナーが適切な Google Workspace for Education ライセンスを持っていないコースで、採点期間の設定を変更しようとしたことを示します。

対処方法: リクエスト元のユーザーまたはコースのオーナーのライセンス ステータスにより、評価期間の設定を更新する意図されたリクエストをアプリが実行できないことを示します。ライセンスは Google 管理コンソールで割り当てることができます。

HTTP 429: RESOURCE_EXHAUSTED

RESOURCE_EXHAUSTED は、割り当てやサーバー容量などのリソースが不足しているために、リクエストされたアクションが許可されない場合に返されます。通常、このようなリクエスト エラーは、アプリが過剰な負荷を生じたために発生します。

これらの上限をトリガーせず、アプリケーションの信頼性を高めるには、再試行メカニズムを使用します。有効な再試行メカニズムには次のようなものがあります。

  • 切り捨て型指数バックオフを使用してリクエストを再試行し、同時実行環境でリクエストのスループットを最大化します。

  • 競合を回避するには、ジッターを伴う切り捨て型指数バックオフを検討してください。ジッターを導入すると、リクエストの急増を分散するランダムな遅延を導入することで、リクエストの成功を早めることができます。

割り当ての上限が原因でアプリケーションから RESOURCE_EXHAUSTED エラーが返される場合は、割り当ての増加を送信してください。詳しくは、API の割り当てをモニタリングするヘルプセンター記事をご覧ください。

UserCourseJoinRateLimitReached

UserCourseJoinRateLimitReached は、ユーザーが 1 日に許可されている最大数のコースにすでに参加していることを示します。詳しくは、Google グループのポリシーと制限についてのヘルプセンター記事の「グループの招待とサイズ」をご覧ください。

対処方法: 失敗の原因を説明し、コースに参加する前に 1 日待つようユーザーに提案します。

HTTP 500: INTERNAL

INTERNAL は、リクエストの処理中に予期しないエラーが発生したことを示します。INTERNAL リクエスト エラーは、指数バックオフを使用してリクエストを再試行することで解決できることもあります。INTERNAL エラーが解決しない場合は、Classroom API 公開バグトラッカーでバグを報告してください。