DokuWikiの設置と設定、Markdownを愛す。

経緯

#ablogcms のWikiがほしい...。#ablogcms にWiki機能が欲しいのではなくて。Sun Oct 03 05:34:13 via Echofon

@ahomu #ablogcms ユーザーさん達で作るWikiサイト作って公開して欲しい!Sun Oct 03 12:22:30 via Echofon

ユーザーさんたち、っていう前提条件をぶち壊しながら設置作業に取りかかります。

DokuWikiを採用

早速インストール。直下のdataとconfディレクトリおよび、data内のサブディレクトリを書き込み可能にしろ、ということで大ざっぱにパーミッションを変更したら、管理ユーザーを登録してインストール終了。

データベースを利用していないのでセットアップ作業が非常に少なく簡単です。インストールした後は、今の時点で変えてもよさそうな項目を管理ページから拾っていって、適宜変更します。

初期設定の変更

使用言語 ( 基本 )
jpに変更。I'm Japanese!
新規ユーザー登録を通知するメールアドレス ( 認証 )
登録しておく
インデックスを許可 ( スパム対策 )
初期値 6060245 から 606011 に変更
JPG圧縮品質 ( メディア )
初期値 70 から 99 に変更
canonical URLを使用 ( 高度な設定 )
チェックON
RSSフィード形式 ( 高度な設定 )
RSS 2.0 に変更
Google サイトマップ作成頻度 ( 高度な設定 )
初期値 0 から 1 に変更
URLの書き換え ( 高度な設定 )
htaccessに変更
同梱されている.htaccess.distを.htaccessにリネームし、16と26〜36行目のコメントを除去

以下、プラグインや編集方法についてのメモ書き。

プラグインの導入

入力支援のためにプラグインを導入します。最初によくばって増やしすぎてもいけないので、最小限Markdown関係のみ整えています。Markdownにこだわるのは、a-blog cmsのマニュアルコンテンツがMarkdownで書かれているので、いざというときのデータ複製時などの為に一応。

plugin:markdownextra [DokuWiki]

a-blog cmsにも同梱されているPHP Markdown Extraを使ったプラグイン。ただし、textarea内で、markdownタグによる囲みを行う必要がある。

<markdown>
##見出しレベル2

+  リストアイテム1
+  リストアイテム2
+  リストアイテム3
</markdown>

Markdownの中で書かれた見出しは、Table of Contents ( TOC ) という見出しから自動生成されるページ内インデックスに反映されない。それは困る。

HashHeadings - Simple Headings for Dokuwiki

Markdownの見出しに見られるような、#(ハッシュ)の数による見出しレベルの表現を、TOCに反映してくれるプラグイン。MarkdownExtraプラグインと併用すると、markdownタグ外では動作するが、markdownタグ内では動作しない。

ja:devel:syntax_plugins [DokuWiki]

OSSなので書き換えます。両方のプラグインを設置した後、/lib/plugins/markdownextra/syntax.php を編集して、getAllowedTypesメソッドを追加。baseonlyを返すことで、Markdown内でHashHeadings(type=baseonly)が動作することを許可するようになります。

class syntax_plugin_markdownextra extends DokuWiki_Syntax_Plugin {
    function getAllowedTypes()
    {
        return array('baseonly');
    }

}

マニュアルで使い方をチェック

ja:manual [DokuWiki]

マニュアルも日本語ドキュメントとして充実しています。すばらしいですね。

ページとネームスペースは、ファイルとフォルダ

大事なのは以下の3つです。基本的なコンテンツ編集はこれで十分。

hogehogeページの作成は、http://example.com/?id=hogehoge ( URLをhtaccessでキレイにした場合は, http://example.com/hogehoge ) にアクセスして、ページを作成する。まだ存在しないページも、アクセスすればそこに作れます。とにかくURLありき。まだ存在しないコンテンツも内部リンクとして、作っておけばOK。これから作るべきページとして確立します。

ネームスペース ( 名前空間 ) は、フォルダみたいなもの。ページファイルの名前、前例でいえばhogehogeの前にgroup:をつけて、group:hogehogeとすれば、groupフォルダのhogehogeファイルさんができあがり。

あとはWikiの記法を踏まえていけば、ラクに構造化されたコンテンツを作成できます。

ディレクトリとフォルダって、普段は慣れでディレクトリって言いたいのですが、ここはフォルダで。

内部リンクとMarkdown記法。

DokuWikiの定めるWiki記法にネイティブに従うと下記のようになりますが、Markdown記法だと通用しません。これから作るページの先置きを担う内部リンクを、Markdownでスマートに書くにはどうすればいいのかが考え所です。

==== 編集ルール ====

  * Wikiの編集に参加したい方は、[[http://example.com/?do=register|ユーザー登録]]から、参加してください。
  * ページの編集方法は、[[wiki:Wiki編集ガイド]]を確認してください。
  * 編集方法の確認は、[[wiki:練習ページ]]を利用してください。

これをMarkdownで書き換えます。.htaccessによるURLの整理が行われている状態なので、このように表現できます。ネイティブなWiki記法と比べると、ページ名を2度表記するため冗長ですが、できなくもありません。2度表記する中で、ラベルとリンクを変えられるからといって、別々の名前を指定することは避ける方が賢明と思う。

<markdown>
###編集ルール

+  Wikiの編集に参加したい方は、[ユーザー登録](http://example.com/?do=register)から、参加してください。
+  ページの編集方法は、[編集ガイド](/wiki/編集ガイド)を確認してください。
+  編集方法の確認は、[練習ページ](/wiki/練習ページ)を利用してください。

</markdown>

ともかく、ちょっとすごいと思ったのはTOC

そんな感じで入門編と編集方法の指針を手に入れたわけですが、TOCが強力ですね。前述のTable of Contentsのこと。見出しレベルから自動で、そのページの目次を作成してくれるのは、原理としては単純ですが、Wikiにあるとすごく便利。他のWikiも、こういうのって付いてるもんなの?

TOCが気持ちいいので、自分のブログにクローン機能をつけたいと思った次第。どうやって実装しようかなー。