小さなイベントでもBotは役に立つ ― プログラミング初心者による Bot 活用記

Translate this post

はじめに

Wikipedia上のBotというと、大規模な自動編集やスパム対策、他言語版とのリンク整備といった「大がかりな仕組み」を思い浮かべる方が多いかもしれません。しかし実際には、数十件規模の小さなイベントの記録作業にも、Botはちょうどよい道具になります。

本稿では、「2026日韓ウィキメディアン交流イベント in 唐津」において、参加者の編集記録を Outreach Dashboardで正しく追跡するために、個人が一からBotを組み立てて運用するまでの過程を紹介します。技術的な失敗談も含めて共有することで、同じように「イベント運営でBotを使ってみたいが、何から始めればいいかわからない」というウィキメディアンの参考になればと思います。

なお、個人的には以前からBotを使ってイベント運営を効率化したいという思いがあり、それが Python (Botを動かすための言語) を学び始めた理由の一つでもありました(以前言及したような)。今回は、その学習の成果を実践に移す最初の機会にもなりました。

きっかけ:トークページでの一言

Bot導入の直接のきっかけは、あるイベントページのトークページで交わされたやり取りでした。Event名前空間とDashboardの連携について説明し、指定したカテゴリが付与された記事だけを集計対象にすることで、参加者数や加筆記事数といったイベントの成果を数値として残せることを述べたのに対し、あるウィキメディアンから次のような趣旨のコメントが寄せられました。

集計や報告が終わった後もイベント用のカテゴリを記事本体(標準名前空間)に残し続けるべきか、という指摘です。標準名前空間のコンテンツはウィキペディアやウィキメディア・プロジェクトと無関係な文脈でも再利用されうるため、エディタソンのためだけのカテゴリが本体のウィキテキストにいつまでも残るより、集計が終わったら取り除いてしまう方が望ましいのではないか、という趣旨でした。実際、英語版ウィキペディアでは、イベントの記録をトークページ側に残す例があることも紹介されました。

このコメントは、単に「カテゴリを消してほしい」という要望以上に、「イベントの記録は、記事本体ではなくトークページ側で管理する方が望ましいのではないか」という設計上の問いを投げかけるものでした。数十件の記事を手作業で確認しながらカテゴリを移し替えるのは現実的ではなかったため、ここでBotの活用を具体的に検討し始めることになりました。

Dashboardが記事を拾ってくれないという壁

イベントの編集追跡では、Outreach Dashboard (Programs & Events Dashboard) を利用しました。Dashboardの「ArticleScopedProgram」という仕組みでは、対象記事群を指定する方法として、カテゴリ・テンプレートなど、いくつかの手段を選べます。特に長期間にわたる編集月間ですと、参加者がイベントとは関連のない記事を編集することもあるため、カテゴリを付与した記事の編集履歴に限って追跡する方が、正確なデータを取ることができます。

しかし、[[Category:〇〇]] はそのカテゴリタグを書き込んだページ自身を分類するものであり、トークページに書いてもトークページ自体がそのカテゴリに入るだけで、対応する本体記事(標準名前空間)はカテゴリには収蔵されません。

トークページにカテゴリを貼るだけでは、Dashboardで追跡できないと思い込んでいました。ボリビアとの編集月間は、その認識のまま運営していました。

そこで、「記事範囲ベース(ArticleScopedProgram)を使うことが多い。トークページにカテゴリを貼り付けても、本体ページはトラッキングされないという認識であっている?」と問いかけることにしました。その結果がこのようなものでした(前略)。

ただし「テンプレート」方式なら事情が違う

興味深いことに、公式FAQには次のような記載があります。

組織者は、オンウィキのカテゴリ、テンプレート(トークページのテンプレートを含む)、PetScanクエリ、PagePileコレクションに基づいて記事群を追加できる

つまりカテゴリではなくテンプレートをスコープ方式として選んだ場合、トークページに貼ったテンプレートでも本体記事側がきちんとスコープに含まれることが公式に想定されています。おそらく多くのプロジェクトが「WikiProjectバナーはトークページに貼る」という慣習を持っているため、テンプレート方式だけは明示的にトークページ対応が組み込まれているのだと思われます。

要は、イベント用のカテゴリで利用して追跡できる場合は、記事本体のページにカテゴリを付与する必要がありましたが、テンプレートを利用する場合は、トークページに張り付けていても記事本体を追跡することが可能ではないか、という答えでした。テンプレートのみは対応している理由の考察も、納得です。日本語版ウィキペディアでは、例えばプロジェクト:イスラームが独自のテンプレートを作成して、記事のノートページに張り付けていますね。

テンプレートをイベントごとに新しく作成し、対象記事のトークページにそのテンプレートを貼り付ける方針に変更しようと決めました。今回のイベントに限れば、手作業でも不可能ではありません。しかし、過去のイベントも遡って対応を行うのは非現実的で手間もミスも多くなるため、この一連の作業を Bot 運用の練習も兼ねてbotで行うことにしました。

日本語版のBot方針をおさらいする

Botを動かす前に、まず日本語版ウィキペディアのBot関連方針を確認しました。要点は次の通りです。

  • Bot運用には6つの運用条件があり、承認申請の要否は編集件数によって区分される(目安として40件未満・40〜200件・200件以上)
  • 作業内容は種別A〜I、Zといった分類があり、今回のような「特定リストへのテンプレート・カテゴリ付与」は種別Cに相当する
  • 未承認アカウント(個人アカウントでの試験運用を含む)は、編集間隔を1分未満にしてはならない
  • ローカル方針とMeta:Bot policy(グローバル方針)との関係も踏まえる必要がある

