Wikipedia:井戸端/subj/単純なテンプレートにおいてモジュールを呼び出す必要はあるのか

単純なテンプレートにおいてモジュールを呼び出す必要はあるのか[編集]

Template:MTemplate:Tag2など単純なテンプレートがそれぞれModule:MModule:Tag2を呼び出しています。それはマジックワードや条件文で十分再現可能で、わざわざモジュールを呼び出す必要性が感じられません。このことの妥当性について皆さまに伺いたく思います。

また、現在テンプレートとモジュールの棲み分けはされておらず、このままではモジュールの乱立につながると思います。私は、何か棲み分ける大まかな基準があったほうがいいと思いますが、皆様どうお思いでしょうか。--Waiesu会話2016年5月14日 (土) 15:35 (UTC)[返信]

とりあえず、sandboxにテンプレート版を作ってみました。処理の負荷が大きく違うのであればどっちかを選んだほうがいいのかもしれません。どなたか詳しい人が測られてはいかがでしょう。違いがないのであればどっちでもいいのではないかと思います。ガイドラインもないと思いますし。テンプレートも単純なものがないわけではありません。わざわざなくてもいいんじゃないのと思うような短いテンプレートもないこともありません。 -- signed by にょろん (会話) 2016年5月15日 (日) 02:48 (UTC)[返信]
コメント サンドボックス作成ありがとうございます。どちらも正常に動作しなかったので当方で一部書き換えました。User:Waiesu/sandbox2にて処理速度を比較しましたので、こちらに載せておきます。
Transclusion expansion time report (%,ms,calls,template)
100.00%   65.429      1 - -total
 44.34%   29.012      6 - Template:M
 29.23%   19.127      7 - Template:Tag2
  8.38%    5.481      6 - Template:M/sandbox
  8.34%    5.459      1 - Template:Reflist
  5.37%    3.514      7 - Template:Tag2/sandbox
