コンテンツにスキップ

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

利用者:Mizusumashi/ラッパーテンプレートのガイドライン

この文書は、ラッパー・テンプレート作成のガイドラインを提供するために書かれました。

定義

[編集]

ラッパー・テンプレートとは、あるテンプレートの機能をほとんどそのまま利用しつつ、機能を追加したり、パラメータをあらかじめ固定するなどの目的で、そのテンプレートを内部的に呼び出しているテンプレートです。

奨励するラッパー・テンプレートの書き方

[編集]

次のようなテンプレートがある場合:

/ベース・テンプレート

このガイドラインでは、つぎのようにテンプレートを記述することを奨励します:

/ラッパー・テンプレート

奨励しないラッパー・テンプレートの書き方

[編集]

単純なラッパー・テンプレート

[編集]

次のような、単純なラッパー・テンプレートの書き方は奨励できません:

/単純なラッパー・テンプレート

パラメータを指定した場合

[編集]

この書き方でも全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:

{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
{{/単純なラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) 値4
名前つき2 (void) 値5
名前つき3 デフォルト値 値6
title ベーステンプレート ベーステンプレート
単純なラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) 値4
名前つき2 (void) 値5
名前つき3 デフォルト値 値6
title ベーステンプレート 単純なラッパー・テンプレート

パラメータを指定しない場合 - 問題点

[編集]

しかし、パラメータを指定しない限り、ベースのテンプレートのデフォルト値の指定を完全に無視することになります:

{{/ベース・テンプレート}}
{{/単純なラッパー・テンプレート}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
単純なラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void) {{{2}}}
3 デフォルト値 {{{3}}}
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void) {{{名前つき2}}}
名前つき3 デフォルト値 {{{名前つき3}}}
title ベーステンプレート 単純なラッパー・テンプレート

引数指定全体を条件文で囲ったラッパー・テンプレート

[編集]

次のような、引数指定全体を条件文で囲ったラッパー・テンプレートの書き方は奨励できません:

/引数指定全体を条件文で囲ったラッパー・テンプレート

パラメータを指定した場合

[編集]

この書き方でも全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:

