Wikipedia:編集へんしゅうフィルター/つくかた

半保護されたページ

フィルターをつく

このふしでは、最近さいきん更新こうしんしたフィルターをあふれさせないように、予備よびテストをしてフィルターをつく方法ほうほう説明せつめいします。

  • ルールの書式しょしきみます。
  • デバッグツール
    たとえば、'文字もじれつ' rlike '正規せいき表現ひょうげん'入力にゅうりょくします。結果けっかしんならば1表示ひょうじされ、にせならなに表示ひょうじされません。
  • テストページ
    対象たいしょうにしたい操作そうさ最近さいきんおこなった利用りようしゃさがします。
    変更へんこうした利用りようしゃ:」らんにそのユーザーめい入力にゅうりょくし、「テスト」ボタンをクリックします。
    もし、発動はつどう条件じょうけん有効ゆうこうにならない場合ばあい
    「フィルターに一致いっちしない変更へんこう表示ひょうじする」を有効ゆうこうにし、再度さいどテストします。
    あなたが対象たいしょうとしていた操作そうさつけたら、「(分析ぶんせき)」をクリックし、変数へんすう確認かくにんしてください。
  • 作成さくせいしたいフィルターが有用ゆうようなものに出来できそうであれば、Wikipedia:編集へんしゅうフィルター/提案ていあん提案ていあんし、作成さくせいかんして合意ごうい形成けいせいをしてください。
  • 合意ごういがとれたら、特別とくべつ:不正ふせい利用りようフィルター/newから、対処たいしょ操作そうさのない(つまり、ログをるだけの)フィルターを作成さくせいし、1週間しゅうかん試験しけん運用うんようおこないます。
    これは、誤作動ごさどう対象たいしょうではないのに作動さどうする、あるいは対象たいしょうなのに作動さどうしないなど)がないかのテストのために必要ひつようです。
    メモ:のらんに「試験しけん運用うんようちゅう -- あなたの利用りようしゃめい 日付ひづけ」のように、試験しけん運用うんよう開始かいししたことをいてください。
  • Wikipedia:編集へんしゅうフィルター/提案ていあんにある提案ていあん試験しけん運用うんようちゅう変更へんこうし、ひとがあなたのフィルターを修正しゅうせいしたり警告けいこく改善かいぜんしたりできるようにしてください。
  • 試験しけん期間きかん問題もんだいきなければ、最後さいごに、作成さくせいしたフィルターに対処たいしょ操作そうさ付与ふよしてください。

既存きそんのフィルターのさい利用りよう

削除さくじょ/無効むこうしてあるフィルターを、中身なかみまったちがうものとしてなおして使用しようしたり、フィルターの中身なかみ分離ぶんり分離ぶんりもとのフィルターと目的もくてき中身なかみまったちがうものにしたりすると、過去かこのコードや一致いっち記録きろく複数ふくすう条件じょうけん混在こんざいしてしまうため、みにくく、検索けんさくしにくくなります。可能かのうかぎ新規しんき作成さくせいするようにしましょう。

フィルターを編集へんしゅうする

編集へんしゅうフィルターは、編集へんしゅうフィルター編集へんしゅうしゃであれば、だれでも編集へんしゅうすることができます。

フィルターを編集へんしゅうしたさいには、メモの部分ぶぶんに、その変更へんこう要約ようやく署名しょめいを「要約ようやく -- あなたの利用りようしゃめい 日付ひづけ」のようにいてください。

性能せいのうげる

これらのフィルターはあらゆる編集へんしゅうはたらくので、フィルターは編集へんしゅう速度そくどいちじるしい低下ていかや、おおきなページのタイムアウトをこす可能かのうせいがあります。しかし、発動はつどう条件じょうけんへのほんのちいさな修正しゅうせいでフィルターの動作どうさ時間じかん短縮たんしゅくできるかもしれません。演算えんざん順序じゅんじょ意識いしきすることでパフォーマンスのしょうじることがあります。

演算えんざん順序じゅんじょ

演算えんざん原則げんそくとしてひだりからみぎかいますが、それ以外いがい順序じゅんじょもありえます。フィルターが条件じょうけんひとつにっかかると、のこりの条件じょうけんチェックは中止ちゅうしされ(短絡たんらく評価ひょうか)、つぎのフィルターにうつります。評価ひょうか順序じゅんじょつぎとおりです。

  1. 括弧かっこなか ((Expression))
  2. 数値すうち文字もじれつ変数へんすう (123, "abc", user_name, …)
  3. 関数かんすう (norm ,lcase, …)
  4. 符号ふごう (+, -)
  5. キーワード
  6. 論理ろんり否定ひてい (!x)
  7. 累乗るいじょう (2**3)
  8. 乗算じょうざん除算じょざん剰余じょうよ(*, /, %)
  9. 比較ひかく演算えんざん (<, >, ==)
  10. 論理ろんり演算えんざん (&, |, ^, in)

フィルターの負荷ふかかるくする

rlike, incontainsのようなキーワードを使つか場合ばあい、フィルターは文字もじれつ全体ぜんたいから検索けんさくしなければなりません。old_wikitext のような変数へんすうはとてもおおきくなりがちです。そういった場合ばあいadded_linesremoved_linesのような変数へんすうで、それにちかい、または同等どうとう効果こうかられ、かつなんばいにも高速こうそくにすることができます。また、old_size にチェックをれることで、テキスト全体ぜんたいをチェックしようとしているのではないと確認かくにんすることができます。

もっともてはまりやすいような条件じょうけん最初さいしょるようにフィルターを順序じゅんじょづけるべきです。おおむね、利用りようしゃグループや利用りようしゃ編集へんしゅう回数かいすうのチェックがこれにたります。原則げんそくとして、あなたがターゲットにしている種類しゅるいらしをさが正規せいき表現ひょうげん最終さいしゅう条件じょうけんとすべきです。

