ブログトップ 記事一覧 ログイン 無料ブログ開設

Mozilla Flux RSSフィード

2009-05-04

NoScriptの全面譲歩で決着

予想外にあっけない幕切れだった。NoScript 1.9.2.6がリリースされ、1.9.2.4で問題になっていたホワイトリストは自動的に削除されるようになった。そして、二度と追加されることはない。NoScriptの作者Giorgio Maone氏は、公式サイトのほか、自己のブログにも謝罪文を掲載した(『Dear Adblock Plus and NoScript Users, Dear Mozilla Community』)。

大きな反響をいただき、台湾からのトラックバックさえあった『Adblock Plus vs. NoScript』の続報である。筆者は対立が長引くと見ていたのだが、わずか数日でNoScriptが全面的に譲歩する結果となった。Maone氏の謝罪文には経緯も説明されているので、まずはそれを見てみよう。

NoScript作者から見た争いの経緯

やはり今回の争いの発端はEasyListにあった。フィルターセットと呼ばれる、Adblock Plusがカットする広告のリスト。その中でも最も有名なのが、このEasyListだ*1。そこにNoScript関連のドメインが追加されたのだが、当初、Maone氏がWebサイト側の設定でそれをかわそうとすると、リストのアップデートが行われるという応酬が一週間ほど続いたようだ。最終的にリストの設定は非常に強力なものとなり、広告をカットするだけでなく、NoScript等をインストールするためのリンクも正常に動作しなくなったという。

広告収入を減らされ、しかもサイトの動作を阻害されたと感じて怒り心頭に発したMaone氏は、NoScript関連のドメインで上記フィルターセットを機能させなくするスクリプトを書いて、NoScriptに追加した。Maone氏は自家製ホワイトリストと表現しているが、Adblock Plusの作者Wladimir Palant氏は、Adblock Plusの一部機能を無効にされたと受け取った。この点に関連して、コードを難読化したかどうかが問題になっているのだが、Maone氏は否定している。読みやすいコードではないにせよ、わざと読めなくしたことは一切ないと。ただ、一部の「データ」を読みにくくしたことは認めている。EasyListの管理人による対抗措置を困難にするためだったらしい。

Maone氏の説明では、そのバージョンをリリースした後になって、別の拡張機能(この場合はNoScript)からAdblock Plusのホワイトリストにドメインを追加できることに気づいたのだという。また、Palant氏は触れていなかったが、この時点で同氏からMaone氏へメールがあり、NoScriptの措置に問題があるとの指摘がなされた。そこでMaone氏は、独自のスクリプトを使わず、上記ホワイトリストに自己のドメインを追加することに決めた。しかし、ユーザーへの説明は自己のサイトやMozilla Add-ons(AMO)で行えば十分と判断した。Maone氏によれば、その旨を含むメールをPalant氏に送ったが、返事がなかったので、異議がないと考えたのだそうだ。

そして、懸案のNoScript 1.9.2.4がリリースされる。これもMaone氏の説明だが、リリース後すぐに、措置が不十分だと悟ったという。起動時に意図を説明し、明示的にユーザーの承諾を得るようにすべきだったと。実際、リリースから半日と経たないうちにAMOからメールがあり、次のバージョンではオプトイン用のダイアログを追加すべきと提案された。

だが、事態の進行速度は、Maone氏の予想をはるかに超えていた。AMOのレビューは批判の嵐となり、NoScriptのフォーラムにも非難の声が相次いだ。本家スラッシュドットで大きく騒がれ、Maone氏に届いたメールもかなりの量だったらしい。どうやら、Palant氏のブログ記事の影響は大きかったようだ。

話はそれだけでは終わらない。Maone氏がユーザーの承諾を求めるよう変更したNoScript 1.9.2.5をAMOに提出してレビューを申請したときには、AMOのスタンスも厳しくなっていたのである。オプトイン用のダイアログを追加するだけでは不十分であり、そもそもAdblock Plusのホワイトリストへの追加はNoScriptの機能と関連しないから、そのような措置は認められないと通告された。つまり、NoScriptがホワイトリストに手を出すこと自体がアウトになったわけだ。

