kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

TiddlyWiki/Dev - Microkernel Architecture を読む

Microkernel Architectureより

TiddlyWikiのカーテルのアーキテクチャと、Tiddlerのデータモデルを見ていくよ

マイクロカーネル

  • カーネルの主な仕事はデータを保存したりプラグインをロードしたりすること
  • 暗号化・復号化もやるのでパスワードを保存する機能も持つ

  • プラグインをロードして実行するインタフェースを持つ

  • いろんな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はいったんJSONに変換され、その後プラグインの本体になる

  • プラグインはモジュールだけでなく任意のTiddlerを含むことができる

  • つまり、プラグインTiddlerはモジュール、ウィジェット、WikiTextで書かれたUIパーツ、新しいフィルタやWikiText拡張を含むことができる

  • 実はTiddlyWikiのコア全体がひとつのプラグイン

  • プラグイン内で提供されるTiddlerはShadow Tiddlerと呼ばれ、編集できないが、同名のTiddlerで上書きすることができる

見よう見まねでやってたカスタマイズの裏側が見えてきた感じ

  • モジュールを直接"require"する以外に、"module-type"によってモジュールを指定することもできる
  • たとえばmodule-typeを"saver"にすると、TiddlyWikiはそのモジュールを使ってwikiを保存するようになる

なるほど