Help:テンプレート
![]() |
注意: このページを編集すると、編集内容が CC0 のもとで公開されることに同意したと見なされます。詳細はパブリック・ドメインのヘルプ ページを参照してください。
|
![]() |
複数のページに含めたい共通テキストがある場合は、MediaWiki のテンプレート機能が役立ちます。 拡張ファイルやメディアファイルとは異なり、テンプレートのための中央リポジトリはありません。テンプレートは、新たに書き込むか既存作業の繰り返しを節約したり、他のwikiたとえばウィキペディアからエクスポートしたり、そのあとターゲットのwikiにインポートしたりできます。
Contents
作成
テンプレートとは内容を他のページに参照読み込み (トランスクルード) できるよう設計された標準ウィキページです。命名規則により、テンプレート名は接頭辞「Template:
」で始まり名前空間に紐付けされます。その他、他のウィキページのように作成することもできます。
テンプレートの最も簡単な使い方は以下のようになります。例として「Template:Welcome」という名前のページを作成する場合を想定しています。
こんにちは! ウィキへようこそ。
はじめてのテンプレートが作成できました! つぎにコードを挿入します。
{{Welcome}}
他のページでは{{Welcome}}
と表示する代わりに「こんにちは!ウィキへようこそ」という文が表示されます。テンプレートの内容が他のページに「埋め込み」、つまり表示先のページに統合されます。
任意ページの任意の位置に歓迎文{{Welcome}}
を挿入することもできます。100ページで使用されていると仮定します。テンプレートの内容を次のように変更した場合:
こんにちは、皆さん! この素敵なウィキへようこそ。
その後、このテンプレートを使用した前出の100ページのどれかを開いて確認すると、元の文ではなく新しい文を表示します。各ページにテンプレートが埋め込まれているため、この方法だと100ページ分の内容を編集することなく、一括で変更できます。
これが基本的な仕組みです。埋め込みにはこの他、テンプレートを拡充したり他のテンプレートをとても便利にしたりする機能があります。
使用法
テンプレートは、他のページ内で以下のように使用します。
{{固有名}}
— 上記のように、このテンプレートリンクを含むページを読み込んだときに、テンプレートリンクを[[Template:固有名]]の現時点の内容で動的に置き換えます。このリンクは読込ページのソースからは変更されません。{{subst:固有名}}
— このテンプレートリンクを含むページが初めて保存された時点の[[Template:固有名]] の内容を編集可能なテキストとしてコピーし、リンクと置き換えます。そのページの内容を編集しても、元のテンプレートには影響がありません。注意:元のテンプレートの変更は、リンクを置いたページに自動で反映されません。そこで、テンプレートを修正したときにテンプレートを参照しているページも自動的に修正されてほしい場合は、使用してはいけません。{{safesubst:固有名}}
— これはトランスクルードを破壊しないsubst展開を導入します。w:en:Help:Substitution#The safesubst: modifierを参照してください。{{msgnw:固有名}}
は、それを含むページが取得される際に、(<nowiki>
のように) 生のウィキ構文として表示する形式でテンプレートを埋め込みます。
実際は単にページ名を含む名前空間を指定することで、通常のwikiページをテンプレートとして使用することもできます。たとえば
{{Template:ページ名}}
は[[Template:ページ名]]
を参照読み込みします{{Talk:ページ名}}
は[[Talk:ページ名]]
を参照読み込みします{{:ページ名}}
は[[ページ名]]
を参照読み込みします{{subst::ページ名}}
は[[ページ名]]
の内容で置き換えます
その名前空間が存在しない場合はフルタイトルのテンプレートであると仮定されます。
{{Foo:Bar}}
は[[Template:Foo:Bar]]
を参照読み込みします
パラメータ
MediaWikiは、参照読み込みの機能を豊富にするために、テンプレートを参照読み込みするときにパラメータを渡します。パラメータによって、テンプレートからさまざまな異なるコンテンツを生成したり、異なる挙動をさせる事ができます。
つぎのような、ちょっとした感謝の言葉を他の利用者のトークページに挿入したい場合
この感謝文には理由(この場合は「あなたの尽力に」)と署名(「私」)があります。目的はすべてのユーザーが理由にかかわらず他のユーザーに感謝できるようにする事です。
たとえばTemplate:Thankyouというテンプレートを定義して使うことで、どの場所でも同じ記述ができるようになります。しかし感謝する記述は同じでも具体的な内容(理由や署名)はユーザーによって違います。このため、それらをパラメータとして渡す必要があります。もしボックスの書式を設定するために残りの要素を無視して画像を配置する場合、テンプレートの主な内容は次のようになります:
'''感謝をこめて...'''
{{{1}}}。
{{{2}}}より。
{{{1}}}
と{{{2}}}
の使用には注意してください。これはテンプレートを使用したときに渡すパラメータをテンプレート内で識別するための使用法です。テンプレート内では各パラメータが3対のブラケット{{{ }}}
に囲まれている、ということに注意してください。これは通常のテンプレート名の使用法とは異なります。
ページからテンプレートを呼び出すときは各パラメータ値を「パイプ」文字(|
)で区切って記述します。MediaWikiはパラメータを名前なし、数値付き、名前付きという3通りの方法でテンプレートに渡すことができます。
名前なしパラメーター
名前なしパラメータを渡すには、パラメータを順番にリスト化してください。
{{Thankyou|あなたの尽力に|私}}
この場合は{{Thankyou}}
テンプレートが{{{1}}}=あなたの尽力に
と{{{2}}}=私
というパラメータを受け取って、次のように返します。
名前なしパラメータを渡す順番が動作に影響します。パラメータの順序を逆にしてみます。
{{Thankyou|私|あなたの尽力に}}
以下のように出力されます。
注:順番({{{1}}}
など)によるパラメータの識別機能は名前なしパラメータだけで動作します。ページが名前で識別した任意のパラメータは、以下に示すように、序数を使用してテンプレートにアクセスできなくなります。
注: 匿名のテンプレートのパラメータの引数の中に等号 (=) が現れた場合、そのパラメータは誤って名前付きパラメータ (この文書で後述) と解釈され、等号の前の文をパラメータ名、その後の文を引数の値として扱ってしまう可能性があります。 これは外部リンクまたは属性を持つHTML要素を含める必要がある場合、よくある問題です(Task 16235を参照)。 この問題を回避するには、名前付きのパラメータを使用するか、次の節で説明するように数値付きのパラメータを使用します。
数値パラメーター
数値によるパラメータの場合はパラメータ値によって識別されます。
{{Thankyou|2=私|1=あなたの友情に}}
このとき{{Thankyou}}
テンプレートは{{{1}}}=あなたの友情に
と{{{2}}}=私
を受け取ります。ただしパラメーターは数値の逆順で指定されてしまいます。以下のように出力されます:
名前付きパラメータ
パラメータを渡す第3の方法として数字の代わりに名前を使用します。この場合はテンプレートの内容をこのように変更してください。
{{{reason}}}に'''感謝をこめて...'''。 ありがとうございます。{{{signature}}}より
テンプレート内で各パラメータを識別するために、数字の代わりに{{{reason}}}
と{{{signature}}}
を使用しています。名前でパラメーターを渡すと、渡したときに各パラメータが識別されます。
{{Thankyou|signature=私|reason=ありのままのあなたに}}
この場合は{{Thankyou}}
テンプレートが{{{reason}}}=ありのままのあなたに
と{{{signature}}}=私
というパラメータを受け取って、次のように返します。
名前付きパラメーターの名前の大文字・小文字は区別されないため:
{{Thankyou|signature=私|Reason=ありのままのあなたに|reason=大文字と小文字の区別をしてくれて}}
出力結果:
テンプレートに名前付きパラメータを使う利点は、パラメータを渡す順番が柔軟になることに加え、多数のパラメータを組み合わせてもテンプレートのコード読解がとても容易になることです。
既定値
パラメータを取るテンプレートなのに、そのパラメータの引数を指定せずに参照読み込みするには、以下のようにします:
{{Thankyou}}
数値パラメータの例は次のようになります。
引数を渡さなかったため、テンプレートはパラメータのそれぞれの値の代わりにパラメータ自身を提示します。この場合、パラメータの既定値の定義、つまり値を渡さなかった際に使用される値を定義すると有用かもしれません。例えばテンプレートの内容を以下のように変更します:
'''感謝をこめて...'''
{{{reason|すべてに}}}。
{{{signature|私}}}より。
{{{reason|すべてに}}}
は、パラメータ {{{reason}}}
に引数を指定しなかった場合の値を定義しており、その値として すべてに
が使用されます。同様に {{{signature|私}}}
では、パラメータ {{{signature}}}
の既定値が 私
になります。さて、任意の引数を渡さずに再びテンプレートを参照読み込みすると、以下のようになります:
評価の順序
パラメータはテンプレートへ渡される前に完全に評価されます。 だから、もしあるパラメータが別のテンプレートの呼び出しだったなら、実際に渡されるものは展開されたパラメータになります。
{{Thankyou|reason=ご訪問に({{Welcome}})|signature=私}}
は、次のように展開します。
{{Thankyou|reason=ご訪問に(こんにちはみなさん!この素敵なウィキへようこそ!)|signature=私}}
そして次のように表示されます。
状況によっては、この評価の順序は代替案と異なることがあります。(代替案はテンプレート呼び出しの結果を調べ、追加のテンプレートを展開するかどうかを確認。)
まずパラメータと同様にテンプレート名を展開できます。
そこで
{{Thankyou in {{preferred language}}|signature=私}}
の展開結果は次のとおり。
{{Thankyou in French|signature=私}}
このようにテンプレートがThankyou in French
を呼び出すと、指定の言語で謝意を表示します(既定の言語を上書き。)
第二に、呼び出すテンプレートは後で呼び出す別のテンプレートをゼロから作ることはできません。
もしstart of call
が{{Thankyou|
であり
end of call
がsignature=私}}
のときは、
{{start of call}}{{end of call}}
形式をとったテンプレートは動作しないはずです。
第三に、渡したパラメータはテンプレートの使用場所ごとに展開されるのではなく、1回だけ展開されます。これはMediaWikiサーバにとってより効率的です。
最後に、呼出テンプレートは完全に展開されたパラメータを停止することはできません。テンプレートがなんらかの状況でパラメータを使用するだけでも、呼び出し前にかならず展開されています。
評価の順序の例外
状況によっては、テンプレートに渡す前段階でテンプレートパラメータが評価されていません。
subst:
を展開したパラメータは評価されませんが、文字どおり渡されます。
いくつかのマジックワードはパラメータとして評価されません。副作用があるため、評価は延期されます。たとえば{{foo| {{{DISPLAYTITLE:メインページ}}} }}
は以下の処理の適用外です。
DISPLAYTITLE
の評価- ページの表示名を変更して、次に
foo
の呼び出しでパラメータ1を空欄扱い
実際の処理は
DISPLAYTITLE
は評価の対象外 (現状では)foo
の呼び出しにはパラメータ1に{{{DISPLAYTITLE:メインページ}}}を採用{{{1}}}
がfoo
で評価された場合に限定し、ページの表示名を変更する。
このように評価が延期されるマジックワードがどう決まるかは、まだ十分に文書化されていません。現状で利用できるものは以下のとおりです:
- DISPLAYTITLE (訳注:技術的なメタデータの表中、「ページ本文に影響」の項目参照。)
テンプレートの再帰
テンプレート自体を呼び出すテンプレートはMediaWikiに永久の繰り返しを要求したりしません。
MediaWiki は名前が太字 (ボールド体) のテンプレートを再帰 (recursion) しません。
たとえば「Template:Aaaa」の内容が「{{Aaaa}}
」だった場合は「Template:Aaaa」と表示します。
テンプレートの参照読み込みの制御
既定では、テンプレートの内容は直接表示したときも別のページから呼び出したときも完全に表示されます。ただし<noinclude>
、<includeonly>
、<onlyinclude>
のタグを使用することでテンプレートのどの部分を表示し読み込むか管理できます。
<noinclude>
と</noinclude>
の間にあるものはすべてページが直接閲覧されるときのみ表示され、呼び込みされる場合は表示されません。これは、すべてのページで展開されることを望まないテンプレートに文やコードを含ませたい場合に有用です。実行できる応用例は次の通りです:
逆は<includeonly>
です。<includeonly>
と</includeonly>
の間のテキストは、テンプレートのページを直接開いて閲覧しても処理されず、ページがインクルードされたときのみ処理され表示されます。明確な応用例は下記を含みます。
- テンプレートを含むページのカテゴリ割り当て。注:この方法で一つのテンプレートが割り当てる複数のカテゴリを変更した場合でも、参照ページのカテゴリはすぐには更新されないことにご注意ください。ジョブ キュー によって処理されるからです。特定のページのカテゴリを強制的に更新するには、ページを編集モードで開き、何も修正しないまま保存し直します。
- テンプレートのページ自体を閲覧しても、コードが処理されないようにします。パラメータを与えないとコードが処理されない仕組みのため、パラメータを与えられないままテンプレートが作動すると望ましくない結果をもたらします。
<noinclude>
タグと<includeonly>
タグの外側部分は(テンプレートページで直接閲覧していても、テンプレートが他ページで呼び出されていても)通常ページ同様に表示されます。
重視すべきは、2つのタグがどんな内容を挟んでいるかという点です。
<onlyinclude>
タグの外側部分は読み込み内容に入っていません。
includeonlyのタグが付いた節でも、参照読み込みのときに処理の対象から外されるため、改めてonlyincludeのタグをつける必要があります。
要点は、このタグで挟んでいない、外側の部分がどんな内容かという点です。
これらのタグは入れ子にすることもできます。
以上、3種の部分埋め込みタグは処理、レンダリングされる内容のあらゆる組み換えを可能にします。 コメントも役割を与えられています。
テンプレートの整理
テンプレートが有効に使われるには、ユーザーにとってテンプレートが見つけやすく、利用法が理解できる必要があります。
以下の方法で見つけられます:
- 特別ページ > 全ページをクリックし、
- 名前空間: 一覧で Template を選択して表示をクリック。
使用法の情報を示すには、テンプレートページにこのような例を含めてください。
<noinclude> == 使い方 == ユーザーを歓迎する記述: {{Thankyou|reason=あなたの理由|signature=あなたの署名}} </noinclude>
その後、ほかの編集者はこの例をコピー&ペーストして、テンプレートを使えるようにします。
テンプレートへのリンク
テンプレートページはほかのウィキページ同様、リンクすることができます。一例としてTemplate:Navbarというリンクを作成するには、ウィキコードの[[Template:Navbar]]
を使います。
多くのウィキでTemplate:Tlを使うと、「波カッコ」付きのウィキコード(参照読み込み形式)を明示するフォーマットにまとめたテンプレートを、実際に読み込まずにリンクを張ることができます。例えば{{tl|Navbar}}
というコードを使うと、{{Navbar}}というリンクが生成できます。
この構造はテンプレートの説明文書、ヘルプページあるいはトークページでテンプレートについて述べるとき、よく使われます。同じ効果を得るのに、<code>{{[[Template:Navbar|Navbar]]}}</code>
も使えますが、{{tl}}のほうが入力する文字数は少なくてすみます。Tlテンプレートが用意されている場合、どんなウィキでも上記に示したように文を「code」の要素としてレンダリングするとは限りません。もしうまく作動しない場合は、似た名称のテンプレートが有効かもしれません。例えば英語版ウィキペディアだとen:Template:Tlの記事の「関連項目」節に列挙したものがよい例です。
別のウィキへのコピー
テンプレートはCSSかその他テンプレートを要するため、ユーザーはウィキからウィキへのテンプレート複製にトラブルを抱えることになります。以下の手順はほとんどのテンプレートで有効とされています。
MediaWiki のコード
新しいウィキでインポート権限(特にimportupload)がある場合:
- 元のウィキのSpecial:Exportに移動し、必要なすべてのテンプレートの完全な履歴を含む.xmlファイルを次のようにダウンロードします。
- 大きなテキストボックスにテンプレートの名前を入力します(例:「Template:Welcome」)。大文字と特殊文字に特に注意してください。テンプレート名が正確でない場合、エクスポートは引き続き行われますが、.xmlファイルには予期されたデータが含まれません。
- 「テンプレートを含める」にチェックを入れる。
- 項目「完全な履歴は含めず、最新版のみを含める」のチェックを外す。
- 「書き出し」をクリック。
- 新しいウィキの Special:Import に移動して、.xml ファイルをアップロードします。
新しいウィキの取り込み権限を持ってない場合:
- もととなるウィキから複製したいテンプレートに移動します。編集画面に移動し、ソース全体をコピーします。
- 新たなウィキにて、コピーしたテンプレートと同じ名称のページへ移動します。作成,編集を押してコピーしたソースを貼り付けします。各テンプレートの編集要約欄では、帰属用に複製元のページへリンクさせてください。
- 編集画面での複製元ウィキに戻り、編集欄の下にある「このページで使われているテンプレート」の一覧をご確認ください。そこに列挙されたテンプレート1件ごとに、上記の処理を繰り返します。また、一覧のテンプレートから呼び出されるテンプレートにも、それぞれ同じ処理が必要です。
上記で必要なコードすべての複写ができ、テンプレートの種類によってはこれで十分です。 もし上記の方法でうまく作動しない場合は、編集ボックスの下に「このページの現バージョンに参照読み込みされたページ」が表示されるので、そこに赤字リンクがあるかどうか確認してください。赤字リンクが見つかった場合、それらについても、ひとつずつ上記の処理を行います。
他のウィキからテンプレートおよびそれにリンクするテンプレート群のインポートに成功したら、ご利用のウィキに適合するように、カスタマイズする部分を編集します。例えばロゴの変更、廃止したカテゴリあるいは赤字リンクの削除などが必要かもしれません。
拡張機能
テンプレートで多用される拡張機能には ParserFunctions があります。MediaWiki のParserFunctionsのページを開き、一覧にある機能のうち、先ほど複写したテンプレート内で使用しているものがないか確かめましょう。もし見つかったらParserFunctions extensionをインストールする必要があります。インストールの処理は、MediaWikiインストールのサーバでシステム管理者権限が必要です。
テンプレートに応用される依存関係について、特にウィキペディアの場合、Luaもあります。Luaとの関連は、テンプレート内に{{#invoke: }}
というコードがあるかどうかで見分けられます。このコードを見つけたらScribunto拡張機能をインストールするのですが、これには管理者権限が必要です。インストールと使い方は、拡張機能のリンクを開いてページを参照してください(訳注: Luaも参照)。
CSS および JavaScript のコード
MediaWikiコードの他にも、テンプレートの多くでCSSを使い、JavaScriptに依拠して完全に機能するものもあります。もし複写したテンプレートが予想通りに機能しない場合には、原因はそこにあるのかもしれません。必要なCSSやJavaScriptをご利用のウィキに複写するには、通常、管理者権限が求められます。「MediaWiki:」名前空間のシステムメッセージを編集する必要があるからです。
- テンプレートの文内にCSSクラスが使われているかどうか確認(例:
class="foobar"
)。元のウィキの「MediaWiki:Common.css」ないしは「MediaWiki:Monobook.css」の中にCSSクラスがある場合は、これらを複写先のウィキの「MediaWiki:Common.css」に複写、テンプレートが予想通りに作動するかどうか確認をお願いします。 - それでも複写したテンプレートが予想通りに作動しない場合には、元のウィキの「MediaWiki:Common.js」もしくは「MediaWiki:Monobook.js」にコードがないかどうか確かめます。コードが見つかったら、それらをテンプレートの複写先のウィキの「MediaWiki:Common.js」に複写することもできます。通常、信頼できる情報源からのみコードを複写することが良識的で、まず関連のある部分を特定するためにコードをウェブで検索してみましょう。コメントから、コードの各部分の機能を見極めるヒントが見つかるかもしれません。
関連項目
- Help:テンプレートデータ
- Help:外部検索 – 特殊なテンプレートの例
- Help:マジックワード – ある種のテンプレートに備わった上級者向け機能
- Help:Extension:ParserFunctions - #ifや#switchなど、その他の上級者向け機能
- Help:テンプレート内でのパーサー関数 - テンプレートのパラメーターにパーサー関数を適用する方法
- m:Help:Template – テンプレートがどう機能するか、より詳しく具体的に示した説明文書
- m:Help:Advanced templates – さらに高度な技術。動的テンプレート呼び出しや可変変数など(訳注: テンプレート内にテンプレートやパラメータを組み込む等)
- m:Help:Embed page –
Template:
を使わず、名前空間からページ内に別のページを埋め込む方法。 - Manual:Importing Wikipedia infoboxes tutorial
- Help:テンプレート展開
- Extension:PageTemplates
- A solution to the lack of template bundling has been proposed at Meta:Community Wishlist Survey 2019/Miscellaneous/Shared Multilingual Templates and Modules available to all wikis, please support it.
External links
- Miraheze template repository - MediaWiki templates intended for general use.