奈良阪某/伺かパッケージマネージャ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
* 伺かパッケージマネージャの考察 [#r3171f96]
伺かパッケージマネージャの萌芽 http://togetter.com/li/668...
** 対象物 [#f2f42d40]
:伺かのゴースト開発に関するコンポーネント全て|
SHIORI、SHIORIミドルウェア、SAORI、シェル(フリーシェル)、...
:伺かのコンポーネント全て|
も含める?
ベースウェア、プラグイン、SSTPボトル等
** パッケージマネージャの利点 [#b11184a2]
- 依存関係の解決
- 「標準的な配置」の普及
これによるツールの簡易化や自動化がすすむ。
これまでにそういう文化はなかったのでこの利点が感じられる...
* 問題と解決策 [#k7deb86b]
** これまでの膨大なリソースはインデックス化されていない [...
まだサポートor更新がされているものは配布者や有志でやって...
** リポジトリの容量問題 [#fe425a33]
パッケージマネージャの参照するリポジトリを各配布者のサイ...
** パッケージの情報は何で示すのか [#qffd465f]
パッケージ本体以外の付加的情報一般としてdescript.txt的なp...
個人的には書きやすくパースしやすいYAML形式がいいな。
** ライセンス問題 [#oaad370c]
ライセンスに関して、とくにシェルを扱う場合、MITやらCCやら...
この解決策としては、独自ライセンスといっても普通は「仕様...
よって「改変可能」や「連絡必須」等の(日本語の)フラグを「C...
** 勝手登録 [#fe8c33d3]
インデックス化を集合知に頼る(個人や特定チーム管理だとコス...
ここで作者非作者の扱いについて考察すべきである。
*** 作者以外の登録を許す場合 [#nf41dbaf]
''デメリット''
- 作者の意思表示を無視して登録される事例が起こりうる(界隈...
''メリット''
- インデックスサイト登録を可とする作者の登録作業が軽減さ...
- すでに作者による更新が停止されたものも扱える。
*** 逆に作者以外の登録を許さない場合 [#h32d9d03]
''デメリット''
- すでに更新が停止されたものはほぼ永遠にパッケージ管理で...
- インデックスサイト登録を可とする作者の手間が増える/ある...
- 作者非作者を手間要らずかつ有効に判別するのは困難である(...
''メリット''
- 作者の意思表示に沿わない登録は普通起こり得ない。
*** 解決策 [#re9f89a3]
主に作者側の大きな利益不利益は作者の意思表示問題であり、...
まずこの「作者の意思表示に反する情報配信が起こりえる」問...
つまり完成品のゴーストに関してはその一定の解決をみている...
このパッケージマネージャはそれと同様のアプローチを、ゴー...
まず作者は配布サイトに意思表示をすることで、性善説的に意...
一方で誤ってかそれに反して登録されてしまった場合、その登...
つまり既存の登録系サイトと同じような管理体制を敷けば、妥...
ここで前述の容量等の問題から、リポジトリは単なるURLリスト...
さらに加えて前述のpackage.txtを参照するという側面から、こ...
これは検索エンジンに対するrobots.txtのような手軽かつ有効...
なおこのようにpackage.txtの最優先参照先をデータ本体と同一...
以上から、以下の仕様を提案する。
- パッケージリポジトリはアーカイブのURLリストとする
- package.txtリポジトリはアーカイブのURLをキーとしたpacka...
- アーカイブと同一のディレクトリにplaintextの'package.txt...
- アーカイブと同一のディレクトリに'package.txt'がない場合...
- 'package.txt'が存在し不正な場合パッケージとして扱われない
** 依存関係解決に関する問題 [未解決] [#oc0cba19]
依存関係をもつものをインストールする場合、基点ディレクト...
依存関係を持つものをアンインストールする場合、依存関係に...
** 「前のバージョン」の参照が不安定である [] [#a2fc2ff6]
上記のような構造のリポジトリである場合、同一パッケージの...
package.txtリポジトリの情報であれば一応自動的に古いファイ...
この解決としては、パッケージリポジトリにバージョン情報も...
無論作者が古いバージョンをバックアップしない場合は不可能...
なのでこの問題の完全な解決にはパッケージリポジトリに過去...
特定用途用のWebArchiveのようなものだが、上記で回避した容...
後者意思表示問題は、package.txtに追加のhistory_archive属...
これはPerlのBackPANにヒントを得たものです。
* 実装 [#yab5b280]
ネイティブアプリケーションもいいが、まあLL(軽量プログラミ...
:ランタイムがGPLライクでなくMIT/BSDライクなライセンスであ...
node.js(JavaScript)[MIT], Python[PSFL≒BSD], Ruby[BSD], Lu...
:ランタイムがGPLライクであっても、ソースの入手先とLICENSE...
Perl[GPL]
よってフォルダの構成が不細工になったりはするが基本的に結...
いくつかのLLではEXEに固めるツールがあったりする。
** 必要機能 [#c67b8768]
思いついた感じ
*** ローカルリポジトリ・リモートリポジトリの別 [#fd623b22]
ダウンロードしといて後で使う系の用途
*** 一般的機能 [#s046c587]
- インストール
- アンインストール
- アップデート
- 検索
- パッケージ情報
- アーカイブダウンロード(インストールしない)
*** インストール・アンインストール・アップデート [#ec961b...
インストールはアーカイブを単純に展開するだけでも可能なの...
インストール時に解凍したファイルを記録するか、あるいはpac...
またアップデート時もパッケージ名とバージョンがわからない...
package.cacheとかみたいなのをインストールしたフォルダに作...
*** パッケージ情報 [#ff93f326]
伺か関連で唯一の似たコンセプトをもつソフト、伺かゴースト...
現在のところ伺かのツールは基本的に「サイトに訪れてツール...
一方でパッケージマネージャはそれを無視する動線を提供する...
結局現状パッケージマネージャは特に更新停止されたツールに...
*** 検索 [#pf02c9e8]
検索キーはパッケージ名、種別(シェルとかSAORIとか)、使用条...
*** パッケージ管理 [#sc0023f1]
基本的に伺かの開発は「ゴースト制作」。
「ゴースト制作」は各ゴーストフォルダに逐一ツールが同梱さ...
つまり「あるライブラリフォルダにパッケージが集中している...
node.jsは「'node_modules'フォルダの下にパッケージ名のフォ...
しかし伺かはそういうフォルダわけを可能にしていないツール...
** アーカイブとpackage.txtの仕様 [#l3f8830e]
package.txtはこんな感じ?
name: my-shiori-package
version: 1.0
licenses:
- MIT
- Artistic-2.0
- 改変可
- 改変不可
- 改変条件付
place: /ghost/master/
YAMLで書きやすくパースし易い。
- nameは日本語も許可する……パッケージマネージャをコマンド...
- place属性は現在いるディレクトリがdescript.txtとかディレ...
ゴーストのルートフォルダ(ghost/とshell/があるとこ)からの...
↑要議論
** GUI [#v54a4857]
よくあるコマンドラインのパッケージマネージャはもちろん作...
伺かの構成物全般に作用する以上、プログラマ以外への利便性...
上記LLでGUIを構成できるのは知ってるうちで以下の通り。
*** node.js [#ffecf1db]
node-webkitというWebブラウザベースのGUIがネイティブで作れ...
HTML/CSS/JavaScriptで完全に構成できる。
*** Perl [#xa2a70ff]
- Tk - 不細工
- Wx - EXE化には向かない
- Win32::GUI - Windowsのみ
- Gtk - Windowsであんまり使われてなさそう
- XUL::Gui - 謎
ぱっとしない
*** Python [#u131d763]
- wxPython - わりとよさそう?
- PyQt
- PyGtk
- TkInter
- Pyglet
*** 他色々 [#p6fd880e]
知らない
* 仕様 [#x1d009e1]
基本的に現在配っているアーカイブに変更の必要なく、新規に...
''どうでもいい補足''
「リポジトリにはパッケージの構成情報だけもち、アーカイブ...
「それぞれのフォルダでパッケージ管理する」とこあたりはnpm...
''用語''
:リポジトリ|「倉庫」。何らかのデータが整理されておかれて...
:アーカイブ|ZIPとかEXEとか、要は配布するツールの本体。
** 基本となる情報 [#h6966baf]
伺かパッケージマネージャで扱われるパッケージは「パッケー...
** パッケージリストリポジトリ [#eda88ff8]
「パッケージ名」と「パッケージのアーカイブの場所」を対応...
*** 保持するデータ [#c453ff37]
パッケージ名、パッケージの保持バージョン、パッケージのア...
- name: パッケージ名
retain_version: 2.2
archive: http://www.example.com/example.2.2.zip
*** 場所 [#g1fb575a]
パラメータはもたず、単一のURI( http://www.example.com/pac...
*** 動作 [#n78d647a]
''参照''
パッケージマネージャはまず最初にこのリポジトリを参照し、...
次に「パッケージのアーカイブの場所」からアーカイブリポジ...
''変更''
リポジトリは可能な任意のユーザーが変更可能である。
このリポジトリには「パッケージ名」、「パッケージの保持バ...
このような単純な構成のリポジトリは、CGI等のプログラムを必...
*** 補足 [#o6b61b63]
リポジトリとしては検索機能等は提供しない。
それらは本質的でない。
パッケージマネージャ上や他の場所で提供できるし、されるべ...
** アーカイブリポジトリ [#e5d687f6]
「アーカイブ」と「package.txt」をもつリポジトリ。
これは通常「アーカイブ」の作者サイトか作者が制御できるフ...
*** 保持するデータ [#dd1a8bc1]
「アーカイブ」と「package.txt」が同一のディレクトリに配置...
「package.txt」はアーカイブ名に「.package.txt」をつけた名...
*** 場所 [#h40266ac]
「パッケージ名」に対応した「パッケージのアーカイブの場所...
*** 動作 [#xbdd0f06]
''参照''
パッケージマネージャは2番目にこのリポジトリを参照し、「pa...
正常な「package.txt」が存在する場合、「アーカイブ」がダウ...
不正な「package.txt」が存在する場合、処理は失敗し、リポジ...
「package.txt」が存在しない場合、「パッケージ名」からpack...
''変更''
通常「アーカイブ」の作者のみが情報を変更できる。
特筆すると、「アーカイブ」をパッケージマネージャから利用...
** package.txtリポジトリ [#e5c087ce]
「パッケージ名」と「package.txt」を対応付けるリポジトリ。
*** 保持するデータ [#e90b8b8b]
「パッケージ名」に対応した「package.txt」が配置されている。
*** 場所 [#t0b27e83]
「パッケージ名」をパラメータにもつ複数のURI( http://www.e...
*** 動作 [#b075ffaa]
''参照''
パッケージマネージャは必要な場合最後にこのリポジトリを参...
正常な「package.txt」が存在する場合、アーカイブリポジトリ...
それ以外の場合、処理は失敗する。
''変更''
リポジトリは可能な任意のユーザーが変更可能である。
このリポジトリには「パッケージ名」と「package.txt」のみを...
*** 補足 [#a35aea4e]
リポジトリとしては検索機能等は提供しない。
それらは本質的でない。
パッケージマネージャ上や他の場所で提供できるし、されるべ...
このような単純な構成のリポジトリは、CGI等のプログラムを必...
** アーカイブ [#w2cf2a59]
通常ZIPファイルである。
ZIP以外の場合それを解凍・配置するスクリプトが必要となる。
** package.txt [#tb31e38e]
パッケージの情報をYAML形式で書いたファイル。
すでにUTF-8が普及しているのでUTF-8を使用する。
''仕様は策定中です。変更がありえます。''
name: パッケージ名
version: 1.000
type: saori
description: テストパッケージです。
tags: [テキスト処理, カット]
sites:
- name: http://www.example.com/test_package/
description: 公式サイト
readme: http://www.example.com/test_package/readme.txt
place_on: ghost
place: /ghost/master/
licenses:
- 改変可能
*** name [#j9f9179c]
パッケージ名。
YAMLファイルに書けるあらゆるUTF-8の範囲の文字が許容される。
*** version [#jfe7a9b6]
パッケージのバージョン。
ドットで区切られた数値を使用する。
(上位) 2.2.34.1 (下位)
ドットで区切られた各桁ごとに直感的に上位の数値から比較さ...
ゼロパディングは必要としない。下記のようなバージョンも正...
2.0.99 -> 2.0.100
パッケージのアップデートを考慮し、新しいパッケージは常に...
パーケージリストリポジトリに登録するバージョンはこれの上...
パッケージリストリポジトリに登録されたバージョンが2.2だっ...
特に、互換性の無いバージョンアップでは上位桁のバージョン...
アップデートの時にはインストール済みのパッケージとこの数...
*** type [#g227c9ed]
パッケージのタイプ。
既定のタイプ文字列を指定する。
*** dependencies [#f3ff2ae7]
依存関係。
依存関係にあるパッケージの名前とバージョンの情報を持った...
基本的に前に記述されたものから順に処理される。
nameにパッケージ名、versionに有効なバージョンを記載する。
dependencies:
- name: hoge
version: 2.2
- name: piyo
version:
min: 1.0.9
max: 1.9
バージョンは単一の値を指定するか、最大を示すmaxまたは最小...
パッケージリストリポジトリに対応する上位桁バージョンが無...
また対象のpackage.txtのバージョンがこれに一致しない場合も...
バージョンを記載しないことも可能である。
制約内でとりうる最新のバージョンがインストールされるが、...
*** description [#sbcc8988]
パッケージの簡易な説明。
任意の文字列を指定する。
*** tags [#cf1a3ac1]
パッケージの内容を示すタグ。
任意の文字列を配列で指定する。
tags:
- hoge
- piyo
順不同に処理される。
*** sites [#xae71e9c]
パッケージのWebサイト。
下記のようなURLと説明(省略可)を含むリストを指定する。
sites:
- url: http://example.com/
- url: http://example.com/image
description: 動作風景
複数のサイトが指定できるが、1つ目のみが代表的なサイトとし...
http://等の一般的なスキームのほか、アーカイブ内からのパス...
ただしsitesにおいてarchive://は非推奨である。
*** readme [#gdb438c7]
パッケージのreadme。
URLを指定する。
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** changelog [#lbff596c]
パッケージのchangelog。
URLを指定する。
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** thumbnails [#ub1268bf]
パッケージのイメージ。
下記のようなURLと説明(省略可)を含むリストを指定する。
thumbnails:
- url: http://example.com/thumbnail.png
- url: http://example.com/hoge.png
description: 動作風景
- url: repository://piyo.png
description: インストール時のファイル構成
複数のサムネイルが指定できるが、1枚目のみが代表的なサムネ...
サポートされる画像形式は画像表示可能なWebブラウザが一般的...
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** place_on [#p8932691]
パッケージの配置場所の種類
既定のタイプ文字列を指定する。
place属性のルートをどこにおくかの区別をする。
'ghost'ならゴーストディレクトリのルート、'baseware'ならベ...
*** place [#c109271b]
パッケージの配置場所。
パス文字列を指定する。
place_onで決められたルートからここで指定したディレクトリ...
*** reduce [#c646e324]
パッケージアーカイブのディレクトリから先頭のディレクトリ...
正整数値を指定する。
この値のレベルだけ先頭のディレクトリが削除されて解凍され...
*** licenses [#o9bf3ee7]
パッケージの使用条件(ライセンス)。
''要考察''
** インストール [#n324dad3]
*** インストール場所の決定 [#z1dc3861]
''package.txtのplace_on属性=ghost''
ゴーストのルートディレクトリをパッケージのベースルートデ...
そのためパッケージマネージャのカレントディレクトリから上...
もし見つからなかった場合はカレントディレクトリをベースル...
このとき警告を出すべきである。
このベースルートディレクトリをルートとして同place属性にあ...
''package.txtのplace_on属性=baseware''
ベースウェアのルートディレクトリをパッケージのベースルー...
そのためパッケージマネージャのカレントディレクトリから上...
もし見つからなかった場合はカレントディレクトリをベースル...
このとき警告を出すべきである。
このベースルートディレクトリをルートとして同place属性にあ...
''package.txtのplace_on属性なし''
カレントディレクトリをベースルートディレクトリとする。
このベースルートディレクトリをルートとして同place属性にあ...
*** アーカイブ内容の配置 [#jb14c8a4]
パッケージのルートディレクトリ以下にアーカイブを解凍する。
このときベースルートディレクトリ下の".germ.package.[パッ...
この[パッケージ名]はURLエンコード([A-Za-z0-9]と[-_!~.()']...
インストール情報はpackage_informationキーにpackage.txtの...
** アンインストール [#afd71277]
*** インストール情報の把握 [#b2f7b815]
インストール情報を参照するため、package.txtのとりうる全て...
優先順位は'ghost', 'baseware', 空の順である。
それぞれのディレクトリでインストール情報のファイル名を探...
どのディレクトリでも見つからなければ失敗する。
*** ファイルの削除 [#q3317999]
インストール情報を参照し、まずファイルのみを削除する。
次にディレクトリを削除するが、削除できなかったディレクト...
最後にインストール情報ファイルを削除する。
** 禁止仕様 [#t635aceb]
インストール時のフックコードの実行は一般のパッケージマネ...
インストール時のリネームも同様であり、つまりパッケージは...
* Germ (node.jsによるパッケージマネージャの実装) [#ob13b2...
- 説明 https://github.com/Narazaka/germ
- ZIP http://narazaka.github.io/germ/germ.zip
** 注意 [#p2bc40cc]
人柱版です。
初回版だしアンインストール時にHDDを綺麗にするようなバグが...
** 古いバージョン [#xadab6e1]
package.txt等の仕様が互換性なく再策定されたので、このプロ...
新仕様対応版をいつか作ろうと思います。
** 使い方 [#ff867c3b]
ZIPの中にあるgerm.cmdが実行できます。
とりあえずコマンドを実行してみてください。
germ list
germ search test
germ info test
germ install test
germ remove test
germ get test
install/remove/search/list/info/getをとりあえず実装しまし...
リポジトリはとりあえずhttp://germ.narazaka.net/に静的ファ...
** 名前 [#q50cd313]
Rubyのgemと似てる(ぉ
短い名前をmateria, embryoから考えて辞書で引いたらこうなっ...
** ライセンス [#a3f61315]
このソフトウェアにはApacheライセンスのソフトウェアrequest...
MITライセンス(http://narazaka.net/license/MIT?2014)の元で...
* 書きかけ [#e2037096]
まあそんな感じで
* ツッコミしてください [#abb4d4b7]
- 日本語名については、混乱せぬようUTF-8で記述を明示しとい...
- 指摘の点、UTF-8固定としました。あとアーカイブ配置の仕様...
- 依存関係、サンプルあった方が叩き台になります?いくつか...
- そうですね。色々なケース把握して実装したほうがよさげな...
#comment
終了行:
#contents
* 伺かパッケージマネージャの考察 [#r3171f96]
伺かパッケージマネージャの萌芽 http://togetter.com/li/668...
** 対象物 [#f2f42d40]
:伺かのゴースト開発に関するコンポーネント全て|
SHIORI、SHIORIミドルウェア、SAORI、シェル(フリーシェル)、...
:伺かのコンポーネント全て|
も含める?
ベースウェア、プラグイン、SSTPボトル等
** パッケージマネージャの利点 [#b11184a2]
- 依存関係の解決
- 「標準的な配置」の普及
これによるツールの簡易化や自動化がすすむ。
これまでにそういう文化はなかったのでこの利点が感じられる...
* 問題と解決策 [#k7deb86b]
** これまでの膨大なリソースはインデックス化されていない [...
まだサポートor更新がされているものは配布者や有志でやって...
** リポジトリの容量問題 [#fe425a33]
パッケージマネージャの参照するリポジトリを各配布者のサイ...
** パッケージの情報は何で示すのか [#qffd465f]
パッケージ本体以外の付加的情報一般としてdescript.txt的なp...
個人的には書きやすくパースしやすいYAML形式がいいな。
** ライセンス問題 [#oaad370c]
ライセンスに関して、とくにシェルを扱う場合、MITやらCCやら...
この解決策としては、独自ライセンスといっても普通は「仕様...
よって「改変可能」や「連絡必須」等の(日本語の)フラグを「C...
** 勝手登録 [#fe8c33d3]
インデックス化を集合知に頼る(個人や特定チーム管理だとコス...
ここで作者非作者の扱いについて考察すべきである。
*** 作者以外の登録を許す場合 [#nf41dbaf]
''デメリット''
- 作者の意思表示を無視して登録される事例が起こりうる(界隈...
''メリット''
- インデックスサイト登録を可とする作者の登録作業が軽減さ...
- すでに作者による更新が停止されたものも扱える。
*** 逆に作者以外の登録を許さない場合 [#h32d9d03]
''デメリット''
- すでに更新が停止されたものはほぼ永遠にパッケージ管理で...
- インデックスサイト登録を可とする作者の手間が増える/ある...
- 作者非作者を手間要らずかつ有効に判別するのは困難である(...
''メリット''
- 作者の意思表示に沿わない登録は普通起こり得ない。
*** 解決策 [#re9f89a3]
主に作者側の大きな利益不利益は作者の意思表示問題であり、...
まずこの「作者の意思表示に反する情報配信が起こりえる」問...
つまり完成品のゴーストに関してはその一定の解決をみている...
このパッケージマネージャはそれと同様のアプローチを、ゴー...
まず作者は配布サイトに意思表示をすることで、性善説的に意...
一方で誤ってかそれに反して登録されてしまった場合、その登...
つまり既存の登録系サイトと同じような管理体制を敷けば、妥...
ここで前述の容量等の問題から、リポジトリは単なるURLリスト...
さらに加えて前述のpackage.txtを参照するという側面から、こ...
これは検索エンジンに対するrobots.txtのような手軽かつ有効...
なおこのようにpackage.txtの最優先参照先をデータ本体と同一...
以上から、以下の仕様を提案する。
- パッケージリポジトリはアーカイブのURLリストとする
- package.txtリポジトリはアーカイブのURLをキーとしたpacka...
- アーカイブと同一のディレクトリにplaintextの'package.txt...
- アーカイブと同一のディレクトリに'package.txt'がない場合...
- 'package.txt'が存在し不正な場合パッケージとして扱われない
** 依存関係解決に関する問題 [未解決] [#oc0cba19]
依存関係をもつものをインストールする場合、基点ディレクト...
依存関係を持つものをアンインストールする場合、依存関係に...
** 「前のバージョン」の参照が不安定である [] [#a2fc2ff6]
上記のような構造のリポジトリである場合、同一パッケージの...
package.txtリポジトリの情報であれば一応自動的に古いファイ...
この解決としては、パッケージリポジトリにバージョン情報も...
無論作者が古いバージョンをバックアップしない場合は不可能...
なのでこの問題の完全な解決にはパッケージリポジトリに過去...
特定用途用のWebArchiveのようなものだが、上記で回避した容...
後者意思表示問題は、package.txtに追加のhistory_archive属...
これはPerlのBackPANにヒントを得たものです。
* 実装 [#yab5b280]
ネイティブアプリケーションもいいが、まあLL(軽量プログラミ...
:ランタイムがGPLライクでなくMIT/BSDライクなライセンスであ...
node.js(JavaScript)[MIT], Python[PSFL≒BSD], Ruby[BSD], Lu...
:ランタイムがGPLライクであっても、ソースの入手先とLICENSE...
Perl[GPL]
よってフォルダの構成が不細工になったりはするが基本的に結...
いくつかのLLではEXEに固めるツールがあったりする。
** 必要機能 [#c67b8768]
思いついた感じ
*** ローカルリポジトリ・リモートリポジトリの別 [#fd623b22]
ダウンロードしといて後で使う系の用途
*** 一般的機能 [#s046c587]
- インストール
- アンインストール
- アップデート
- 検索
- パッケージ情報
- アーカイブダウンロード(インストールしない)
*** インストール・アンインストール・アップデート [#ec961b...
インストールはアーカイブを単純に展開するだけでも可能なの...
インストール時に解凍したファイルを記録するか、あるいはpac...
またアップデート時もパッケージ名とバージョンがわからない...
package.cacheとかみたいなのをインストールしたフォルダに作...
*** パッケージ情報 [#ff93f326]
伺か関連で唯一の似たコンセプトをもつソフト、伺かゴースト...
現在のところ伺かのツールは基本的に「サイトに訪れてツール...
一方でパッケージマネージャはそれを無視する動線を提供する...
結局現状パッケージマネージャは特に更新停止されたツールに...
*** 検索 [#pf02c9e8]
検索キーはパッケージ名、種別(シェルとかSAORIとか)、使用条...
*** パッケージ管理 [#sc0023f1]
基本的に伺かの開発は「ゴースト制作」。
「ゴースト制作」は各ゴーストフォルダに逐一ツールが同梱さ...
つまり「あるライブラリフォルダにパッケージが集中している...
node.jsは「'node_modules'フォルダの下にパッケージ名のフォ...
しかし伺かはそういうフォルダわけを可能にしていないツール...
** アーカイブとpackage.txtの仕様 [#l3f8830e]
package.txtはこんな感じ?
name: my-shiori-package
version: 1.0
licenses:
- MIT
- Artistic-2.0
- 改変可
- 改変不可
- 改変条件付
place: /ghost/master/
YAMLで書きやすくパースし易い。
- nameは日本語も許可する……パッケージマネージャをコマンド...
- place属性は現在いるディレクトリがdescript.txtとかディレ...
ゴーストのルートフォルダ(ghost/とshell/があるとこ)からの...
↑要議論
** GUI [#v54a4857]
よくあるコマンドラインのパッケージマネージャはもちろん作...
伺かの構成物全般に作用する以上、プログラマ以外への利便性...
上記LLでGUIを構成できるのは知ってるうちで以下の通り。
*** node.js [#ffecf1db]
node-webkitというWebブラウザベースのGUIがネイティブで作れ...
HTML/CSS/JavaScriptで完全に構成できる。
*** Perl [#xa2a70ff]
- Tk - 不細工
- Wx - EXE化には向かない
- Win32::GUI - Windowsのみ
- Gtk - Windowsであんまり使われてなさそう
- XUL::Gui - 謎
ぱっとしない
*** Python [#u131d763]
- wxPython - わりとよさそう?
- PyQt
- PyGtk
- TkInter
- Pyglet
*** 他色々 [#p6fd880e]
知らない
* 仕様 [#x1d009e1]
基本的に現在配っているアーカイブに変更の必要なく、新規に...
''どうでもいい補足''
「リポジトリにはパッケージの構成情報だけもち、アーカイブ...
「それぞれのフォルダでパッケージ管理する」とこあたりはnpm...
''用語''
:リポジトリ|「倉庫」。何らかのデータが整理されておかれて...
:アーカイブ|ZIPとかEXEとか、要は配布するツールの本体。
** 基本となる情報 [#h6966baf]
伺かパッケージマネージャで扱われるパッケージは「パッケー...
** パッケージリストリポジトリ [#eda88ff8]
「パッケージ名」と「パッケージのアーカイブの場所」を対応...
*** 保持するデータ [#c453ff37]
パッケージ名、パッケージの保持バージョン、パッケージのア...
- name: パッケージ名
retain_version: 2.2
archive: http://www.example.com/example.2.2.zip
*** 場所 [#g1fb575a]
パラメータはもたず、単一のURI( http://www.example.com/pac...
*** 動作 [#n78d647a]
''参照''
パッケージマネージャはまず最初にこのリポジトリを参照し、...
次に「パッケージのアーカイブの場所」からアーカイブリポジ...
''変更''
リポジトリは可能な任意のユーザーが変更可能である。
このリポジトリには「パッケージ名」、「パッケージの保持バ...
このような単純な構成のリポジトリは、CGI等のプログラムを必...
*** 補足 [#o6b61b63]
リポジトリとしては検索機能等は提供しない。
それらは本質的でない。
パッケージマネージャ上や他の場所で提供できるし、されるべ...
** アーカイブリポジトリ [#e5d687f6]
「アーカイブ」と「package.txt」をもつリポジトリ。
これは通常「アーカイブ」の作者サイトか作者が制御できるフ...
*** 保持するデータ [#dd1a8bc1]
「アーカイブ」と「package.txt」が同一のディレクトリに配置...
「package.txt」はアーカイブ名に「.package.txt」をつけた名...
*** 場所 [#h40266ac]
「パッケージ名」に対応した「パッケージのアーカイブの場所...
*** 動作 [#xbdd0f06]
''参照''
パッケージマネージャは2番目にこのリポジトリを参照し、「pa...
正常な「package.txt」が存在する場合、「アーカイブ」がダウ...
不正な「package.txt」が存在する場合、処理は失敗し、リポジ...
「package.txt」が存在しない場合、「パッケージ名」からpack...
''変更''
通常「アーカイブ」の作者のみが情報を変更できる。
特筆すると、「アーカイブ」をパッケージマネージャから利用...
** package.txtリポジトリ [#e5c087ce]
「パッケージ名」と「package.txt」を対応付けるリポジトリ。
*** 保持するデータ [#e90b8b8b]
「パッケージ名」に対応した「package.txt」が配置されている。
*** 場所 [#t0b27e83]
「パッケージ名」をパラメータにもつ複数のURI( http://www.e...
*** 動作 [#b075ffaa]
''参照''
パッケージマネージャは必要な場合最後にこのリポジトリを参...
正常な「package.txt」が存在する場合、アーカイブリポジトリ...
それ以外の場合、処理は失敗する。
''変更''
リポジトリは可能な任意のユーザーが変更可能である。
このリポジトリには「パッケージ名」と「package.txt」のみを...
*** 補足 [#a35aea4e]
リポジトリとしては検索機能等は提供しない。
それらは本質的でない。
パッケージマネージャ上や他の場所で提供できるし、されるべ...
このような単純な構成のリポジトリは、CGI等のプログラムを必...
** アーカイブ [#w2cf2a59]
通常ZIPファイルである。
ZIP以外の場合それを解凍・配置するスクリプトが必要となる。
** package.txt [#tb31e38e]
パッケージの情報をYAML形式で書いたファイル。
すでにUTF-8が普及しているのでUTF-8を使用する。
''仕様は策定中です。変更がありえます。''
name: パッケージ名
version: 1.000
type: saori
description: テストパッケージです。
tags: [テキスト処理, カット]
sites:
- name: http://www.example.com/test_package/
description: 公式サイト
readme: http://www.example.com/test_package/readme.txt
place_on: ghost
place: /ghost/master/
licenses:
- 改変可能
*** name [#j9f9179c]
パッケージ名。
YAMLファイルに書けるあらゆるUTF-8の範囲の文字が許容される。
*** version [#jfe7a9b6]
パッケージのバージョン。
ドットで区切られた数値を使用する。
(上位) 2.2.34.1 (下位)
ドットで区切られた各桁ごとに直感的に上位の数値から比較さ...
ゼロパディングは必要としない。下記のようなバージョンも正...
2.0.99 -> 2.0.100
パッケージのアップデートを考慮し、新しいパッケージは常に...
パーケージリストリポジトリに登録するバージョンはこれの上...
パッケージリストリポジトリに登録されたバージョンが2.2だっ...
特に、互換性の無いバージョンアップでは上位桁のバージョン...
アップデートの時にはインストール済みのパッケージとこの数...
*** type [#g227c9ed]
パッケージのタイプ。
既定のタイプ文字列を指定する。
*** dependencies [#f3ff2ae7]
依存関係。
依存関係にあるパッケージの名前とバージョンの情報を持った...
基本的に前に記述されたものから順に処理される。
nameにパッケージ名、versionに有効なバージョンを記載する。
dependencies:
- name: hoge
version: 2.2
- name: piyo
version:
min: 1.0.9
max: 1.9
バージョンは単一の値を指定するか、最大を示すmaxまたは最小...
パッケージリストリポジトリに対応する上位桁バージョンが無...
また対象のpackage.txtのバージョンがこれに一致しない場合も...
バージョンを記載しないことも可能である。
制約内でとりうる最新のバージョンがインストールされるが、...
*** description [#sbcc8988]
パッケージの簡易な説明。
任意の文字列を指定する。
*** tags [#cf1a3ac1]
パッケージの内容を示すタグ。
任意の文字列を配列で指定する。
tags:
- hoge
- piyo
順不同に処理される。
*** sites [#xae71e9c]
パッケージのWebサイト。
下記のようなURLと説明(省略可)を含むリストを指定する。
sites:
- url: http://example.com/
- url: http://example.com/image
description: 動作風景
複数のサイトが指定できるが、1つ目のみが代表的なサイトとし...
http://等の一般的なスキームのほか、アーカイブ内からのパス...
ただしsitesにおいてarchive://は非推奨である。
*** readme [#gdb438c7]
パッケージのreadme。
URLを指定する。
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** changelog [#lbff596c]
パッケージのchangelog。
URLを指定する。
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** thumbnails [#ub1268bf]
パッケージのイメージ。
下記のようなURLと説明(省略可)を含むリストを指定する。
thumbnails:
- url: http://example.com/thumbnail.png
- url: http://example.com/hoge.png
description: 動作風景
- url: repository://piyo.png
description: インストール時のファイル構成
複数のサムネイルが指定できるが、1枚目のみが代表的なサムネ...
サポートされる画像形式は画像表示可能なWebブラウザが一般的...
http://等の一般的なスキームのほか、アーカイブ内からのパス...
*** place_on [#p8932691]
パッケージの配置場所の種類
既定のタイプ文字列を指定する。
place属性のルートをどこにおくかの区別をする。
'ghost'ならゴーストディレクトリのルート、'baseware'ならベ...
*** place [#c109271b]
パッケージの配置場所。
パス文字列を指定する。
place_onで決められたルートからここで指定したディレクトリ...
*** reduce [#c646e324]
パッケージアーカイブのディレクトリから先頭のディレクトリ...
正整数値を指定する。
この値のレベルだけ先頭のディレクトリが削除されて解凍され...
*** licenses [#o9bf3ee7]
パッケージの使用条件(ライセンス)。
''要考察''
** インストール [#n324dad3]
*** インストール場所の決定 [#z1dc3861]
''package.txtのplace_on属性=ghost''
ゴーストのルートディレクトリをパッケージのベースルートデ...
そのためパッケージマネージャのカレントディレクトリから上...
もし見つからなかった場合はカレントディレクトリをベースル...
このとき警告を出すべきである。
このベースルートディレクトリをルートとして同place属性にあ...
''package.txtのplace_on属性=baseware''
ベースウェアのルートディレクトリをパッケージのベースルー...
そのためパッケージマネージャのカレントディレクトリから上...
もし見つからなかった場合はカレントディレクトリをベースル...
このとき警告を出すべきである。
このベースルートディレクトリをルートとして同place属性にあ...
''package.txtのplace_on属性なし''
カレントディレクトリをベースルートディレクトリとする。
このベースルートディレクトリをルートとして同place属性にあ...
*** アーカイブ内容の配置 [#jb14c8a4]
パッケージのルートディレクトリ以下にアーカイブを解凍する。
このときベースルートディレクトリ下の".germ.package.[パッ...
この[パッケージ名]はURLエンコード([A-Za-z0-9]と[-_!~.()']...
インストール情報はpackage_informationキーにpackage.txtの...
** アンインストール [#afd71277]
*** インストール情報の把握 [#b2f7b815]
インストール情報を参照するため、package.txtのとりうる全て...
優先順位は'ghost', 'baseware', 空の順である。
それぞれのディレクトリでインストール情報のファイル名を探...
どのディレクトリでも見つからなければ失敗する。
*** ファイルの削除 [#q3317999]
インストール情報を参照し、まずファイルのみを削除する。
次にディレクトリを削除するが、削除できなかったディレクト...
最後にインストール情報ファイルを削除する。
** 禁止仕様 [#t635aceb]
インストール時のフックコードの実行は一般のパッケージマネ...
インストール時のリネームも同様であり、つまりパッケージは...
* Germ (node.jsによるパッケージマネージャの実装) [#ob13b2...
- 説明 https://github.com/Narazaka/germ
- ZIP http://narazaka.github.io/germ/germ.zip
** 注意 [#p2bc40cc]
人柱版です。
初回版だしアンインストール時にHDDを綺麗にするようなバグが...
** 古いバージョン [#xadab6e1]
package.txt等の仕様が互換性なく再策定されたので、このプロ...
新仕様対応版をいつか作ろうと思います。
** 使い方 [#ff867c3b]
ZIPの中にあるgerm.cmdが実行できます。
とりあえずコマンドを実行してみてください。
germ list
germ search test
germ info test
germ install test
germ remove test
germ get test
install/remove/search/list/info/getをとりあえず実装しまし...
リポジトリはとりあえずhttp://germ.narazaka.net/に静的ファ...
** 名前 [#q50cd313]
Rubyのgemと似てる(ぉ
短い名前をmateria, embryoから考えて辞書で引いたらこうなっ...
** ライセンス [#a3f61315]
このソフトウェアにはApacheライセンスのソフトウェアrequest...
MITライセンス(http://narazaka.net/license/MIT?2014)の元で...
* 書きかけ [#e2037096]
まあそんな感じで
* ツッコミしてください [#abb4d4b7]
- 日本語名については、混乱せぬようUTF-8で記述を明示しとい...
- 指摘の点、UTF-8固定としました。あとアーカイブ配置の仕様...
- 依存関係、サンプルあった方が叩き台になります?いくつか...
- そうですね。色々なケース把握して実装したほうがよさげな...
#comment
ページ名: