Extension:StructuredDiscussions

This page is a translated version of the page Extension:StructuredDiscussions and the translation is 97% complete.
MediaWiki 拡張機能マニュアル
StructuredDiscussions
リリースの状態: 保守されていない
実装 ページの操作
説明 トークページに討議と共同作業のシステムを導入
作者 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
  • $wgFlowAbuseFilterEmergencyDisableThreshold
  • $wgFlowCoreActionWhitelist
  • $wgFlowAjaxTimeout
  • $wgFlowCluster
  • $wgFlowNotificationTruncateLength
  • $wgFlowAbuseFilterEmergencyDisableAge
  • $wgFlowParsoidTimeout
  • $wgFlowCacheTime
  • $wgFlowDefaultWikiDb
  • $wgFlowServerCompileTemplates
  • $wgFlowAbuseFilterEmergencyDisableCount
  • $wgFlowContentFormat
  • $wgFlowMaxLimit
  • $wgFlowMaxThreadingDepth
  • $wgFlowParsoidForwardCookies
  • $wgFlowCacheVersion
  • $wgFlowParsoidHTTPProxy
  • $wgFlowParsoidPrefix
  • $wgFlowDefaultLimit
  • $wgFlowAbuseFilterGroup
  • $wgFlowParsoidURL
  • flow-hide
  • flow-lock
  • flow-delete
  • flow-suppress
  • flow-edit-post
  • flow-edit-title
  • flow-create-board
Quarterly downloads 55 (Ranked 89th)
StructuredDiscussions 拡張機能の翻訳にご協力ください
問題点 未解決のタスク · バグを報告

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

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

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

インストール

  警告: StructuredDiscussionsはSQLiteと互換性がないことにご注意ください。
  • 必要な依存関係のセットアップと構成がすべて完了していることを確認してください。
  • あなたのウィキのrest.php を指すように$wgVirtualRestConfig['modules']['parsoid']['url']を設定してください。
  • If you have problems in MediaWiki 1.40, you should make some changes to remove virtualrestconfig of restbase in Flow. See task T337223.
  • ダウンロードして、ファイルをextensions/フォルダー内のFlowという名前のディレクトリ内に配置します。
    開発者とコード寄稿者は、上記の代わりに以下を使用してGitからインストールします:cd extensions/
    git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/Flow
  • Gitでのインストールの場合のみ、PHPの依存関係をインストールするためComposerを実行します。 (合併症の可能性についてはタスク T173141を参照。)
  • 以下のコードを LocalSettings.php ファイルの末尾に追加します:
    wfLoadExtension( 'Flow' );
    
  • 更新スクリプトを実行します。このスクリプトは、この拡張機能が必要とするデータベーステーブルを自動的に作成します。
  •   完了 – ウィキの「Special:Version」に移動して、拡張機能が正しくインストールされたことを確認します。


Vagrantでのインストール:

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

インストール後

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

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

依存関係

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

インストールの確認

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

設定

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';
  $wgNamespacesWithSubpages[NS_TALK] = true;
  $wgNamespaceContentModels[NS_USER_TALK] = 'flow-board';
  $wgNamespacesWithSubpages[NS_USER_TALK] = true;

グローバルな設定変更してはダメです ($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 の localsettings.js で以下のような行を使って、Parsoid が適合するように設定しておく必要があります:

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'] をローカルのホストに指定します。

$wgFlowDefaultLimit 10 表示ページ数の上限
$wgFlowMaxLimit 100 ページングの制限
$wgFlowMaxMentionCount 100 コメント1件で通知を送信できる利用者数の上限
$wgFlowMaxThreadingDepth 8 スレッドの最大の深さ
$wgFlowCacheTime 60 * 60 * 24 * 3 StructuredDiscussions データを memcache にキャッシュする既定時間

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

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

キャッシュのフォーマットもしくはロジックが変更された場合は、これを不採用にします。 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.
$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 が思ったように使えませんか? 問題の原因により、修正方法が変わります。

正しく設定されていないparsoid/VEが機能しない

Conversion from 'html' to 'wikitext' was requested, but core's Parser only supports 'wikitext' to 'html' conversion のようなメッセージが表示された場合は、parsoid が正しく設定されていない可能性があります。 ディスカッションでビジュアルエディタを使用するには、この拡張機能は正しく設定されたparsoidが必要です。

以下に従ってください:

  1. parsoidが正しくインストールされていることを確認してください。
  2. このバグが解決されていない場合、このパッチをStructuredDiscussionsコードベースに適用してください。

問題が解決しない場合は、この議論が役に立つかもしれません。

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

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

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

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

メインの名前空間では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 が有効になります。

Parsoid not working in StructuredDiscussions (Flow)

To get Parsoid to work with StructuredDiscussions (Flow):

  1. In LocalSettings.php, explicitely load Parsoid like so: wfLoadExtension( 'Parsoid', "vendor/wikimedia/parsoid/extension.json" );
  2. Apply the following patch.

For more details, see Topic:X8mv19b4va26u8tz.

アーキテクチャ

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

スパム

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

モデレーション

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

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

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

php extensions/Flow/maintenance/dumpBackup.php

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