コメントと返信を管理する

「コメント」は、ファイルに対するユーザーからのフィードバックです。たとえば、ワープロ ドキュメントの読者が文の言い換えを提案する場合などです。 コメントには、 アンカー付きコメントとアンカーなしコメントの 2 種類があります。アンカー付きコメントは、ドキュメントの特定のバージョン内の特定の場所(ワープロ ドキュメントの文など)に関連付けられます。一方、アンカーなしコメントはドキュメントにのみ関連付けられます。

「返信」はコメントに添付され、コメントに対するユーザーの回答を表します。 Drive API を使用すると、ユーザーはアプリで作成したドキュメントにコメントや返信を追加できます。返信付きのコメントは、まとめて「ディスカッション」と呼ばれます。

fields パラメータを使用する

comments リソースのすべてのメソッド(delete を除く)で、レスポンスで返すフィールドを指定するには、fields システム パラメータを設定する必要があります。ほとんどの Drive リソース メソッドでは、デフォルト以外のフィールドを返す場合にのみこの操作が必要ですが、comments リソースでは必須です。fields パラメータを省略すると、メソッドはエラーを返します。詳細については、特定のフィールドを返すをご覧ください。

コメントの制約

Drive API でアンカー付きコメントとアンカーなしコメントを使用する場合は、次の制約が適用されます。

コメントの種類 ファイル形式
アンカー付き
  • デベロッパーは、アンカー仕様の独自の形式を定義できます。
  • アンカーは保存され、コメントを取得するときに返されますが、Google Workspace エディタ アプリでは、これらのコメントはアンカーなしコメントとして扱われます。
アンカーなし
  • Google Workspace ドキュメントでサポートされており、[すべてのコメント] ビューに表示されます。
  • アンカーなしコメントは、Drive ファイル プレビューアでレンダリングされた PDF には表示されませんが、保存され、Drive API を介して取得できます。

ドキュメントの最新リビジョンにアンカー付きコメントを追加する

コメントを追加するときに、ファイル内の領域にアンカーを設定することがあります。アンカーは、コメントが参照するファイル内の領域を定義します。 comments リソースは、anchor フィールドを JSON 文字列として定義します。

アンカー付きコメントを追加するには:

  1. (省略可)revisions リソースで list メソッドを呼び出して、ドキュメントのすべての revisionID を一覧表示します。この手順は、最新リビジョン以外のリビジョンにコメントをアンカーする場合にのみ行います。最新リビジョンを使用する場合は、revisionIDhead を使用します。

  2. create メソッドを comments リソースで呼び出します。パラメータは fileID 、コメントを含む comments リソース、revisionIDr)とリージョン(a)を含む JSON アンカー 文字列です。

次のコードサンプルは、アンカー付きコメントを作成する方法を示しています。

Python


from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError

# --- Configuration ---
# The ID of the file to comment on.
# Example: '1_aBcDeFgHiJkLmNoPqRsTuVwXyZ'
FILE_ID = 'FILE_ID'

# The text content of the comment.
COMMENT_TEXT = 'This is an example of an anchored comment.'

# The line number to anchor the comment to.
# Note: Line numbers are based on the revision.
ANCHOR_LINE = 10
# --- End of user-configuration section ---

SCOPES = ["https://www.googleapis.com/auth/drive"]

creds = Credentials.from_authorized_user_file("token.json", SCOPES)

def create_anchored_comment():
    """
    Create an anchored comment on a specific line in a Google Doc.

    Returns:
        The created comment object or None if an error occurred.
    """
    try:
        # Build the Drive API service
        service = build("drive", "v3", credentials=creds)

        # Define the anchor region for the comment.
        # For Google Docs, the region is typically defined by 'line' and 'revision'.
        # Other file types might use different region classifiers.
        anchor = {
            'region': {
                'kind': 'drive#commentRegion',
                'line': ANCHOR_LINE,
                'rev': 'head'
            }
        }

        # The comment body.
        comment_body = {
            'content': COMMENT_TEXT,
            'anchor': anchor
        }

        # Create the comment request.
        comment = (
            service.comments()
            .create(fileId=FILE_ID, fields="*", body=comment_body)
            .execute()
        )

        print(f"Comment ID: {comment.get('id')}")
        return comment

    except HttpError as error:
        print(f"An error occurred: {error}")
        return None

create_anchored_comment()

Drive API は、anchor 文字列を含む comments リソース オブジェクトのインスタンスを返します。

アンカーなしコメントを追加する

アンカーなしコメントを追加するには、create メソッドを fileId パラメータと comments リソースを指定して呼び出します。

コメントはプレーン テキストとして挿入されますが、レスポンスの本文には、 htmlContent フィールド に表示用にフォーマットされたコンテンツが含まれています。

次のコードサンプルは、アンカーなしコメントを作成する方法を示しています。

Python


from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError

# --- Configuration ---
# The ID of the file to comment on.
# Example: '1_aBcDeFgHiJkLmNoPqRsTuVwXyZ'
FILE_ID = 'FILE_ID'

# The text content of the comment.
COMMENT_TEXT = 'This is an example of an unanchored comment.'
# --- End of user-configuration section ---

SCOPES = ["https://www.googleapis.com/auth/drive"]

