正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

リポジトリAPI

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

このAPIを使用してGitリポジトリを管理します。

リポジトリツリーの一覧

プロジェクト内のリポジトリファイルとディレクトリのリストを取得します。リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。

このコマンドは、基本的にgit ls-treeコマンドと同じ機能を提供します。詳細については、Gitの内部ドキュメントにあるツリーオブジェクトのセクションを参照してください。

GitLabバージョン17.7では、リクエストされたパスが見つからない場合のエラー処理動作が変更されました。エンドポイントはステータスコード404 Not Foundを返すようになりました。以前のステータスコードは200 OKでした。

ご使用の実装が、存在しないパスに対して空の配列を持つ200ステータスコードが返ってくることを前提としている場合は、新しい404応答に対応できるよう、エラー処理を更新する必要があります。

GET /projects/:id/repository/tree

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
page_token文字列いいえ次のページをフェッチするツリーレコードIDキーセットページネーションでのみ使用されます。
pagination文字列いいえkeysetの場合、キーセットベースのページネーション方式を使用します。
path文字列いいえリポジトリ内のパス。サブディレクトリの内容を取得するために使用されます。
per_page整数いいえページあたりの表示結果数。指定しない場合、デフォルトは20です。詳細については、ページネーションを参照してください。
recursiveブール値いいえtrueの場合、再帰的なツリーを取得します。デフォルトはfalseです。
ref文字列いいえリポジトリのブランチまたはタグの名前。指定しない場合、デフォルトブランチを使用します。

成功した場合、200 OKとツリーオブジェクトの配列を返します。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/tree"

レスポンス例:

[
  {
    "id": "a1e8f8d745cc87e3a9248358d9352bb7f9a0aeba",
    "name": "html",
    "type": "tree",
    "path": "files/html",
    "mode": "040000"
  },
  {
    "id": "4535904260b1082e14f867f7a24fd8c21495bde3",
    "name": "images",
    "type": "tree",
    "path": "files/images",
    "mode": "040000"
  },
  {
    "id": "31405c5ddef582c5a9b7a85230413ff90e2fe720",
    "name": "js",
    "type": "tree",
    "path": "files/js",
    "mode": "040000"
  },
  {
    "id": "cc71111cfad871212dc99572599a568bfe1e7e00",
    "name": "lfs",
    "type": "tree",
    "path": "files/lfs",
    "mode": "040000"
  },
  {
    "id": "fd581c619bf59cfdfa9c8282377bb09c2f897520",
    "name": "markdown",
    "type": "tree",
    "path": "files/markdown",
    "mode": "040000"
  },
  {
    "id": "23ea4d11a4bdd960ee5320c5cb65b5b3fdbc60db",
    "name": "ruby",
    "type": "tree",
    "path": "files/ruby",
    "mode": "040000"
  },
  {
    "id": "7d70e02340bac451f281cecf0a980907974bd8be",
    "name": "whitespace",
    "type": "blob",
    "path": "files/whitespace",
    "mode": "100644"
  }
]

リポジトリからblobを取得する

リポジトリ内のblobについて、サイズや内容といった情報を取得できるようにします。blobコンテンツはBase64エンコードされています。リポジトリが公開されている場合、このエンドポイントには認証なしでアクセスできます。

10 MBを超えるblobの場合、このエンドポイントには1分あたり5リクエストというレート制限があります。

GET /projects/:id/repository/blobs/:sha

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
sha文字列はいblob SHA。

成功した場合は、200 OKと以下のレスポンス属性が返されます:

属性説明
content文字列Base64エンコードされたblobコンテンツ。
encoding文字列blobコンテンツに使用されるエンコード。
sha文字列blob SHA。
size整数Blobのサイズ(バイト単位)。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83"

レスポンス例:

{
  "size": 1476,
  "encoding": "base64",
  "content": "VGhpcyBpcyBhIGJpbmFyeSBmaWxl",
  "sha": "79f7bbd25901e8334750839545a9bd021f0e4c83"
}

raw blobコンテンツを取得する

blob SHAを指定して、blobのrawファイルのコンテンツを取得します。リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。

GET /projects/:id/repository/blobs/:sha/raw

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
sha文字列はいblob SHA。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/13083/repository/blobs/79f7bbd25901e8334750839545a9bd021f0e4c83/raw"

ファイルアーカイブを取得する

リポジトリのアーカイブを取得します。リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。