Maone氏は書いていないが、この通告は非常に重い。NoScript 1.9.2.5をAMOで公開することができず、かといって何もしなければ、同等以上の問題を抱える当時のNoScriptについて、掲載の継続そのものが危ぶまれるからだ。Maone氏も白旗を揚げざるを得なかった。こうして、NoScript 1.9.2.6が急遽リリースされる運びとなった。

なお、Maone氏がフォーラムで説明しているところでは、問題のホワイトリストを削除しても次回起動時に再度書き込みが行われるのは、意図的ではなく、純粋なバグだったそうだ。

再発防止に向けた動き

Maone氏の「弁解」を鵜呑みにするのは難しい。とくに、次の三点は真偽を疑われても仕方がなかろう。燎原の火のごとく広まる批判の声に慌て、泥縄式に火消しに走ったというあたりが真相かもしれない。

  1. Adblock Plusのホワイトリストにドメインを追加できると後から気づいた
  2. v1.9.2.4のリリース直後にユーザーから明示的な承諾を得るべきだったと悟った
  3. ホワイトリストを削除しても次回起動時に再度書き込みが行われるのは純粋なバグだった

それはともかく、こうしたもめごとはNoScriptだけでなくアドオン全体の信頼性にもかかわることなので、どうやって再発を防止するかが重要だ。Maone氏は二度とこのようなことはしないと誓ったうえで、NoScriptを含めた自作拡張機能のリポジトリを誰でもアクセス可能なものにすると発表している。要するに、コードを誰でも覗けるようになれば、変なことをしてもすぐに発覚するので、抑止力として機能するというのである。

また、AMOも、今回の件を踏まえ、Mozilla Add-ons Blogの『No Surprises』という記事で新たなポリシーを提案している。内容はこうだ。

デフォルトホームページや検索設定の変更は、他にインストールされたアドオンの設定と同様に、そのアドオンの中核機能と関連するものでなければならない。この関連性が確立された場合も、それらの設定を変更する際は、以下の要求を厳守しなければならない。

  • アドオンの説明は、アドオンが加える変更を明確に述べていなければならない
  • すべての変更は「オプトイン」、すなわちユーザーが変更を有効にする措置を非デフォルトとしなければならない
  • アドオンをアンインストールしたときは、変更された設定をユーザーのオリジナルに復元する

以上は最低限の要求であって、アドオンが承認されることを保証するものではない。

新ポリシーは、Firefox本体や他のアドオンの設定を変更する場合、「当該アドオンの中核機能との関連性」と「ユーザーに対する説明および明示的な同意」という二つのハードルを課している。提案と言っているが、既にNoScriptに適用されたのだから決定事項も同じだ。NoScriptは一つ目のハードルを超えられなかったため、二つ目のハードルにたどり着けずに承認申請を却下された。

新しいルールが設けられるということは、それだけアドオンの自由が減ることを意味する。Adblock Plus vs. NoScriptの争いは決着がついたが、その置き土産はことのほか大きかったのかもしれない。

*1:有志が管理しており、Adblock Plusの作者が作成に携わっているわけではない

piro_orpiro_or 2009/05/04 16:54 >ホワイトリストを削除しても次回起動時に再度書き込みが行われるのは純粋なバグだった
ホワイトリストが組み込まれておらず、且つ、過去にユーザが手動でホワイトリストを削除したことがある場合、というケースを判別するためのコードを頑張って書かない限りは、そういう動作になりますし、そういうケースを判別するのはそれなりに面倒ですので、熱くなった頭で見過ごしてしまったとしてもおかしくはないでしょう。
無罪とは言えませんが、かといってこの事を厳しく責めるのはかわいそうだ、というのがうっかりミスを連発しがちな自分の感想です。

sysy 2009/05/04 23:43 >すべての変更は「オプトイン」、すなわちユーザーが変更を有効にする措置を非デフォルトとしなければならない

この部分ですが、直訳過ぎる為か、ユーザーの行動とアドオンの動作がごっちゃになっていて分かりにくいように思います。文の意図を考えたら「非デフォルト」ではなく「デフォルト」ではないでしょうか。また、簡潔に(?)
「すべての変更は「オプトイン」、すなわちデフォルトで有効であってはならない」
こんな感じではどうでしょうか。

広告を表示している以上EasyListに載るのは仕方ないのですから、EasyListを回避する応酬を行ったこの事件の発端からしてMaone氏に弁解の余地は無いように思います。NoScriptが素晴らしいものなら(実際素晴らしいと思いますが)ユーザーの非難を受けるのはEasyListになったでしょうから。