creds = Credentials.from_authorized_user_file("token.json", SCOPES)

def create_unanchored_comment():
    """
    Create an unanchored comment on a specific line in a Google Doc.

    Returns:
        The created comment object or None if an error occurred.
    """
    try:
        # Build the Drive API service
        service = build("drive", "v3", credentials=creds)

        # The comment body. For an unanchored comment,
        # omit the 'anchor' property.
        comment_body = {
            'content': COMMENT_TEXT
        }

        # Create the comment request.
        comment = (
            service.comments()
            .create(fileId=FILE_ID, fields="*", body=comment_body)
            .execute()
        )

        print(f"Comment ID: {comment.get('id')}")
        return comment

    except HttpError as error:
        print(f"An error occurred: {error}")
        return None

create_unanchored_comment()

コメントに返信を追加する

コメントに返信を追加するには、 create パラメータと commentId パラメータを指定して、 replies リソースで fileId メソッドを使用します。リクエストの本文では、content フィールドを使用して返信を追加します。

返信はプレーン テキストとして挿入されますが、レスポンスの本文には、表示用にフォーマットされたコンテンツを含む htmlContent フィールドが用意されています。

このメソッドは、fields フィールドにリストされているフィールドを返します。

リクエスト

この例では、fileId パスパラメータと commentId パスパラメータ、複数のフィールドを指定します。

POST https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID/replies?fields=id,comment

リクエストの本文

{
  "content": "This is a reply to a comment."
}

コメントを解決する

コメントを解決するには、コメントに返信を投稿する必要があります。

コメントを解決するには、create メソッドを replies リソースで、fileIdcommentId パラメータを指定して使用します。

リクエストの本文では、 action フィールドを使用してコメントを解決します。content フィールドを設定して、コメントを閉じる返信を追加することもできます。

コメントが解決されると、Drive は comments リソースを resolved: true としてマークします。削除されたコメントとは異なり、解決済みの コメントには htmlContent フィールドまたは content フィールドを含めることができます。

アプリがコメントを解決したら、UI でコメントが解決されたことを示す必要があります。たとえば、アプリは次のようになります。

  • それ以上の返信を許可せず、以前のすべての返信と元のコメントを薄く表示します。
  • 解決済みのコメントを非表示にします。

リクエスト

この例では、fileId パスパラメータと commentId パスパラメータ、複数のフィールドを指定します。

POST https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID/replies?fields=id,comment

リクエストの本文

{
  "action": "resolve",
  "content": "This comment has been resolved."
}

コメントを取得する

ファイルのコメントを取得するには、get メソッドをcommentsリソースで fileIdcommentIdパラメータを指定して使用します。コメント ID がわからない場合は、 すべてのコメントを一覧表示表示できます。list

このメソッドは、comments リソースのインスタンスを返します。

削除されたコメントを結果に含めるには、includedDeleted クエリ パラメータを true に設定します。

リクエスト

この例では、fileId パスパラメータと commentId パスパラメータ、複数のフィールドを指定します。

GET https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID?fields=id,comment,modifiedTime,resolved

コメントを一覧表示する

ファイルのコメントを一覧表示するには、list メソッドをcommentsリソースで fileIdパラメータを指定して使用します。このメソッドは、コメントのリストを返します。

次のクエリ パラメータを渡して、コメントのページ分割をカスタマイズするか、コメントをフィルタします。

  • includeDeleted: 削除されたコメントを含めるには、true に設定します。削除されたコメントには、htmlContent フィールドまたは content フィールドは含まれません。

  • pageSize: ページごとに返すコメントの最大数。

  • pageToken: 前のリスト呼び出しから受信したページトークン。このトークンを指定して、次のページを取得します。

  • startModifiedTime: 結果のコメントの modifiedTime フィールドの最小値。

リクエスト

この例では、fileId パスパラメータ、includeDeleted クエリ パラメータ、複数のフィールドを指定します。

GET https://www.googleapis.com/drive/v3/files/FILE_ID/comments?includeDeleted=true&fields=(id,comment,kind,modifiedTime,resolved)

コメントを更新する

ファイルのコメントを更新するには、 update パラメータと fileId パラメータを指定して、comments リソースで commentId メソッドを使用します。リクエストの本文では、content フィールドを使用してコメントを更新します。

ブール値 resolved フィールドは、comments リソースで読み取り専用です。コメントを解決するには、コメントに返信を投稿する必要があります。詳細については、コメントを 解決するをご覧ください。

このメソッドは、fields クエリ パラメータにリストされているフィールドを返します。

リクエスト

この例では、fileId パスパラメータと commentId パスパラメータ、複数のフィールドを指定します。

PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID?fields=id,comment

リクエストの本文

{
  "content": "This comment is now updated."
}

コメントを削除する

ファイルのコメントを削除するには、 delete パラメータと commentId パラメータを指定して、comments リソースで fileId メソッドを使用します。

コメントが削除されると、Drive はコメント リソースを deleted: true としてマークします。削除されたコメントには、htmlContent フィールドまたは content フィールドは含まれません。

リクエスト

この例では、fileId パスパラメータと commentId パスパラメータを指定します。

DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/comments/COMMENT_ID