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

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

端末内で処理・アップロードなしスマホ対応オフライン対応

ファイルや入力内容はお使いの端末(ブラウザ)の中だけで処理され、サーバーへは送信されません。

変更前(古い定義)
0 / 300,000
変更後(新しい定義)
0 / 300,000
1 つの .proto は 30 万文字まで。Ctrl(⌘)+ Enter で差分を調べます。
.proto を貼り付けて「定義を確認」か「差分を調べる」を押すと、ここに結果が出ます。
判定の規則
  • 破壊的変更の候補 既存のデータや読む側のコードが壊れるおそれがある変更です(候補)。
  • 注意(互換の組・改名) ワイヤー上は互換ですが、値の範囲や名前が変わるため確認が必要な変更です。
  • 安全な変更 既存のデータや読む側のコードがそのまま使える変更です。

使い方

  1. 「変更前(古い定義)」に古い .proto、「変更後(新しい定義)」に新しい .proto を貼るか、「ファイルを開く」で読み込みます。「サンプルで試す」でも確かめられます。

  2. 1 つだけ確かめたいときは「定義を確認」を押します(左の欄を読みます)。2 つを比べるときは「差分を調べる」を押します(Ctrl または ⌘ + Enter も使えます)。

  3. 確認では、メッセージ・フィールド(番号・型・ラベル)・enum・service と rpc の一覧と、行番号つきの指摘が出ます。差分では、破壊的変更の候補・注意・安全な変更が出ます。

  4. 「Markdown をコピー」で PR の説明に貼れる表にできます。「JSON を保存」では、判定・件数・変更の一覧を保存します。

できること

定義の一覧

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

行番号つきの指摘

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

互換性の区分

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

判定の理由を各行に

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

ブラウザの中だけで処理

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

こんなときに

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

対応形式

入力

.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 の定義だけを読みます。バイナリのデータは「バイナリデータ確認」ツールを使ってください。コードの生成もしません。

JSON→型・Schema生成(Schema Codegen)

JSON のサンプル・JSON Schema・OpenAPI を貼ると、10 種類の形式の型定義を生成します。複数のサンプルを並べると、省略されるキーや型の違いも推論します。データは端末の外へ送信しません。

アップロードなし

Binary Data Studio(バイナリビューア・16進ダンプ)

ファイルをドロップすると、オフセット・16 進・文字欄の 16 進ダンプで開きます。巨大なファイルも見えている範囲だけを読むので固まらず、データは端末の外へ送りません。検索・値の解釈・比較・書き出しまで 1 画面でできます。

アップロードなし

OpenAPI 差分・破壊的変更チェック

変更前と変更後の OpenAPI(または Swagger 2.0)を貼るだけで、クライアントが壊れる破壊的な変更を一覧します。パスの削除・必須項目の追加・型の変更などを「破壊的」「注意」「非破壊」に分け、各行に判定の理由を付けます。定義はブラウザの外へ送りません。

アップロードなし

AsyncAPI 確認・イベント API 差分チェック

AsyncAPI の YAML・JSON を貼るだけで、サーバー・チャンネル・操作・メッセージの一覧と、解決できない $ref や使われていない components の指摘を行番号つきで出します。旧と新を比べると、チャンネルや操作の削除、payload の項目の削除や必須化などの候補を示します。定義はブラウザの外へ送りません。

アップロードなし

GraphQL スキーマ確認・破壊的変更チェック

GraphQL の SDL(schema.graphql)を貼るだけで、型・フィールド・引数の一覧と、未定義の型などの指摘を行番号つきで出します。旧と新の 2 つを比べると、フィールドの削除や引数の必須化など、破壊的変更の候補を安全な変更と分けて示します。定義はブラウザの外へ送りません。

アップロードなし

テキスト・コード Diff

変更前と変更後を貼り付けるかファイルをドロップするだけで、追加・削除された行と、行の中で変わった単語まで色分けして表示します。結果は unified 形式のパッチとしてコピー・保存でき、入力はブラウザの外へ出ません。

アップロードなし

最終更新: