MediaWiki

提供: きまぐれ手記 Kimagurenote
2019年4月15日 (月) 08:35時点におけるCory (トーク | 投稿記録)による版 (MediaWiki 1.31 より同梱になった Skin と Extension について追記)
移動先: 案内検索

この「きまぐれ手記」を動かしている MediaWiki に関するメモ書き。

「きまぐれ手記」を動かしているソフトウェア(抜粋)

その他(問い合わせフォーム、バナー自動表示など)は自作。

SNS/Link Icons

MediaWiki

言わずと知れたフリーの巨大百科事典 Wikipedia を運用するために開発された、Wikiシステム。最近の言い方をすればCMSの一種。PHPで書かれており、GPLで配布されているオープンソースプロジェクト。

Mosaic の頃から Webサイトを運用していた筆者にとり、慣れたHTML直書きの方が楽で、最近流行りのCMSを使うのは苦痛でしかないんだが、そうは言ってもWebサイトの共同運営や、これまた最近流行りのSNS連携を考えると、CMS利用に移行する方が楽かもしれないと思い、試行運営することにした。

(SNSが流行る前、blogが流行っていた頃は、trackbackなどを部分的に独自実装していたんだけどね…最近そんな時間も無ければ、SNSがどんどん出てきて対応しきれない面もあって。)

その際にいくつかのCMSを検討したが、WordPress は某所で運用していて面倒でしかなかったこと、以前Wikipedia編集に参加していた頃に文法を習得していたこと、またExtensionなど試してみたいこともあって、今回は MediaWiki にて試行を始めた。

以下は、このサイトでの試行錯誤の備忘録。

Skin

Tweeki

mw:Skin:Tweeki

当初使わせていただいていた GoMediaWikiSkin のデザインを基本に、960 grid system の除去、twitter埋め込みタイムラインやバナーの追加などを行いながら試行錯誤していた。 改造しながら騙し騙し使い続けていたが、1.28.x 導入時に全く動かなくなってしまったため手放した。

1.28.x 導入後は、Tweeki を(今のところ無改造で)使わせていただいている。フロントエンドTwitter Bootstrap を利用しており、図らずも時代の流れに追いついた(笑)。 見た目がすっきりしたのは良いが、これに伴いバナーやリンクアイコンを置く場所が無くなった(試行錯誤しながら少しずつ追加している)。

Timeless

MediaWiki 1.31 で標準添付Skinが整理され、搭載されるようになった。

Tweekiは閲覧用には良いが、編集用には少々不便なので、編集用にはこちらを使っている。

編集関連メニューが使いやすく、ダークモードも用意されている。ダークモードへ切り替えるには、MediaWiki:Timeless.css を開いて、ダークモード用のスクリプトに書き換える(MediaWiki 1.32 以降では「インターフェース管理者」権限が必要)。

Extensions

基本、標準添付のものを除く(特記事項があるもののみ掲載)


SyntaxHighlight

MediaWiki の配布ファイルに標準添付されているが、MediaWiki 1.31 以降の同梱版では Python 3 が必要になったようだ。→mw:Extension:SyntaxHighlight/ja#インストール

さくらのレンタルサーバでは Python 2 が入っているため、MediaWiki 1.31 以降を普通にインストールすると SyntaxHighlight は動作せず、「構文ハイライトエラーがあるページ」になってしまうよう(;_;)。

そこで、あえて MediaWiki 1.30 対応版を選んで配布元からダウンロードして置き換えたところ、さくらのレンタルサーバ + MediaWiki 1.32.0 環境下でも使えるようになった。

% cd /path/to/mediawiki/extensions/
% mv SyntaxHighlight_GeSHi SyntaxHighlight_GeSHi_1.32.0
% fetch https://extdist.wmflabs.org/dist/extensions/SyntaxHighlight_GeSHi-REL1_30-87392f1.tar.gz
% tar xzf SyntaxHighlight_GeSHi-REL1_30-87392f1.tar.gz

ちなみに、対応しているlang一覧はここ → Supported languages

Major Versions

MediaWiki 1.32

mw:Release_notes/1.32/ja

2019年4月11日未明にプロバイダ(さくらインターネット)がバージョンアップを実施して以降、突然動作しなくなってしまった。