GitLab.comのユーザーの場合、このエンドポイントには1分あたり5リクエストというレート制限しきい値が設定されています。

GET /projects/:id/repository/archive[.format]

formatはアーカイブ形式のオプションのサフィックスであり、デフォルトはtar.gzです。たとえばarchive.zipを指定すると、ZIP形式でアーカイブが送信されます。使用可能なオプションは次のとおりです:

  • bz2
  • tar
  • tar.bz2
  • tar.gz
  • tb2
  • tbz
  • tbz2
  • zip

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
exclude_paths文字列いいえアーカイブから除外するパスのカンマ区切りリスト。
include_lfs_blobsブール値いいえtrueの場合、LFSオブジェクトがアーカイブに含まれます。falseに設定すると、LFSオブジェクトは除外されます。デフォルトはtrueです。
path文字列いいえダウンロードするリポジトリのサブパス。空の文字列の場合、デフォルトはリポジトリ全体です。
sha文字列いいえダウンロードするコミットSHA。タグ、ブランチ参照、またはSHAを受け入れます。指定しない場合、デフォルトはデフォルトブランチの先端です。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.com/api/v4/projects/<project_id>/repository/archive?sha=<commit_sha>&path=<path>&exclude_paths=<path1,path2>"

ブランチ、タグ、またはコミットを比較する

リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。差分の制限に達すると、差分に空の差分文字列が含まれる可能性があります。

GET /projects/:id/repository/compare

サポートされている属性は以下のとおりです:

属性必須説明
from文字列はいコミットSHAまたはブランチ名。
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
to文字列はいコミットSHAまたはブランチ名。
from_project_id整数いいえ比較元のID。
straightブール値いいえtrueの場合、比較方法はfromto間の直接比較です(from..to)。falseの場合、マージベースを使用して比較します(fromto)。デフォルトはfalseです。
unidiffブール値いいえtrueの場合、unified diff形式で差分を表示します。デフォルトはfalseです。GitLab 16.5で導入されました。

成功した場合は、200 OKと以下のレスポンス属性が返されます:

属性説明
commitオブジェクト比較対象の最新コミットの詳細。
commitsオブジェクト配列比較に含まれるコミットのリスト。
commits[].author_email文字列コミット作成者のメールアドレス。
commits[].author_name文字列コミット作成者の名前。
commits[].created_at日時コミット作成タイムスタンプ。
commits[].id文字列完全なコミットSHA。
commits[].short_id文字列短いコミットSHA。
commits[].title文字列コミットタイトル。
compare_same_refブール値trueの場合、比較ではFromとToの両方に同じ参照を使用します。
compare_timeoutブール値trueの場合、比較操作がタイムアウトしました。
diffsオブジェクト配列ファイルの差分のリスト。
diffs[].a_mode文字列古いファイルモード。
diffs[].b_mode文字列新しいファイルモード。
diffs[].collapsedブール値trueの場合、ファイルの差分は除外されますが、リクエストに応じてフェッチできます。
diffs[].deleted_fileブール値trueの場合、ファイルは削除されています。
diffs[].diff文字列ファイルに加えられた変更を示す差分コンテンツ。
diffs[].new_fileブール値trueの場合、ファイルが追加されています。
diffs[].new_path文字列ファイルの新しいパス。
diffs[].old_path文字列ファイルの古いパス。
diffs[].renamed_fileブール値trueの場合、ファイルの名前が変更されています。
diffs[].too_largeブール値trueの場合、ファイルの差分は除外され、取得できません。
web_url文字列比較を表示するためのWeb URL。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/compare?from=main&to=feature"

レスポンス例:

{
  "commit": {
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  },
  "commits": [{
    "id": "12d65c8dd2b2676fa3ac47d955accc085a37a9c1",
    "short_id": "12d65c8dd2b",
    "title": "JS fix",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "created_at": "2014-02-27T10:27:00+02:00"
  }],
  "diffs": [{
    "old_path": "files/js/application.js",
    "new_path": "files/js/application.js",
    "a_mode": null,
    "b_mode": "100644",
    "diff": "@@ -24,8 +24,10 @@\n //= require g.raphael-min\n //= require g.bar-min\n //= require branch-graph\n-//= require highlightjs.min\n-//= require ace/ace\n //= require_tree .\n //= require d3\n //= require underscore\n+\n+function fix() { \n+  alert(\"Fixed\")\n+}",
    "collapsed": false,
    "too_large": false,
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
  }],
  "compare_timeout": false,
  "compare_same_ref": false,
  "web_url": "https://gitlab.example.com/janedoe/gitlab-foss/-/compare/ae73cb07c9eeaf35924a10f713b364d32b2dd34f...0b4bc9a49b562e85de7cc9e834518ea6828729b9"
}

