【Dokuwiki】struct Pluginのススメ【on a Stick】

2023年1月7日

個人の情報管理用にオススメのローカルWikiにDokuwikiがあります。

何がオススメかと言うと

  • データベースを使わないので導入が楽
  • Dokuwiki on a StickというUSBメモリで持ち運ぶことをコンセプトにしたパッケージがある(もちろん普通にHDDなどに入れても良い)
  • 機能拡張が豊富
  • 文法が比較的簡単
  • ファイルをコピーするだけでバックアップできる

欠点は

  • 日本語の情報が少ない
  • プラグインがエラーを起こしたときに対処が面倒

くらいでしょうか。

Dokuwiki on a Stick

DokuwikiはPHPでできています。なので普通はXamppなどを入れて、htdocsディレクトリ以下等にwikiのファイルを展開し、Apacheを立ち上げて…、などと導入までの手順が少しだけ多いです(一例です)。

Dokuwiki on a StickはMicroApacheというApacheの亜種とdokuwikiのファイル一式など、ファイル構成を済ませた状態で圧縮ファイルで配布されているものです。バッチファイルをクリックするだけでWikiが立ち上がります。導入方法については解説しているサイトがあるので丸投げ。

一言添えるなら、解凍ソフトに「Lhaplus」を使っていますが個人的には「7-Zip」の方が好き。

本題

プラグインがテーマになっていることからして、今回はここまではわかるしこれくらいの活用はしている人向けです。

題目にもなっているstruct Plugin…の話に入る前に、struct Pluginは前提として「sqlite Plugin」が必要です。Dokuwikiはデータベースを使わないのがメリットなのにデータベースが出てきました。でもご安心を、SQLiteは1ファイルだけで構成されています。面倒な設定や環境構築は必要ありません。

sqlite Plugin

「拡張機能管理」→「検索とインストール」→"sqlite"と入力して検索。

必要なのはこのプラグインです。結構使われているみたいですね。

プラグインをインストールしたら次はデータベースファイル「*.sqlite3」を作ります。場所は、「DokuWikiStick\dokuwiki\data\meta\」の中。ファイル名は拡張子が「sqlite3」なら何でもOKです。今回はstruct Plugin用なので「struct.sqlite3」としました。

ファイルの作り方はmetaフォルダ内で右クリックして「新規作成」、テキストファイルを選んでファイル名を「struct.sqlite3」に変更するだけです。この時拡張子がtxtのままにならないよう、きちんと拡張子を表示しておいてください。

struct Plugin

struct Pluginを導入していきますが、まずこのプラグインが何なのかを全く説明していませんでしたね。

struct Pluginはものすごく大雑把に言うと、

  • struct Pluginはスキーマ(Excelでいう表のラベルとその列の書式)を作ることができる
  • 指定した名前空間(フォルダのようなもの)内のページにスキーマを割り当てることができる
  • ページに対して1レコード(Excelで言う1行のデータ)を対応させることができる

うん、説明下手。要するにExcelのシート1行とページを紐付けることができる、みたいなイメージです。

で、何ができるかと言うと…「集計」です。実例は後で紹介しますね。まずはインストールと設定から。

「拡張機能管理」→「検索とインストール」→"struct"と入力して検索。これをインストールします。すると管理画面に次のような項目が増えているのに気がつくかも知れません。

「SQLite 接続」はsqlite Pluginで追加されたものです。インストールはこれで完了です。

具体的な使い方

何か具体例が無いとイメージが掴みづらいと思うので、普段このBlogのテーマになっているGrim Dawnのビルドを管理することを想定して適当に作ってみましょう。

1.スキーマの編集

まず管理画面から「Struct スキーマ編集」を開きます。

Grim Dawnのビルドに関するスキーマで、ステータスを記録したいのでスキーマ名はgdstatusとでもしてみます。

そのビルドのステータスとして何が必要か。「」の紹介も兼ねていくつか例を出していきましょう。

  • クラス

クラスの情報は欲しいと思います。「Text型」要するに文字列です。選択式にもできますが、流石にそこまで多くのビルドは作らないでしょう。フィールド名を入力したらSaveをクリックします。

  • バージョン

