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

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

helpアプリケーションの作り方

Catyの内部構造を知っている人間はごく少数(約二名)だから、それについてここで書いてもしょうがない気もするが、いずれ知っている人が増えることを期待して …。

まず、mafsは、ストレージ・バックエンドがなんであっても同じインターフェイスを提供することを目的にしている。通常のファイルシステムはもちろん、KVSやRDB、ネットワーク越しの他のサーバー(S3みたいな)に対してもmafsは作れるはず。単一のJSONファイルをファイルシステムとみなすjsonfsなんて構想もある。インメモリストレージ(例えば単一のPython dict)をmafsにすることも考えられる。

モグラ(MOGra)はインメモリのグラフ構造だが、リードオンリーのストレージとみなすことができるから、リードオンリーmafsとしてアクセスできるはず。mafsパス名をモグラのグラフパス(CDパス+ノード種別)にマップしなくてはならないが、今でも一応のマッピングルールはある。/foo.prj.apps/myapp.app.mods/bar.mod.typs/MyType.typ は、myapp::bar:MyType as type にマップされる(ちょっと鬱陶しいマップだ)。

ところで、アプリケーションマニフェスト(_manifest.xjson)に、assignて項目があり、現状なんだか無意味な設定になっている。


"assign": {
"behaviors": "behaviors",
"commands": "commands",
"messages": "messages",
"actions": "actions",
"schemata": "schemata",
"pub": "pub",
"scripts": "scripts",
"include": "include",
"data": "data"
},

だが、廃止しないで残してきたのは、いつか使うと思ってだ。

pubにアサインされるファイルシステムがWebに公開される。だから、pubに標準以外のファイルシステムアサインすれば、それがWebから見える。例えば、単一JSONファイルに対応するjsonfsがあって、そのjsonfsファイルシステムをpubにアサイン(マウント)すると、JSONファイルの中身がWebに公開される。

同様に、インメモリストレージとしてのモグラをバックエンドとするファイルシステムmografsがあったとして、このmografsをpubにアサインすると、ほとんど何もしなくてもhelpアプリケーションができるわけだ(表示用テンプレートは必要だけど)。

通常、Catyにアサイン(マウント)されているファイルシステム(プレース)は相当な数になるが、これらのバックエンドが通常ファイルシステムである必要はない。リモートストレージからインメモリストレージまで、なんでもいい。適切にmafsドライバーを作れば、Webアプリケーションを作る労力を減らせる。特に、読み込み専用ストレージの場合は、GETに対してファイル内容を返すだけなので、pubにマウントしただけで(表示テンプレートを書けば)Webアプリケーションになる。

直接XJSONをIOするには、mafsのread, writeを、今のxjson:read, xjson:writeのようにする必要があるが、そういう拡張をすれば、(X)JSONストレージとmafsを同じインターフェイスで扱えるかもしれない。