コントリビューターリストを取得する

リポジトリコントリビューターのリストを取得します。リポジトリが公開されている場合、このエンドポイントは認証なしでアクセスできます。

返されるコミット数にマージコミットは含まれません。

GET /projects/:id/repository/contributors

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
order_by文字列いいえコントリビューターをnameemail、またはcommits(コミット数)で並べ替えます。指定しない場合、コントリビューターはコミット日で並べ替えられます。
ref文字列いいえリポジトリのブランチまたはタグの名前。指定しない場合は、デフォルトブランチです。
sort文字列いいえascまたはdescの順にソートされたコントリビューターを返します。デフォルトはascです。

成功した場合は、200 OKと以下のレスポンス属性が返されます:

属性説明
additions整数コントリビューターによる行の追加数。
commits整数コントリビューターによるコミット数。
deletions整数コントリビューターによる行の削除数。
email文字列コントリビューターのメールアドレス。
name文字列コントリビューターの名前。

リクエストの例:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/7/repository/contributors"

レスポンス例:

[{
  "name": "Example User",
  "email": "example@example.com",
  "commits": 117,
  "additions": 0,
  "deletions": 0
}, {
  "name": "Sample User",
  "email": "sample@example.com",
  "commits": 33,
  "additions": 0,
  "deletions": 0
}]

マージベースを取得する

コミットSHA、ブランチ名、タグなど、2つ以上のrefsの共通の祖先を取得します。

GET /projects/:id/repository/merge_base

サポートされている属性は以下のとおりです:

属性必須説明
id整数または文字列はいプロジェクトのIDまたはURLエンコードされたパス
refs配列はい共通の祖先を見つけるためのrefs。複数のrefsを指定できます。

成功した場合は、200 OKと以下のレスポンス属性が返されます:

属性説明
author_email文字列作成者のメールアドレス。
author_name文字列作成者名。
authored_date日時コミットが作成済みの日付。
committed_date日時コミットがコミットされた日付。
committer_email文字列コミッターのメールアドレス。
committer_name文字列コミッターの名前。
created_at日時コミット作成タイムスタンプ。
extended_trailersオブジェクトGitトレーラーに関する拡張情報。
id文字列完全なコミットSHA。
message文字列完全なコミットメッセージ。
parent_ids配列親コミットSHAのリスト。
short_id文字列短いコミットSHA。
title文字列コミットタイトル。
trailersオブジェクトコミットメッセージから解析されたGitトレーラー。
web_url文字列GitLab Webインターフェースでコミットを表示するURL。

読みやすさのためにrefを省略したリクエスト例は以下のとおりです:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/repository/merge_base?refs[]=304d257d&refs[]=0031876f"

レスポンス例:

{
  "id": "1a0b36b3cdad1d2ee32457c102a8c0b7056fa863",
  "short_id": "1a0b36b3",
  "title": "Initial commit",
  "created_at": "2014-02-27T08:03:18.000Z",
  "parent_ids": [],
  "message": "Initial commit\n",
  "author_name": "Example User",
  "author_email": "user@example.com",
  "authored_date": "2014-02-27T08:03:18.000Z",
  "committer_name": "Example User",
  "committer_email": "user@example.com",
  "committed_date": "2014-02-27T08:03:18.000Z",
  "trailers": {},
  "extended_trailers": {},
  "web_url": "https://gitlab.example.com/example-group/example-project/-/commit/1a0b36b3cdad1d2ee32457c102a8c0b7056fa863"
}

変更履歴データを生成する

リポジトリ内のコミットに基づいて変更履歴データを生成し、変更履歴データを変更履歴ファイルにコミットしません。

変更履歴データが変更履歴ファイルにコミットされないことを除き、POST /projects/:id/repository/changelogとまったく同様に機能します。

GET /projects/:id/repository/changelog

サポートされている属性は以下のとおりです:

