VK All in One Expansion Unit がガイドライン違反か

WordPress

VK All in One Expansion Unit はウェブサイトに必要な一通りの機能を提供する統合プラグインで 2019/6/1 現在で50000以上のアクティブのあるプラグインです。

非常に有用なプラグインですが、WordPressのガイドライン違反の疑いがあります。

Including your own update checker

plugin update checker のようなライブラリを使用して WordPress.org 以外からホスティングすることはガイドラインで明確に禁止されています。

Detailed Plugin Guidelines | Plugin Developer Handbook | WordPress Developer Resources
Last Updated: November 14, 2019 Adding a Block Only plugin? Please read the Block Specific Guidelines The Plugin…

実際にこのプラグインと全く同じように、オプションでテストバージョンをチェックするかどうかを用意し、ONの場合のみ外部のテストバージョンをチェックする機能を持ったプラグインが登録時のレビューでリジェクトされました。

また、このルールは昔から運用されているようです。

現在もレビューを行っている方が禁止行為だと明言しています。

このプラグインが登録されたのは 2015/6/28 以降なので、この時からルールは存在し実際に運用されているようです。

サードパーティのシステムによる実行可能なコードの送信の禁止

このガイドラインにも抵触しています。

Detailed Plugin Guidelines | Plugin Developer Handbook | WordPress Developer Resources
Last Updated: November 14, 2019 Adding a Block Only plugin? Please read the Block Specific Guidelines The Plugin…

Externally loading code from documented services is permitted, however all communication must be made as securely as possible. Executing outside code within a plugin when not acting as a service is not allowed, for example:

・Serving updates or otherwise installing plugins, themes, or add-ons from servers other than WordPress.org’s

https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/

擁護

目次部分だけ読めば問題ない

確かにその目次部分だけ読めばRC版などは該当しないようにも読み取れます。

ただし内容まで目を通しても同じことが言えるのでしょうか。

Distributing code via alternate methods, while not keeping the code hosted here up to date, may result in a plugin being removed.

https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/

WordPress.org のコードを最新にせずに代わりの方法でコードを配布した場合、プラグインは削除されると書いてあります。

また前述の通り下記のコードはダメだとレビュアーが明言しています。

require plugin_dir_path( __FILE__ ) . 'plugin-update-checker/plugin-update-checker.php';

にもかかわらずこのプラグインの下記のコードは許されるのでしょうか?

2019/6/5 追記

“stable version” というのを正確に理解していませんでしたが、 trunk の readme に記載された Stable tag のタグのバージョンを指すようです。

指摘した時点で trunk の readme には 9.0.5 が指定してあり、そのバージョンではすでに update-checker が埋め込まれていました。

したがって正確には目次部分だけでも抵触していたものと考えられます。

後から追加されたルール

前述の通り昔からこのルールは存在し実際に運用されています。

直接聞くのがよいですがレビュアーにメールするとわかる通り彼らは非常に多忙です。
すでにこの話題は Slack で何度もされており、そのたびにNoと言われています。
まずは Slack の履歴を検索するとよいと思います。

しかし万が一この件が許された場合、「VK All in One Expansion Unit」はいいけど新しく登録されるプラグインはダメだということになるでしょう。

更新に対するレビューはない

WordPressの公式ディレクトリは登録時にレビューされますが、更新時には特に何もありません。

今回のはその特徴を利用した行為であり、極端な場合後からウイルスなどが注入される恐れもあります。

数が膨大であるため更新までレビューするのは不可能なので、この辺りは開発者の良識に頼らざるを得ません。

今回のようなガイドラインに抵触する行為が蔓延すると、後から何してもよいのだという考えが広まる危険があります。

Jetpack のガイドライン違反と同じ構図になるか

Jetpackのガイドライン違反疑惑でプラグインのあり方についての議論が沸騰中 - ニュース - Capital P - WordPressメディア
WPTavernが報じるところによると、現在Automatticの提供するプラグインJetpackが「ガイドライン違反なのでは?」ということで批判を寄せられているようだ。ざっくり要約すると…… WordPressのプラグ