ただ自分はこの置き土産は良い財産で、アドオンの自由度が減るようなものだとは思わない(むしろそんな自由度は無い方が良い)のは、自分がユーザー視点だからでしょうか。

RockridgeRockridge 2009/05/05 15:41 Piroさん、syさん、コメントありがとうございます。

> Piroさん

NoScriptを最初に起動したときだけホワイトリストを追加する仕様にするのは難しいのでしょうか。first-runページを提供するアドオンはいくつも見かけたことがあるので、Maone氏ほどの技術があれば十分に可能だと思うのです。そうした手段をあえて選ばなかったのですから、これは「見過ごしてしまった」とは言えないのではないでしょうか。

> syさん

ご指摘の文が直訳になっている点ですが、あえてそうしてあります。原文が「non-default」という回りくどい言い方をしているのは、理由があってそうしているのだろうと考えたからです。

仮にアドオン作者が、設定変更をデフォルトであるような、ないような曖昧な扱いにする方法を思いついたとしましょう。「デフォルトで有効にするな」という消極的なルールなら、作者は言い逃れができますが、「非デフォルトにしろ」という積極的なルールなら、作者は説明責任を負います。仮定した方法が実際に存在するかは分かりませんが、将来のトラブルを避けるようにルールを設定しておくのは賢いやり方です。

そういうわけで、原文があえて回りくどい言い方にしている以上、訳文もそれにしたがうべきだと考えました。

あと、この新ルールが適正なものであることは言うまでもありませんが、やはりルールで縛らなくて済むならそれに越したことはないと思います。拡張機能作者の方々が余計な気を遣う事態は少ないほうがいいからです。

piro_orpiro_or 2009/05/06 14:50 >NoScriptを最初に起動したときだけホワイトリストを追加する仕様にするのは難しいのでしょうか。
技術的にはもちろん難しくないですが、その必要性に気付くのには幾分の冷静さが必要だと思います。「自動でホワイトリストを追加する機能」を書いた後で「でも、このホワイトリストを消したい人がいるかもしれない」と思い至り「じゃあ最初の1回だけに制限するようにしよう」というコードを書き加える、というのが実装時のありがちなパターンではないかと思いますが、「でも〜」に思い至れなければその先もないわけで。
とはいえ、そうであったとしてもそれはそれで、この作者の人の狭量さ(この点についてユーザの使い勝手や意向に関心が無く、自分の意向の事しか考えていなかった)を示しているということにはなるのですけれども。

RockridgeRockridge 2009/05/06 18:20 「でも〜」に思い至れば、技術的には難しくないのですね。

今回、EasyListが広告をブロックしたところから話が始まりました。ニーズがなければそんなことはしません。なら、たとえ少数にせよ、「このホワイトリストを消したい人がいる」ことには当然気づくべきでしょう。

気づかなかったMaone氏には少なくとも過失がありました。ただ、それだけではなかったと思えてなりません。「ホワイトリストを消したい人がいるかも」の後に、「でも知ったことか」と続いたのではないか。私には純粋なバグだったというMaone氏の主張はうさんくさく聞こえるのです。

benjaminbenjamin 2009/05/07 23:53 こんばんは、初めまして。すべての変更は「オプトイン」、すなわち…以降についてですが;

すなわちユーザーが何らかの措置を取らない限り有効になってはならない。

という訳は如何でしょうか。

RockridgeRockridge 2009/05/08 07:43 コメントありがとうございます。

ご指摘の訳であれば、説明責任うんぬんの問題はクリアできると思います。ただ、私はルールに関する文は意味が取れるかぎり直訳のほうが無難だと考えています。

sysy 2009/05/09 01:18 > ttp://d.hatena.ne.jp/Rockridge/20090508/1241736839
この記事でまた訳文に関する話題をお見かけしましたのでコメント致します。長いですが延々と議論するつもりはありませんのでご了承下さい。

まず上の記事で「訳の部分が変」とdisられたのは多分に二つ目のルールの文だと思われますが、私も訳文に一つ疑問があります。先日のコメント通り、「非デフォルト」ではなく「デフォルト」に変えた方が良いと思います。
というのも、ユーザーが変更を有効にしたいと思ったとき「有効にする措置」を必ず取らなければならないなら、「有効にする措置」は「変更」にとってデフォルトの行為だからです。「措置」がなければ「変更」は存在しないからです。