PHPのバージョンアップが原因と想定し、MediaWikiを再インストールすることに。どうせならと途中を飛ばして最新版にした。

  1. MediaWikiインストールディレクトリとデータベースのバックアップ
  2. さくらインターネットのコントロールパネルでPHPのバージョンを最新に変更
  3. MediaWikiの配布ファイルをダウンロードして展開し、必要なファイルをコピー
  4. 後から追加した(標準添付されていない)SkinやExtensionなどをダウンロードして展開
  5. maintenance/update.php を実行する(でも大抵失敗するんだよね)
  6. update.php がうまく動かないときは、Webブラウザから /mw-config/ を開いてインストールする(大抵こちらの方がうまくいく)。このときにデータベースもアップデートされ、古いバージョンには戻せなくなる。
  7. まずはトップページが表示されることを確認
  8. 表示されない・エラーが発生する場合は LocalSettings.php を編集し、追加したSkinやExtensionを一旦無効にするなど、原因の切り分けを実施する
  9. 不具合の出所が判ったら、個別に対処する
  10. Special:Version を開き、MediaWikiやPHP、Extensionなどの変更が反映されていることを確認

MediaWikiインストールディレクトリとデータベースのバックアップ

% tar czf mediawiki-backup.tgz -C /path/to/www mediawiki-dir
% mysqldump --hex-blob -Q -h (database server) -u (database user) -p (database name) -c > mediawiki-database-backup.sql
Enter password: (database password)
% php /path/to/mediawiki/maintenance/dumpBackup.php --full > mediawiki-dump-mysql.xml

生成されたファイル(上記の例では mediawiki-backup.tgz, mediawiki-database-backup.sql, mediawiki-dump-mysql.xml の3つ)を保存しておく。

ただし、確実にデータが取得できたことを確認して、maintenance/dumpBackup.php が確実に動いている場合は、mysqldump はなくても良い。

MediaWikiの配布ファイルをダウンロードして展開

念のため、現在のMediaWikiインストールディレクトリの名前を変更し保存しておく。

% cd /path/to/www
% mv mediawiki mediawiki-old
% fetch https://releases.wikimedia.org/mediawiki/1.32/mediawiki-1.32.0.tar.gz
% tar xzf mediawiki-1.32.0.tar.gz
% mv mediawiki-1.32.0 mediawiki
% cd mediawiki-old
% cp -p .htaccess LocalSettings.php ../mediawiki

後から追加した(標準添付されていない)SkinやExtensionなどをダウンロードして展開

Skin(Tweeki)の展開例。他のSkinやExtensionも同様にする。

% cd /path/to/www/mediawiki/skins
% mv Tweeki Tweeki.old
% git clone https://github.com/thaider/Tweeki

Changes

  • MediaWiki 1.31 で同梱のSkinが整理され、CologneBlueModern が外れ、Timeless が追加された。
  • CSS, JavaScript(.js), JSON の編集権限が新たに追加され、MediaWiki:common.css はもちろん、SkinのCSSなども、従来の権限では編集できなくなった。編集する際は、最初に Special:UserRights から権限の追加が必要。→mw:MediaWiki_1.32/interface-admin/ja
  • MediaWiki 1.31 以降に同梱されている SyntaxHighlight が Python 3 を必要とするようになった。さくらのレンタルサーバでは Python 2 が入っているため、動作せず、全て「構文ハイライトエラーがあるページ」になってしまうよう(;_;)。 → #SyntaxHighlight を参照

Bugs

  • インストーラ (maintenance/update.php) が相変わらずおかしい。
  • Extension:TweetANew が動かなくなった(エラーは出ないがツイートも出ない)。これはまぁいつものことか…
  • InstantCommons が使えない:例外*が発生し、該当ページ全体が表示されない不具合が発生中。
    *InvalidArgumentException from line 102 of /path/to/mediawiki/includes/http/CurlHttpRequest.php: Error setting curl options.
    ForeignAPIRepo.php から呼び出された CurlHttpRequest.php の中での、php curl curl_setopt_array() の呼び出し処理で起きている様子。試しに動作実績のある MediaWiki 1.29 のモジュールに入れ替えて試してみたが、結果は同様。
    さくらインターネットのアップデート絡みの不具合かも?しかし試しに $wgUseInstantCommons = false; にしても、やはり例外発生するのは何だろう…?
    結局、Commonsの画像を埋め込んでいる[[Image:…]]タグを記事中から全て外して保存し直すのが当面の対策か(x_x)

MediaWiki 1.29

1.29.0 は見送り、1.29.1 Bugfix Release が出てから更新してみたが…

サーバのコマンドラインから update.php が動かない。エラーも何も出ずに終了してしまう。標準以外のextension,skinを外して試しても同様。

LocalSettings.php すら引き継がない素の状態で動かしてみたら、Webインストールは動作していたので、Webブラウザから /mw-config/ を実施すると動作した。

その後 Tweeki を設定すれば動いた。

6月に作った Extension:TweetANew の 1.29.x 対応パッチを動作確認中…

MediaWiki 1.28

1.27.x を飛ばして 1.28.x を導入。

MediaWiki 1.26

