配布パッケージに関する概念 4
やっぱりある程度は抽象化しないとダメだ。
- 実ディレクトリツリーはファイルシステムのツリー
- 仮想ディレクトリフォーレストは名前付きフォーレストで、成分のツリーに名前が付いている。
- 仮想ディレクトリフォーレストのツリーを識別する名前がプレース。
- 実ディレクトリツリーと仮想ディレクトリフォーレストの対応関係を記述するメタ情報が、assign.jsonまたはfiles.json。
- assign.jsonは条件を記述する、files.jsonは全部列挙する。どちらか一方があれば十分。
- 2つの仮想ディレクトリフォーレストのあいだでオペレーションができる。
- オペレーションは、ソースとターゲットを定めた上で、create, update, delete, patch 。
- フィーチャとは、仮想ディレクトリフォーレストの上で定義された属性を値とする部分関数といえる。
- フィーチャを操作することができる。create, update, delete, patch は、フォーレストの形状操作と共にフィーチャも操作する。
- フィーチャは、実ディレクトリツリーとpackage.jsonの組み合わで生成される。
- ただ1つのフィーチャを持つ仮想ディレクトリフォーレストをパッケージと呼ぶ。
- いくつかのフィーチャを持つ仮想ディレクトリフォーレストをプロジェクトと呼ぶ。
- パッケージとプロジェクトの差は曖昧で、厳密に定める必要もない。
- パッケージはリリースヒストリーを持ち、プロジェクトはインストールヒストリーを持つ。ヒストリーは何らかの事象と時刻の対のリストである。
- プロジェクトを、パッケージをもとに操作することがモディフィケーション。
プロジェクトとパッケージをあまり区別しないことがミソかな。
フィーチャは、グラフ上のノードラベリングとも言える。ノードIDはラベル(属性)と別だとして、2つのグラフのIDを比較して形状操作をして、さらにフィーチャ=ノードラベリングも書き換えるのがインストールとアンイストール。これに時間概念を入れて、必ず逆操作ができるようにする。時間的な記録がヒストリーまたはログ。
パッケージやプロジェクトを時間も含めた空間内に配置されたノードと考えて、時間方向の辺も考慮するのは、バージョン管理システムと同じ。
仮想ディレクトリフォーレストとかフィーチャを定義するメタデータ、アーカイブやヒストリーは、パケージ/プロジェクトとは別物と考えたほうがわかりやすい。もちろん、物理的にはメタデータもデータだが、概念的にはメタデータは天上にあると思っておく。