属性必須説明
version文字列はい変更履歴を生成するバージョン。形式は、セマンティックバージョニングに従う必要があります。
config_file文字列いいえプロジェクトのGitリポジトリ内の変更履歴設定ファイルのパス。デフォルトは.gitlab/changelog_config.ymlです。
config_file_ref文字列いいえ変更履歴設定ファイルが定義されているGit参照(例:ブランチ)。デフォルトでは、リポジトリのブランチが使用されます。
date日時いいえリリースの日時。ISO 8601形式を使用します。たとえば2016-03-11T03:45:40Zなどです。デフォルトは現在の時刻です。
from文字列いいえ変更履歴を生成する際に使用するコミット範囲の開始点(SHA)。このコミット自体は、リストには含まれません。
to文字列いいえ変更履歴に使用するコミット範囲の終了点(SHA)。このコミットはリストに含まれます。デフォルトは、デフォルトのプロジェクトブランチのHEADです。
trailer文字列いいえコミットを含めるために使用するGitトレーラー。デフォルトはChangelogです。

成功した場合は、200 OKと以下のレスポンス属性が返されます:

属性説明
notes文字列Markdown形式で生成された変更履歴データ。

リクエストの例:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0"

読みやすくするために改行を追加した応答の例:

{
  "notes": "## 1.0.0 (2021-11-17)\n\n### feature (2 changes)\n\n-
    [Title 2](namespace13/project13@ad608eb642124f5b3944ac0ac772fecaf570a6bf)
    ([merge request](namespace13/project13!2))\n-
    [Title 1](namespace13/project13@3c6b80ff7034fa0d585314e1571cc780596ce3c8)
    ([merge request](namespace13/project13!1))\n"
}

ファイルに変更履歴データを追加

リポジトリ内のコミットに基づいて変更履歴データを生成し、変更履歴データを変更履歴ファイルにコミットしません。

セマンティックバージョニングとコミット範囲を指定すると、GitLabは特定のGitトレーラーを使用するすべてのコミットの変更履歴を生成します。GitLabは、プロジェクトのGitリポジトリ内の変更履歴ファイルに、新しいMarkdown形式のセクションを追加します。出力形式はカスタマイズできます。

パフォーマンスとセキュリティ上の理由から、変更履歴の設定の解析中は2秒に制限されています。この制限は、不正な形式の変更履歴テンプレートからの潜在的なDoS攻撃を防ぐのに役立ちます。リクエストがタイムアウトした場合は、changelog_config.ymlファイルのサイズを小さくすることを検討してください。

ユーザー向けドキュメントについては、変更履歴を参照してください。

POST /projects/:id/repository/changelog

変更履歴は、次の属性をサポートしています:

属性必須説明
version 1文字列はい変更履歴を生成するバージョン。形式は、セマンティックバージョニングに従う必要があります。
branch文字列いいえ変更履歴の変更をコミットするブランチ。デフォルトは、プロジェクトのデフォルトブランチです。
config_file文字列いいえプロジェクトのGitリポジトリ内の変更履歴設定ファイルのパス。デフォルトは.gitlab/changelog_config.ymlです。
config_file_ref文字列いいえ変更履歴設定ファイルが定義されているGit参照(例:ブランチ)。デフォルトでは、リポジトリのブランチが使用されます。
date日時いいえリリースの日時。デフォルトは現在の時刻です。
file文字列いいえ変更をコミットするファイル。デフォルトはCHANGELOG.mdです。
from 2文字列いいえ変更履歴に含めるコミットの範囲の開始を示すコミットのSHA。このコミットは変更履歴には含まれません。
message文字列いいえ変更をコミットするときに使用するコミットメッセージ。デフォルトはAdd changelog for version Xです。ここで、Xversion引数の値です。
to文字列いいえ変更履歴に含めるコミットの範囲の終わりを示すコミットのSHA。このコミットは変更履歴に含まれます。デフォルトは、branch属性に指定されたブランチです。15,000コミットに制限されています。
trailer文字列いいえコミットを含めるために使用するGitトレーラー。デフォルトはChangelogです。大文字と小文字を区別します。ExampleexampleまたはeXaMpLEと一致しません。

Footnotes(脚注):

  1. 属性versionには、vプレフィックスを含めることも、省略することもできます。1.0.0v1.0.0はどちらも同じ結果を生成します。GitLab 17.0で導入されました。

  2. fromが指定されていない場合、GitLabは、指定されたバージョンより前の最後の安定したバージョンのタグを自動的に検索します。GitLabは、セマンティックバージョニングに従って、X.Y.ZまたはvX.Y.Z形式のタグを認識します。

    たとえば、version2.1.0の場合、GitLabはタグv2.0.0を使用します。version1.1.1または1.2.0の場合、GitLabはタグv1.1.0を使用します。v1.0.0-pre1のようなプレリリースタグは無視されます。

    適切なタグが見つからない場合、APIはエラーを返し、from属性を明示的に指定する必要があります。