1.25.x を飛ばして 1.26.x を導入したため、1.25.x での変更点も含む。

MediaWiki 1.24

2014年12月 3日より、1.24.0 の運用開始。

  • スタイルシートが変わったのか、{{Special:ページ一覧}} の各項目の上に線が出るようになっていた。
  • 今回から iconv が必須になっている。1.23 になった時に Extensions:TweetANew が不具合を起こしたが、今回またマルチバイト関数の扱いが変わったとすると、再度確認が必要かもしれない(まだ試していない)。--2014年12月5日 (金) 23:22 (JST)
  • jQuery 1.11.1 が標準で組み込まれるようになった。これに伴い Extension:FlickrShow で jQuery を標準で組み込まないようにする。
  • Extension:NewArticleTemplate の旧バージョン (1.11.0) を使っていたら不具合を起こし、新規ページ編集ができなくなった。最新 (1.24.0) に更新して解消。
% cd /path/to/extensions/NewArticleTemplate
% fetch https://raw.githubusercontent.com/mathiasertl/NewArticleTemplates/master/NewArticleTemplate.php

MediaWiki 1.23

2014年 6月15日より、1.23.0 に切り替え、12月 3日まで運用していた。

MediaWiki 1.22

現在のMediaWiki版「きまぐれ手記」が稼働した2013年12月時点の最新版 1.22.0 より、1.22.7 まで運用。

  • 参照元skinで使われていた 960 grid system を外し、本文を常に90%幅で表示するようにした。ブラウザを最大化した時に無駄な余白が出なくなってすっきり。右端のリンク類を見たい場合は横スクロールしてくださいまし。--2014年1月15日 (水) 20:43 (JST)
  • 新着/更新情報が twitter に自動ついーとされるように、Extension:TweetANew を設定。 --2014年1月13日 (月) 04:05 (JST)

運用めも

バックアップ

詳しくは Manual:Backing up a wiki を参照。

(MySQLで運用している場合)

LocalSettings.php に定義しているデータベース関連パラメータを控えておく。

% mysqldump --hex-blob -Q -h $wgDBserver -u $wgDBuser -p $wgDBname -c > mediawiki_database_backup.sql
Enter password: $wgDBpassword
% php /path/to/mediawiki/maintenance/dumpBackup.php --full > mediawiki_database_dump.xml
% tar czf wiki_backup.tgz /path/to/mediawiki mediawiki_database_backup.sql mediawiki_database_dump.xml
% rm mediawiki_database_backup.sql mediawiki_database_dump.xml

wiki_backup.tgz(実際のファイル名にはwiki名や日付等を入れる方が良い)を保存しておく。

セキュリティアップデート

リビジョンひとつのアップデートならば、差分パッチを当てるのが簡単。

% cd /path/to/mediawiki
% mkdir patch
% cd patch
% fetch http://releases.wikimedia.org/mediawiki/1.22/mediawiki-1.22.7.patch.gz http://download.wikimedia.org/mediawiki/1.22/mediawiki-i18n-1.22.7.patch.gz
mediawiki-1.22.7.patch.gz                     100% of 3237  B   12 MBps
mediawiki-i18n-1.22.7.patch.gz                100% of  573  B 9168 kBps
% cd ..
% gunzip -ck patch/mediawiki-1.22.7.patch.gz | patch -p1 >& patch/mediawiki-1.22.7.patch.log
% gunzip -ck patch/mediawiki-i18n-1.22.7.patch.gz | patch -p1 >& patch/mediawiki-i18n-1.22.7.patch.log
% cat patch/mediawiki-1.22.7.patch.log
...
% cat patch/mediawiki-i18n-1.22.7.patch.log
...

【参考】mediawiki-announce メーリングリストを購読(無料)しておくと、セキュリティアップデートが公開される際にお知らせ(英語)が届く。

アップデート

マイナーバージョンが上がる場合は、一旦別のディレクトリに入れ直す方が良い。 詳しくは Manual:Upgrading を参照。

  • 念のためデータベースを#バックアップ
  • 最新の配布ファイルを取得
  • 配布ファイルを展開
  • .htaccess, LocalSettings.php 各ファイルと、images ディレクトリをコピー
  • 標準以外のSkinsを使っている(または作っている)場合はそれをコピー
  • 標準以外のExtensionsを使っている(または作っている)場合はそれをコピー
  • 以前のmediawikiディレクトリの名前を変更(一時的に保存するため)
  • 新しいmediawikiディレクトリの名前を変更(外から見られるようにする)
  • 新しいMediaWikiに含まれているデータベースのアップデート処理を動かす
% php /path/to/mediawiki/maintenance/update.php

