# proto ファイル確認・protobuf 互換性チェック

.proto の内容を貼るだけで、メッセージ・フィールドの番号・型・ラベル・enum・rpc の一覧と、番号の重複や範囲外などの指摘を行番号つきで出します。旧と新の 2 つを比べると、フィールド番号の変更や型の変更など、互換性を壊すおそれのある変更を、注意や安全な変更と分けて示します。定義はブラウザの外へ送りません。

- URL: https://tools.itlibra.com/ja/protobuf-studio
- 端末内で処理・アップロードなし
- 最終更新: 2026-10-31

## 使い方

1. 「変更前（古い定義）」に古い .proto、「変更後（新しい定義）」に新しい .proto を貼るか、「ファイルを開く」で読み込みます。「サンプルで試す」でも確かめられます。
2. 1 つだけ確かめたいときは「定義を確認」を押します（左の欄を読みます）。2 つを比べるときは「差分を調べる」を押します（Ctrl または ⌘ + Enter も使えます）。
3. 確認では、メッセージ・フィールド（番号・型・ラベル）・enum・service と rpc の一覧と、行番号つきの指摘が出ます。差分では、破壊的変更の候補・注意・安全な変更が出ます。
4. 「Markdown をコピー」で PR の説明に貼れる表にできます。「JSON を保存」では、判定・件数・変更の一覧を保存します。

## こんなときに

- proto を変更する PR で、フィールド番号の変更や型の変更がないかを確かめたい
- 削除したフィールドを reserved にしたかを、一覧で確認したい
- 番号の重複・範囲外・予約番号の再利用を、コードを生成する前に行番号つきで見つけたい
- 社内の proto 定義を外部に送らずに、旧新の互換性を調べたい

## できること

### 定義の一覧

package・import・message（入れ子）・enum・oneof・map・service と rpc（stream）を読み、フィールドの番号・型・ラベルを一覧にします。

### 行番号つきの指摘

番号の範囲外（1〜536870911）・予約の 19000〜19999・番号と名前の重複・reserved の再利用・proto3 の enum の先頭・未定義の型などを行番号で示します。

### 互換性の区分

フィールド番号の変更、番号の使い回し、型の変更、ラベルの変更、削除したフィールドを reserved にしていないことを「破壊的」にまとめます。int32 と int64 などの互換の組は「注意」にします。

### 判定の理由を各行に

どの規則でその区分にしたかを行ごとに書きます。規則の一覧も画面で読めるので、レビューの根拠にできます。

### ブラウザの中だけで処理

.proto は送信せず、ブラウザの中だけで解析します。import 先のファイルを取りに行くこともしません。


## 対応形式

### 入力

- .proto（proto2・proto3・editions）
- syntax・edition の行つき・なし
- UTF-8（BOM 付き可）

### 出力

- 画面の一覧（定義・指摘・差分）
- Markdown（PR 用の表）
- JSON（判定・件数・変更の一覧）


## 対応状況

| 機能 | 対応 | 補足 |
| --- | --- | --- |
| .proto の読み込み（proto2・proto3・editions の syntax・edition 行） | 対応 | — |
| package・import・message（入れ子）・enum・oneof・map・service と rpc（stream）の一覧 | 対応 | — |
| フィールドの番号・型・ラベル（optional・repeated・map）の一覧 | 対応 | — |
| 指摘: 番号の範囲・予約の番号・重複・reserved の再利用・proto3 の enum・名前の重複・未定義の型 | 対応 | protoc の検査と完全には一致しません。読んだ範囲の指摘です |
| 旧新の比較: 番号・型・ラベル・削除・reserved・enum・rpc | 対応 | ワイヤー上の互換の考え方による判定です。実際のデータや読む側のコードは分かりません |
| extend・proto2 の group | 一部対応 | extend は読み飛ばして注記します。group は読めない行として示します |
| oneof の入れ替えと、option の値の比較 | 非対応 | 比べません |
| import 先のファイルや型の確認 | 非対応 | 取得しません。import 先の型は「確認できない」と注記します |
| バイナリのデコード（binary\_data\_studio をご利用ください） | 非対応 | — |
| コード生成・protoc の実行 | 非対応 | — |
| オフラインでの利用 | 対応 | 一度開いたあとは通信なしで動作します |

## 制限・注意事項

- 1 つの .proto は 30 万文字まで。ファイルは 1 MB まで読み込みます。
- 一覧と指摘は全件を数えたうえで画面に出します。
- 判定は互換性の一般的な考え方によるもので、API ごとの方針によって変わります。

## プライバシーと安全性

.proto はお使いのブラウザの中だけで解析し、送信も保存もしません。ページを閉じると内容は消えます。analytics には、入力の中身や件数を含まない実行の記録だけを送ります。

## よくある質問

### フィールド番号を変えると何が起きますか？

protobuf はデータをフィールド番号で読むため、番号を変えると古いデータの値を読めなくなります。削除したフィールドの番号を別のフィールドに使い回すことも、データを壊すおそれがあります。

### int32 を int64 に変えても大丈夫ですか？

int32・uint32・int64・uint64・bool の間は、ワイヤー上で互換の組として扱い、「注意」にします。値の範囲が変わるため、読む側のコードは確認してください。sint32 と sint64、fixed32 と sfixed32、fixed64 と sfixed64、string と bytes、enum と整数型も同じく「注意」にします。

### 削除したフィールドはどう扱えばよいですか？

フィールドの番号と名前を reserved に書いて、再利用を防ぎます。削除して reserved にしたものは「安全な変更」として示します。

### import 先の型は確認できますか？

いいえ。import 先のファイルは取りに行かないため、その型は「確認できない」と注記します。import を含む .proto は、関係するファイルを一緒に貼ると確かめやすくなります。

### バイナリのデータは読めますか？

いいえ。このツールは .proto の定義だけを読みます。バイナリのデータは「バイナリデータ確認」ツールを使ってください。コードの生成もしません。
