2026年6月1日月曜日

MediaWiki(1)



図:MediaWikiで始めて作ったウェブページ

メディアウィキMediaWiki)は,プログラミング言語PHPとMySQLなどのデータベースから構成されるウィキソフトウェアである。ウィキペディアやその関連プロジェクトはこのによって作成されている。昔は向日葵のアイコンでなじみ深かったが,いまはちょっとイマイチになった。

マニュアルレス時代が到来しているので,ほとんどの設定方法などは生成AIに聞いてみることで事足りる。今回は,Geminiの指導を仰いだ。ChatGPTの回答がいまいちだったからだ。
Q(koshix):

sakura internet のアカウント( サービス名 :さくらのレンタルサーバ スタンダード)で 公開用のMediaWiki(Wikipediaとほぼ同水準の)を立ち上げることはできますか。もし可能ならば,どの程度の工数が必要でしょうか。 


の最初の段階について ChatGPTにきいたところ以下の回答が得られました。 でも,ちょっと自分にとっては分かりにくくて不親切に思えるので,初心者向けに 丁寧かつ簡潔に修正していただけませんか。(以下ChatGPTの回答を添付)


(1) スタンダード契約しているさくらインターネットのコントロールパネルで,MySQLデータベースを新しく作成する。

(2) さくらインターネットのサーバーのウェブ公開ディレクトリ配下にwikiというディレクトリをつくる。MediaWikiのダウンロードサイトから入手したファイル(MediaWiki 1.45.3 安定版)を展開して,その中身をwikiに置く。

(3) httpでwikiディレクトリにアクセスし,初期化プロセスindex.phpを実行する。タイトルは,安易にPhys_Wikiとしたところ,田原真人のフィズヨビのなかでPhys-Wikiというコーナーが作られていたので,後にFisica_Wikiに変更した。 Wikiではあるけれども,管理者の自分だけが編集可能に設定する。外装はWikipediaになるべく近くなるようVector を指定する。

(4) 先ほど設定していたMySQLデータベースとの接続などを定義すると,LocalSettings.phpという設定ファイルができあがる。 これを自分のMacBook Airにダウンロードして,サーバーのwikiディレクトリに置く。CC-BY-SAも必須だ。これで準備は出来上がり。

(5) logoがデフォルトのままで美しくないので,Geminiと相談してそれっぽいデザインのものを作り,さらにそれをsvgに変換してもらう。そのまま埋め込んだらサイズが固定ではみ出てしまったので,そこも調整してもらう。なんでもかんでも任せっきりだ。

(6) バックアップの設定をしておけとの助言があった。少し問い合わせて指示に従って,さくらインターネットのコントロールパネルのWebサイト/バックアップ&ステージングでSnapUpを設定し,wikiのページのバックアップを指定したつもり(大丈夫かな?)。

(7) なるべく負荷少なく数式を表示したいので,ユーザ側でレンダリングするMathJaxを設定ファイルにCommon.jsに書く。いったんWAF設定のセキュリティ解除する必要があるとか,キャッシュのせいだとか,ななかなうまく反映できなかったが,最終的にはなんとかなった。

(注)昔は馬力があったので,あれこれ全部マニュアルと首っ引きで設定できた。その後は,インターネットで検索しながらになり,ついに生成AI(LLM)様に完全依存の状態に到達した。

/* MathJax 3 強制ロード・スクリプト */
mw.loader.using('mediawiki.util').done(function () {
    window.MathJax = {
        tex: {
            inlineMath: [['$', '$'], ['\\(', '\\)']],
            displayMath: [['$$', '$$'], ['\\[', '\\]']],
            processEscapes: true
        }
    };

    var script = document.createElement('script');
    script.src = 'https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js';
    script.async = true;
    document.head.appendChild(script);
    
    // ページ読み込み後に再レンダリングを命令
    script.onload = function() {
        if (window.MathJax && MathJax.typeset) {
            MathJax.typeset();
        }
    };
});