私が考える改訳はこうなります。
「すべての変更は「オプトイン」、すなわちユーザーが変更を有効にする措置を取ることをデフォルトとしなければならない」

ただ、確かにRockridgeさんの訳のまま理解することは出来ます。それは、「非デフォルト」という名詞が特別な意味を持っている場合です。訳すとすれば「アドオンをインストール後、アドオンの設定画面を開いて設定を変更すること」とでもなるでしょう。こんな名詞にこんな意味が入ってることを前提とした文なのですから、分かりにくいわけです。

しかしRockridgeさんがこのようなことも踏まえてこの訳文を記したのであれば、文が変とdisられる謂れは全く無いと思います。何故なら原文がそもそもおかしいからです。

原文も恐らく「non-default」に上記のような意味を込めて書いたのだと思いますが、ここでnon-defaultがあるならdefaultは何かと考えて下さい。それは「アドオンをインストールすること」
に他なりません。では「action」は何でしょうか。「アドオンの設定画面を開いて設定を変更すること」です。

つまりdefaultでいいならばそもそもユーザーは「action」を起こす必要は無いので、「action」を起こした時点で「non-default」なのです。「アドオンをインストールすること」すら「action」だとは流石に言えないでしょう。

ですので原文は「non-default」を消すべきだと考えます。以上です。

RockridgeRockridge 2009/05/09 08:27 コメント欄を見ていらっしゃる他の方のために、まずは簡単な例を挙げて議論の抽象度を下げておきましょう。

ここにアドオンAとアドオンBがあって、AがBの設定を変更するような処理を含んでいるとします。当然、アドオンAはダイアログを出して、Bの設定を変えてもいいかどうか、ユーザーに尋ねないといけません。

このとき、ダイアログは、「変更してもいいか?」と質問し、YesとNoの答えが用意され、デフォルトではNoにチェックが入っています。これをユーザーがYesに変えて、OKをクリックしたときだけ、アドオンAはBの設定を変えることが許されます。

AMOのポリシーが言いたいのはそういうことで、これを文章でどう表現するかということがまずあって、その文章をどう翻訳するかが次の問題です。

で、syさんのご意見は、最終的に、原文がおかしいので、直訳した日本語もおかしいという趣旨かと思います。

はたして、原文はおかしいのでしょうか。

上のダイアログ例で考えてみます。syさんは、ダイアログ中のNoをYesに変える措置について語っていらっしゃるようです。措置(原文のaction)がそのような意味であれば、たしかにユーザーがそのような措置をとることをデフォルトにすべきでしょう。

しかし、原文のactionの後には「to enact the change」と続きます。焦点は、アドオンBの設定を変えるところにあるのです。ここでの実行役はもちろんアドオンAですが、判断を下すのはユーザーですから、措置の主体はユーザーになります。今述べた部分がポイントです。syさんは、節の主語が「user」なのでダイアログ内の操作をイメージされたのかもしれませんが、アドオンBの設定を変えるのはあくまでユーザーなのです。

こうして措置(action)が指す内容が明らかになれば、「non-default」という耳慣れない単語も、間違って置かれたのではないとわかります。non-defaultを消して「user must take action to enact the change」とした場合、アドオンAが上のダイアログ例でYesにチェックを入れた状態でユーザーに同意を求めるのも許されることになってしまいます。Noをデフォルトとしたうえで、non-defaultであるYesを選んだユーザーが、変更措置をとる形でなければなりません。

したがって、原文は正しく、non-defaultを消すと逆におかしくなります。

残る問題は、訳語についてなのですが、一つの案としては、「the change」を「その変更」と訳すべきなのかもしれません。文脈からアドオンAによるBの設定の変更であることは確定できると考えますが、より明確にするためにという意味です。

ちなみに、benjaminさんの提案ですが、「何らかの」という原文にないフレーズを入れたことで、Yesをデフォルトにしたダイアログを出してユーザーに同意を求めるのでもハードルをクリアできるかのように読めてしまいます。訳語の決定は本当に難しいですね。

sysy 2009/05/10 00:25 とても想定外のコメントでしたので、弁明させて下さい。

