コメントを管理する

Google スプレッドシートでは、特定のセルにコメントを追加して共同編集できます。

このドキュメントでは、Google Sheets API を使用して、コメントの読み取り、作成、返信、更新、削除をプログラムで行う方法について説明します。

コメントの閲覧

spreadsheets リソースで get メソッドを使用してスプレッドシートを取得すると、コメント スレッドとアンカーはデフォルトで省略されます。

レスポンスにコメントを含めるには、commentsViewMode クエリ パラメータを COMMENTS_VIEW_MODE_INCLUDED に設定します。また、呼び出し元のユーザーがファイルに対するコメント アクセス権を持っている場合、クエリ パラメータを COMMENTS_VIEW_MODE_DEFAULT_FOR_CURRENT_ACCESS に設定すると、コメントも返されます。

comments フィールドと sheets.commentAnchors フィールドの両方がレスポンスで返されます。

次のコードサンプルは、スプレッドシートからコメント スレッドとそのアンカー(グリッド範囲)を取得する get リクエストを使用する方法を示しています。

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?commentsViewMode=COMMENTS_VIEW_MODE_INCLUDED&fields=spreadsheetId,comments,sheets(properties(sheetId,title),commentAnchors)

レスポンスでは、コメントは次の 2 か所で返されます。

  • CommentThread オブジェクトを含むグローバル comments 配列。
  • コメント アンカー ID をセル位置(グリッド範囲)にマッピングする CommentAnchor オブジェクトを含む sheets.commentAnchors 配列。

範囲またはシートでコメントをフィルタする

スプレッドシートを取得する際に、範囲(spreadsheets.get メソッドの ranges クエリ パラメータを使用)またはシート(spreadsheets.getByDataFilter メソッドのリクエスト本文の dataFilters フィールドを使用)を指定して、返されるデータをフィルタできます。

  • 範囲またはシートでフィルタした場合: 指定した範囲またはシート内にアンカーが設定されているコメント スレッドのみが返されます。アンカーのないコメント(元のセルの座標が削除されたコメントなど)は含まれません。
  • 範囲またはシートでフィルタしない場合: アンカーされていないコメントを含む、すべてのコメント スレッドが返されます。

レスポンスの例

次の JSON レスポンスのサンプルは、ID が 0 のシートのセル A1(行 0、列 0)にアンカー設定されたコメント スレッドを示しています。

{
  "spreadsheetId": "SPREADSHEET_ID",
  "sheets": [
    {
      "properties": {
        "sheetId": 0,
        "title": "Sheet1"
      },
      "commentAnchors": [
        {
          "anchorId": "ANCHOR_ID",
          "range": {
            "sheetId": 0,
            "startRowIndex": 0,
            "endRowIndex": 1,
            "startColumnIndex": 0,
            "endColumnIndex": 1
          }
        }
      ]
    }
  ],
  "comments": [
    {
      "commentId": "COMMENT_ID",
      "anchorId": "ANCHOR_ID",
      "headPost": {
        "postId": "POST_ID",
        "content": "This is a comment thread head post.",
        "contentHtml": "The content of the post as HTML.",
        "author": {
          "displayName": "DISPLAY_NAME",
          "me": true,
          "user": "users/USER"
        },
        "createTime": "2026-07-01T10:13:12Z",
        "updateTime": "2026-07-01T10:13:12Z"
      },
      "replies": [
        {
          "postId": "REPLY_POST_ID",
          "content": "This is a reply to the comment.",
          "author": {
            "displayName": "DISPLAY_NAME",
            "me": false
          },
          "createTime": "2026-07-01T10:15:00Z",
          "updateTime": "2026-07-01T10:15:00Z"
        }
      ],
      "status": "OPEN"
    }
  ],
  "commentsViewMode": "COMMENTS_VIEW_MODE_INCLUDED"
}

コメントを作成、管理する

spreadsheets リソースの batchUpdate メソッドを使用すると、コメントや返信をプログラムで追加、編集、削除できます。

コメントを含むバッチ更新を実行する場合は、部分的な障害が発生する可能性をモニタリングする必要があります。詳しくは、コメントの更新ステータスをご覧ください。

コメントを挿入します。

コメント スレッドをスプレッドシートに挿入するには、InsertCommentRequest オブジェクトを使用します。コメントのテキストの内容と、コメントがアンカーされている coordinateGridCoordinate オブジェクトを使用して指定する必要があります。

次の JSON サンプルは、ID が 0 のシートのセル B2(行 1、列 1)に未割り当てのコメント スレッドを追加する方法を示しています。