以下に示す例では、cURLを使用してHTTPリクエストを実行します。コマンドの例では次の値を使用します:

  • プロジェクトID: 42
  • ロケーション: GitLab.comでホスト
  • APIトークンの例: token

次のコマンドは、バージョン1.0.0の変更履歴を生成します。

コミット範囲:

  • 最後のリリースのタグから開始します。
  • ターゲットブランチの最後のコミットで終了します。デフォルトのターゲットブランチは、プロジェクトのデフォルトブランチです。

最後のタグがv0.9.0で、デフォルトブランチがmainの場合、この例に含まれるコミットの範囲はv0.9.0..mainです:

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

別のブランチのデータを生成するには、branchパラメータを指定します。次のコマンドは、fooブランチからデータを生成します:

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&branch=foo" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

別のトレーラーを使用するには、trailerパラメータを使用します:

curl --request POST --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&trailer=Type" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

結果を別のファイルに保存するには、fileパラメータを使用します:

curl --request POST \
  --header "PRIVATE-TOKEN: token" \
  --data "version=1.0.0&file=NEWS" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog"

パラメータとしてブランチを指定するには、to属性を使用します:

curl --request GET \
  --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/changelog?version=1.0.0&to=release/x.x.x"

手動変更履歴ファイルからの移行

手動で管理される既存の変更履歴ファイルから、Gitトレーラーを使用する変更履歴ファイルに移行する場合は、変更履歴ファイルが予期される形式と一致していることを確認してください。そうしないと、APIによって追加される新しい変更履歴エントリが、予期しない位置に挿入される可能性があります。たとえば、手動で管理される変更履歴ファイルのバージョンの値がX.Y.ZではなくvX.Y.Zとして指定されている場合、Gitトレーラーを使用して追加される新しい変更履歴エントリは、変更履歴ファイルの末尾に付加されます。

イシュー444183では、変更履歴ファイルのバージョンヘッダー形式をカスタマイズすることを提案しています。ただし、このイシューが完了するまで、変更履歴ファイルで予期されるバージョンヘッダー形式はX.Y.Zです。

ヘルス

プロジェクトリポジトリのヘルスに関連する統計を取得します。このエンドポイントは、プロジェクトごとに1時間あたり5件のリクエストにレート制限されています。

GET /projects/:id/repository/health

サポートされている属性は以下のとおりです:

属性必須説明
generateブール値いいえtrueの場合、新しいヘルスレポートを生成するかどうか。エンドポイントが404を返す場合に設定します。

成功した場合、200 OKとリポジトリのヘルス統計が返されます。

リクエストの例:

curl --header "PRIVATE-TOKEN: token" \
  --url "https://gitlab.com/api/v4/projects/42/repository/health"

レスポンス例:

{
  "size": 2619748827,
  "references": {
    "loose_count": 13,
    "packed_size": 333978,
    "reference_backend": "REFERENCE_BACKEND_FILES"
  },
  "objects": {
    "size": 2180475409,
    "recent_size": 2180453999,
    "stale_size": 21410,
    "keep_size": 0,
    "packfile_count": 1,
    "reverse_index_count": 1,
    "cruft_count": 0,
    "keep_count": 0,
    "loose_objects_count": 36,
    "stale_loose_objects_count": 36,
    "loose_objects_garbage_count": 0
  },
  "commit_graph": {
    "commit_graph_chain_length": 1,
    "has_bloom_filters": true,
    "has_generation_data": true,
    "has_generation_data_overflow": false
  },
  "bitmap": null,
  "multi_pack_index": {
    "packfile_count": 1,
    "version": 1
  },
  "multi_pack_index_bitmap": {
    "has_hash_cache": true,
    "has_lookup_table": true,
    "version": 1
  },
  "alternates": null,
  "is_object_pool": false,
  "last_full_repack": {
    "seconds": 1745892013,
    "nanos": 0
  },
  "updated_at": "2025-05-14T02:31:08.022Z"
}

応答の各フィールドの説明については、RepositoryInfoResponse protobufメッセージを参照してください。