「No Surprises」のページだけを見ていた私はAMOのポリシーがダイアログについて述べているものだとは全く思っていませんでした。確かに事件の中で、AMOがNoScriptにオプトイン用のダイアログを追加するよう通達した事を考えればそうだと思いますが、「AMOのポリシーが言いたいのはそういうこと」とまで断定される程の根拠はどこかのページに書いてあるのでしょうか、でしたら記事に載せて頂きたく思います。

そういうわけでRockridgeさんの私のコメントに対する解釈は私が意図していたものでは全くなく、ダイアログに限って解釈するのならばRockridgeさんの言う通りだと思いますし、原文に問題はありません。

しかし訳文には分かりにくいという問題が残ると思います。「非デフォルト」でなければいけないのは「Yes」であって、「ユーザーが変更を有効にする措置」ではありません。つまり「非デフォルト」を訳せば「非既定値」ですので、訳文は「措置を非既定値とする」と述べていることなります、これで如何に分かりにくいかお分かり頂けるのではないでしょうか。

「有効にする措置」を「有効にするための選択肢」と改めるのはどうでしょうか。本当に最小限の変更で済ますのなら「有効にする装置」でも良いかも知れません。

更に、この文がダイアログに関する話で、Rockridgeさんが考える様な文ならば、訳文に一つ誤りがあります。「オプトイン」は承諾を求めることなので、そこに既定値が何であるかの概念は無いはずです、ですから「すなわち〜」と続くのは変で「且つ」の様な「and」系の接続詞にするべきです。


以下は蛇足ですが
私は最初「直訳過ぎる」、Rockridgeさんも「直訳のほうが無難」と言っていましたが、本当に直訳するならば訳には「non-default」が「action」を形容しているという構造を残すべきでしょう。
ttp://slashdot.jp/security/09/05/07/0244252.shtml
こちらのページではそう訳しております、ご参考までに(もうされているかも)。

RockridgeRockridge 2009/05/10 07:35 たしかに、AMOのポリシーがダイアログ「だけ」に適用されるかのように受け取られても仕方のない書き方をしていました。この点は、私のコメントに舌足らずな点がありました。実際には、アドオンAのオプション設定画面でも構いません。その画面内で、「アドオンBの設定を変更する」という記述の下に、Yes/Noの選択肢があって、初期値がNoになっており、ユーザーがYesに変更してからOKをクリックするという形なら、AMOのポリシーに反しません。

しかし、ダイアログを使うか、オプション設定画面を使うかの違いで、要求される処理の本質は変わりません。

訳文についてですが、syさんは二点誤解されているようです。一点目は、「デフォルト=規定値」としているところで、これは違います。英語のdefault valueを日本語で「デフォルト」と呼ぶことが多いのは確かですが、defaultの意味は値に限られませんし、カタカナ語の「デフォルト」も同様です。たとえば、defaultにもともと「値」の意味まで含まれているなら、actionを形容する言葉としてnon-defaultという単語は使えないはずです。また、カタカナ語「デフォルト」に値の意味を含まない用法があることについては、Wikipediaあたりを参照してください。

もう一つは、「オプトイン(opt-in)」で、これは「承諾を求めること」ではありません。あえて訳せば、積極的に意思表明して参加する、といったところでしょうか。AMOのポリシーでは、アドオンの設定変更のケースに転用しているので、原文はクオーテーションで囲ってあるのです。この原義からすれば、「既定値が何であるかの概念」も含まれていると言えます。ただ促されるままOKを出しても、opt-inしたことにならないからです。

というわけで、「措置をデフォルトとする」と訳してもおかしくはなく、原文の"meaning"は「すなわち」と訳すのが自然です。なお、ご指摘のスラッシュドットの記事はカッコ書きにされていますが、これは好みの問題で、どちらが正しいとかの話ではありません。

あとは「non-default」と「action」を切り離して訳しているので直訳ではないとのご指摘ですね。これは文の前段をオプトインという名詞で切って訳したのと、「〜でなければならない」の重複を避けたかったというのがあって、原意を損なわない範囲で不自然な構造の日本語にならないよう配慮したらああいう文になりました。

