MediaWiki
Wikipediaやこのサイトで使用されている代表的なWikiシステムであるMediaWikiについて解説する。
初期設定
動作要件
データベース(MySQL)と(CGI版の)phpが使えることを確認しておく。スターサーバーフリー(php+mysql)では動いた。
SSHが使えないような低価格帯のレンタルサーバーのプランの中でも、PHPでexecなどの機能が自由に使えるため事実上任意コマンドが実行できるものと、それらの機能が制限されているサーバーがある。後者でもMediaWikiは一通り動くが、一部機能が動作しない場合もあるのであまりお勧めしない(特に他サーバー移行で手こずるのは困る)。
インストール
詳しくはここを参照。
MySQLの設定をしたら、Mediawikiのファイル一式を設置し、/mw-configにアクセスして指示に従うとインストールが完了する。/mw-configは誰でも見られるファイルなので少し不安だが、MySQLのパスワードがわからないとインストールは完了しないため、別に公開でも問題なさそう。(不安ならBasic認証をかけておく?)
初期の管理ユーザーのパスワードを忘れるとやや面倒なことになる。Chromeがちゃんと覚えてくれない場合があるので注意すること。
データベース(phpMyAdmin)から、
UPDATE `user` SET user_password = CONCAT(':B:somesalt:', MD5(CONCAT('somesalt-', MD5('somepass')))) WHERE user_name = 'someuser'
とする。https://www.mediawiki.org/wiki/Topic:Rnq7yc02mg1o4j34より。2か所あるsomesaltのところにはLocalSettings.phpの$wgDBpasswordの値を入れること。
MediaWiki1.12以前はちょっと違うらしい。自分が成功したのは1.39.1(2023年1月)。
- CGI版じゃなくてphpコマンドが直接打てるなら、こちらの方法でもいけそうである。
- ファイル一式は、zipを解凍してからFTPでアップロードするとかなり時間がかかるので(1時間くらい)、zipでアップロードしてサーバー上で解凍したほうがいい。レンタルサーバー提供のファイルマネージャーでできない場合は、ZIPファイルをサーバーにアップしてから解凍する方法 のようにPHPでファイル名を指定して解凍するか、https://github.com/dulldusk/phpfm のようなPHPで動くファイルマネージャー(フォルダ削除なども高速にできる)から解凍するとよい。ただし、これらのphpファイルはBasic認証で保護するなどアクセス権限には十分気を付けること。exec系(任意コマンド実行)が許可されていないstarserver freeでもこれらは動作した。
MediaWikiの拡張はたくさん(全部)onにするとよいらしい。
設定が終わるとLocalSettings.phpが出力され、以後これで色々な設定ができるようになる。インストール後にフォルダ名を変えるときはリネームの上、LocalSettings.phpで$wgScriptPath = "/mw";
などと変えればよい。新規ユーザー作成を許可するかどうかなどの設定もここでできるので、禁止したい場合などはこのタイミングでやっておくとよいだろう。
その他初期設定
管理画面
ブラウザ上から$wgScriptPath以下の/mw-configというパスにアクセスすればよい。ここは誰でも見れてしまうが、その先に進むには(初期インストール後に生成されてLocalSettings.phpに書き込まれる)$wgUpgradeKeyが必要なので管理者以外は操作できない。
ロゴ
参考サイトにもあるが、resource/assets/にデフォルトのchange-your-logo.svgがある。それを上書きするか、名前を変えるなら$wgLogosで設定。サイズは135x135で表示される(それより大きいサイズにすると切り取られる)模様。faviconも$wgFaviconで設定。自分はsvgを256x256のpngで保存してからImageMagickでicoに変換した。
ここから設定すると版指定削除ができる。
スキン
$wgDefaultSkin = "vector";となっているが、"vector-2022"のほうが良さそうだったのでそちらに変えた。あわせて$wgVectorResponsiveをtrueにしてモバイルでの視認性を上げた。カテゴリページの自動作成
Auto Create Category Pagesをダウンロードし、wfLoadExtension( 'AutoCreateCategoryPages' );
とする。これは便利。アクセス数解析
精度のほどはわからないが、HitCountersでできる。同じようにダウンロードした後、リンク先に記載のとおり、管理画面に行ってupdate.phpを実行する必要がある。その後で
wfLoadExtension
をすればよい。アクセス数は誰からでも見えるようであるが、特に問題はないので放置。SyntaxHightlight
Linuxのサーバーでは、
extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
のパーミッションを変更して所有者に実行権限を付加(先頭の桁を7にする)。参考: Extension:SyntaxHighlight - MediaWiki
CSS/JS
Help:User style/ja - Meta とかにある通り、デフォルトではcssを直接ページ内に書いても有効にならない。wgAllowUserCss
をtrueにして有効にするか、MediaWiki:Common.cssを直接編集するとよい。管理がしやすいので当サイトでは後者の方法を採用した。
当サイトでは使っていないがJSについても同じ(wgAllowUserJs
とMediaWiki:Common.js)。
スキンに関するCSS
当サイトではVectorテーマを使用しているので、MediaWiki:Vector.cssの内容も適用される。さらにVector 2022を使っているのでMediaWiki:Vector-2022.cssの内容も適用される。
設定内容としては、ja.wikipedia.orgに合わせて文字サイズを0.875emから0.944emに変更している。
シェルアクセス
Manual:Maintenance scripts/Running the scripts - MediaWikiにあるように、シェルアクセスがないところで使っている場合は拡張機能でどうにかする。2つ書いてあるがMaintenanceShellのほうがいろいろと良さそう。MaintenanceShellは、有効にしたあと、Special:MaintenanceShellにアクセスする。
しかし、generateSitemapとかはまともに動かなかった。まあやはりというか、普通はシェルアクセスのあるところで使ったほうがいいっぽい。
API
nodeでやる。requestはdeprecatedになったのでaxiosを使う。
cookieを使うってことがどこにも書いてなくて難しかった。ここでようやく見つけた。
画像
Help:画像 - MediaWikiに詳しく書いてある。
MediaWikiにアップロードするのが原則だが、$wgAllowExternalImagesという変数を設定することで外部サイトの画像を直接掲載できる。このサイトは個人サイトであり、管理しやすい(普通のアップロードだとランダムなフォルダに入れられたりするし、移行が煩雑そう)のでこちらを使っている。
サイズ
style="max-width:100%; height:auto;"
みたいなCSS(当サイトでは前述のCommon.cssに入れた)を使えば、外部サイトの画像でもサイズを変えられる。
500 internal server error
アップロードまではできたが、画像ファイルが(ftpで見てもちゃんとアップロードされているのに)500 internal server errorで見れない。
これはstarserverの性質かもしれないが、どうやらimages直下の.htaccessが悪いようで、これを消したら見れた。実際に悪さをしているのはOptions +FollowSymLinks
だったっぽい。これをコメントアウトすると見れた。
URLを短くする
最初の設定だとURLにindex.php?title=
のような見栄えのよくない文字列が入ってしまうが、Wikipediaのようにexample.com/wiki/タイトル
のような形式にできる。Manual:短縮URL - MediaWikiに案内がある。そこに書いてある通り、URLに?
が入っているのは見栄えだけでなくSEO上もあまりよくないとのこと。
注意点として、index.php?title=
形式を短い形式に強制的にリダイレクトさせるわけではない(index.phpは単なる記事の閲覧以外にも使われるので、そのように設定するのは面倒そう)。ただ、この状態でも、記事間リンクは短いURLを使ってくれるようになる。あとはWikiSEO拡張(後述)を使うと検索エンジンにも短いURLが通知される。
このサイトはサーバーがApacheなので、Manual:Short URL/Apache - MediaWikiの通りにする。長々と説明が書いてあるが、普通に設定するならSimple instructionsのところだけ読めばよい。URLに設定したい場所(たとえばwiki
)が既にMediaWikiのフォルダとして使われているとうまくいかない(このサイトの場合はmw
なので大丈夫)ので、この記事の最初の方にある通りにMediaWikiのフォルダのほうを動かす。
テンプレート
MediaWikiにはテンプレートというものがあり、記事のパーツを引用して使いまわすことができる。このWikiでもWikipediaの「独自研究」などに倣ったメッセージボックスをいくつかテンプレートとして利用している。
例えば、まず以下のような汎用のMbox
というテンプレートを作り(色も引数で指定できるのがポイント)、
<div style="border-left: 0.4rem solid #119922" ><div style="padding-left: 10px; padding-right: 10px; border: 1px solid #222222; background-color:#FBFBFB; border-left: 0.4rem solid {{{1}}}" >{{{2}}}</div>
</div>
これを利用して下書きのテンプレートを作っている。
{{Mbox|#000022|このセクションの内容は未完成であり、今後の加筆が予定されています。}}
SEO・OGP
まずはWikiSEOというextensionを同じように入れる。
OGP
このサイトではとりあえず大した設定はしておらず、$wgWikiSeoDefaultImage = "http://turgenev0.starfree.jp/mw/logo0.png";
でロゴを設定し(相対パスでも表示はされるようだが、SNSで重要なOGPとは?SEOとの関係性や設定方法を解説 -webma-とかを見ると多分絶対パスのほうがよさそう)、各ページに{{#seo:|title={{FULLPAGENAME}} - Turgenev's Wiki}}
と書いただけで、あとは何もしていない。先ほどの「URLを短くする」をやっておくと、そちらのURLが正規URLとして扱われる。
表示を確かめたいときはシェアデバッガー - Meta for Developersを使うとよい。
{{#seo:...}}
でimageなどを一度設定してしまうと、後でimageを消してもその設定がそのまま残ってしまった(WikiSEOのwfLoadExtension
を外すと消えるが、付けるとまた復活する)。おそらくページなどを格納しているMySQLデータベースのどこかに前回の設定が残っているのであろう。ページを削除するとリセットできるがそれ以外の治し方は不明。
サイトマップ
generateSitemap.phpを使えばよい。しかし以前使っていたスターサーバーフリーではシェルアクセスがなくて使えなかったので自前で生成できるようにした(参考: フィルターされたNotionページによるMediaWiki)
その他SEO
そこまでの必要性を感じないが、気が向いたらやるかも。