Jetpack でもガイドライン違反疑惑がありました。

この件ではガイドライン違反があっても大手は消されにくいということが明確になりました。

今回の件に関しては開発者が自ら違反に気づいて修正するようにプラグインのサポートページにのみ報告しています。

しかし違反行為が無視して続けられる場合は公式に削除依頼を出すほかありません。

もしそれで削除されない場合はJetpackの件よりも深刻で、大手が消されにくいというだけでなく、大手のみで使用できる機能があるという差別的な行為が行われることが明らかになるでしょう。

2019/6/2 14:30 追記

コミュニティへの投稿を無視しての配信が長く続いているため、レビュアーに報告し対応していただきました。

悪意ではなくユーザのサイトで問題が起こらないように有志のみに対してテストバージョンを配布する動機は理解できますがガイドラインの範囲内で行う必要があります。

非常に有用なプラグインですので、修正され元の正常な状態に戻ることを願います。

停止されたことは残念ですが、アクティブ数に関わらずルールに従って対応がされることが確認できたことは良かったと思います。

2019/6/2 23:50 追記

指摘事項に関して対応していただきました。

[ 再公開済 ] VK All in One Expansion Unit が 公式ディレクトリで公開停止となっている件について
6月3日早朝6時頃に再公開された事を確認いたしました。2時頃にレビュワーの方からのメールが届いていたので、実際にはその時点で再公開処理いただけたものだと思います。VK All in One Expansion Unit が 6月2日現在公式ディレクトリにて公開停止となっております。原因と経緯についてご説明いたします。発...

このガイドラインが存在する理由として独自のインストール機能をボットネットとして悪用されることを防ぐためというのが挙げられています。

独自の更新システムは

  • ダウンロードするファイルを指定するjsonファイル
  • ダウンロードするファイル自体

が書き換えられる可能性があり、バージョン管理されている WordPress.org と比べて危険性が高いと考えられ、脆弱性の問題ではないという認識は甘いと考えています。

2019/6/3 1:50 追記

開発者への報告

本来開発者に報告する必要はないですが、今回は将来的に使用する選択肢に入っていたプラグインだったため先にプラグインのサポートページから開発者に向けた報告を投稿しました。

ただ、公式ディレクトリのサポートへの投稿に対応するため自分のプラグインはサブスクライブしているものだと思いましたが、そこまでしない場合もあるようです。

少なくとも最初の投稿ではメンションを付けた投稿にしたいと思います。

限られた有志にのみテストバージョンを配布したい場合

結局この方法に関して解決しない限り、将来的に同様のことは発生するでしょう。

登録時のレビューの時点では利用者も少なくバグがあっても影響は少ないですが、時間がたち使用する人が増えた場合にバグによる影響は大きくなっていきます。

GPLなので単純なバグなどで問題が発生しても自己責任で済ませられると思いますが、今回のような使用する人のことをすごく考える開発者の場合、先に有志だけでテストを行って報告を受けたいと思うのは自然なことだと思います。

公式でそのような仕組みがあればよいのですが、少し調べた感じだとなさそうです。

Jetpackを使用していないので詳細はわからないですが、Jetpackは独自にテーマをインストールする機能を実装しているようです。

Jetpackを使うとWordPress.comのテーマが利用可能に - ニュース - Capital P - WordPressメディア
Automatticの提供するJetpackプラグインを利用されている方は多いだろうが、先日WordPress.comのテーマをインストールする機能が追加された。”Say Hello To 165 Beaut

レビュアーによると外部に用意したサービスにログインさせてサイトを認証してからであればインストールを行ってもよいみたいです。

Clarification of Guideline 8 – Executable Code and Installs
Since Jetpack announced it installs themes, a number of people have asked if this is a violation of the 8th guideline: The plugin may not send executable code v...

しかし、少しテストするためにこのような仕組みを用意するのは現実的ではありません。

実際Jetpackはテストするために仕組みを用意しているわけではなく、あくまでもビジネスのためなので用意できていると考えています。

