(発信内容は所属団体とは関係無く個人の見解です)
Intro
Stack OverflowはSoftware Engineerにとって大変便利なサービスです。
私の利用ケースとしては、一次情報(ソースコード含む)を見ただけでは判断できない、が、この事象であれば既に他の誰かが何かしらtryして結果を知見として共有してくれているのでは、と思わせるような対象を調査する時などによく利用させていただいています。英語を学習している身でもあるので、基本的には英語のまま利用します。
最近、Stack Overflowを機械翻訳しただけに見えるサイトがYahoo! JAPANやGoogleの検索結果に数多くhitするようになったように感じており、上述したようなモチベーションでStack Overflowを利用する私にとってそれらのサイトは不要なので、普段利用しているブラウザであるGoogle Chromeの検索結果から除外する方法を調査してみました。
How
Intro
項目で述べた要件を満たすために下記2点を調査しました。
- Google Chromeの検索結果から該当サイトを除外する方法
- 私はYahoo! JAPANとGoogleが提供する検索サービスを共に利用するので、どちらでも利用可能な方法、というのも要件の一つです
- Stack Overflowを機械翻訳しただけに見えるサイトを洗い出す
Google Chromeの検索結果から該当サイトを除外する方法
Yahoo! JAPAN / Google共に、除外したいドメインをdenylistのようなものに登録して設定として保存する、というような機能はなさそうでした
拡張機能だとuBlacklistが多く利用されているようでdenylistのようなものも定義できそうでしたが、少し試してみたところ、こちらはブラウザの拡張機能という性質上、検索結果のDOMに干渉するのみで、1ページに表示される件数自体は減ってしまうような振る舞いに見えました。
それだとあまりうれしくないので、Yahoo! JAPANやGoogleが、常にdenylistとして伝えた情報を元に検索した結果を返してくれる方法がないかさらに調査したところ、
Google Chromeの検索エンジン設定と検索演算子(-site:
)を使う方法を思いつきました。
Google Chromeには検索エンジン設定という機能が存在します。
知っている方も多いと思うので詳細はlinkしたドキュメントを読んでいただければなのですが、ざっくり説明すると、
Chromeに下記のように登録しておけば、
(e.g. 私が英単語検索するため設定しているweblioの場合)
Chromeの検索バーで{{指定したキーワード}} + tabと入力すると、直接、登録した検索サービスを利用することができる、というような機能です。
次に検索演算子です。こちらも知っている方が多いと思うので、詳細はlinkしたドキュメントを読んでいただければなのですが、提供されている演算子(Google / Yahoo! JAPAN共通のはず、確か)を検索時に利用することで、特定のドメインに絞って検索したり(site:
)、逆に特定のドメインを除外したり(-site:
)できる機能です。
以上の調査結果から、これらの機能を組み合わせて、以下のようなURLを、Stack Overflowを機械翻訳しただけに見えるサイトを除外したい時に利用する検索エンジンとしてChromeに登録することで、私のモチベーションは満たせそうだと考えました。
https://search.yahoo.co.jp/search?p=%s -site:{{Stack Overflowを機械翻訳しただけに見えるサイト1}} -site:{{Stack Overflowを機械翻訳しただけに見えるサイト2}} -site:{{Stack Overflowを機械翻訳しただけに見えるサイト3}}
Stack Overflowを機械翻訳しただけに見えるサイトを洗い出す
howは見つかったので-site:
指定するためのサイトを洗い出していきます。
その方法は、Stack Overflowで人気のあるページを機械翻訳して、機械翻訳後のそのページのタイトルでYahoo! JAPAN / Googleで検索する、という愚直なものです。
結果、下記を洗い出すことが出来ました。
(一つ一つのサイトをそこまで詳細に見てはいないので、Stack Overflowを機械翻訳しただけではないサイトが含まれていたらすみません、、)
(アグスネット株式会社が提供するaguse.jpで確認したところBarracuda Reputation Block List (BRBL)に登録されているドメインも存在したので、アクセスは自己責任で )
- qastack.jp
- www.it-swarm-ja.tech
- www.it-swarm.dev
- python5.com
- projobs.tistory.com
- www.javaer101.com
- codehero.jp
- code-examples.net
- www.366service.com
- stackoverrun.com
- www.voidcc.com
- qa.codeflow.site
- code.i-harness.com
- www.nuomiphp.com
- stackovernet.xyz
- tutorialmore.com
- fooobar.com
あとはこれらを、Yahoo! JAPAN / Googleごとに-site:
で指定したURLsを、Chromeの検索エンジン設定にて登録すればdoneです。
(私は、これらをprogrammingに関する調査をする際に利用する検索エンジンとしてそれぞれChromeに登録してみました)
search.yahoo.co.jp
https://search.yahoo.co.jp/search?p=%s -site:qastack.jp -site:www.it-swarm-ja.tech -site:www.it-swarm.dev -site:python5.com -site:projobs.tistory.com -site:www.javaer101.com -site:codehero.jp -site:code-examples.net -site:www.366service.com -site:stackoverrun.com -site:www.voidcc.com -site:qa.codeflow.site -site:code.i-harness.com -site:www.nuomiphp.com -site:stackovernet.xyz -site:tutorialmore.com -site:fooobar.com
google.co.jp
https://www.google.co.jp/search?q=%s -site:qastack.jp -site:www.it-swarm-ja.tech -site:www.it-swarm.dev -site:python5.com -site:projobs.tistory.com -site:www.javaer101.com -site:codehero.jp -site:code-examples.net -site:www.366service.com -site:stackoverrun.com -site:www.voidcc.com -site:qa.codeflow.site -site:code.i-harness.com -site:www.nuomiphp.com -site:stackovernet.xyz -site:tutorialmore.com -site:fooobar.com
気になる点
検索演算子はいくつまで指定できるのでしょうか。
Googleが検索演算子について説明しているページにそのような記載はないので、HTTPのspecであるRFC2616を見てみると、
The HTTP protocol does not place any a priori limit on the length of
a URI. Servers MUST be able to handle the URI of any resource they
serve, and SHOULD be able to handle URIs of unbounded length if they
provide GET-based forms that could generate such URIs. A server
SHOULD return 414 (Request-URI Too Long) status if a URI is longer
than the server can handle (see section 10.4.15).
Note: Servers ought to be cautious about depending on URI lengths
above 255 bytes, because some older client or proxy
implementations might not properly support these lengths.
https://tools.ietf.org/html/rfc2616#section-3.2.1 より
URIのサイズに制限はありませんでした。よって、ブラウザやリクエスト先のサービスに依存しそうです。
やはりあまりに長いとダメそうなので-site:
の数は増えすぎないように適宜メンテした方が良さそうです。
Stack Overflowを機械翻訳しただけに見えるサイトの管理
ということで、適宜メンテするためのGitHubリポジトリを用意しました。
https://github.com/shikato/stackoverflow-translation-sites-for-chrome
リポジトリは下記3つのtxtで構成されています。
-
original.txt
- 該当サイトをlistしただけ
-
search.yahoo.co.jp.txt
- Chromeの検索エンジンとして登録する用 for
search.yahoo.co.jp
-
original.txtでlistされているサイトすべてが
-site:
指定されている
- Chromeの検索エンジンとして登録する用 for
-
google.co.jp.txt
- Chromeの検索エンジンとして登録する用 for
google.co.jp
-
original.txtでlistされているサイトすべてが
-site:
指定されている
- Chromeの検索エンジンとして登録する用 for
私と同じようなモチベーションを持つ方で、新たにStack Overflowを機械翻訳しただけに見えるサイトを見つけた時や、listされているサイトが無くなったことに気づいた時には、updateを要求するようなissueを立てる、もしくは、updateしてPRを送っていただけると嬉しいです
Outro
Stack Overflowを機械翻訳しただけに見えるサイトに対して、私と同じようなモチベーションがある方は是非、本記事で紹介したhowを活用してみてください!
こちらのリポジトリへのPRも大歓迎です
(この記事で紹介したhowは、この記事を書きながら調査して見つけたhowということもあり、まだほぼ実運用できていないステータスなので、何かしら見落としなどがあり、もしかしたら期待通りにworkしない可能性もあります。そのような時には、また追記させていただきます)
Appendix
これでやりたいことを実現できそうな見込みは立ちましたが、まだ、いろいろと気になる点が残ったので、さらに調査してみました。
Stack Overflowを機械翻訳しただけに見えるサイト運営者のモチベーション
これらのサイト運営者のモチベーションは何でしょうか。どのサイトも、そのサイトが何のために提供されているか、または、運営会社などの情報を全く掲載していないように見えるため、色々と想像が入っていますが、少し考えてみました。
広告収益
どのサイトももれなく広告が掲載されているので、やはり広告掲載による収益がメインの可能性が高そうです。
Software Engineerしか利用しないようなサービスで広告収益が期待できるのだろうか、広告をクリックするユーザーは少ないのでは、というような考えがよぎるかもですが、広告の課金方式にはクリック以外に表示回数によって課金が発生するものもあり、例えばGoogle 広告だと下記の四種類があります。
https://support.google.com/adsense/answer/1055545?hl=ja より
2や3だと、表示回数ベースでの課金となるので、PVさえ多ければある程度の収益は見込めそうです。
(Google 広告の場合、1〜4の内、どの課金方式の広告を配信するかは、Google 広告側でターゲティングやオークション結果によって制御するようです(サイト運営者が制御するわけではない))
如何にして実現しているか
ではモチベーションが広告掲載による収益だとして、次はそれらのサイトの実現方法について調査してみます。
まずは、如何にしてStack Overflowのコンテンツ(と思われる)を利用しているか、ですが、Stack Overflowは3rd party開発者向けにAPIを提供しているため、こちらを利用している可能性が高そうです。
次に、そのStack Overflow APIの利用規約に則って提供されているか、ですが、Stack OverflowおよびStack Exchangeのコンテンツは基本的にはCC BY-SA 4.0にてライセンスされ配布されています。
(もしかしたら今更な内容かもしれないのですが、私はこの調査をするまで知りませんでした)
- 参考
なので、CC BY-SA 4.0にて公開されているStack Overflowのコンテンツに対して、下記のようなことを遵守できるのであれば、3rd party開発者が機械翻訳による改変などして再配布(公開)しても問題はなさそうです。
- 何らかの方法で、そのコンテンツが Stack Overflow や Stack Exchange network から来たものであると視覚的に示してください。露骨に強調する必要はありません。短く簡単に書いてあれば良いです。
- 元のサイトの元の質問に直接ハイパーリンクしてください
(例: http://ja.stackoverflow.com/questions/12345)。 - それぞれの質問と回答で、著者の名前を示してください。
- それぞれの著者の名前にハイパーリンクを張り、元のサイト上のユーザー・プロフィール・ページに直接リンクするようにしてください - (例: http://ja.stackoverflow.com/users/12345/username)。
"Attribution Required" (Jeff Atwood、2009年6月25日) の和訳より
上記を踏まえてリストアップしてみたサイトを見ると(アクセスは自己責任で )、ほとんどのサイトが上記条件を満たしていそうに見えます。(満たしていないサイトもありそうです)
ということで、ここまできてやっと、Stack Overflowを機械翻訳しただけに見えるサイトが数多く存在する理由(Stack Overflowのコンテンツは3rd party開発者にとって再利用しやすいライセンスにて提供されている)が分かったのでした。
上記のようなサイトが数多くある理由は何となく分かりましたが、冒頭でも述べた通り私にとって、Stack Overflowを機械翻訳しただけに見えるサイトが不要ということには変わりはありません。よって可能な限り除外させていただきますが、Stack Overflowのコンテンツに対して機械翻訳以外の付加価値を何かしら提供できるのであれば、マネタイズのチャンスが我々にもありそう、というような気付きもありました。