英語と日本語はそもそも語順が違いますので、これくらいなら直訳の範囲内だと思っていますが、別のご意見はありうるところです。それはともかく、私は今のところ自分の訳が間違っているとは考えていません。もちろん、スラッシュドットの記事の訳も正しいですよ。

sysy 2009/05/11 02:35 前コメントで「ダイアログに限って解釈するのなら」と前置きした通り、ダイアログに限らない話であるならば私の前々コメントの内容を無視しないで頂きたいです、要求される処理の本質はダイアログと設定画面では違います。

二つの誤解と仰っておりますが、確かに二点目に関しては私の知識不足でした。誤りというのは撤回し、お詫び申し上げます。

ただ、一点目は誤解しておりません。Rockridgeさんの提示した例の上では「デフォルト=規定値」は確かです、英語の「default」やデフォルトの意味の定義を議論したつもりは毛頭ありません。話をダイアログに限って私のコメントを論破した後にダイアログではない場面の「デフォルト」の話をされたのではたまりません。

しかし、コロケーションの悪さを全く意に介さないとされるならば、私は完全に文章として間違っていることを指摘するしかありません、そしてようやくその方法を見つけました。

「ユーザーが変更を有効にする措置を非デフォルトとする」
重要なのは「措置」の主語です。
「ユーザーが変更を有効にする措置」の部分を見れば主語はユーザーです。が、「措置を非デフォルトとする」の部分ではどうでしょう。非デフォルトになるのはRockridgeさんの例で言えばYes/NoのYesですが、その措置を設けたのはアドオン作者ですから、「アドオン作者の措置」であって「ユーザーの措置」ではありません。

つまり「有効にする『ための』措置」あるいは「措置を『とらないことを』非デフォルト」、どちらかが必要不可欠です。

そして、間違っていないと主張された以上、私のこれ以上のコメントは無意味です。コメント欄を見ていらっしゃる他の方の理解の為に最後にこのコメントを載せさせて頂きます。

しかし訳文に関して、私の主張に対し始終「それは違う」しか返されておらず、「こう読めば正しい」ということを何一つ示されなかったのは至極残念です。私の代案についても全く考慮を頂けなかったようで、一体「有効にするための選択肢」と改めることの何をそんなに嫌い「有効にする措置」を好んだのか私には到底理解出来ません。Rockridgeさんが己が訳文に何一つ疑問を抱いていなかった証でしょうが、驚きと言う他ありません。

直訳の話に於いては、形容詞と名詞の修飾関係を切ることが直訳の範疇とは思わないですし、「語順が違うから」という理由付けをする理由が分からないところです。

以上です、コメント頂きありがとうございました。

RockridgeRockridge 2009/05/11 13:42 そうですね。この議論は平行線を辿りましたが、終わりにしましょう。

私の立場は、第一に、「正しい訳は一定の枠内で複数あり得る」というもので、この点はsyさんも反対はされないと思うのです。そのうえで、syさんは、私の訳がおかしいと主張され、一方でスラッシュドットの記事を参照されたときにおかしいとはおっしゃっていないので、私の訳は枠外で、スラッシュドットの記事の訳は枠内と判断されたものと考えます。ここが私としては最後まで理解できませんでした。

私は私の訳が正しい訳の枠内に入っていると認識しており、その根拠についてもあの短い原文について、action、non-default、opt-inといった主要な単語について説明した中に多くを含んでいると考えています。

syさんが私に訂正を求める以上、私の認識が誤っている根拠を示していただかねばなりません。議論の立場上、私はそれに反論するだけで足りるはずです。syさんの代案がどうかということは、その先の問題で、私の訳が正しい訳の範囲内に収まっていれば、私は自分の文章を変える理由がありません。

最後に、syさんも私のオプトインの説明に関してはいちおう納得していただいたと思うのですが、それでしたら、ダイアログとアドオンの設定画面の件でも、もう少し考察を続けられてはいかがでしょうか。アドオンAがBの設定を変更する処理を含んでおり、それをオンにする指示をユーザーが与える。AMOのポリシーは、そうしたフレーム全般を対象にしているのではありませんか。「要求される処理の本質はダイアログと設定画面では違」うとの主張が正しいなら、アドオン作者もAMOに同様に述べて自己の正当性を主張できることになりますが、そのような言い逃れのできる、目の粗いルールをAMOが公表するでしょうか。

議論にお付き合いいただき、ありがとうございました。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証