MediaWikiのWikiEditorを設定する

最終更新:2016/09/06

Extension:WikiEditorは記事を編集するために必要なツール群をGUIで選択できるようにしたMediaWikiの拡張機能。MediaWiki公式サイトの原文では Enhanced Editing Toolbar と書かれていて、日本語では「改良型編集ツールバー」と呼ばれている。開発中に使われていたであろう仮名の betatoolbar という用語がしばしば環境変数名で出てくる。MediaWiki 1.18以降は標準でバンドルされていて、特に意識しなくても自動的にインストールされている。

機能そのものは存在していても、デフォルトでは有効になっていないので、初期設定では次の画像のようなちょっとしたツールバーしか表示されない。かなり前からウィキペディアを編集したことがある人にとっては懐かしいかもしれない。

WikiEditor000

改良型編集ツールバーを有効にするには、個人設定(Preferences)で個別に設定するか、LocalSettings.php ですべてのユーザーが一律に有効になるように設定する。

require_once "$IP/extensions/WikiEditor/WikiEditor.php";
# Enables use of WikiEditor by default but still allows users to disable it in preferences
$wgDefaultUserOptions['usebetatoolbar'] = 1;

# Enables link and table wizards by default but still allows users to disable them in preferences
$wgDefaultUserOptions['usebetatoolbar-cgd'] = 1;

# Displays the Preview and Changes tabs
$wgDefaultUserOptions['wikieditor-preview'] = 1;

# Displays the Publish and Cancel buttons on the top right side
$wgDefaultUserOptions['wikieditor-publish'] = 1;

3行目は、改良型編集ツールバーを有効にする設定。編集画面の上に次の画像のようなツールバーが表示される。頻繁に使うマークアップの入力を補助してくれる他、各言語に特有の文字を挿入できたり、マークアップの記述方法を忘れた時のためのヘルプを参照できたりする。wikitable のクラスを持った表を一発で挿入してくれるのは便利。個人設定の編集タブにある「改良型編集ツールバーを有効にする」をチェックしても同様の結果を得られる。

WikiEditor001

6行目は、内部リンクと外部リンクおよび表の挿入、検索と置換に関するウィザードを有効にする設定。個人設定の編集タブにある「リンクや表の挿入、および検索と置換のためのウィザードを有効にする」をチェックしても同様の結果を得られる。

なお、無効に設定すると、次の画像のように改良型編集ツールバーのアイコンが若干変わる。リンクのツールが外部リンク用のものと内部リンク用のものに分かれ、検索と置換アイコンがなくなる。

9行目は、プレビューと差分をページをリロードすることなく見られる機能を追加する設定。比較プレビュー(side-by-side preview)という名前がつけられている。改良型編集ツールバーを有効にしていれば、その上に更に次の画像のように「ウィキテキスト」「プレビュー」「差分」というタブが追加される。個人設定の編集タブにある「比較プレビューを有効にする」をチェックしても同様の結果を得られる。

WikiEditor002

なお、ウィキペディア日本語版ではプロジェクトの方針として必ず1回は従前のプレビュー機能を使って自分の編集に間違いがないか確認することを推奨しているため、この機能が使えないように設定されている。

12行目は、次の画像のように、改良型編集ツールバーに「投稿」ボタンと「中止」ボタンを追加する設定。個人設定の編集タブにある「段階的投稿を有効にする」をチェックしても同様の結果を得られる。

WikiEditor003

『段階的投稿(step-by-step publishing)』の意味がよくわからないんだけど、投稿ボタンは基本的にテキスト・ボックスの下にあるものだけで十分だと思うので、使いどころはあまりないかもしれない。

上の比較プレビューと同様に、ウィキペディア日本語版では拙速な編集を防ぐ目的で最低1回はプレビューを実行してからでないと投稿できないようになっているため、この機能は使用できないように設定されている。

関連記事

MediaWikiに編集支援ツールを追加する

最終更新:2016/09/06

ウィキペディア日本語版を編集していると、テキスト・ボックスの下に次の画像のような編集支援ツールが表示される。

Edittools000

MediaWiki用のマークアップや記号などが並んでいて、それらをクリックするとマークアップを半自動で入力してくれる他に括弧の間にカーソルを移動してくれたりもする、なかなかの優れもの。マークアップしたい語句を先に選択してからクリックしてもちゃんと括弧の中に入れてくれる。ウィキペディアを何度も編集したことがあって、ウィキ文法のマークアップを覚えている場合はなくてもそれほど困らないけど、手動で入力するには少々面倒なマークアップもあるので、あればあったで結構便利。でも、インストールしたばかりのMediaWikiにはこの機能は実装されていない。

