【ごかんせい】

互換性 とは?

💡 古いものが新しい環境で動く・異なる製品間で連携できる「つながりやすさ」
📌 このページのポイント
互換性:前方互換と後方互換 後方互換(下位互換) 新バージョン v2.0 旧データ v1.0形式 ✓ 読み込みOK 新しいソフトで古いデータが使える 前方互換(上位互換) 旧バージョン v1.0 新データ v2.0形式 ✓ 読み込みOK 古いソフトで新しいデータが使える 互換性なしの場合 v2.0のファイルをv1.0で開く → エラー / データ破損 バージョン間でデータやソフトが使い回せるかどうか
互換性のイメージ
ひよこ ひよこ

互換性って何?

ペンギン先生 ペンギン先生

異なるバージョンや製品・システム間で問題なく動作できる性質。例えば「Python 3.9で作ったコードがPython 3.11でも動く」「古いExcelファイルが新しいExcelで開ける」がそれぞれ後方互換性がある状態。

ひよこ ひよこ

互換性が壊れるって何?

ペンギン先生 ペンギン先生

「Breaking Change(破壊的変更)」と言う。APIのバージョンアップで関数の引数が変わったり、ライブラリが古い機能を削除したりすると、それを使っていたコードが動かなくなる。Semantic Versioning(1.0.0→2.0.0などメジャーバージョンアップ)でBreaking Changeを示すのが慣例。

ひよこ ひよこ

互換性を維持するのは難しいの?

ペンギン先生 ペンギン先生

難しい。設計の改善・新機能追加と互換性維持はトレードオフ。特にPublicなAPIライブラリは多くのユーザーが依存するため互換性を壊せない。逆に「後方互換性を捨てて大幅に改善した」事例もある(Python 2→3など)。内部実装は積極的に改善して、外部インターフェースは慎重に変えるのが原則。

ひよこ ひよこ

互換性を壊す変更って、どうやってユーザーに伝えるの?

ペンギン先生 ペンギン先生

セマンティックバージョニング(SemVer)」が標準的な方法だよ。「メジャー.マイナー.パッチ(例: 2.1.3)」で、メジャーバージョンアップ(2→3)は互換性が壊れる変更がある、マイナー(1→2)は後方互換ありの機能追加、パッチは修正のみ。あと「Deprecation(非推奨化)」のプロセスも重要で、いきなり削除せずに「次のメジャーバージョンで削除予定」と事前に警告を出すのが作法なんだ。Pythonの__future__インポートもこの考え方だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
互換性って出てきたら「異なるバージョン・システム間で動作する性質、後方互換性(古→新)が特に重要」と思えばOK!
📖 おまけ:英語の意味
「Compatibility」 = 両立できること・相性の良さ
💬 ラテン語のcompatibilis(共存できる)に由来。コンピュータの文脈では1960年代のIBMがハードウェア間のソフトウェア互換性を保証したことで普及した概念
← 用語集にもどる