Extension:StructuredDiscussions

From mediawiki.org
This page is a translated version of the page Extension:StructuredDiscussions and the translation is 100% complete.
MediaWiki 拡張機能マニュアル
OOjs UI icon advanced-invert.svg
StructuredDiscussions
リリースの状態: 安定
StructuredDiscussions generic screenshot.png
実装 ページの操作
説明 トークページに討議と共同作業のシステムを導入
作者 Brandon Harris, Erik Bernhardson, Matthias Mullie, Andrew Garrett, Benny Situ, Shahyar Ghobadpour, Matthew Flaschen, Roan Kattouw, Moriel Schottlender, Stephane Bisson, Kunal Mehta
最新バージョン Continuous updates
互換性の方針 MediaWikiとともにリリースされるスナップショット。 master には後方互換性がありません。
MediaWiki 1.34+
PHP 5.4+
データベースの変更 はい
Composer mediawiki/flow
ライセンス GNU 一般公衆利用許諾書 2.0 以降
ダウンロード
ヘルプ Help:Structured Discussions
Talk:Structured Discussions
  • $wgFlowExternalStore
  • $wgFlowMaxMentionCount
  • $wgFlowEnableOptInBetaFeature
  • $wgFlowHelpPage
  • $wgFlowReadOnly
  • $wgFlowParsoidTimeout
  • $wgFlowCoreActionWhitelist
  • $wgFlowAjaxTimeout
  • $wgFlowCluster
  • $wgFlowAbuseFilterEmergencyDisableThreshold
  • $wgFlowAbuseFilterEmergencyDisableAge
  • $wgFlowUseMemcache
  • $wgFlowCacheTime
  • $wgFlowDefaultWikiDb
  • $wgFlowServerCompileTemplates
  • $wgFlowAbuseFilterEmergencyDisableCount
  • $wgFlowContentFormat
  • $wgFlowMaxLimit
  • $wgFlowMaxThreadingDepth
  • $wgFlowParsoidForwardCookies
  • $wgFlowCacheVersion
  • $wgFlowParsoidHTTPProxy
  • $wgFlowParsoidPrefix
  • $wgFlowDefaultLimit
  • $wgFlowAbuseFilterGroup
  • $wgFlowParsoidURL
StructuredDiscussions 拡張機能の翻訳にご協力ください
問題点 未解決のタスク · バグを報告

StructuredDiscussions 拡張機能はトークページにおける討議と共同作業に使うシステムを提供します。 このページではインストールと管理の方法を紹介します。使い方のガイドはHelp:Structured Discussions をご参照ください。 この機能をご自分で試すには、サンドボックスのトークページが利用できます。

この拡張機能は以前はFlowとして知られており、いくつかの場所(Git リポジトリなど)での名前はまだそれを反映しています。

StructuredDiscussions 拡張機能の開発にはウィキメディア財団のCollaborationチームが当たりました。 バグ修正のため管理を続けていますが、2017年9月に「StructuredDiscussions」に改名されたほかは、実体のある開発は2015年以降なされていません。 将来的に開発を再開する可能性はあります。 この拡張機能の開発状況ならびに設計の概要について詳しく知るには、Structured Discussionsをご参照ください。

インストール

