■PukiWikiを設置しようとすれば、どう設定あるいは改造すればいいのかわからない、このようにしたいけど、そのやり方がわからないというケースはたくさんあります。回答を求めて検索することになるわけですが、それはしのごも同様でした。
■そこで、PukiWiki設置で気が付いた点を備忘録代わりにメモしておくのが、この「PukiWiki備忘録」です。*1 コメントはこちらへ。
PHP5.4への移行のため、PukiWikiが動かなくなるらしい。この記事を記載している時点ではともかく、いずれは移行するため、その対処方法を知っておく必要がある。
現段階では「BugTrack2/353/PHP5.4対応版」に記載されている対処方法でいいのかな。パッチなどもリリースされているようだ。
階層構造を持ったページは、MenuBarにサブコンテンツとして表示させることができる。これによって、あるカテゴリー内のページ一覧をサブメニューとして見ることができるため、とても便利だ。
その表示方法をPukiWiki活用術に記載した。興味のある人は「サブコンテンツ表示方法」をご覧いただきたい。
これまでコメント欄を設置した場合、コメントを記入すれば、そのコメントの最後にNewマークが表示されていた。ところが、PHPのバージョンアップにより、コメント欄へ記入してもNew表示がされなくなってしまったのだ。
「pukiwiki/コメントの新着表示」によると、プラグインのcomment.inc.phpとnew.inc.phpを次のように書き換えればよい。
define('PLUGIN_COMMENT_FORMAT_NOW', 'SIZE(10){$now}');
↓
define('PLUGIN_COMMENT_FORMAT_NOW', '&new{$now};');
$timestamp = strtotime($date);
if ($timestamp === -1) return '&new([nodate]){date}: Invalid date string;';
↓
$a_date = preg_replace('/[^\d\/:-]/','', $date);
$timestamp = strtotime($a_date);
if ($timestamp === FALSE) return '&new([nodate]){date}: Invalid date string;';
確認してみると、最新バージョンのcomment.inc.phpでは修正されているが、念のためチェックしておこう。というわけで、new.inc.phpのみ修正すればいいということになる。なお、「pukiwiki/コメントの新着表示」には、修正済みのプラグインnew.inc.phpを提供しているのでダウンロードさせていただこう。
PukiWikiおよびtrackerを使いこなしている人なら、下記のページは非表示になっていることは知っていると思う。
:config/plugin/tracker/default/page
trackerを使う場合のマスターページのようなもののひとつだ。ここにはコメント欄を挿入するためのプラグイン設定が記載されている。通常の表示ページのコメント欄プラグインにはスパム対策用のプラグイン設定をしているけど、このサイト内ではtrackerを使っていないこともあり、特にスパム対策用のプラグイン設定をしていなかった。
たまたまこのページを開いてみたら、なんとコメントスパムがびっしりと記載されていた。非表示ページであっただけに、まったく気が付かなかったのだ。あわててスパムコメントを削除し、スパム対策用のプラグイン設定を施した。非表示ページだからといって安心せずに、スパム対策を施しておきましょう。
なお、コメント欄のスパム対策用プラグインは、PukiWiki公式サイトの自作プラグインのページにありますから、探してください。
ロリポップのサブドメインコースは、お小遣い程度の価格で1GBものサーバーを持てるのでちょくちょく利用させてもらっている。久しぶりに新しいサブドメイン領域にPukiWikiを設定したら、なんと編集&閲覧制限に伴う認証機能が動作しない……。かなりあわてました。
調べてみると、ロリポップのPHP4からPHP5へ変更に伴うPukiWikiの設定変更に次のようなことが書かれてあった。
ロリポップのPHP4はApacheのモジュールとして動作していたらしく、PHP5はCGIとして動作するようだ。
PukiWikiの認証機構はBasic認証とかDigest認証に頼っている。これはWebサーバとブラウザ実装の問題であって、PukiWiki自体は設定ファイルに基づいて操作してるだけだ。つまり認証自体がApacheの機能をチョイと借りているわけで、CGIのように単独で動くものバージョンではその機能が無い。つまりPukiWikiの認証機構はCGI版では動作しなくなる。
そして、参照先である公式サイトのPukiWiki/CGI版PHPで動作させるにはにも、はっきりと「BASIC認証は出来ません」と書かれているではないか。
この解決策として、プラグインが公開されていた。自作プラグイン/login.inc.phpで、プラグイン「login.inc.php」のほか換装用の「lib/auth.php」、パッチが置いてある。
詳しくは「自作プラグイン/login.inc.php」を読んでいただくとして、マニュアル通り導入した結果、問題なく動いてくれました。
どうもロリポップでは、このログイン機能がうまく動作しなくなったようだ。解決策としては、次の通りでしょうか。
PukiWikiに関する2chの過去ログを読みたいけど、過去ログを読める環境にない。過去ログにだって、参考になる記述はあるはずだ。こう思っている人は多いのではないかと思います。
そこで、PukiWiki関係の過去ログでHTML変換されたものを集めてみました。下記へどうぞ。
本文中に化学式あるいは数式の単位などを記載する場合、上付き下付き文字が必要になる。では、どうやって記述すればいいのだろうか。この方法は知らなかったので、ちょっとあわてた。
検索してみると、すでに開発サイトには「PukiWiki/1.4/ちょっと便利に/上付き下付き文字」として掲載されていた。方法は、ユーザー定義を書き換える方法とインラインプラグインにしてしまう方法だった。ユーザー定義に記述すると、将来のバージョンアップの際に忘れてしまうこともあるかもしれないので(もっとも最初から対応済みになっているかもしれない)、ここはプラグインの方がいいのかなと考えた。
とりあえず、「PukiWiki/1.4/ちょっと便利に/上付き下付き文字」に記載されているスクリプトを基に上付き文字用の「super.inc.php」と下付き文字用の「subsc.inc.php」プラグインを作成してプラグインフォルダに入れる。
記述してみると、こうなる。
50平方メートル(m&super{2};)
↓
50平方メートル(m2)/ 50m2
水はH&subsc{2};O
↓
水はH2O
これだと見栄えが悪い。このページには「上付きは, font-size:60%;vertical-align:super; 下付きはfont-size:60%; だけにすると見栄えがいい」と書かれているけど、どこに記載すればいいのだろう??? よく分からないので、ここは力技で解決。これでよしとする。
50平方メートル(m&super{&size(9){2};};)
↓
50平方メートル(m2)/ 50m2
水はH&subsc{&size(9){2};};O
↓
水はH2O
PukiWikiで、他のPukiWikiサイトと連携させる、あるいはRSS配信をしているリンクしたサイトの更新状況を表示させることで、共有化促進および情報の集約化に役に立つのではないだろうか。これを実現させるためには、PukiWikiをRSSリーダーのようにさせるればよい。
それにはshowrssプラグインを使う。例えば、このサイトのBLOGである業務日誌#35のRSSを表示させるなら、下記のように記述する。また、オプションとしてデフォルト設定のほかに日付表示(recent)やリスト表示(menubar)がある。
#showrss(http://www.sango.edisc.jp/gn35/index.rdf)
#showrss(http://www.sango.edisc.jp/gn35/index.rdf,recent)
#showrss(http://www.sango.edisc.jp/gn35/index.rdf,menubar)
PukiWikiは共有化に適しているという。実際に共有化を目的としたサイトを運用してみると、全員が操作に慣れているわけではない、簡単なマニュアルを作って配布したところで全員が丹念に読んでいるわけでもないということに気が付く。
特に、改行設定が理解できていないものだから、ダラダラと文章が続いてしまう。なんとかしなければと思い、マニュアルを探してみたら自動改行の方法は、すぐに見つかった。自動改行設定は、pukiwiki.ini.phpの次の箇所を変更するだけだった。
$line_break = 0;
↓
$line_break = 1;
これでワープロ感覚で記事を書いてもらえる、追記や編集をしてもらえるようになったから、よしとする。
ふと気が付いたのは、アクセスカウンターの昨日分がゼロになっているということ。「そんなこといって、実際にアクセスはゼロだったのではないか」と思われるかもしれない。
実際は、その日のアクセス数トップ30はstatistikoに表示させているから、翌日になれば、これが昨日のアクセス数として反映されなければならない。なのに、実際の表示はゼロ・・・。
調べてみると、PukiWiki開発サイトのBugTrack2/141に対処方法が記載されていた。PHPのバージョンアップによる現象らしい。対処方法は、「counter.inc.php」の「UTIME」を抜いてみるとのこと。
$is_yesterday = ($counters[$page]['date'] == get_date('Y/m/d', strtotime ('yesterday', UTIME)));
↓
$is_yesterday = ($counters[$page]['date'] == get_date('Y/m/d', strtotime ('yesterday')));
詳しくは、PukiWiki開発サイト、BugTrack2/141をご覧ください。
PukiWikiでサイトを構築すれば、最新情報は常にサイト上にあるということになる。サーバーにトラブルが発生した場合、すべてのデータが消失という最悪の辞退も考えられる。そのためPukiWikiには、リモートバックアップとリモートリストアの機能がある。
そこで、このリモートバックアップとリモートリストアの方法を見てみたい。これも長くなるので「PukiWiki備忘録/番外編その1」に記載した。これも、マニュアルにはやさしく書かれていない。
PukiWikiほど便利なツールはないと思うのだけど、使える人たちのコミュニティーをのぞけば活発に使われているとはいいがたいサイトが多い。たぶん普通の人にとっては、やはり記入フォームがあった方が、記入しやすいのだと思う。
その解決方法としては、いかに効果的に「tracker」プラグインを使いこなすかにかかっているのではないだろうか。そこで、使用目的に応じた「tracker」のカスタマイズ方法を記載した。
ちょっと長めになるので詳細は「PukiWiki活用術/trackerの活用」を参照のこと。当たり前のことだけど、使える人にとっては当然のことでも、使えない人には敷居が高いものだ。
誰にも見られないページを作るには閲覧認証設定を行うが、とりあえずは表示させたくないページもあると思う。例えば、新規ページの下書き*2、新たに設置したいプラグインのテストページを作る場合などが該当するだろう。
このようにコンテンツとは直接関係のないページ、いわゆる「無視ページ」を作る場合だ。その場合、例えばHogeogeManというページを作るときには、頭に”:”をつけてページを作成する。
:HogehogeMan
ページの先頭に「:」が付いたときには最終更新や一覧などに表示されない。このページを開くときには検索で探せば、すぐに見つかる。下書きページなどの場合は、リネームすれば表示されるようになるし、内部リンクもPukiWikiが勝手に修正してくれる。
スケジュールなどを記載する場合に利用されるプラグイン「calendar2」。でも、これをデフォルトのまま使用すると下記のように表示される。
いかにも日付部分がでか過ぎだ。全体のレイアウト、デザイン構成から見てもアンバランスな気がしないだろうか。要するに、ヘッド部分に「h1」が指定されているからこうなってしまう。これを防ぐにはスタイルシートに変更を加えればいいのだけど、ヘタに手を加えるのは、ほかにも影響を及ぼすのでためらう場合も多いのではないだろうか。
そんなときはプラグイン「calendar_viewer.inc.php」を下記のように変更する。
$head = '<h1>' . $link . '</h1>' ;
↓
$head = '<strong>' . $link . '</strong>' ;
すると下記のように表示される。まぁ「strong」を使ったけど「h2」でも「h3」でもいいのだと思う。とりあえず表示テストとして、まずは「strong」だけを試してみたのだった。
自宅サーバーを立ち上げ、IP非固定の接続環境で固定したドメインを持つことが可能なダイナミックDNSサービスを利用した場合、サーバー名を自動取得することができない。例えば、自宅サーバーを立ち上げてEarth Dynamic DNSを利用した場合である。下記を書き換える。
[pukiwiki.ini.php](117行目あたり)
//$script = 'http://example.com/pukiwiki/';
↓
$script = 'http://指定ドメイン/index.php';
指定ドメインは、Earth Dynamic DNSを利用した場合は「好きな名前.mydns.to」となる。したがって、名前がhogehogeであれば上記の指定ドメインは「hogehoge.mydns.to」となる。
さまざまな活用ができるPukiWikiには、ユーザー認証というものがある。特に、編集に認証を求める場合、読み込みと編集の両者にも認証を求める場合など、さまざまな設定が可能だ。ここで課題となるのは、認証を求めるページは正規表現で書かなければならないこと。
実は"しのご"もプログラマーではないので、正規表現と聞いてもよくわからない。正規表現を解説しているサイトを見ても、それでも理解不能だった。そこで、正規表現でのページ名の記述方法を記録しておきたい。*3
'/^.*$/'
'/^((?!^(FrontPage)$).)*$/'
'/^ほげほげページ$/'
'/^(ほげほげ|あぼん)ページ$/'
'/^((?!^((ほげほげ|あぼん)ページ)$).)*$/'
憶えておきたいことは「/ /」は、/と/の間が正規表現であることを示す記号であること。「^」は行頭、「.」が任意の文字、「*」は直前の文字の0回以上の繰り返し、「$」は行末である。これを頭に入れて上記の例をみると、なんとなくページ名の記述方法が頭に浮かんでくる。
全ページに制限をかけ、許可されたユーザーは「sinogo」だけという場合は次のように記載することとなる。
[pukiwiki.ini.php]
$read_auth_pages = array(
↓
$read_auth_pages = array( '/^.*$/' => 'sinogo'
ページ制限をかけるときには、このほかに「0」と「1」の選択による設定箇所もあるのでマニュアルをよく読むこと。
これまでPukiWikiを使ってきて思うことは、例えばいきなり新しいことに取組み、失敗した場合の対処法です。失敗すれば、一端削除してしまえばいいのですが、ページ更新の記録に残ってしまいます。これはちょっと惨めですよね。
そこで、PukiWikiが設置できるということは、それなりのサーバーを使っているわけですから、サブディレクトリでも作って、そこに本体サイトとまったく同じスタイルのサイトを構築してみてはいかがでしょう。このような練習サイトがあれば、例えば新しいSkinの導入、新しいプラグインの試験などが行えます。ここで十分な動作チェックをしてから、本体サイトへアップすればいいわけです。
特に、新しいプラグインなどでエラーを吐き出した場合、全ページに影響する場合もあるかと思います。このようなケースを避け、また失敗の記録を残さないようにするには、こうした練習サイトも必要かなと思います。本体サイトにアップしてしまえば、練習サイトでいじくりまわしたページは削除してしまえばいい。
最初にPukiWikiを使おうとすると、PHPプログラムを扱いなれている人ならともかく、予備知識もなく設置しようとすれば大抵の人は頭が混乱するでしょう。そこでマニュアルの登場!となるわけですが、いちいちPukiWiki公式サイトにアクセスするのも何かと面倒ですよね。
ここは、やはりマニュアル本があったほうがいいかと思います。そこで、しのごが参考にしたマニュアルを紹介します。これ以上の使い方あるいは改造テクニックなどについては、PukiWiki公式サイトで探す、いろいろなキーワードで検索する以外に、たぶんいい方法はないでしょうね。
PukiWiki入門―まとめサイトをつくろう!にはインストールから初期設定、プラグインの使い方まで詳細に記載されています。おそらくこの1冊を手元において置けば十分だと考えます。ただし、プログラムの基礎知識がない、さらにCGIプログラムも設置したことがない、という人には敷居が高いかもしれません。PukiWikiに慣れるうち、あるいは更新頻度が少ないという人は、常時手元において置くべきではないか、そう思います。
PukiWikiに関するマニュアル本がほとんどなかったころ買ったのが、このWikiでつくるかんたんホームページでした。予備知識なし、CGIの設置経験すらなしという人には、これがお勧めかもしれません。パーミッションの設定もくどいくらいに記載してあります。プラグインやテキスト整形方法は一覧表にまとめられていますから、「PukiWiki入門」よりは見やすいです。ページの3分の1は、無料で使用できるLivedoor Wikiのマニュアルのような体裁になっているため、ある意味、親切かもしれませんね。
このビジネスWiki導入活用ガイドBOOKは、いわばPukiWikiの実用編といった意味合いを持っているでしょうか。インストールなどはさらりと流し、タイトルからもわかるとおり仕事上でどのように使うかに重点を置いています。例えばPukiWikiを導入した場合、全員が使えるようになるまでは時間がかかりますから、このようなプログラムを使うことになれていない人へ、使用マニュアルを作ってあげようなどという場合に重宝すると思います。TIPS集を、もっと充実してもらえればよかったと個人的には思っていますが、どうでしょう。
バナーにリンクを貼る場合、一般的な記述は下記のようになる。例として、サンゴー企画Online内のPukiWikiロゴを使用し、PukiWiki公式サイトにリンクを貼ったケースだ。
[[画像のURL>ウェブのURL]]
↓
[[http://www.sango.edisc.jp/image/pukiwiki.gif>http://pukiwiki.sourceforge.jp/]]
表示させてみると、次のようになる。ただし、この記述方法だとカーソルを合わせてみればわかるが、公式サイトのURLが表示されることになる。
バナーであるからには画像にカーソルを合わせた場合、サイト名称が表示されるようにしたい。その場合は、下記のように記述する。
[[&ref(画像のURL,nolink,ウェブ名);>ウェブのURL]]
↓
[[&ref(http://www.sango.edisc.jp/image/pukiwiki.gif,nolink,PukiWiki公式サイト);> http://pukiwiki.sourceforge.jp/]]
実際に表示させてみると、次のようになる。カーソルを合わせるとサイト名称を表示するようになるわけだ。
これまで備忘録に記載してきたこと、加えて書籍などのマニュアルを参照すれば、PukiWikiを使ってそこそこのサイトを、たぶん構築できるはずだ。
まだコメントスパムはありません。ありませんが、コメントスパム対策だけはキチンとしておきたい。PukiWiki公式サイトの自作プラグインに「スパム対策済コメントプラグイン」があったので、コメント欄を設けているページに設置しました。
やり方は簡単で、comment_nospamのプラグインを入れ、「comment」と記述した部分を「comment_nospam」と書き換えるだけ。プラグイン内に記述されたNGワードに引っかかれば投稿できないようになっているらしい。また、あらかじめ主なNGワードは設定されており、新たなコメントスパムがあった場合は、そのNGワード集に追記するだけという。
被害がひどくならないうちにスパム対策をしなければと思っていたけど、このようなプラグインがあったので助かりました。
表組でセル幅を指定するには、書式指定「c」の行に数字*4を記入する。例えば、センター合わせの幅30pxと100pxであれば、次のようになるらしい。
|CENTER:30|CENTER:100|CENTER:100|CENTER:100|c ←書式指定
|項目 |なんとか1 |なんとか2 |なんとか3 |h ←ヘッダー指定
ところが、このサイトの表組でも見られるとおり、セル幅は指定どおりになるのだが、セル内のテキストはコントロールされていない。Skinのせいだろうか? なんでだろう? いまだ解決できていません。考えてみれば、デフォルトのSkinでテストをしていなかった。
PukiWikiではHTMLタグが使えない。これは何かと不便だ(いろんな理由が思い浮かぶと思うますが、どうでしょう?)。HTMLタグが使えぬ理由は、PukiWikiは基本的に誰でも編集が可能なので、不正なJavaScript?などのコードが記入されるため、危険だ!ということらしい。*5
そこでHTMLタグを使えるようにしたプラグインがdwrite。作者のサイトSmile :Dを読むと、このプラグインを入れるとなぜか勝手にリンクが貼られてしまうらしい。オートリンクを解除すれば、この症状を防げるけど、当然ながらPukiWikiの特色である自動的にリンクが貼られるというメリットも失われるとのこと。
あちらを立てれば、こちらが立たず。編集制限をかければこのプラグインを使っても大丈夫ではないかと思ったのだが、オートリンクがないとやはり不便ですよね。むずかしい選択ではありますな。
画像を、例えばセンターに二つ並べて表示したい場合は、次のようにする。#あるいは&の記法を理解していればなんだぁ〜というものですが、最初は苦労したものだ。
CENTER:&ref(http://画像のURL);&ref(http://画像のURL);
いろいろなPukiWikiサイトを見ていると、あぁこんなページを作れたらなぁと思う。で、どうやって作るの?となるでしょ。こんなときは、そのページのバックアップを表示させると「ソース」があるので、こいつをクリック!
そうすると、そのページのソースが表示されるので、使用しているpluginなどがわかる。これを表示させないようにしているサイトもあるけど、こうなったらあきらめて、他のサイトを探すか・・・。
ページタイトル下には、そのページのアドレスが表示されている。PukiWikiの場合、長くなるのでこれを非表示にする。
[skin/pukiwiki.skin.php]
define('SKIN_DEFAULT_DISABLE_TOPICPATH', 1);
↓
define('SKIN_DEFAULT_DISABLE_TOPICPATH', 0);
同時にpluginのtopicpathで「/」を「>」に変更する。そうすると、hogehogeとhogehoge2という階層ページがあった場合、「TOP/hogehoge」「TOP/hogehoge/hogehoge2」と表示されるところが「TOP>hogehoge」「TOP>hogehoge>hogehoge2」となる。
[plugin/topicpath.inc.php]
define('PLUGIN_TOPICPATH_TOP_SEPARATOR', ' / ');
↓
define('PLUGIN_TOPICPATH_TOP_SEPARATOR', ' > ');
ヘッダーには「編集」「差分」などPukiWikiの編集モードが表示される。PukiWikiに不慣れな人のために、これを非表示にする。フッターにもアイコンで同様のメニューがあるので、特に問題はないでしょう。
[skin/pukiwiki.skin.php]
define('PKWK_SKIN_SHOW_NAVBAR', 1);
↓
define('PKWK_SKIN_SHOW_NAVBAR', 0);
通常、トップページは「FrontPage」と表示される。これを例えば「hogehoge」に変更したい場合は、ここの設定を変更する。
[pukiwiki.ini.php]
$defaultpage = 'FrontPage'; // Top / Default page
↓
$defaultpage = 'hogehoge'; // Top / Default page
削除されたページがあった場合、RecentDeleted?ページに削除したページ名が表示され、いつ削除されたのかはMenuBarにRecentDeleted?が表示される。
設置に慣れた人ならともかく、設置が初めての場合はテストページなどを作りたくなるし、また作ってしまうものだ。なるべくなら削除した場合はMenuBarに表示させたくない。つまり、RecentDeleted?をMenuBarに表示させないようにする。
RecentDeleted?を非表示にするには、下記の通り「:」を挿入すればいい。ただし、MenuBer?には非表示となるけど、ツールバーの一覧でRecentDeleted?を確認することができる。
[pukiwiki.ini.php]
$whatsdeleted = 'RecentDeleted';
↓
$whatsdeleted = ':RecentDeleted';
デフォルトで搭載されているフェイスマークは、ちょっとキモイ。そこで「フェイスマーク」でググればいろいろなものがありましたが、ピンとくるものがなかった、利用に際しての制約*6があることからPukiWiki Plus!のフェイスマークを使わせていただくことにしました。
使いすぎるとうるさいですけど、ワンポイントとして使えば効果的なんだと思います。
中途半端にPukiWikiを扱えるようになったので、まだまだ分からないことはたくさんあります。PukiWiki公式サイトサイトの中で入門者向けのページがあります。読んでいると新しい発見があります。
ほかにも質問箱などがあるのですが、こちらは検索した方がいいでしょう。そのほうが早いですから。
はっきりいって、よくわからない。マニュアルでは単純にこうなっている。
&aname(アンカー名);
公式サイトやマニュアルを読んで何度か試したものの、なんとも不明。ただし、公式サイトには、次のようにしても良いと書いてあった。こちらの方が分かりやすい。
[[文字列>ページ名#アンカー名]]