今回のイベント関連の対象記事数は40件を超えない見込みだったため、承認申請を伴う専用Botアカウントではなく、個人アカウントでの試験運用として実施しました。 日本語版の方針では、40件未満の作業は個人アカウントによる試験運用の範囲内として認められており、今回のような小規模なイベント記録作業はまさにこの区分に収まります。将来的に対象記事数が増え、40件を超える規模の運用が必要になった場合は、専用のBotアカウントへ移行し、改めて承認手続きを進める計画です。

Botにやってもらったこと

今回作ったBotにお願いしたのは、次のような単純な作業です。

まず、対象のカテゴリが付いている記事の一覧を取得します。次に、その記事のトークページに、まだイベント用のテンプレートが貼られていなければ、テンプレートを貼り付けます。すでに貼られている記事は、二重に貼ってしまわないよう、その記事だけ何もせず飛ばします。そして、テンプレートがきちんと貼られたことを確認できた記事についてだけ、記事本体に残っていた元のイベント用カテゴリを取り除きます。

つまり、Botの役割は「トークページへの引っ越し作業を、記事一件ずつ手作業でやる代わりに、機械的に繰り返してもらう」というだけのことです。判断が難しいことをBotにさせているわけではなく、あらかじめ決めておいた単純なルールを、間違えずに何度も繰り返してもらっている、というイメージに近いです。

このスクリプト自体は、Claudeに相談しながら一緒に組み立ててもらいました。自分ひとりで一からコードを書けたわけではありませんが、以前からPythonの基礎を勉強していたおかげで、Claudeが書いてくれたコードを読んで、「ここでは記事の一覧を取っているんだな」「ここでテンプレートが既にあるかどうかを確認しているんだな」というように、大まかな流れを自分の目で追うことができました。中身をすべて理解しているとは言えませんが、少なくとも「明らかにおかしなことをしていないか」を自分でもある程度チェックできたのは、Botを安心して動かすうえで大きかったと思います。

安全のための工夫

初めてBotを動かすときに一番怖いのは、「間違った編集を、気づかないうちに大量にしてしまうこと」だと思います。そこで、今回のBotにはいくつか安全のための工夫を入れてもらいました。難しい仕組みではなく、考え方自体はシンプルです。

一つ目は、まず本番では保存せず、練習だけしてみるモードです。実際に記事を編集する前に、どのページにどんな変更が入る予定かだけを画面に表示して、保存はしない、という動かし方ができるようにしてあります。これで、本番前に「想定通りの記事だけが対象になっているか」を目で確認できます。

二つ目は、一件ごとに、保存する前に確認するという動かし方です。何十件かをまとめて自動で流すのではなく、最初のうちは一件処理するたびに内容を見せてもらい、問題なければ次に進む、という形にしました。慣れてきたら確認を省略してまとめて進めることもできますが、最初の数件は特に慎重に見るようにしていました。

三つ目は、編集と編集の間に、必ず一定の時間を空けるという工夫です。個人アカウントでの試験運用では、方針上、編集の間隔を短くしすぎてはいけないと決まっているため、その間隔を必ず守るようにコード側でも制御してもらいました。

四つ目は、テンプレートが本当に貼られたことを確認してから、元のカテゴリを消すという順番です。テンプレートを貼る作業とカテゴリを消す作業を同時にまとめて行うのではなく、まずテンプレートを貼り、それがちゃんと反映されたことをもう一度確認したうえで、初めてカテゴリを消す、という二段階に分けています。もし何らかの理由でテンプレートがうまく貼られていなければ、その記事のカテゴリは消さずに残しておく、という安全側の動きになっています。

こうした工夫のおかげで、「間違って記事を壊してしまうのでは」という不安をかなり減らすことができました。技術的な仕組みそのものよりも、「怪しいときは止まる」「一気に進めない」という考え方の方が、初めてBotを扱う人にとっては大事なのかもしれません。

まとめ

こうして振り返ってみると、今回のBot作りはAIの助けがなければとても実現できなかったと思います。以前なら、コードを一から自分で書けるようにならない限り、Botの導入自体を諦めていたはずです。ChatGPTやClaudeのようなAIが登場したことで、プログラミングを専門にしていない人でも、こうした自動化に挑戦できるようになったのは、間違いなく大きな変化です。

ただ、AIが書いてくれたコードをそのまま貼り付けて実行するだけでは、正直なところ怖いというのが率直な感想です。今回、簡単なテンプレート貼付けとカテゴリ除去という、それほど複雑ではない作業だったにもかかわらず、途中で何度もエラーに直面し、原因を調べては直す、という作業を繰り返しました。もしコードの中身がまったくわからないままだったら、エラーメッセージを見ても手も足も出なかったでしょうし、万が一おかしな挙動をしていても気づけなかったかもしれません。以前からPythonの基礎を少しでも勉強していたおかげで、Claudeが提案してくれたコードを自分の目で追い、「ここは想定通りに動いているか」を確認しながら進められたのは、大きな安心材料でした。AIに任せられる部分は増えても、最低限の基礎知識と、中身を自分の目で確かめる姿勢は、やはり必要なのだと感じています。

とはいえ、こうした定型作業をBotに任せられるようになった意味は大きいと思っています。イベントのたびに、記事一件ずつテンプレートを貼るという作業を手作業で繰り返していたら、それだけでかなりの時間を取られてしまいます。その時間を、参加者との対話や次のイベントの企画といった、Botには代わりのできない部分に回せるようになったのは、個人的にはとてもありがたい変化です。頭の中にはいろいろと楽にできそうなアイデアを持っていますので、それをうまく形にできたらと思います。

Can you help us translate this article?

In order for this article to reach as many people as possible we would like your help. Can you translate this article to get the message out?