警告! 警告: ご注意=StructuredDiscussions は SQLite と互換性がありません。
  • 必要な依存関係のセットアップと構成がすべて完了していることを確認してください。
  • ダウンロードして、ファイルをextensions/フォルダー内のFlowという名前のディレクトリ内に配置します。
  • 以下のコードを LocalSettings.php の末尾に追加します:
    wfLoadExtension( 'Flow' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
  • Yes 完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。


Vagrant installation:

  • Vagrant を使用している場合は、vagrant roles enable flow --provisionでインストールしてください。
既知の問題に遭遇した場合は、トラブルシューティング節をご参照ください。

インストールが終了したら

ウェブサーバーの利用者権限で「update.php」を実行します (設定にもよりますが例えば www-data)。 さもなければ、/tmp/mw-UIDGeneratorUUID-UID-xx 一時ファイルが残ってしまい、MediaWiki には開くことができません (タスク T55791). Flow のボードを初めて開こうとした時、もし「必要な権限がありません」などのエラーが表示された場合は、必ずこれらのファイルを削除します。 さらに Flow の言及機能をビジュアル編集機能で有効にするため、update.phpは{{FlowMention}}を作成し (言及はアットマーク「@」もしくはツールバーのメニューに便利な自動入力インターフェースを提供して使えるようにします)。

これに加えてコマンドラインから「composer update --no-dev」を実行し、対象は MediaWiki をインストールしたフォルダで、この処理は git 経由でダウンロードしなかった場合も必要です。

注意点は、StructuredDiscussionsを有効もしくは無効にする手順をすべて実行することで、これには提示されたスクリプトをすべて実行することも含まれます。

依存関係

必須
  • Extension:Echo - 通知用 (例:投稿への返事)
  • 対象のキャッシュが必要です。その実行には memcach (汎用の分散型メモリキャッシュシステム) の使用が推奨されます。現在、Redis を使うと問題が発生するかもしれません。
  • Extension:ParserFunctions - 自動的にインストールされるテンプレートに対応 (例=#time)
  • $wgContentHandlerUseDB = true (1.35 で除去) Special:EnableStructuredDiscussions 対応に必要で、名前空間のコンテンツモデルを変更しても、同名の名前空間がすでにある場合の障害を予防します (StructuredDiscussionsへの入力もしくは出力のどちらでも)。
強く推奨
  • Parsoidは投稿をHTML形式($wgFlowContentFormat = 'html';)として保存し、パフォーマンスを改善。 WMF(ウィキメディア財団)のウィキの設定がこうなっているからで、現状ではもっともテストが行き届いた設定です。 MediaWiki-Vagrantを使用している場合、StructuredDiscussionsを有効にすると Parsoid が有効になり、形式を「html」に設定します。
省略可能

インストールの確認

StructuredDiscussions を有効にしたページのどれかを開き (#Configurationを参照)、話題の追加やその見出しの編集を試してください。

アップグレード

$wgFlowOccupyPages変数は StructuredDiscussions ボードを列挙してきましたが、タスク T105574の一環として除去されました。. バージョン 1.26 以降に更新する準備として、管理スクリプトを実行します。

php maintenance/populateContentModel.php --ns=all --table=page
php extensions/Flow/maintenance/FlowUpdateRevContentModelFromOccupyPages.php

1番目のスクリプトは MediaWiki 1.34. 以前にコアに導入されていました。 1.35 以降はもう必要がなくなりました。

設定

LocalSettings.phpで設定が必要な項目を説明します。

StructuredDiscussions を有効もしくは無効にするには

MediaWiki 1.35, 以前は、StructuredDiscussions を名前空間で有効または無効にするには、まず影響を受ける名前空間でpopulateContentModel.php を実行します (代わりにallで実行しても可)。 1.35 以降はもう必要がなくなりました。 例=NS_TALK (1) や NS_USER_TALK (3) で有効もしくは無効にする場合、以下のPHP 設定の状態なら次のようになります。

mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=revision
mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=archive
mwscript populateContentModel.php --wiki=somewiki --ns=1 --table=page

mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=revision
mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=archive
mwscript populateContentModel.php --wiki=somewiki --ns=3 --table=page

mwscript が未設定の場合は、mwscript populateContentModel.phpphp maintenance/populateContentModel.phpと入れ替えます。

上記の後に、特定の名前空間で$wgNamespaceContentModels [namespace]を設定します。 例:

  // These lines enable StructuredDiscussions on the "Talk" and "User talk" namespaces
  // All the NS_* constants here: https://www.mediawiki.org/wiki/Manual:Namespace_constants
  
  $wgNamespaceContentModels[NS_TALK] = 'flow-board';
  $wgNamespaceContentModels[NS_USER_TALK] = 'flow-board';

グローバルな設定変更してはダメです ($wgNamespaceContentModels =)。

単一ページで有効にする場合は、Special:EnableStructuredDiscussionsを利用します。 これにはフローボード作成権限 flow-create-board が必要で、どんなグループでも権限を付与されます (利用者権限のグループ権限変更のページ Manual:User rights#Changing group permissions をご参照ください)。

  $wgGroupPermissions['somegroup']['flow-create-board'] = true;

ご利用のwikiのすべてのページで StructuredDiscussions を無効にする方法はExtension:StructuredDiscussions/Turning off all StructuredDiscussions をご参照ください。

Parsoid 設定

StructuredDiscussions は Parsoid または RESTBase サービスに接続するため、バーチャル REST サービスを使います。 ご利用のウィキでVisualEditor 拡張機能を読み込んだ場合、これの設定はすでに済んでいる可能性があります。 LocalSettings.phpで以下を探します。

$wgVirtualRestConfig['modules']['parsoid'] = array(
  // URL to the Parsoid instance
  // Use port 8142 if you use the Debian package
  'url' => 'http://localhost:8000',
  // Parsoid "domain", see below (optional)
  'domain' => 'localhost',
  // Parsoid "prefix", see below (optional)
  'prefix' => 'localhost',
);

単体のParsoid は複数のウィキを取り扱います。 Parsoid の domain 設定はお使いのウィキの設定を Parsoid に指定します。 既定では$wgCanonicalServerが命名するホスト名に設定されるものの、任意の文字列を選ぶこともできます。 旧版の Parsoid でも固有の「接頭辞」を用いてこのサーバを特定します。ここにそれをリストする必要があるかもしれません。

Parsoid をあらかじめ適合するように設定する必要があります。Parsoid のlocalsettings.js の1行を使い次のように記述します。

parsoidConfig.setMwApi({ uri: 'http://path/to/my/wiki/api.php', domain: 'localhost', prefix: 'localhost' });

ここでも Parsoid 設定で「domain」(ドメイン)属性はオプションです。指定しないと既定でuri属性で採用するホスト名を採用します。 「prefix」(接頭辞)属性も除去可能ですが、旧版の Parsoid を利用する場合は例外です。 Parsoid の localsettings.js に記述された domainprefix がご利用のウィキの LocalSettings.php と一致することを確認します。

詳細はParsoid/Setup#Configuration をご参照ください。

「入れ子の関数の最大レベル「100」に達したため、中止します」

このエラーが表示された場合、おそらく /etc/php5/apache2/php.ini.[1] において xdebug.max_nesting_level = 200の設定が必要です

「例外を発見:CASがXyz で実行しない」状態

StructuredDiscussions は $cache->cas()CACHE_ACCEL (APCBagOStuff)などのキャッシュした実行でCASを伴わないものを実施します。 変更し、たとえばmemcachedをインストールし$wgMainCacheType = CACHE_MEMCACHED;を設定するなど、違うキャッシュを使う必要があるかもしれません。

権限

StructuredDiscussionsで書き込みの作業をする利用者は、コアのedit権限が必要です。 この権限を'user'グループ (ログイン状態で) にのみ付与するウィキがたくさんあります。

StructuredDiscussions が定義する動作は多く、たとえばedit-postdelete-topicがあります (詳細な一覧はFlowActions.phpをご参照ください)。 投稿が皆さん自身のものかどうか、変更したかどうかにより、権限が異なります。 一例として、既定では利用者は自分自身の投稿の編集を認められますが、他者の投稿を改変できるのはflow-edit-post権限を付与された'sysop'グループの利用者のみです。 Flow に関して、どのグループにどの権限を付与するか、動作ごとに必要な権限の選定ができます。権限の概要の詳細は Manual:利用者権限 をご参照ください。

既存のページの移行

既存の単一ページを移行するには、Special:EnableStructuredDiscussionsを使います。 すると自動的に単一ページの過去ログ化 (それによって StructuredDiscussions を有効にする) 扱いをします。

maintenance/convertNamespaceFromWikitext.php というスクリプトはこの名前空間の変換と有効化を自動化します。詳細はFlow/Converting talk pages参照。 これはどちらかというと WMF固有であり、実行前にご利用のデータベースをまずバックアップし、操作の仕方を調べてください。 別のmaintenance/convertAllLqtPages.phpというスクリプトはLiquidThreadsページとスレッドをFlowのボードと話題に変換します。注意事項はFlow/Converting LiquidThreadsを参照。

Flow はTopic:名前空間を追加します。Extension default namespaces#flowを参照。 これと衝突する既存のページの有無は、Special:PrefixIndex/Topic:で確認してください。見つかった場合は管理スクリプトmaintenance/namespaceDupes.phpを走らせます。

設定

Flow.php での構成設定
パラメーター 既定 コメント
$wgFlowHelpPage //www.mediawiki.org/wiki/Special:MyLanguage/Help:Extension:Flow Flow 通知システムに関する詳細情報の URL
$wgFlowCluster false $wgFlowCluster はどの外部 DB サーバを使うべきか定義します。

設定を false にすると、現在のデータベース (wfGetDB) を使ってデータの読み出し/書き込みを実行します。 外部データベース上に StructuredDiscussions データを保存する場合、この変数の値を $wgExternalServers に設定し、当該の外部接続を示します。

$wgFlowDefaultWikiDb false StructuredDiscussions メタデータ利用に使うデータベース。ウィキデータベースを使用する際は false に設定。

StructuredDiscussions データベースを利用するウィキの件数に上限は設けず、共有できるものとします。 実際のデータベース名はメッセージ単位で内部のテーブルに保存します。メッセージを投稿後にデータベース名を変更すると、過去のスレッドにアクセス不能となります。

$wgFlowExternalStore false コンテンツの保存に使用。

False に設定してコンテンツを StructuredDiscussions データベースに保存。 あるいは ExternalStore に使用するクラスタ単体もしくはクラスタの一覧。 提示したクラスタ類は $wgExternalStores に実在する必要があります。 HA には複数のクラスタが必要で、メンテナンスあるいはその他の理由により、マスターのどれかがダウンしても挿入を継続するためです。

$wgFlowExternalStore = array( 'DB://cluster24', 'DB://cluster25' );

$wgFlowContentFormat html 既定では StructuredDiscussions に保存するコンテンツは HTML 形式です。

しかしながら、これには Parsoid が既に導入済みで稼働していることが条件となり、基本のエディタに渡すため HTML からウィキテキストに変換する必要があるからです。 (つまりビジュアルエディタ VisualEditor を使う場合は Parsoid が必須であり、ビジュアルエディタをサポートするウィキでは今すぐ、これを HTML 形式に設定し直してください)

$wgFlowParsoidURL が null の場合、$wgFlowContentFormat はウィキテキストに切り替える必要があります。

'wikitext' 書式でさえ、将来的には非推奨になる可能性があります。

$wgFlowParsoidURL null
警告 警告: 廃止済み。$wgVirtualRestConfig['modules']['parsoid']['url'] に切り替えてください。

StructuredDiscussions Parsoid 構成

留意点として、この構成設定はビジュアルエディタ自体の Parsoid 構成とは別のものである点です。

$wgFlowParsoidPrefix null
警告 警告: 廃止済み。$wgVirtualRestConfig['modules']['parsoid']['prefix'] に切り替えてください。

Flow Parsoid 構成設定

留意点として、この構成設定はビジュアルエディタ自体の Parsoid 構成とは別のものである点です。

$wgFlowParsoidTimeout null
警告 警告: 廃止済み。$wgVirtualRestConfig['modules']['parsoid']['timeout'] に切り替えてください。

Flow Parsoid 構成設定

留意点として、この構成設定はビジュアルエディタ自体の Parsoid 構成とは別のものである点です。

$wgFlowParsoidForwardCookies false
警告 警告: 廃止済み。$wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] に切り替えてください。

利用者のクッキーを転送:Parsoid に送るヘッダ。非公開ウィキ (ログインして閲覧) で必要。

当該のウィキが公開である場合 (つまり $wgGroupPermissions['*']['read'] は true) には、この構成設定の編集は無視されます。

この機能には、ロックしないセッションの保存が必要です。 この既定のセッション保存はおそらく無効であり、この機能を使おうとした時に行き詰まりが発生します。 行き詰まりが発生他場合は、$wgSessionsInObjectCache を有効にしてください。

警告: これを有効にするのは非公開ウィキに限定し、HTTP経由でCookieヘッダーをParsoidに送信する場合のセキュリティへの影響を理解している場合のみにしてください。 セキュリティー上の問題があり、この設定を有効にする場合は必ず $wgVirtualRestConfig['modules']['parsoid']['forwardCookies'] をローカルのホストに指定します。

$wgFlowDefaultWorkflow discussion StructuredDiscussions を開いて記事を閲覧する時に表示までのワークフローを指定しない場合は、このワークフローを採用
$wgFlowDefaultLimit 10 表示ページ数の上限
$wgFlowMaxLimit 100 ページングの制限
$wgFlowMaxMentionCount 100 コメント1件で通知を送信できる利用者数の上限
$wgFlowMaxThreadingDepth 8 スレッドの最大の深さ
$wgFlowEditorList array( 'visualeditor', 'wikitext' ); 使用するエディタの一覧、優先順。 サポートしていないエディタは一覧に載りません。
$wgFlowUseMemcache true これをfalseに設定し memcache* すべての利用を無効にします。(*=訳注:汎用の分散型メモリキャッシュシステム)

キャッシュを再び有効にするのはまだです。データベースとの同期が切れてしまいます。 キャッシュの同期を復活させる正規の手順はまだないため、現状では索引のバージョン単位で増加分をとりこみます(Flow 担当者に依頼してください)。

これでパフォーマンスの減速はあっても止まることはありません。 発生するクエリはキャッシュを満たすために用いるものであって、リクエストに応えるために必要なクエリではありません。 A bit of a refactor in ObjectManager::findMulti のリファクタの一部は索引抜きでクエリが実行でき、同時にcontainer.phpを調整してこれがtrueの時に限定して索引を対象に含めると、これをパフォーマンスが適度に高いオプションにするほとんどの方法が得られます。

$wgFlowCacheTime 60 * 60 * 24 * 3 StructuredDiscussions データを memcache にキャッシュする既定時間

この値はキャッシュのヒット・ミス率と対応させて調整が可能で、メモリの使用率、データベースのクエリ、反応時間のバランス (トレードオフ) を実現します。 初期の既定値3日とは StructuredDiscussions が過去3日間に呼び出しのあったデータモデル全件を memcache に保持しようとすることです。

$wgFlowCacheVersion 4.7 一連のバージョンをキャッシュキーに添付します。

キャッシュのフォーマットもしくはロジックが変更された場合は、これを不採用にします。 StructuredDiscussions とはウィキ間データベースであり、バージョン違いの Flow コードを走らせるウィキ群がアクセスします。ウィキメディア財団は時に応じてこれを wmf-config/CommonSettings.php でグローバルに上書きすることがあります。

$wgFlowAbuseFilterGroup 'flow' Custom group name for AbuseFilter

Acceptable values:

  • a specific value for flow-specific filters
  • 'default' to use core filters; make sure they are compatible with both core and StructuredDiscussions (e.g. StructuredDiscussions has no 'summary' variable to test on)
  • false to not use AbuseFilter
$wgFlowAbuseFilterEmergencyDisableThreshold 0.10 AbuseFilter emergency disable values for StructuredDiscussions
$wgFlowAbuseFilterEmergencyDisableCount 50 AbuseFilter emergency disable values for StructuredDiscussions
$wgFlowAbuseFilterEmergencyDisableAge 86400 // One day. AbuseFilter emergency disable values for StructuredDiscussions
$wgFlowAjaxTimeout 30 Timeout for StructuredDiscussions's AJAX requests (only affects ones that go through flow-api.js), in seconds
$wgFlowCoreActionWhitelist array( 'info', 'protect', 'unprotect', 'unwatch', 'watch', 'history', 'wikilove', 'move', 'delete' ); Actions that must pass through to MediaWiki on StructuredDiscussions-enabled pages
$wgFlowServerCompileTemplates false When set to true StructuredDiscussions will compile templates into their intermediate forms on every run. When set to false Flow will use the versions already written to disk. Production should always have this set to false.
$wgFlowEventLogging false Enable/disable event logging
$wgFlowSearchServers, $wgFlowSearchConnectionAttempts, $wgFlowSearchBannedPlugins, $wgFlowSearchOptimizeIndexForExperimentalHighlighter, $wgFlowSearchMaxShardsPerNode, $wgFlowSearchRefreshInterval, $wgFlowSearchMaintenanceTimeout, $wgFlowSearchReplicas, $wgFlowSearchShardCount, $wgFlowSearchCacheWarmers, $wgFlowSearchMergeSettings, $wgFlowSearchIndexAllocation, $wgFlowSearchEnabled N/A These former settings were removed because the code was unmaintained and broken. (You can look at the previous documentation if you want.) There is currently no code for supporting search in StructuredDiscussions.


システムメッセージ

StructuredDiscussions のボードでソース編集 オプションを使うと、ヘルプ文の"ウィキテキストはマークアップを使用、また、いつでも結果をプレビューできます。"を表示できます。 「マークアップを使用」の部分のリンク先はシステムメッセージMediaWiki:Flow-wikitext-editor-help-uses-wikitextを介し、MediaWiki.orgへのウィキ間リンクを利用します。

場合によっては、このウィキ間リンクはMediaWiki.orgでHelp:Formatting を指す代わりに、ホスト先のウィキで(通常は存在しない)Help:Formattingページを指します。

その修正はMediaWiki:Flow-wikitext-editor-help-uses-wikitextのウィキ間リンクを外部リンクとして

[https://www.mediawiki.org/wiki/Help:Formatting uses markup].

のように書き換えます。

トラブルシューティング

Flow が思ったように使えませんか? 問題の原因により、修正方法が変わります。

Custom-Namespace 宣言の順序が間違っている

Flow 宣言はカスタムの名前空間名の後に 記述しなければなりません。 正しい順序:

define("NS_PORTAL_TALK", 3005); 
$wgExtraNamespaces[NS_PORTAL_TALK] = "Portal_Talk"; 
$wgNamespaceContentModels[NS_PORTAL_TALK] = 'flow-board';

間違ったネイティブの定数

メインの名前空間ではNS_TALKと定義されるトークページの定数は、NS_MAIN_TALKではありません

正しい宣言とは:

$wgNamespaceContentModels[NS_TALK] = 'flow-board';

登録のない拡張機能の定数

Extension:Page Forms 名前空間の定数はPF_NS_FORM_TALK になる見込みです。 ただしその定数は Flow 宣言では無効です -- そこで実際の数字を使う必要があります: 107。 するとその作用は次のとおりです。

$wgNamespaceContentModels[107] = 'flow-board';

筆者には、Flow に関してPage_Formsが定数を正しく登録しない理由、あるいは拡張機能 すべてで (定数の代わりに) 数字を使うべきか原因は不明です。 他の名前空間用の定数の一覧をご参照ください。

古い名残

特定の名前区間のトークページすべてできちんと Flow が働くようになり、その名前空間であるページ のみ例外だったとして、トークページにジャンクの名残があるのかもしれません(見た目には何もないように見えても。) 次の処理をします。

  1. Flow を読み込まないトークページを閲覧します。たとえば: Portal_Talk:Welcome
  2. 削除タブを使い、トークページを削除します。
  3. そのトークページが付いたコンテンツのページを開きます。例: Portal:Welcome
  4. 「Discuss」をクリックします。
  5. すると Flow が有効になります。

アーキテクチャ

Flow/Architecture を参照してください。

スパム

FlowFlow のスパム対策詳細は Extension:StructuredDiscussions/Spam をご参照ください。

モデレーション

Flowにおけるモデレーションの詳細については、Extension:StructuredDiscussions/Moderation を参照してください。

エクスポートとインポート

Flow のデータをエクスポートする管理スクリプトがあり、Manual:DumpBackup.phpに類似します。

php extensions/Flow/maintenance/dumpBackup.php

タスク T114703 - インポートのヒントをいくつか示します。