何が追加されたのか
condense-json は、JSONの中の繰り返しを別のテーブルに追い出して圧縮し、元に戻せるようにするPythonライブラリです。1.0のリリース直後に出た 1.1 では、作者が自身のCLIツール LLM へ組み込む作業のなかで見つかった課題が反映されています。実際に使って初めて分かった不足を、そのまま次のバージョンに落とす——という開発の順序が、この小さなリリースの性格をよく表しています。
変更は大きく3点です。
- replacements に文字列以外の値を置ける(issue #8)。
condense_json()とuncondense_json()が、文字列以外の値も「構造的な置換」として識別して扱えるようになりました。 - オブジェクトをマージ操作の起点にできる。
condense_json()が「よく似たオブジェクト」を検出し、どのキーを更新し、どのキーを削除すればもう一方になるか、という指示を保存します。uncondense_json()はその指示を適用して元のオブジェクトを復元します。 - Hypothesis によるラウンドトリップテストを追加。Pythonのプロパティベーステスト用ライブラリで、生成した入力に対して「畳んで戻したら元通りか」を検証します。
なぜ重要か:重複の単位が「文字列」から「構造」へ
1と2はセットで読むべき変更です。従来のように繰り返し文字列を置き換えるだけだと、「ほぼ同じだが一部のキーだけ違うオブジェクト」の山には効きません。ところが現実のJSON——APIレスポンスの配列、イベントログ、LLMの会話履歴やエージェントの実行トレース——は、まさにその形をしています。同じスキーマのオブジェクトが、数個のフィールドだけ変えながら延々と並ぶ。
2の変更は、この山に対して「1件目を基準に、2件目は差分だけ」という保存の仕方を可能にします。汎用の圧縮と違うのは、畳んだ状態でもJSONのままである点です。構造を保ったまま小さくできるので、そのまま別のプログラムに渡したり、限られた表示領域に載せたりできます。
Hypothesis のテストが示していること
可逆変換のライブラリにとって、機能追加より怖いのは「戻したら壊れていた」です。マージ指示という間接的な表現が入った以上、想定外の入れ子や型の組み合わせで復元が崩れるリスクは確実に増えます。手書きのテストケースは、書いた人が思いつく範囲しかカバーしません。Hypothesis のようなプロパティベーステストは、入力を機械的に生成して不変条件(ここでは「畳んで戻せば元に戻る」)を壊す例を探しに行きます。機能追加と同じタイミングでこれを入れた、という順序自体が設計判断です。
💼 事業会社視点:これは自社にどう効くか
生成AIを本番投入した企業ほど、いま効いてくるのは推論コストではなくログの保管と閲覧のコストです。会話履歴、ツール呼び出し、エージェントの実行トレースは、ほぼ同型のJSONオブジェクトが延々と並ぶ構造をしています。condense-json 1.1 のオブジェクト単位マージは、この「9割同じ、1割違う」に対して差分だけを持つ発想であり、SaaS事業者が自社のAI機能でユーザーごとのトレースを長期保管する場面、ECが商品データや注文イベントを扱う場面に、そのまま考え方が転用できます。ポイントは、圧縮後もJEONではなくJSONのままである点——検索・加工・画面表示のパイプラインを壊さずに容量を削れるかどうかが、内製チームの評価軸になります。
受託開発の責任者は別の点を見るべきです。1.1 は Hypothesis によるラウンドトリップテストを同時に入れています。「可逆であること」を人力のテストケースで担保する見積もりを出してくる会社と、不変条件をプロパティベースで検証する会社では、データ変換案件の事故率が違います。発注側の品質要件に一行加える価値があります。