{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
{{/引数指定全体を条件文で囲ったラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) 値4
名前つき2 (void) 値5
名前つき3 デフォルト値 値6
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

パラメータを指定しない場合 - 問題点1

[編集]

しかし、名前のないパラメータに関しては、パラメータを指定しない限り、ベースのテンプレートのデフォルト値の指定を無視することになります:

{{/ベース・テンプレート}}
{{/引数指定全体を条件文で囲ったラッパー・テンプレート}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし)
2 (void)
3 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

デフォルト値のキャンセル - 問題点2

[編集]

名前つきのパラメータに関しても、「パラメータ=」と明示的にパラメータの空にすることで、デフォルト値をキャンセルすることができません:

{{/ベース・テンプレート|名前つき3=}}
{{/引数指定全体を条件文で囲ったラッパー・テンプレート|名前つき3=}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし)
2 (void)
3 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

デフォルト値を指定したラッパー・テンプレート

[編集]

次のような、デフォルト値を指定したラッパー・テンプレートの書き方は奨励できません:

/デフォルト値を指定したラッパー・テンプレート

デフォルト値が変更になった場合 - 問題点

[編集]

このようにデフォルト値を指定したラッパー・テンプレートは、ベースのテンプレートと動作を全く一致させることができますが、ベースとなるテンプレートのデフォルト値が変更になった場合、その変更に自動的に追従することがないので、保守性に問題があります。

問題を解決しているか

[編集]

コード

[編集]

では、このガイドラインで奨励しているラッパー・テンプレートの書き方は、問題を解決しているのでしょうか:

/ラッパー・テンプレート(再掲)

パラメータを指定した場合

[編集]

全てのパラメータを指定した場合には、ベースのテンプレートと同じ動作をします:

{{/ベース・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
{{/ラッパー・テンプレート|値1|値2|値3|名前つき1=値4|名前つき2=値5|名前つき3=値6}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) 値4
名前つき2 (void) 値5
名前つき3 デフォルト値 値6
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

パラメータを指定しない場合

[編集]

名前つきパラメータ、名前なしパラメータの区別なく、ベースとなるテンプレートの全てのデフォルト値を反映します:

{{/ベース・テンプレート}}
{{/ラッパー・テンプレート}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) !"#$% =
2 (void) !"#$% =
3 デフォルト値 !"#$% =
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

デフォルト値のキャンセル

[編集]

最後に、「パラメータ=」と明示的にパラメータの値を空にすることで、デフォルト値をキャンセルすることができます:

{{/ベース・テンプレート|名前つき3=}}
{{/ラッパー・テンプレート|名前つき3=}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) {{{1}}}
2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) !"#$% =
2 (void) !"#$% =
3 デフォルト値 !"#$% =
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

デフォルト値が変更になった場合

[編集]

まず、ラッパー・テンプレート内でデフォルト値を指定していないので、ベースとなるテンプレートのデフォルト値が変更になった場合、その変更に自動的に追従することができます。しかし、保守性の点からいって、完全というわけではありません(参照:#パラメータが変更になった場合)。


残された問題

[編集]

パラメータが変更になった場合

[編集]

ベースとなるテンプレートのパラメータが増えたり、名前が変更されたりした場合、このラッパー・テンプレートは、その変更に追従することができません。これはラッパー・テンプレートを用いている限り解決できない問題です。

しかし、ラッパー・テンプレートとベースとなるテンプレートの解説(ドキュメンテーション)に、情報を加えておくことで、少なくとも注意を促がすことはできるでしょう。

空白や改行の処理

[編集]

無名パラメータの場合/ラッパー・テンプレートでは、つぎのように空白や改行の処理に違いが出ます。

{{/ベース・テンプレート| 値1 |
値2
|値3|}}
{{/ラッパー・テンプレート| 値1 |
値2
|値3|}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void)

値2

3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void) 値2
3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート

これは、条件文を使用していることに起因する現象です。

次のコードを代わりに使うことによって、表面上、空白や改行の処理を一致させることができます:

/ラッパー・テンプレート2
{{/ベース・テンプレート| 値1 |
値2
|値3|}}
{{/ラッパー・テンプレート2| 値1 |
値2
|値3|}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void)

値2

3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート2
パラメータ デフォルト値 表示
1 (デフォルト値指定なし) 値1
2 (void)

値2

3 デフォルト値 値3
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート2

/ラッパー・テンプレート2は、テンプレート展開途中で、「{{{1}}}」の値の左右両端に改行や空白文字があれば、「<span />{{{1}}}<span />」と展開するようにします。MediaWikiが表示段階で「<span />」というXHTMLを除去するため、大抵の場合は、見た目にも、最終的に生成されるXHTMLにも変化はありません。しかし、テンプレートの展開途中で、Wikiマークアップに意図しない影響を与える可能性があります。

現在分かっている範囲で、「{{{1}}}」と展開されて意図しない結果が発生するのは、ベースとなるテンプレートが「[[{{{1}}}]]」や「{{ {{{1}}} }}」といったマークアップを使っている場合ですが、そのような場合、そもそも「{{{1}}}」の値の左右両端に改行や空白文字を与えることは考えにくいため、大抵の場合、/ラッパー・テンプレート2で問題ないでしょう。

なお、次のようなコードは、/ラッパー・テンプレート2では「<span />{{{1}}}<span />」と展開されますが、問題ないようです:

{{ /ベース・テンプレート|
* 値1-1
* 値1-2
* 値1-3
}}
{{/ラッパー・テンプレート2|
* 値1-1
* 値1-2
* 値1-3
}}
ベーステンプレート
パラメータ デフォルト値 表示
1 (デフォルト値指定なし)
  • 値1-1
  • 値1-2
  • 値1-3

2 (void)
3 デフォルト値 デフォルト値
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ベーステンプレート
ラッパー・テンプレート2
パラメータ デフォルト値 表示
1 (デフォルト値指定なし)
  • 値1-1
  • 値1-2
  • 値1-3

2 (void) !"#$% =
3 デフォルト値 !"#$% =
名前つき1 (デフォルト値指定なし) {{{名前つき1}}}
名前つき2 (void)
名前つき3 デフォルト値 デフォルト値
title ベーステンプレート ラッパー・テンプレート2