TiddlyWiki/Dev - Microkernel Architecture を読む
TiddlyWikiのカーテルのアーキテクチャと、Tiddlerのデータモデルを見ていくよ
- TiddlyWikiはマイクロカーネルのいくつかの関数の上にできている
- おかげでTiddlyWikiはクリーンなしかけでカスタマイズできる
- TiddlerがわかればTiddlyWikiの拡張の概要もわかる
- カーネルの主な仕事はデータを保存したりプラグインをロードしたりすること
-
暗号化・復号化もやるのでパスワードを保存する機能も持つ
-
プラグインをロードして実行するインタフェースを持つ
-
いろんなTiddlerをソースから取り出すデシリアライザを持つ
-
TiddlyWikiをパッケージしても、プラグインはTiddlyWikiのドキュメント内に保存される
-
いろんなタイプのTiddlerがあるから、いろんなデシリアライザが必要
TiddlyWikiをパッケージするっていうのは、node.js用には普通にたくさんの
テキストに別れてるソースファイルやTiddlerを一つのHTMLにすることだなきっと
それもTiddlyWiki自身でやってるのか
なんかすごいな
パッケージされたHTMLからTiddlerを取り出すのもデシリアライザってわけだな
ここでスタートアップのプロセスの図
この図は大事そう
- bootprefixはカーネルがさまざまなエンジン(ブラウザやnode.js)の上でブートできるよう準備する
- その後メインのブートプロセスが走りメインのアーキテクチャがロードされる
- 最後にスタートアップモジュールが実行され、マイクロカーネルが拡張可能になる
- "startup"とマークされたモジュールはブートプロセスのあとで開始する
データモデル
- マイクロカーネルはTiddlerのデータ構造を作る
- Tiddlerはいくつかのデータを持ったJavaScriptのオブジェクト
- すべてのデータは「ストア」に置かれる
- 「ストア」はJavaScriptのオブジェクトであり、いくつかのKey-Valueペアを持つMapのようなもの
「ストア」にはカギカッコをつけたい雰囲気
それともJavaScriptにはもともと「ストア」というものがある?
モジュールシステム
- マイクロカーネルがモジュールをロードする関数を提供したあと、アプリケーションの残りの部分はモジュールとしてロードされる
- モジュールは、"application/javascript"のタイプを持つ、CommonJS互換のJavaScriptのコード
-
"export"変数によって関数や構造を公開でき、他のモジュールは"require"関数によってそれらを取得できる
-
多くの場合、モジュールはプラグインとしてまとめられている
-
"すべてはTiddler"というコンセプトのとおり、プラグインもTiddlerである
-
プラグインはそれ自身他のTiddlerを含む
-
プラグインはモジュールだけでなく任意のTiddlerを含むことができる
-
つまり、プラグインTiddlerはモジュール、ウィジェット、WikiTextで書かれたUIパーツ、新しいフィルタやWikiText拡張を含むことができる
-
実はTiddlyWikiのコア全体がひとつのプラグイン
-
プラグイン内で提供されるTiddlerはShadow Tiddlerと呼ばれ、編集できないが、同名のTiddlerで上書きすることができる
見よう見まねでやってたカスタマイズの裏側が見えてきた感じ
- モジュールを直接"require"する以外に、"module-type"によってモジュールを指定することもできる
- たとえばmodule-typeを"saver"にすると、TiddlyWikiはそのモジュールを使ってwikiを保存するようになる
なるほど