テスト版は別途作成

現実的な方法として、公式ディレクトリに登録しているプラグインとは別にテスト版プラグインを用意すればよいかもしれません。

  • 公式ディレクトリに登録しているプラグインには、管理画面に『テスト版があるというお知らせとダウンロードできるページへのリンクを表示する機能』を用意しておく
  • 『外部サーバにあるテスト版をダウンロードする機能』と『有効化時に公式版を無効化する機能』を追加しただけのテスト版プラグインを自分のサイトにおいておく
Detailed Plugin Guidelines | Plugin Developer Handbook | WordPress Developer Resources
Last Updated: November 14, 2019 Adding a Block Only plugin? Please read the Block Specific Guidelines The Plugin…

勝手な解釈ですが、この3のルールは公式ディレクトリに登録したプラグインとは別に存在する安定板以外のプラグインを示唆しているようにも感じ、有志によるテストが安定したら公式ディレクトリに安定板として登録し通常ユーザはそれを使用するという流れが想像できます。

今後導入する際に確認したいと思います。

2019/6/4 16:50 追記

Slack でのやり取りから

SVNの trunk と tags を利用することで開発バージョンを配布できるようです。

  1. 安定版として tags にタグを作成し、trunk の readme の Stable tag にそのタグを書いておく ⇒ 通常のユーザはこの安定版をダウンロード
  2. trunk で開発版を管理 ⇒ 『Development Version』としてダウンロードが可能で有志にはこれを使用してテストしてもらう
  3. テストが完了しリリースする際は1.に戻る

trunk で開発版を管理することで開発バージョンをダウンロードしてもらえるとのことですが、開発版(trunk)を更新した場合に開発版を使用している人にどのように更新させるのかは不明です。

開発版なので ガイドライン#3 に関しては WordPress.org 以外からの配信も許されるようになる気もしますが、ガイドライン#8 に関しては安定板や開発版に関する言及はないため許されるのかはわかりません。

もし許されるのであれば開発版に update-chaker を組み込むことで自分のサイトなどから配信する開発版に管理画面から更新させることが可能です。

もしダメであれば、Stable tag は変えられないので開発版に関して管理画面からの更新機能は使用できません。
したがって「更新したので再度開発版をダウンロードしてインストールしてください」といったお知らせを出す機能が必要かもしれません。

2019/6/5 2:10 追記

質問者は前述の方法で納得していたようですが、やはりこの方法ではベータ版を通知することはできないようです。

公式ディレクトリに登録したプラグインとは別物のテストプラグインをホスティングする方法を考えていますが、最終的にはレビュアーの判断になるので確認する必要があります。

2019/6/6 19:00 追記

公式ディレクトリに登録されていない GitHub Updater というプラグインを使用することで、自分のプラグインには更新させる機能を追加することなく、少しだけプラグイン情報(GitHub Plugin URI)を追加するだけでGitHubなどから更新が可能になるようです。

また maseter ブランチ以外も指定できるため(GitHub Branch)、 master は WordPress.org 用、develop は GitHub Updater 用みたいに分けることができるみたいです。

GitHub Updater をインストールしてもらう必要がありますが、簡単にテストバージョンを配布することができそうです。

Github Updater プラグインが超便利 - Daily GLOCALISM
自分で作ったプラグインをGitHubやBitBucketにてバージョン管理している。しかし、プラグインを更新して、gitにpushして、それを使っているサイトをいちいち更新する、、というのがとても面倒。 そこで見つけたの

2019/6/7 2:10 追記

SVN の タグの活用を推奨しているようです。

WordPress.org から配信されていれば問題はないので、ベータ版のタグなどに切り替える機能を持たせることは問題ないようです。

WordPressには Plugin_Upgrader のようなプラグインをインストールしたり更新したりするための機能があり、それを使用すれば特定のタグに更新することは比較的簡単そうです。

切り替え可能なタグは API で取得することができます。

コメント

タイトルとURLをコピーしました