発動はつどう条件じょうけんにはコメントを

発動はつどう条件じょうけんしきは「しき」であるので、一般いっぱんてきに、人間にんげんにとってそのまま理解りかいしやすい形式けいしきではありません。 とくに、条件じょうけん複雑ふくざつになってくると、そのしき(1ぎょう)がなに目的もくてきとしたしきなのかを理解りかいすることはむずかしくなります。

ですから、発動はつどう条件じょうけんには、なるべくくわしくコメントをくようにしてください。 コメントは/* コメント */のように、「/*」と「*/」ではさんでください。

メモを活用かつようする

かく編集へんしゅうフィルターには、発動はつどう条件じょうけんのみではなく、公開こうかいフィルターであればだれでも、非公開ひこうかいフィルターであれば編集へんしゅうフィルター編集へんしゅうしゃ閲覧えつらんすることができる「メモ」があります。

このメモは通常つうじょう、フィルターの簡単かんたん説明せつめい変更へんこう要約ようやく保存ほぞん使つかわれており、おおむ以下いかのような形式けいしき推奨すいしょうされます。

このフィルターは、こういう条件じょうけんのもとでこういう動作どうさ実行じっこうします。
:[[Wikipedia:編集へんしゅうフィルター/一覧いちらん/フィルターめい]]

== 変更へんこう要約ようやく ==
変更へんこうしたことA -- 編集へんしゅうしゃめい変更へんこう)
: 変更へんこうしたことAa -- ウィキすけ 2011-01-01
: 変更へんこうしたことAb -- ウィキさん 2011-01-02
:: 変更へんこうしたことAba -- ウィキすけ 2011-02-01

変更へんこうしたことB -- ウィキくん 2011-01-15
: 変更へんこうしたことBa -- ウィキくん 2011-01-16

のフィルター編集へんしゅうしゃまたは利用りようしゃのためにも、メモは面倒臭めんどうくさがらず丁寧ていねい作成さくせいのこすようにしてください。

誤動作ごどうさふせ工夫くふうをする

以下いかのような構文こうぶんじょう工夫くふうをすることで、誤動作ごどうさふせぐことができる場合ばあいがあります。

追加ついか除去じょきょキーワード一致いっちけい編集へんしゅうフィルター

特定とくていのキーワードが追加ついか除去じょきょされた場合ばあい発動はつどうするフィルターをつく場合ばあい利用りようしゃがそのキーワードを追加ついか除去じょきょしていない場合ばあいには発動はつどうしないようにただしく設定せっていする必要ひつようがあります。具体ぐたいてきには、Aというキーワードに反応はんのうしたいフィルターがあった場合ばあい

contains_any(added_lines, A) /* よくないれいです! */

というようなしきにすると問題もんだい発生はっせいする場合ばあいがあります。なぜなら(added|removed)_lines変数へんすう名前なまえにlinesとかれているとおぎょう単位たんいなので、利用りようしゃがそのキーワードを追加ついか除去じょきょしていない場合ばあいにも、もとくだりにそのキーワードがふくまれていると発動はつどうしてしまうからです。その場合ばあいつぎのようにすればただしく設定せっていできます。

/* 追加ついかけい場合ばあい */
contains_any(added_lines, A) & !contains_any(removed_lines, A)
/* 除去じょきょけい場合ばあい */
contains_any(removed_lines, A) & !contains_any(added_lines, A)

具体ぐたいてきには、たとえばつぎのようにすることができます。

& contains_any(rmwhitespace(lcase(added_lines)),
    "ほげほげ",
    "ほげっほげ",
    "ふがふが"
)
& !contains_any(rmwhitespace(lcase(removed_lines)),
    "ほげほげ",
    "ほげっほげ",
    "ふがふが"
)
/* 除外じょがいワード */
& !contains_any(rmwhitespace(lcase(added_lines)),
    "ほげほげやま",
    "ふがふが高原こうげん"
)

編集へんしゅうフィルターは変数へんすう使用しようできるので、場合ばあいによっては、たとえば

& (
 keywords := "(ほげ(|っ)ほげ|ふがふが)";
 !(removed_lines regex keywords)
 &(  added_lines regex keywords)
)

とすれば、NGワードを1かいずつ記載きさいするだけで上記じょうき動作どうさをさせることができます(うえれいでは「ほげほげ」「ほげっほげ」「ふがふが」がふくまれているぶん投稿とうこうしようとしたら発動はつどうします)。

ただし、contains_any関数かんすう使つか場合ばあいは、配列はいれつ変数へんすう対応たいおうしているのはだい1引数ひきすう通常つうじょうadded_linesやremoved_linesなどをきます)だけで、だい2引数ひきすう以降いこう対応たいおうしていないので、たとえば、

keywords := ["A", "B", "C"];
contains_any(added_lines, keywords) & !contains_any(removed_lines, keywords) /* よくないれいです */

ようなコードをいても正常せいじょう動作どうさしませんので、複雑ふくざつ条件じょうけんけをする場合ばあいには、最初さいしょれいのようにだい2引数ひきすう以降いこう列挙れっきょするのがよいでしょう。

既存きそんのフィルターを真似まね

もしはじめてフィルターを作成さくせいまたは編集へんしゅうする場合ばあいちからをつける最良さいりょう方法ほうほう既存きそん運用うんようちゅうのフィルターを真似まねることです。

発動はつどう条件じょうけんはもちろん、メモや通知つうちぶんつくかたなど、のフィルターを参考さんこうにすることがなによりの近道ちかみちです。