このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

配布パッケージに関する概念 4

やっぱりある程度は抽象化しないとダメだ。

  1. ディレクトリツリーはファイルシステムのツリー
  2. 仮想ディレクトフォーレストは名前付きフォーレストで、成分のツリーに名前が付いている。
  3. 仮想ディレクトフォーレストのツリーを識別する名前がプレース。
  4. ディレクトリツリーと仮想ディレクトフォーレストの対応関係を記述するメタ情報が、assign.jsonまたはfiles.json
  5. assign.jsonは条件を記述する、files.jsonは全部列挙する。どちらか一方があれば十分。
  6. 2つの仮想ディレクトフォーレストのあいだでオペレーションができる。
  7. オペレーションは、ソースとターゲットを定めた上で、create, update, delete, patch 。
  8. フィーチャとは、仮想ディレクトフォーレストの上で定義された属性を値とする部分関数といえる。
  9. フィーチャを操作することができる。create, update, delete, patch は、フォーレストの形状操作と共にフィーチャも操作する。
  10. フィーチャは、実ディレクトリツリーとpackage.jsonの組み合わで生成される。
  11. ただ1つのフィーチャを持つ仮想ディレクトフォーレストをパッケージと呼ぶ。
  12. いくつかのフィーチャを持つ仮想ディレクトフォーレストをプロジェクトと呼ぶ。
  13. パッケージとプロジェクトの差は曖昧で、厳密に定める必要もない。
  14. パッケージはリリースヒストリーを持ち、プロジェクトはインストールヒストリーを持つ。ヒストリーは何らかの事象と時刻の対のリストである。
  15. プロジェクトを、パッケージをもとに操作することがモディフィケーション。

プロジェクトとパッケージをあまり区別しないことがミソかな。

フィーチャは、グラフ上のノードラベリングとも言える。ノードIDはラベル(属性)と別だとして、2つのグラフのIDを比較して形状操作をして、さらにフィーチャ=ノードラベリングも書き換えるのがインストールとアンイストール。これに時間概念を入れて、必ず逆操作ができるようにする。時間的な記録がヒストリーまたはログ。

パッケージやプロジェクトを時間も含めた空間内に配置されたノードと考えて、時間方向の辺も考慮するのは、バージョン管理システムと同じ。

仮想ディレクトフォーレストとかフィーチャを定義するメタデータアーカイブやヒストリーは、パケージ/プロジェクトとは別物と考えたほうがわかりやすい。もちろん、物理的にはメタデータもデータだが、概念的にはメタデータは天上にあると思っておく。