この編集支援ツールを利用するには、CharInsertというエクステンションと、MediaWiki:Edittoolsというシステム・メッセージが必要になる。

Extension:CharInsertの実装

Extension:CharInsertのスナップショット(現時点で安定動作する最新版)をMediaWiki公式サイトからダウンロードし、適当なローカル・フォルダに解凍する。/extensionディレクトリに/CharInsertディレクトリを作成し、そこへFTPクライアントでアップロードする。

一応、MediaWikiのバージョンに合わせてスナップショットを選ぶようになってはいるんだけど、このエクステンションについてはメンテナンスをした覚えがない。MediaWiki 1.24が最新だったくらいのかなり古いバージョンを使っているけど、MediaWiki 1.26.2の時点で特に問題は起きてない。

LocalSettings.phpに次の1行を追加する。MediaWiki 1.25以降の場合は別の記述方法もあるみたいだけど、この記述でもちゃんと動作する。以前からMediaWikiを運用している人にとってはこちらのほうが馴染みのある書き方かも。なお、MediaWiki 1.26.2で動作確認済み。

require_once "$IP/extensions/CharInsert/CharInsert.php";

MediaWiki:Edittools

Extension:CharInsertは、MediaWiki:Edittoolsを参照するように設計されているので、自分のウィキにMediaWiki:Edittoolsという名前のページを追加する。内容は、ウィキペディア日本語版のMediaWiki:Edittoolsのソースを表示させて、まるごとコピー&ペーストする。まずはこれで試験運用してみるといい。

ちなみに、MediaWiki公式サイトのMediaWiki:Edittoolsは非常に凝っていて、ドロップ・ダウン・リストから言語を選んで各言語に特有の記号を選べるようになっているんだけど、システム・メッセージとは別にウィキ上で動作するJavaScriptのページを用意しなければならないなど実装が結構大変なので、マークアップの記述を省力化できれば十分だと思う。

小技として、次の1行をMediaWiki:Edittoolsのどこかに追加しておくと便利。自分のウィキで説明するまでもない基本的な事柄の説明をしてくれているウィキペディア日本語版の記事に転送する。

<span style="margin-left:1ex;white-space:nowrap"><charinsert>[[Wikipedia:ja:+|]]</charinsert></span>

「ウィキペディアというプロジェクトの、日本語版の記事へ」という意味のマークアップで、クリックすると縦線の前にカーソルを移動するか、選択した語句をマークアップするようになっている。記事名を記述すると、パイプが効いてWikipedia:ja:という部分は表示されない。長々とした外部参照URLを記述しなくても済むのでマークアップもすっきりして見やすくなる。

関連記事

MediaWikiにExtension:Scribuntoをインストール

最終更新:2016/09/06

さくらインターネットのレンタルサーバでMediaWikiを動作させている前提で、Extension:Scribuntoをインストールする。Scribuntoは、Luaという言語で書かれたスクリプトを実行する環境をMediaWikiに追加設定する拡張機能。シンプルに使う分にはなくても特に困らないけど、Wikipedia英語版やWikimedia Commonsからテンプレートをインポートしたい場合はかなりの確率で必要になる。

Lua 5.1.4

Extension:Scribuntoは単体では動作しないので、Luaというプログラミング言語を解釈するインタープリターが必要になる。さくらインターネットではサーバのOSにFreeBSDを使用していて、SourceForgeで提供されているWindows用やMac用のLuaバイナリではうまく動作しない。Extension:Scribuntoのアーカイブに /extensions/Scribunto/engines/LuaStandalone/binaries という思わせぶりなフォルダが事前に用意されているけど基本的に役に立たない。そこで、Lua Download areaから lua-5.1.4.tar.gz のソースコードをダウンロードし、解凍後、makeして直接サーバにインストールする。

2016年3月7日現在、Luaの最新バージョンは5.3.2になっているが、Lua 5.2.xやLua 5.3.xを使用すると「ステータス1」を返してインタープリターがエラーを起こすことがある模様。なお、Lua 5.1.xではLua 5.1.5が最終バージョン。

具体的には、SSHにログインを参考にSSHシェルにログインし、コマンドラインから次の手順で行う。あからじめ/local/src/というディレクトリをサーバに作っておく(これだけはFTPクライアントでもできる)。

cd ~/local/src/
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar -zxvf lua-5.*
cd lua-5.1.4
make freebsd
make local
cd bin
ln -s lua lua-5.1.4

Extension:Scribuntoの実装

Extension:Scribuntoのスナップショット(現時点で安定動作する最新版)をMediaWiki公式サイトからダウンロードし、適当なフォルダに解凍する。/extensionディレクトリに/Scribuntoディレクトリを作成し、そこへFTPクライアントでアップロードする。