{
  "requests": [
    {
      "insertComment": {
        "content": "This is a comment added using the API.",
        "coordinate": {
          "sheetId": 0,
          "rowIndex": 1,
          "columnIndex": 1
        }
      }
    }
  ]
}

assigneeEmailAddress フィールドにメールアドレスを指定することで、特定のユーザーにコメントを割り当てることができます。

{
  "requests": [
    {
      "insertComment": {
        "content": "Please review the data in this cell.",
        "assigneeEmailAddress": "ASSIGNEE_EMAIL_ADDRESS",
        "coordinate": {
          "sheetId": 0,
          "rowIndex": 1,
          "columnIndex": 1
        }
      }
    }
  ]
}

返信を追加する、またはアクションを実行する

コメント スレッドへの返信、スレッドの解決、スレッドの再開を行うには、AddCommentReplyRequest オブジェクトを使用します。

commentIdpost を指定する必要があります。ここで、返信は Post オブジェクトで表されます。

Post オブジェクトには返信 content が含まれており、必要に応じて commentAction(コメント スレッドを RESOLVE または REOPEN するアクションを含む)を指定できます。CommentActionType オブジェクトで表されます。

Post オブジェクトで新しい assigneeEmail を指定して、コメント スレッドを再割り当てすることもできます。

次の JSON サンプルは、既存のコメント スレッドに返信する方法を示しています。

{
  "requests": [
    {
      "addCommentReply": {
        "commentId": "COMMENT_ID",
        "post": {
          "content": "Replying to the comment thread."
        }
      }
    }
  ]
}

次の JSON サンプルは、コメント スレッドを解決する方法を示しています(content フィールドは必要ありません)。

{
  "requests": [
    {
      "addCommentReply": {
        "commentId": "COMMENT_ID",
        "post": {
          "commentAction": "RESOLVE"
        }
      }
    }
  ]
}

次の JSON サンプルは、コメント スレッドを再割り当てする方法を示しています。

{
  "requests": [
    {
      "addCommentReply": {
        "commentId": "COMMENT_ID",
        "post": {
          "content": "Replying to the comment thread.",
          "assigneeEmail": "ASSIGNEE_EMAIL"
        }
      }
    }
  ]
}

投稿を編集する

作成した投稿のテキスト コンテンツを編集するには、UpdateCommentPostRequest オブジェクトを使用します。スレッドの commentId、編集する投稿の postId、新しいプレーン テキストの content を指定する必要があります。

次の JSON サンプルは、投稿を編集する方法を示しています。

{
  "requests": [
    {
      "updateCommentPost": {
        "commentId": "COMMENT_ID",
        "postId": "POST_ID",
        "content": "This is the updated comment text."
      }
    }
  ]
}

コメントと返信を削除する

コメントや返信を削除するには、次の 2 つの方法があります。

  • コメント スレッドを削除する: CommentThread 全体を削除するには、DeleteCommentRequest オブジェクトを使用します。コメント スレッドを削除できるのは、CommentThread オブジェクト内のスレッドの headPost の作成者のみです。

  • 返信を削除する: CommentThread から特定の返信 Post を削除するには、DeleteCommentReplyRequest オブジェクトを使用します。削除できるのは、自分が作成した返信のみです。commentAction または assigneeEmail を含む返信投稿は削除できません。

次の JSON サンプルは、コメント スレッドを削除する方法を示しています。

{
  "requests": [
    {
      "deleteComment": {
        "commentId": "COMMENT_ID"
      }
    }
  ]
}

コメントの更新ステータス

コメント スレッドの保存が必要なリクエスト(コメントの挿入や返信の追加など)で、部分的なエラーが発生する可能性があります。このような場合、スプレッドシート モデルの変更(セル値の更新やシートの追加など)は正常にコミットされる可能性がありますが、関連するコメントは保存されない可能性があります。

コメントの更新が正常に適用されたかどうかは、spreadsheets.batchUpdate メソッドのレスポンス本文の commentUpdateState フィールドを確認することで確認できます。このフィールドは、CommentUpdateState オブジェクトで表されます。

CommentUpdateState で返される状態は次のとおりです。

  • NO_UPDATES_REQUESTED: バッチ オペレーションでコメントの更新がリクエストされませんでした。
  • ALL_SAVED: リクエストされたコメントの更新がすべて正常に適用されました。
  • ALL_FAILED_UNKNOWN_REASON: 他のスプレッドシートの変更が commit された場合でも、リクエストされたコメントの更新をすべて保存できませんでした。