KuaiWikiはPerlで書かれたWikiの亜種です。以下の目的で作られました。
- 作者のプロジェクト管理、ドキュメンテーションに利用
- キーボードショートカット等で軽快に操作できる(ようになると良いなぁ)
- Perl、utf8(日本語・中国語対応)、RDB(SQLite)使用なWikiを作りたかった。
- 個人的な習作として。
- HTMLとCSSを分かっている人が楽にHTMLを書けるようにする(validなhtmlを出力する)
個人的なWiki体験とか
実はあまりWikiを使ったことはありません。
大学の中国語研究室のアシスタントをしていたときにアシスタント間の情報共有でWikiを使っていました。2003年頃の事なので、何気にWiki黎明期にWiki体験をしていたことになります。
ただ、当時はあまり有用性は感じられませんでした。tableの記述が簡単だったのは面白かったのですが、デザイン的にももっさりしていることもあり、あまり興味を持ちませんでした。当時は構造化文書としてのhtmlってものを理解していなかったというのも原因でしょう。
ちなみに、中国語研究室アシスタント間の情報共有も結局、研究室に置いた連絡ノートによる情報共有に取って代わられてしまったという後日談もあったりします。
今回はあまりWikiに関してはリサーチせず、そのときを思い出しながら作成したので、あまり目新しい機能なんかは盛り込まれていません。記法なんかも軽くリサーチはしましたが、個人的に使いやすいオレオレ記法になっています。
名前の由来
Wikiというのがもともとハワイ語で「速い」という意味らしいので、中国語の「速い」の意味である「kuai」(漢字だと「快」)と組み合わせ、「KuaiWiki」としました。名は体を現しません。一文字目をQにして、「QuaiWiki」することも検討しましたが、無難にKに落ち着きました。
FreeStyleWikiインスパイア
ある日ふと個人Wikiを使うことを考え、自分でもある程度カスタマイズしたかったので、Perlで書かれていて、日本語対応しているWikiを探し、FreeStyleWikiを数日使用しました。ただ、文字コードがEUC-JPであることや、データベースがフラットファイルであることが気になって、自分で作ろうと思い立ったのがことの始まりです。
FreeStyleWikiで面白かったのは、サイドバーやフッターもWikiページとして管理できると言う自己言及ぶりで、これはKuaiWikiにも盛り込んでいます。CSSも組み込めるようにしたいと考えています。これはそんなに難しくは無いのですが、セキュリティの関係上、ロック機能を付けてからになると思います。
Yacafiインスパイア
ディスパッチャとテンプレートはYacafiからかなりコードをパクっています。
Yacafiのソースを読んでいて、ディスパッチャ部分での$ENV{PATH_INFO}の使い方やコントローラーメソッドの呼び出し部分等がかなり参考になって、これはWikiを作るときにも使えるな、と。
Yacafiをベースにしているので、オブジェクトとかは作らず、ハッシュリファレンスに情報を突っ込む作りになっていて、そろそろいろいろ厳しくなってきたかな、という感じです。
HTTP::Sessionまるパクリ
Yacafiをベースにしているのですが、Session機能を持っていなかったので追加しました。HTTP::Sessionのコードをほとんどぱくった劣化コピーになっています。
製作方針
なるべくコードは自分で書き、モジュールを使用する際にもコードには目を通そうと考えています。ゼロから自分で全部作りたがるのって男の子の習性だよね。
ただ、PerlでORMを使ってみたかったので、そこは今流行のDBIxを使っています。
最初は軽快な動きをするもの作ろうとか目論んでいましたが、早くも難しくなってきており、もはや諦めています。最初は単一ファイルで頑張ろうともしましたが、行数が増えてしまったので、モジュール分割しました。
でも結局まじめに書いたコードって記法だけな気がする…。
DOCTYPE
4.01です。テンプレートもそれに沿って作る必要があります。一応、出力されるhtmlはvalidな筈なので、変換をかけてxhtmlにする機能も追加可能かと思います。
HTMLの出力には現状入力データを記法に基づいて正規表現でゴリゴリ置換する手法をとっています。それより、もうちょっと頑張って入力データをParseしてDOMツリーを組み上げる方が良かったなと後から反省しています。
そうすれば、DOCTYPEによって出力を出し分ける等が簡単に出来たかな、と。後からhtmlからWiki記法に戻す機能とかが必要になった場合にも作りやすいし。
ただ、個人的には、html4.01 Strictが好きです。xhtmlは後方互換のためや、ウェルフォームドにするために冗長な記述が増えるのが好きじゃありません(langとxml:langの併用とか、br等空要素を閉じるとか)。
正しく記述できていれば、html4.01もxhtml1.0も同じように解釈できる(相互変換可能な)ので、html4.01で問題ないと考えています。結局ブラウザ側が適正なDOMツリーを作成できるかどうかが大事なわけだから。
ロゴについて
だるま自転車をモチーフにしています。不恰好な車輪の再発明という意味合いです。前輪を地球にしたのはWikipediaインスパイアで、後輪を月にしたのはバランスを考えてノリで。
PupSqlite++
SQLiteのGUIツールとして非常に役に立ちました。細かい要望にも素早く応えてもらえて、ものすごく感謝しています。
パターン、XP、Wiki
作成中に一応読みました。「Wikiの哲学はフラットな構造である」みたいなことが書いてありそこだけは覚えています。
KuaiWikiWeb!