上の結果を参照するとTemplate:Mは約5.3倍、Template:Tag2は約5.4倍も処理に時間がかかっていると言えます。--Waiesu会話2016年5月15日 (日) 04:08 (UTC)[返信]
コメント 同じ機能を提供するならより汎用性に優れて言語そのものの処理が超速な特徴のあるLuaモジュールを選んだ方が「同一ページ内で繰り返し使用されたときに、ページ全体の処理が総合的に見て軽くなる」という利点があるので、個人的には既存のテンプレートはどんどんモジュール化されて、更に似た機能を提供している / 複数テンプレートorモジュール内部で似たような構文で同じ処理を行っているならより細分化して単独モジュール化するか、または単機能関数として同一モジュール内の別fubctionに統合されて行くべきだと思いますね。直近では熊本地震 (2016年)で「{{Citation}}系の(非Lua系)出典テンプレートが使用されすぎてページ全体が極度に重くなる/ページ内処理の限界に近づく」という問題によりノートで話し合いが持たれました。
あと、テンプレート構文はループ処理が行えないとか、命令処理構文として結構な欠点があるので書く側としてはLuaの方が書きやすいしソースがすっきりして作者以外の誰でもが読み解きやすくなる利点もありますね。本家enwikiではModule名前空間に2,900以上のモジュールが存在しているようです
en:Wikipedia:Lua / mw:Lua/Tutorial / en:Help:Lua for beginners / mw:Extension:Scribunto 辺りが参考になるかなあ。日本語版のWikipedia:Luaは抄訳なので。--Nami-ja(凪海) 会話 / 履歴 2016年5月15日 (日) 03:30 (UTC)[返信]
コメント Nami-jaさんのおっしゃるLuaの利点は理解しているつもりです。しかし、上に示した通り、モジュールを使わなくとも構造が単純なテンプレートは、逆にモジュールを呼び出しているほうが処理時間がより長くなっています。また、{{Citation}}系のテンプレートを例に出していますが、ソースを見ていただければわかる通り、非常に構造が複雑・煩雑で、このようなテンプレートをモジュール化することについては私も賛成の立場です。ただ、これも改善の余地が多く残されているとは思います。{{Citation}}には日本語版では不必要な要素が多く含まれており、熊本地震 (2016年)では{{Cite news}}を何度も呼び出していますので、テンプレート呼び出しが限界に近くなっているのだと思います(ちなみにその記事ではネット上の記事が多く出典に用いられていますので{{Cite web}}に切り替えることでかなり処理が軽減されると思います)。
あと、書く側としてはLuaの方が書きやすい作者以外の誰でもが読み解きやすくなるというのは全く個人の意見ですし、特にウィキペディア利用者のうちLuaを理解している人は条件文・マジックワードを理解している人より少ないと思いますので、利点とは言えないでしょう。--Waiesu会話2016年5月15日 (日) 04:08 (UTC)[返信]
コメント モジュールに作成抑止・存在否定の方針を導入するなら、テンプレートも同様にごく単純かつ単機能なテンプレートは作成直後にSD貼るくらいの対処も有りかもしれませんね。確か英語版ではそのように即時削除タグが使用されていたように思います。Wikipedia‐ノート:削除の方針Wikipedia‐ノート:即時削除の方針にテンプレートおよびモジュールに関する項目の新設提案か、既存の削除方針ならWP:DEL#E案件として削除依頼でしょうか。『どれくらい単機能だと削除相当なのか』という点が争点かな。◆そもそも『モジュールを乱立させてはならない(単機能モジュールは存在していてはならない、より大きく複雑でなければ存在価値がない)』とするのもWaiesuさんの発案による個人の意見ですから、ここら辺の作成方針・目安が作られる方向性で合意を目指すのも良い意見だと思います。◆「ウィキメディアプロジェクト特有のMediaWiki構文」と「既存プログラミング言語の一種であるLua」では「(ウィキペディア外の)世の中に存在する構文理解者の総数」「ウィキペディアで初めてテンプレートを弄くろうとする際の習得しやすさ」はどちらに利があるか考えるまでもないと思いましたが。--Nami-ja(凪海) 会話 / 履歴 2016年5月15日 (日) 14:29 (UTC)[返信]
コメント 少し議論の方向が逸れているようです。私は別に単機能なモジュールの存在を否定しているわけでありません。テンプレートのみで構成したほうが処理の早いものをあえてモジュールとして作る必要性は乏しいのではないかという私の考えについて、この場で広く意見を募集しています。また、この場でモジュールの大まかな作成方針などを話し合えたらよりうれしく思います。 P.S.ここはウィキペディアですから、編集者にとってはMediaWiki構文をそのまま使えるテンプレートのほうが扱いやすいと思いますよ。非ウィキペディア利用者(記事を執筆したことがない人)がいきなりテンプレートを作ることには反対です。--Waiesu会話2016年5月16日 (月) 10:00 (UTC)[返信]
テンプレートは一部に技術的な行き詰まりが見える部分もあると思います。古めのテクニック使いまくりなテンプレートを追いかけてるとその問題が見えてきた時期にモジュールが登場し始めました。テンプレートで書けるのであればそれに越したことはないとは思います。技術的にはテンプレートは面白いとも思いますし。一方でほとんどの人にはわかりにくい面もあると思います。コンピュータ産業の推移をみればコストが最優先で、技術や言語がわかりやすいかどうかは労働コストにつながりとても重要なことです。どんなに優れていてもコスト競争で負ける技術は広まりません。ウィキペディアの発展にはどっちがいいのかは利用者が決めることだと思いますが、運営上の課題に上がらないのであれば推奨することはあっても厳しく規制することはないとも思います。 -- signed by にょろん (会話) 2016年5月15日 (日) 16:56 (UTC)[返信]
コメント そうですね。テンプレートでは処理できない(もしくは処理できても遅い)ものはどんどんモジュールにしていくべきだと思います。(特にあまり使用箇所が多くありませんが{{for step}}なんてひどいですよね。モジュール:サンドボックス/Waiesu/sandboxにそのモジュール版を制作してみましたが、こちらのほうがはるかに簡単で処理も高速です。)私は、ウィキペディアは非営利なので労働コスト云々は気にしませんが、やはり多くの人にとってなじみやすい・わかりやすいほうがいいとは思います。仮にLuaのほうが100倍わかりやすくても結局はマジックワードorテンプレートで呼び出さなければいけないのですが…。--Waiesu会話2016年5月16日 (月) 10:00 (UTC)[返信]