LocalSettings.phpに次の6行を追加する。Luaインタープリターはユーザーが指定できるもっともルートに近いところから順にパスを指定しなければならないので注意(他の環境変数のように$IP/~では始められないということ)。

require_once "$IP/extensions/Scribunto/Scribunto.php";
$wgScribuntoDefaultEngine = 'luastandalone';
$wgScribuntoEngineConf['luastandalone']['luaPath'] = '/home/[user-name]/local/src/lua-5.1.4/bin/lua-5.1.4';
$wgScribuntoEngineConf['luastandalone']['errorFile'] = '/home/[user-name]/www/[wiki-directory]/extensions/Scribunto/errorfile.log';
$wgScribuntoUseGeSHi = true;
$wgScribuntoUseCodeEditor = true;

メインページを再読み込みすると、「モジュール」、「モジュール・トーク」という名前空間が追加され、Luaで書かれたスクリプトを実行できるようになる。

なお、4行目はLuaインタープリターのエラーログの設定で、正常に動作するようになったらコメントアウトするなどして無効にしてもOK。5行目は、各種言語の文法(マークアップ)をハイライトするExtension:SyntaxHighlight_GeSHiを、6行目は、CSSやJavaScriptの編集を補助するExtension:CodeEditorをそれぞれLua言語で書かれたスクリプトモジュールでも有効にする設定。

もし、スクリプトを保存しようとした時に、

Script error: Lua error: Internal error: The interpreter exited with status 127
Script error: Lua error: Internal error: The interpreter exited with status 126

といったエラーメッセージが出る場合は、インタープリターのmakeに失敗しているか、パスが間違っている可能性がある。上の手順でインタープリターをmakeした場合は自動的に実行可能なパーミッションが与えられているので特に問題にならないけど、手順が間違っていないのにうまくいかない場合はインタープリターのバイナリファイルのパーミッションが「755」など全ユーザーが実行可能になっていることを確認する。

インタープリターが正常に動作しているかどうかテストするには、Wikipedia英語版にあるModule:Bananasという極シンプルなスクリプトを自分のWikiにコピーして同名で保存してみる。保存時に文法エラーがないかチェックされるので、正常に動作していれば、何事もなく保存できる。

{{int:Lang}}の問題を解決

メディアウィキ・コモンズからテンプレートを移入しようとすると、必ずと言っていいほど言語間の翻訳の問題が出てくる。メディアウィキ・コモンズは、各言語ごとに英語の原文を翻訳した膨大なシステム・メッセージを持っており、閲覧者の環境(またはプリファレンス・個人設定)に合わせて置き換えたうえで出力してくれる。ところが、そういった言語自動切換え機能を備えたテンプレートをそのまま実行(トランスクルード)しようとするとModule:FallbackModule:Languagesといったモジュールでスクリプト・エラーが出る。これは、{{int:Lang}}というマークアップを使ってMediaWikiに標準で実装されていないシステム・メッセージを呼び出そうとしているから。MediaWikiは、Langというキーワードに結び付けられたシステム・メッセージを見つけられない場合は<Lang>という文字列を返してくる(詳しくはHelp:マジックワード参照)。これでは、ISO 639で定められた2文字の言語記号には当たらないのでエラーになって当然ということになる。

これを解消するには、自分のウィキにMediaWiki:Langというファイルを作り(作り方は標準記事名前空間と同じなので特に説明はしない)、「ja」(日本語)や「en」(英語)などとシンプルにISO 639で定められた2文字の言語記号を書いて保存する。

システム・メッセージの反映には少し時間がかかるので、すぐに確認したい場合は、エラーが出たテンプレートを編集モードで開いて何も変更せずにプレビュー機能を使い、スクリプト・エラーが出ないことを確認する(関係するテンプレートやモジュールを全部展開して解釈するので数十秒かかる)。遅くとも、一晩経てばシステム・メッセージは全体に反映されるようになっている。

モジュール名前空間の接頭辞変更

モジュール名前空間はデフォルトでは「モジュール」、「モジュール・トーク」となっている。私はUTF-8でのURLがわかりにくいという理由ですべての名前空間を英語に戻してしまったので、同様に英語に統一したい。そこで、/extension/Scribuntoディレクトリの直下にあるPHPファイルScribunto.namespaces.phpを次のように変更する。例は、日本語のWikiを対象とする場合。

なお、しつこいようだけど、UTF-8を編集できるエディタでないとファイルが破損するので、必ずUTF-8が編集できるエディタを使用する。

$namespaceNames['ja'] = array(
	828 => 'Module',
	829 => 'Module_talk',
);

参考記事