テキストとJSONの差分比較における基本概念
差分比較(diff)とは、2つのデータ群を突き合わせ、その間にある追加、削除、変更といった差異を特定する処理です。構成ファイルの更新履歴の確認、APIレスポンスの検証、データ移行前後におけるJSONデータの整合性チェック、あるいは短いテキストの校正など、開発者やアナリストにとって正確な差分抽出は不可欠な作業です。
本ツールは、比較対象となる2つの入力データを左右に並べて比較し、変更箇所を視覚的に特定します。
テキストモードにおける比較と粒度
テキストモードでは、プレーンテキストを対象に「行」または「単語」の単位(粒度)で比較を行います。
- 行単位の比較: 行全体を1つの要素として扱い、行の追加・削除・変更を検出します。
- 単語単位の比較: 行内の個々の単語レベルまで細分化して比較するため、1行の中のわずかな修正箇所も正確に特定できます。
テキスト比較のサンプル例
本ツールに用意されているテキストサンプルの構成は以下の通りです。
- 変更前(左側):
BroBroGoのツールはブラウザ上で動作します。 高速で、プライバシーが守られ、シンプルです。 手早く確認したいときにご利用ください。 - 変更後(右側):
BroBroGoのツールはブラウザ上で動作します。 高速で、プライバシーが守られ、目的に特化しています。 手早く比較したいときにご利用ください。
この2つのテキストを比較すると、「シンプルです。」から「目的に特化しています。」への変更、および「確認」から「比較」への変更が検出されます。
JSONモードにおける構造化データの比較
JSONモードでは、単なる文字列としての比較ではなく、JSONのデータ構造を解析(パース)した上で比較を行います。
- キーの順序: オブジェクトのキーは名前によって比較されます。そのため、キーの記述順序が入れ替わっているだけであれば、意味的な変更(セマンティックな変更)としては報告されません。
- 配列の比較: 配列(Array)は要素の位置(インデックス)に基づいて比較されます。
- 構造化パスの特定: 変更が検出された場合、対象のデータが存在する場所を構造化されたパス(例:
$.user.emailなど)としてリストアップします。
JSON比較のサンプル例
本ツールに用意されているJSONサンプルの構成は以下の通りです。
- 変更前(左側):
{ "name": "ブロブロゴー", "plan": "無料プラン", "tools": ["json", "regex", "hash"], "private": true } - 変更後(右側):
{ "name": "ブロブロゴー開発ツール", "plan": "無料プラン(制限あり)", "tools": ["json", "regex", "diff"], "private": true, "updated": 2026 }
この比較を実行すると、name や plan の値の変更、tools 配列の3番目の要素の変更(hash から diff への変更)、および新規キー updated の追加が構造的に検出されます。
入力制限とエラーハンドリング
ブラウザ側のリソースを保護し、ページの応答性を維持するために、本ツールには以下の制限とエラー処理が組み込まれています。
- 文字数制限: 左右それぞれの入力エリアの上限は300,000文字です。これを超えるデータを入力すると、「入力データが大きすぎます。より小さなデータで比較してください。」というエラーが表示されます。
- タイムアウト: 比較処理が重く、2.5秒以上かかる場合は処理を自動的に停止し、「比較処理に時間がかかりすぎています。より小さな入力データにするか、行モードをお試しください。」と表示されます。
- 表示制限: 処理結果が極めて大きい場合、ページのフリーズを防ぐために出力を制限し、「ページの応答性を維持するため、制限された結果を表示しています。」という警告を表示します。
- 構文エラー: JSONモードにおいて、入力されたデータが不正なフォーマットである場合、それぞれ「左側のJSONが無効です:」または「右側のJSONが無効です:」に続いてエラー内容が表示されます。
- 比較失敗: その他の原因で比較が実行できない場合は、「これらの入力を比較できませんでした。」と表示されます。
ブラウザ内処理とプライバシー
本ツールに入力されたテキストやJSONデータは、すべてお使いのブラウザ上でローカルに処理されます。外部のサーバーにデータが送信されたり、BroBroGoにアップロードされたりすることは一切ありません。そのため、外部への送信を避けたいデータであっても、ローカル環境でそのまま比較を行うことができます。
よくある質問(FAQ)
テキストモードとJSONモードの違いは何ですか?
テキストモードは、生のコンテンツを行単位または単語単位で比較します。JSONモードは、まず両方のデータを解析して一貫したフォーマットに整形した上で、$.user.email のように変更されたパスをリストアップします。
非常に大きな入力データも処理できますか?
処理に時間のかかる比較は2.5秒後に停止します。ページの応答性を維持するため、非常に大きなデータが誤って貼り付けられた場合は上限が適用されます。
JSONモードではオブジェクトのキーの順序は無視されますか?
構造化変更リストはオブジェクトのキーを名前で比較するため、キーの順序のみの違いは意味的な変更として報告されません。配列は要素の位置によって比較されます。