たぷつきません

おなかがでてきた。もうたぷついてるやん。

パッケージャ考察

 いくつか考えなきゃならないTODOがある。頭を整理する意味で記録する。
 Irenkaのハックをライブラリにして保存・組み込みができる仕組みを考えている。JARのパッケージャと同じようなプラグインになるだろうなと思っていたが、ハッククラスが依存している別のクラスなどどうしたもんか悩みんぐ。同じプロジェクトなら同梱させるか。自動?手動?別のライブラリだったら?。突き詰めればJAR化が本当に正解なのかも考えないとならない*1
 そもそもはクラスバイナリになってしまうハックのクエリー部分とハックアクション*2の紐つけ情報をリソースにして何らかの形で保管・読み出ししようというのが課題*3だったので、依存性解決は後回しにしておくか。runtime hack referenceの仕組みはirenka-coreにしておけば良いな。悩みんぐなところはプロジェクト構成に強くかかわるのでIrenka-coreじゃなくプラグイン*4側に任せることにしよう。。
 で、そのruntime hack referenceだがどこに置くかが問題。mavenのような構成もあるので、いきなり勝手に最初に見つけたソースフォルダ*5に勝手にリソースを保存するわけにもいかない。プラグインがプロジェクトプロパティからパスを設定させるというのがひとまずの結論だろうけど、その設定は.settingsにあるだけなのでmaven2と情報共有する方法も考えたいし。
 パッケージャは先々maven-irenka-plugin*6でも作成できるようにしないとならないだろう。なので純粋なロジックのほとんどをcoreに分けて、設定と実行だけをプラグイン*7にさせるようになるべくもっていく。
 読み出し方法は、リソースパスを固定化して、多重化した同一リソースを紐解くという方法を取ることにする。現状はソースパスからのスキャンだけになっているので、そこに追加しないとならない。
 パッケージャに話を戻す。ハックライブラリの最後にくるのが、ハックカーニバルという玉石混交サンプルハック蔵。maven2のセントラルのようなものだけど、もっと暗黙にコミュニケートしてくようなリポジトリの仕組みを考えたい。以下まだ全然アイデアベースだしコミッタ全体で意見をまとめたものではないけどメモしておく。
 例えば、Irenkaのサーチャーから「参照」クリックでハックカーニバルに保管された各ハックの一行概要リストアップ(ダウンロード)して選択をすることで、クエリーを持って来たり(人のクエリーの書き方は勉強になると思う)、エディタのコンテキストメニューに状況依存でキャレット位置の対象の適用できるハックをリストアップというのもやりたい。キャレット位置のエレメントがクエリーの結果セットに含まれるかというクエリーのクエリーになる。前述したサーチャーと関心事が異なりアクションのフィルタのためにクエリーが利用される。リストアップされたアクションから1つを選択すると実際にハックアクションが実行される。それ以外がビルド時に適用するハックの登録。プロジェクト設定画面で選択する。
 で、ハックカーニバルへのフィードバックが自動的になされるというのが暗黙のコミュニケートと前述したものになる。言葉でコミュニケーションしなくても、利用時の振る舞いでポイントを集計してカーニバルに人気度を蓄積する。何度も使われればどんどんプラス。使ったハックが望むものでなければ利用履歴リストから除去する行為でマイナス。[その他のハック...]で、リストアップしたものからフィルタリングの対象としてignoreマークされたらかなりマイナス。といった具合。一定の期間の人気度維持で、デファクトハックに。Irenkaの使い方にも、sandoboxハックをリストしないという設定にチェックを入れると、デファクトハックだけ残るという感じ。そういう利用者層も否定しないのです。デファクトハックは、ハックカーニバルサイトでもハックアワードに輝き殿堂入りするという栄誉が与えられます。とか?
 

*1:これについては、お昼食べながら、まさたかさんと話していて、ハックを開発するためにプロジェクトを作成して全体がパッケージされるでいいんじゃない?という意見もらいました。確かに依存性チェック考えると一番安全。CoCの好例。

*2:クエリーにバインドするメソッド

*3:packagerと区別するためにこれをruntime hack referenceと定義しておこう

*4:Irenka Studio

*5:それもIrenkaのファイラからではなくJDTの情報から取らんとならないので、irenka-coreとうまく分離できるか…

*6:なるものをいつか作ると仮定

*7:eclipse,maven2両方を指す