コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Help:初心者のためのLua

概要

[編集]

Luaはウィキペディア上に動作するプログラミング言語で、MediaWiki上では拡張機能のScribuntoによってかなりの制限がされています。その目的は、ウィキペディアのコンテンツページで利用可能なデータを処理し、さまざまな種類のカスタマイズされた情報表示のみを可能にすることです。

最も重要なヘルプページは MediaWiki Scribunto Lua リファレンスマニュアルで、MediaWikiで実装されている言語と標準ライブラリコールの簡潔な要約を提供するものです。

メディアウィキ以外の一般的なLuaリファレンス・マニュアルは、非常によく書かれており、包括的で有益ですが、初心者には問題があります。なぜなら、標準的なLuaの「hello world」プログラムに登場するprint()関数を始め、ある程度の機能がウィキペディアでは動作しないのです。

実装の問題点

[編集]

print()がない以外にも、制限されている機能がいくつかあります。機能のリストは、標準のLuaとの差分(翻訳途中)を参照してください。

現時点では、文字列 (翻訳途中) の代わりに mw.ustring 関数(未翻訳)を使用することが推奨されています。

入力

[編集]

プログラムは、ページがロードされた時(そのページや組み込まれたページが変更されたりプレビューされた時)にのみ実行され、出力を見るたびに実行されるわけではありません。つまり、入力ボックスに華氏温度を入力してボタンを押すと対応する摂氏温度が返ってくる、ページ上のマンデルブロー集合の可視化のセグメントをクリックして何度でも拡大できるといった便利なLuaモジュールはあり得ません。入力データを含む実際のWikiページ(または少なくともプレビューのために投稿したページ)がなければなりません。

しかし、mw.title.new のようなライブラリ関数を使用して、Wiki 上の任意のテキストコンテンツページからコンテンツをインポートすることは可能です。ですが、XMLテキストデータを含む.svgファイルでさえも、ファイルからデータをインポートすることはできません。

Luaモジュールを呼び出す

[編集]

Luaモジュールの呼び出しは、テンプレートの参照読み込みによく似ており、以下のような関数で構成されています。

{{#invoke:ConvertNumeric|decToHex|73}}

このテキストは、モジュール名前空間に格納されているLuaスクリプト自体を呼び出すものです。この呼び出しは、#invoke関数内の情報をLuaモジュールに送信し、括弧内のすべてをテキストに置き換えて、Lua モジュールが返送するものです。

最初の「パラメータ」(この場合はdecToHex)は、実際にはLuaモジュール内で呼び出される関数であることに注意してください。このフィールドは、どの#invokeにも必ず含まれていなければなりません。モジュールに慣れていない人、特にWikipediaテンプレートのコーダーは、|の後ろがパラメータになると思っているので、この追加フィールドの必要性には驚かされます。彼らのためにあなたの作業を文書化するとき、{{#invoke:ConvertNumeric|decToHex|73}}のような明確な使用法を含めると便利で、彼らがこれを省略してはいけないと理解できるようになります。