そのビルドがどのバージョンのときに作られたのか(あるいはどのバージョンまで動作確認したか)を記録しましょう。1.1.9.5など「Text型」です。フィールド名を入力したらSaveをクリックします。

  • 状態

「草案」段階なのか、完成を「確認済み」なのか、できているけど懸念事項があり「確認が必要」、問題があり「要改訂」などです。このような場合は「Dropdown型」を使います。valuesのところにカンマ区切りで項目を入力します。今回は「Draft, Needs Revision, To be Checked, Verify」としました。

  • SR

どこまで行けたかの記録は必要でしょう。大雑把に分類してDropdown型にしてもいいですが、例なので「Decimal型」にします。整数です。

  • 属性

そのビルドが何属性を使うビルドなのか一発で見れると便利かもしれません。これも「Dropdown型」にして属性を選べるようにします。「物理, 刺突, 出血, 火炎, 雷, 冷気, 毒酸, 生命力, イーサー, カオス」。ただ、複合属性のビルドというものもあるので「複数入力?」にチェックを入れましょう。

  • ローカー

スーパーボスを倒せるかのチェック欄などもあると良いかも知れません。試しにローカーで。「Checkbox型」を使ってみます。Valuesは「✓」にしました。

  • grimtools

grimtoolsのリンクは一発で飛べると便利だと思います。このようなときは「Url型」を使います。

  • 最終更新日

いつ更新したかを記録しておくと案外便利です。「Date型」に設定しましょう。

こんな感じでしょうか。全部入力すると下のようになります。

結構長くなっちゃいましたね…。

スキーマの割当て

せっかく作ったスキーマですが、どの名前空間で使うかを指定しないと意味がありません。そこで「Struct スキーマ割り当て」を行います。管理画面から同項目を開きます。

名前空間は今回はGrimDawnなので「gd」とします。「gd:*」とすれば良いですが、もしかしたらgd内に別のページを作るかも知れません。例えば装備のメモなどです。なので、今回ビルドについては「gd:build:*」に作ることにします。

ページ・名前空間には「gd:build:*」を入力し、スキーマは先程作った「gdstatus」そのままで追加をクリックします。

これで設定は終了です。しっかり管理したいときはしっかりした準備する。重要。

ページを作る

Dokuwikiの使い方は…、まぁWikiです。記法はDokuwiki独自ですが。小ネタですが、名前空間を使う場合は名前空間と同じ名前のページを作ると、Webサイトでいうindex.htmlと同じ役割をするようです。なのでまずは「gd:gd」を作ります。

適当ですね…。名前空間はちょっと癖があると感じるかも知れません。他のWikiはMediawikiしか知らないですが…。

試しに生命力ナイフインフィルトレイターのページを作成します。

Wikitext記入欄と保存ボタンの間にgdstatusというフィールドが追加されています。これが割り当てたスキーマにデータを入力する欄です。

この様に入力して保存すると…。

通常の内容とは別にgdstatusのデータの表が作られます。これだけなら、Wikiに書けばいいじゃん、と思うかも知れませんが、ここでSQLiteを使っていることが活きてきます。集計です。

「gd:集計」(gd:build:ここでなればどこでもいい)というページを作り、上記のように入力します。結果は…。

表ができます。一件だけだとピンとこないと思いますが、データが増えるほどこのように構造化しておくと便利になってきます。

ここの記法は上記のWikiかコメント欄でなんとかしてもらうとして、実際に私が使ってる例を貼ってみます。

ページはキャラ名なので伏せさせていただきました´ω´ grimtoolsのリンクも一応。…まぁ記事にしているのですが。安定性と快適性はきたるv1.1.9.6にてビルドの使い勝手をみるために追加してみた指標です。SRの潜れ具合や現在のステータスに色を付けてわかりやすくしたり、ちょっと工夫しています。

これくらいデータが揃って並んでいると、どこをどうしたら良くなるかとかが見えてくるかと思います。

この結果はCSVにも出力できます。今の所Excelに落とし込むくらいしか活用方法は思いつきませんが…。

終わりに

最期の実例はstruct Plugin用のサブプラグインも使っているのですぐにここまで使えるかと言うとたぶんNOですが、WikiとExcelの間の子みたいなのが欲しい場合には構築を頑張ると後々便利になるような気がします。

構造化したデータ is 便利。

雑記

Posted by Kag