拡張機能:SecurePoll

From mediawiki.org
This page is a translated version of the page Extension:SecurePoll and the translation is 100% complete.
MediaWiki 拡張機能マニュアル
OOjs UI icon advanced-invert.svg
SecurePoll
リリースの状態: 安定
SecurePoll.png
実装 特別ページ
説明 選挙、投票、アンケートができるようにします。
作者 Tim Starlingトーク
最新バージョン 3.0.0 (継続的な更新)
互換性ポリシー MediaWikiとともにリリースされるスナップショット。 master には後方互換性がありません。
MediaWiki 1.25+
データベースの変更 はい
テーブル securepoll_entity
securepoll_msgs
securepoll_properties
securepoll_elections
securepoll_questions
securepoll_options
securepoll_voters
securepoll_votes
securepoll_strike
securepoll_lists
securepoll_cookie_match
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
  • $wgSecurePollTempDir
  • $wgSecurePollUseLogging
  • $wgSecurePollKeepPrivateInfoDays
  • $wgSecurePollScript
  • $wgSecurePollGPGCommand
  • $wgSecurePollCreateWikiGroups
  • $wgSecurePollSingleTransferableVoteEnabled
  • $wgSecurePollGpgSignKey
  • $wgSecurePollUseNamespace
  • $wgSecurePollCreateRemoteScriptPath
  • $wgSecurePollCreateWikiGroupDir
  • $wgSecurePollShowErrorDetail
  • securepoll-create-poll
  • securepoll-view-voter-pii
translatewiki.net で翻訳を利用できる場合は、SecurePoll 拡張機能の翻訳にご協力ください

使用状況とバージョン マトリクスを確認してください。

問題点 未解決のタスク · バグを報告

SecurePoll拡張機能は、選挙、投票、アンケートのための特別ページ拡張機能です。 ウィキメディア財団理事会選挙や裁定委員会選挙で使用されています。また、ウィキメディア・ライセンス移行投票に使用された。

スクリーンショット