※1.29あたりから update.php がまともに動かなくなっているよう。うまく動かない場合は Webブラウザから/mw-config/ を開いて動かすと良い。

  • これで更新完了のはず。試しにブラウザで表示してみる(初回表示時は時間がかかる)。
  • Special:Version ページを見てバージョンを確認。

拡張めも

フッタに任意の Powered by アイコンを追加する

LocalSettings.php に下記の設定をする。 参考:mw:Manual:$wgFooterIcons

$wgFooterIcons['poweredby']['freebsd'] = array(
	"src" => "/path/to/bannerimage.gif",
	"url" => "http://www.freebsd.org/ja/",
	"alt" => "Powered by FreeBSD",
	"width" => "171", 
	"height" => "64"
);

Skinによっては、規定でアイコンが非表示にされているものがあり(Tweekiなど)、その場合は各Skinに固有の設定の追加が必要になる。

関連記事を表示する

Extension:RelatedArticles が使えるが…

本来は全てのページに自動で挿入され、関連性の高いページが表示されるようだが、フル機能を使うためには CirrusSearch が必要。 CirrusSearch を使うには cURL と Elasticsearch が必要。 Elasticsearch を使うには Java が必要だが、レンタルサーバでは別途JDKのインストールが必要。 JDKを入れられないことはないが、パッチ当てなど運用の手間がばかにならない…

…ので自動挿入は諦めた^^;。

Extension:RelatedArticles は、各ページに手動で挿入すれば、CirrusSearch が無くても動作するので、とりあえず使ってみる。

/* RelatedArticles */
wfLoadExtension( 'RelatedArticles' );
$wgRelatedArticlesUseCirrusSearch = false;
$wgRelatedArticlesFooterWhitelistedSkins = ['vector', 'monobook', 'cologneblue', 'tweeki'];

$wgRelatedArticlesFooterWhitelistedSkins で、表示するskin名を指定するが、全て小文字で書かないと認識されないようだ。

  • 各ページ(関連記事を表示したいページ)に下記タグを追加
{{#related:ページ名}}

各ページに追加するタグで、ページ名を手動で指定しないといけないので、どこまで意味があるのか… →結局使わなくなった(^^;

広告を入れる

Google Adsense

Google Adsense の「自動広告」を入れてみた。

  • 「自動広告」の設定(利用する広告タイプを選択)し、スニペット(埋め込むタグ)を取得
  • 取得したタグを<head>に入れる必要があるので、Extension:HeadScript をダウンロードして展開
  • LocalSettings.php に下記追加
/* Google AdSense (HeadScript) */
require_once "$IP/extensions/HeadScript/HeadScript.php";
$wgHeadScriptCode = <<<'START_END_MARKER'
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
	(adsbygoogle = window.adsbygoogle || []).push({
		google_ad_client: "ca-pub-0000000000000000",
		enable_page_level_ads: true
	});
</script>
START_END_MARKER;

HTMLets

mw:Extension:HTMLets を使うと、予めサーバに用意したファイルを埋め込むことができる。別途ファイルを用意する手間はかかるが、各種アフィリエイトのタグを埋め込めるようになる。

Extension を展開した後、LocalSettings.php に下記を追加。

/* HTMLets */
require_once "$IP/extensions/HTMLets/HTMLets.php";
$wgHTMLetsDirectory = "$IP/(任意のディレクトリ)";

ファイルを置く場所は任意に指定できる(もちろん読み取り権限がある場所に限られる)。後からExtensionを更新することを考えると、Extensionとは異なる場所を作る方が良さそう。ただし他の(埋め込みたくない)ファイルと混在させない方が良い。拡張子は .html のみのよう。

Tweeki

Skin(Tweeki) の余白に広告を埋め込んでみた → Tweeki#HTMLタグの埋め込み

これを使うと外部スクリプトの呼び出しもできるので、大抵何でもできる(スクリプトを書ける人限定)。

ランダムに記事を表示する

MediaWiki に標準添付の拡張機能、おまかせ表示カテゴリ内おまかせ表示が使える。

例: https://kimagurenote.net/kn/Special:RandomInCategory/鉄道路線

使えない場合は、mw:Extension:Random In Category を確認。

Debug

詳しくは mw:Manual:How_to_debug/ja を参照

下記いずれかを設定する

  • php.ini に下記の記述を追加
error_reporting = E_ALL
display_errors = On
  • LocalSettings.php に下記の記述を追加
/* for debug */
error_reporting( -1 );
ini_set( 'display_errors', 1 );
$wgShowExceptionDetails = true;

これでエラーメッセージ(warningを含む)が表示されるようになる。 他の閲覧者にも表示されるので、デバッグは手早く済ませよう:)

(自作Extensionなどのデバッグは、独自にログを吐くなどの処理を加える方が良いかも。)

関連情報