インストール

  • ダウンロードして、ファイルをextensions/フォルダー内のSecurePollという名前のディレクトリ内に配置します。
  • 以下のコードをLocalSettings.phpの末尾に追加します:
    wfLoadExtension( 'SecurePoll' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
  • Yes 完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。

また、新しい"securepoll-create-poll"利用者権限を特定の利用者グループに割り当てる必要があります。‎ この権限を管理者に割り当てるには、以下をLocalSettings.phpに追加してください。‎

$wgGroupPermissions['sysop']['securepoll-create-poll'] = true;

‎これにより、すべての管理者が投票を作成できますが、すべての管理者が特定の投票を管理‎(投票の編集、利用者情報の閲覧などを含む)できるわけではありません。 投票を作成または編集する際に、特定の投票の個別管理者を定義します。 electionadminグループのメンバーのみが投票を実施することができます。 このグループを作成するには、LocalSettings.phpに以下を追加します。

$wgGroupPermissions['electionadmin'] = [];

次に、Special:UserRightsを介して特定の利用者をelectionadminグループに割り当てる。 選挙管理者は投票者情報を閲覧できるため、このグループには信頼できる利用者のみを割り当てる必要があることに注意してください。 グループから外された場合は、いかなる選挙も管理できなくなります。

使用法

新規投票の作成

新規投票を作成するには、手動でXMLファイルを作成してそれをインポートする方法と、Special:SecurePollの投票作成インターフェースを使用する方法があります。

手動

投票を手動で作成するためには以下のことが必要です。

  1. XMLファイルを書く
  2. コマンドラインインターフェイスのimport.phpコマンドを使用してインポートします。

テストフォルダの中には、4つのサンプルファイルがあります。

  • 3way-test.xml
  • approval-test.xml
  • radio-range.xml
  • schulze-test.xml info

投票をインポートするには、cli フォルダから以下を実行します。

extensions/SecurePoll/cli$ php import.php ../test/3way-test.xml

dockerを使って投票をインポートするには、cliフォルダから以下を実行します。

docker-compose exec mediawiki php extensions/SecurePoll/cli/import.php extensions/SecurePoll/test/radio-range.xml

ウェブインタフェース経由

securepoll-create-pollの権限を持った利用者は、Special:SecurePollの一番下にあるリンクから新しい投票を作成することができます。

新しい投票を作成するには、作成フォームの必須フィールドに必要事項を入力します。 以下のフィールドには特に注意を払う必要があります。

  • 投票管理者に追加されるのは、electionadminグループの利用者だけです。もし$wgSecurePollUseLoggingtrueに置かれたとすると、ある投票にあたって、管理者が追加されるにせよ、放逐されるにせよ、いかなる時にもそのログが記録されます。ログはSpecial:SecurePollLogで見られます。
  • 暗号化された投票を作成するには、暗号化方式のラジオを選択します。 GnuPGを選択した場合、(公開)暗号化キーと(非公開)復号化キーを生成します。 暗号鍵は作成フォームに入力し、秘密鍵はオフラインの場所に保管してください(選挙終了後、集計の際に必要になります)。 詳細な例はhereをご覧ください。

さあ、Special:SecurePollを訪れて、皆さんの投票をご覧ください。

既存の投票を編集

投票を編集するのは、該当の投票の管理者でなければなりません。 Special:SecurePollから、編集したい投票の「編集」リンクをクリックします。

選挙が始まる前であれば、選挙に関することは何でも編集可能です。 選挙が開始されると、一部の項目は編集できなくなります。

有権者の編集

有権者を編集するのは、当該の投票の管理者である必要があります。 Special:SecurePollから、投票の「投票資格」のリンクをクリックします。

投票の翻訳

投票を翻訳するには、当該の投票の管理者である必要があります。 Special:SecurePollから、翻訳したい投票の「翻訳」リンクをクリックします。

投票者一覧の閲覧

投票が作成されたときに、透明性機能が無効にされていない限り、誰でも投票者一覧を閲覧できます。

特定の投票所の管理者は、投票者一覧を、重複する投票者を特定するのに役立つ非公開の情報 (IP アドレス、ユーザー エージェント情報、共有 Cookie など) と共に閲覧できます。 $wgSecurePollUseLoggingtrueを設定すると、管理者が個人情報を閲覧するたびにログが記録されます。 ログはSpecial:SecurePollLogで閲覧できます。

管理者は重複していると確信した票を無効にできます。

票の集計

票の集計は特定の投票の管理者のみに認められます。 From Special:SecurePollで、皆さんが票の集計をしたい投票への集計リンクがクリックできます。

もし投票がすでに集計されていたら、そのページに結果が表示されています。 もしなければ、または皆さんが再集計したいのであれば、新規集計を始めるためのフォームがあります。

  • 投票が暗号化されていなければ、集計ボタンをクリックしてください。
  • 投票が暗号化されている場合、より多くの情報を入力する必要があるかもしれません。例えば、GnuPGを使用した場合、(非公開の)復号化キーを入力し、集計ボタンをクリックします。暗号化された投票に多くの投票がある場合、集計に長い時間がかかることがあります。後で結果を確認する必要があるかもしれません。

次に、Special:SecurePollにアクセスすると、皆さんの投票がご覧いただけます。

(STV) 集計

STV(単記委譲式投票方式)の集計を有効にするには、以下の設定(configuration)値を、LocalSettings.php に追記してください。

$wgSecurePollSingleTransferableVoteEnabled = true;

単記委譲式投票方式(single transferable votes 略号STV)の詳細情報はこちらをご参照ください。

一般的なアルゴリズム(algorithm)の実装 (source).

クオータ(Quata)式投票とは + .000001. 最低得票数(Quota)は、議席を確保するための最小限の票数です。

1. コンピューターで最低得票数を計算してみましょう。
2. 第一希望で候補者に票を割り振ります。
3. 少なくとも最低得票数に達した候補者、全員を勝利者として発表します。
4. 勝者から希望者に余剰票を移します。
5. 3から4の手順を、もはや選ばれる新しい候補者がいなくなるまで繰り返します。(いくつかの制度の元では、初めのうち、票は以前の勝者と敗者を逆転させる可能性があります。これは選挙結果に影響するかもしれません)
もし、すべての議席が勝利者で埋まれば、過程は終了です。さもなければ:
6. ひとりまたはそれ以上の候補者が敗退することになります。通例、最下位の候補者か、残った候補者のなかで合計票が最低の得票数より少ない者になります。
7. 敗者の票を残った希望のある候補者に移します。
8. 3-7を議席が埋まるまで繰り返します。

今回使用するクォータ(手順1)は、ドループクォータ(情報)方式です。

floor( no. votes / (no. seats + 1) ) + 1

選ばれた、あるいは敗退した候補者から票を移動させる方法には、ミーク(Meek)方式を用います。 w:Counting_single_transferable_votes#Meek

集計作業(JobRunner)

  • 集計作業は、スケジュールしておいたジョブを通して処理されるでしょうManual:Job queue 。

この作業のために、  scheduled jobを作成するか、手作業で遂行するか、はっきりさせておいてください。

  • また、集計は、手動で集計スクリプトを実行することでも進めることができます。

集計を実行するには、下記のように、extensions/SecurePoll/cliにある cli フォルダから実行します。

extensions/SecurePoll/cli/tally.php

MediaWiki-Dockerを使って集計を実行するには、extensions/SecurePoll/cliに置かれた cli フォルダから、下記コマンドを動かします。

docker-compose exec mediawiki php extensions/SecurePoll/cli/tally.php

(STV)試験選挙を作り出す

  • 試験的な(STV)選挙は、extensions/SecurePoll/cliに置かれた cli フォルダから作り出すことができます。
  • 試験選挙を作り出すには、extensions/SecurePoll/cliに置かれたcli フォルダから下記コマンドを動かします。
extensions/SecurePoll/cli/generateTestElection.php
  • 試験的な(STV)選挙は集計のための足場を提供します。

説明文書

セキュアポル(SecurePoll)

SecurePoll(セキュアポル)に関する一般的な説明文書はwikitech:SecurePollをご参照ください。

SecurePoll の改善

SecurePoll 改善の概要はAnti-Harassment Tools/SecurePoll Improvementsをご参照ください。(仮題:嫌がらせ行為対策ツール/セキュアポル改善)

STV 集計結果を理解する

STV 集計結果に関する解説文書はAnti-Harassment Tools/SecurePoll Improvements/Understanding the STV resultをご参照ください。(仮題:嫌がらせ行為対策ツール/セキュアポルの改善/STV集計結果を理解する)