javascript-trap.html (21163B)
1 <!--#set var="ENGLISH_PAGE" value="/philosophy/javascript-trap.en.html" --> 2 3 <!--#include virtual="/server/header.ja.html" --> 4 <!-- Parent-Version: 1.96 --> 5 <!-- This page is derived from /server/standards/boilerplate.html --> 6 <!--#set var="TAGS" value="essays licensing traps" --> 7 <!--#set var="DISABLE_TOP_ADDENDUM" value="yes" --> 8 9 <!-- This file is automatically generated by GNUnited Nations! --> 10 <title>JavaScriptの罠 - GNUプロジェクト - フリーソフトウェアファウンデーション</title> 11 12 <!--#include virtual="/philosophy/po/javascript-trap.translist" --> 13 <!--#include virtual="/server/banner.ja.html" --> 14 <!--#include virtual="/philosophy/ph-breadcrumb.ja.html" --> 15 <!--GNUN: OUT-OF-DATE NOTICE--> 16 <!--#include virtual="/server/top-addendum.ja.html" --> 17 <div class="article reduced-width"> 18 <h2>JavaScriptの罠</h2> 19 20 <address class="byline"><a href="https://www.stallman.org/">リチャード・ストールマン</a>著</address> 21 22 <p><strong>あなたは、そうとは知らずに、不自由なプログラムをあなたのコンピュータで毎日実行しているかもしれません — 23 ウェブ・ブラウザを通じて。</strong></p> 24 25 <!-- any links that used to point to the appendices should point to 26 free-your-javascript.html instead. --> 27 <div class="announcement"> 28 <hr class="no-display" /> 29 <p>ウェブマスタのみなさん: ウェブサイトにおいて、JavaScriptプログラムのライセンスを提示する<a 30 href="/software/librejs/free-your-javascript.html">いくつかの方法</a>があります。</p> 31 <hr class="no-display" /> 32 </div> 33 34 <p>自由ソフトウェアコミュニティでは、<a 35 href="/philosophy/free-software-even-more-important.html">どんな不自由なプログラムもそのユーザを虐待する</a>、という考えがよく知られています。わたしたちの中には、プロプライエタリなソフトウェアをまったく拒否することで自由を守る人もいます。多くの人は不自由はプログラムへの打撃だと認識します。</p> 36 37 <p>多くのユーザは、この問題がブラウザがインストールするようにと提供するプラグインにも関係すると知っています。プラグインには自由か不自由かの違いがありうるからです。しかし、ブラウザは、ほかの不自由なプログラムを実行します。そのプログラムについて、ブラウザは、あなたに尋ねることも告げることもないのです。そのプログラムはウェブページに含まれていたり、リンクされてたりします。これらのプログラムはほとんどの場合、JavaScriptで書かれています。ほかの言語も、また、使われていますが。</p> 38 39 <p>JavaScript(公式にはECMAScriptと呼ばれますが、この名前はほとんど使われません)は、きれいだが本質的ではないナビゲーションや表示の機能のような、ウェブページのちょっとした装飾のために、かつては使われました。本当のソフトウェアとしてではなく、HTMLのマークアップの単なる拡張として考え、この問題を無視することは容認されました。</p> 40 41 <p>いくつかのサイトは、まだそのような方法でJavaScriptを使っていますが、多くのサイトでは大きな処理をする、大きなプログラムのために使っています。たとえば、Google 42 Docsはあなたのマシンに0.5メガバイトにも及ぶJavaScriptのプログラムをダウンロードしようとします。それは、暗黒スクリプト(Obfuscript)と呼び得る、圧縮された形式です。この圧縮された形式はソースコードから作られます。コードを読みやすくする余分な空白を削除し、理解を助ける説明のコメントを削除し、意味を持った名前を適当な短いものに置き換え、何を意味しているのか分からなくします。</p> 43 44 <p><a 45 href="/philosophy/free-sw.html">自由ソフトウェアの意味</a>の一部に、ユーザがそのプログラムのソースコード(プログラムの設計)にアクセスできることがあります。プログラムのソースコードとは、プログラマが修正するために好ましい形態を意味し、役立つ空白、説明の注釈、そして意味のある名前を含みます。コンパクト化されたコードは偽者であり、ソースコードの役に立たない代替です。そのプログラムの本当のソースコードをユーザが利用できないのであれば、ユーザはプログラムを理解できません。ですからそのプログラムは不自由です。</p> 46 47 <p>不自由であることに加えて、多くのこのようなプログラムは<em>マルウェア</em>です。なぜなら<a 48 href="https://github.com/w3c/fingerprinting-guidance/issues/8">ユーザを詮索するからです</a>。もっと嫌なことに、いくつかのサイトは<a 49 href="https://freedom-to-tinker.com/2017/11/15/no-boundaries-exfiltration-of-personal-data-by-session-replay-scripts/">そのページを見ているすべてのユーザの行動</a>を記録するサービスを使います。そのサービスはおそらくその記録を「墨消し」し、ウェブサイトが取得すべきでない敏感なデータを除外するでしょう。しかし、たとえそれが信頼性をもって処理されるとしても、このようなサービスの全体の目的はウェブサイトに取得すべきでない個人情報を提供することなのです。</p> 50 51 <p>JavaScriptのプログラムをロードしたときに、ブラウザは通常何も言いません。いくつかのブラウザは、JavaScriptを完全に停止する方法を有してますが、たとえ、この問題を知っていたとしても、こういった瑣末ではない不自由なプログラムを同定し、ブロックするのには大変な労力が必要となるでしょう。しかし、自由ソフトウェアのコミュニティでさえ、ほとんどのユーザはこの問題を知りません。ブラウザの沈黙がこの問題を隠す傾向にあるのです。</p> 52 53 <p>明確にすると、JavaScript言語がユーザの自由にとってほかの言語と比べて本質的に良い/悪いということはありません。JavaScriptプログラムを自由ソフトウェアライセンスでソースコードを配布し、自由ソフトウェアとしてリリースすることは可能です。もしそのプログラムがそれ自身で意味があるものなら(一緒に来るページと機能と目的が独立であれば)、問題ありません。あなたのマシンにファイルとしてコピーでき、変更し、ブラウザでそのファイルを見て実行できます。ほかの自由なプログラムと同様にインストールのためにパッケージすることさえできますし、シェルコマンドで実行もできます。こういったプログラムは、Cのプログラムと特段異なる道徳上の問題があるわけではありません。</p> 54 55 <p>JavaScriptの罠の問題は、JavaScriptのプログラムがユーザが訪れるウェブページとともにもたらされる時に生じます。こういった 56 JavaScript のプログラムは、特定のページやサイトで動くように書かれ、そのページやサイトは機能するためにそのプログラムに依存します。</p> 57 58 <p>そのページのJavaScriptのコードをあなたがコピーして変更したとしましょう。ここで、別の問題が生じます: 59 たとえプログラムのソースが利用可能でも、ブラウザは、そのページやサイトを訪れた際、あなたの変更したバージョンをオリジナルの代わりに実行する方法を提供しないのです。この効果はTivoizationと似たようなものです。克服するのに困難を極める、というほどではありませんが。</p> 60 61 <p>JavaScriptはウェブサイトでユーザに送られるプログラムに使われる唯一の言語ではありません。FlashはJavaScriptの拡張された一種を通じてプログラミングをサポートしましたが、これは過去のものです。マイクロソフトのSilverlightはFlashと同様な問題を作り出すと思われます。それがより悪いのは、マイクロソフトがそれを不自由なコーデックのプラットフォームとして使うからです。それが通常、自由な代替コーデックとともに来るのでなければ、Silverlightの自由な代替は自由な社会のために、その仕事を適切になし得ないでしょう。</p> 62 63 <p>Javaアプレットもブラウザで実行され、同様な問題を引き起こします。一般に、どのような種類のアプレットシステムもこの種の問題を有しています。アプレットの自由な実行環境を有するということは、この問題に出くわすのに十分なところに、わたしたちを連れていってくれる、というだけです。</p> 64 65 <p>理論的にはHTMLとCSSでプログラムすることが可能ですが、実際にはその機能は限られ不便です。(HTMLとCSSだけで)何かをすることは、すばらしいハックでしょう。そのようなプログラムは自由であるべきですが、CSSは2019年の時点において、ユーザの自由に対する深刻な問題ではありません。</p> 66 67 <p>ウェブサイトに対して、自由な(ある人は「オープン」と言います)、すなわち、その文書が公表されていて誰もが自由に実装できる、そういったフォーマットとプロトコルだけを通じて通信することを要求する、力強い運動が発達してきました。しかし、ウェブページの中のJavaScriptプログラムの存在がこの基準を不十分とします。JavaScriptそれ自身は、フォーマットとして自由で、ウェブサイトでJavaScriptを使うことは必ずしも悪くありません。しかし、上で述べたように、JavaScriptプログラムが不自由な場合、悪いものになりえます。サイトがプログラムをユーザに送信するとき、文書があり障害がない言語でかかれているプログラムだというだけでは十分ではないのです。つまり、そのプログラムも自由でなければなりません。「ユーザには自由なプログラムだけが送信される」ことが倫理的なウェブサイトの基準の一部となるべきです。</p> 68 69 <p>黙ったまま不自由なプログラムをロードして実行することは、「ウェブ・アプリケーション」によって引き起こされるいくつかの問題の一つです。「ウェブ・アプリケーション」という用語はユーザに送られるソフトウェアとサーバで実行されるソフトウェアの基本的な区別を無視するよう設計されています。それはブラウザで実行される特別なクライアントプログラムを指すこともありえますし、特別なサーバソフトウェアを指すこともありえます。また、特別なサーバソフトウェアと一緒に動く特別なクライアントプログラムを指すこともありえます。たとえそれらが密接に統合され単一のプログラムの部分のように構成されていたとしても、クライアント側とサーバ側では異なる倫理上の問題を引き起こします。この論説では、クライアント側のソフトウェアの問題だけを扱います。サーバの問題は別に扱っています。</p> 70 71 <p>実際面で、ウェブサイトの瑣末でない不自由なJavaScriptプログラムの問題をわたしたちはどのように扱えるでしょうか? 72 第一の段階は、それを実行することを避けることです。</p> 73 74 <p>「瑣末ではない」とは何を意味するでしょう? これは程度の問題ですから、一つの正解を探すよりも、良い結果を与える単純な基準を設計する問題です。</p> 75 <p> 76 わたしたちの現在の基準では、以下の条件のいずれかを満たすJavaScriptプログラムを瑣末ではないとします:</p> 77 78 <ul> 79 <li>外部スクリプトとして参照される(他のページから)。</li> 80 81 <li>50要素以上の配列を宣言する。</li> 82 83 <li>名前の付いたエンティティ(関数あるいはメソッド)を定義し、プリミティブ以上の何かを呼び出す。</li> 84 85 <li>三つ以上の条件構造とループ構造を含む名前付のエンティティを定義する。</li> 86 87 <li>名前付定義の外のコードでプリミティブと該当ページで定義される関数以外を呼び出す。</li> 88 89 <li>名前付定義の外のコードであわせて三つ以上の条件構造とループ構造を含む。</li> 90 91 <li><b>eval</b>を呼び出す。</li> 92 93 <li>Ajax呼び出しを行う。</li> 94 95 <li><b><em>object</em>[<em>property</em>]</b>のようにカギ括弧の記述で動的オブジェクトのプロパティのアクセスを使う。</li> 96 97 <li>DOMを変更する。</li> 98 99 <li>プログラムを解釈せずには解析することが難しい動的なJavaScriptの構成物を使用する、あるいは、そのような構成物を使うスクリプトと一緒にロードされる。具体的には、文字列リテラル以外の構成物を特定のメソッド(<b>Obj.write</b>、<b>Obj.createElement</b>、など)で使うことです。</li> 100 </ul> 101 102 <p>JavaScriptのコードが自由かどうかをどのように伝えたらよいでしょうか? わたしたちは、<a 103 href="/licenses/javascript-labels.html">別の小論</a>で、ウェブページの瑣末ではないJavaScriptのプログラムが、そのソースコードのありかを示すURLとそのライセンスを、定式化したコメントを使って提示する慣習を提案します。</p> 104 105 <p>最後に、自由なブラウザがウェブページで瑣末ではない不自由なJavaScriptを検出しブロックする変更を、わたしたちは必要とします。<a 106 href="/software/librejs/">LibreJS</a>は、あなたが訪れるページの、不自由な瑣末ではないJavaScriptを検出し、ブロックします。LibreJSはIceCatに含まれており、Firefoxのアドオンとしても利用可能です。</p> 107 108 <p>ブラウザのユーザには、あるページのJavaScriptの<em>代わりに</em>(別の)JavaScriptコードを指定する便利な機能も必要です。(指定されたコードは全体の置き換えかもしれないし、そのページの改変された自由なJavaScriptプログラムかもしれません。)Greasemonkeyがこれを行うことができるのに近いところですが、まだ足りません。なぜなら、それはプログラムが実行を開始する前に、そのページのJavaScriptのコードを改変することを保証してないからです。ローカルなプロキシを使えば動きますが、現実の解としては今、とても不便なものです。わたしたちは、信頼できる便利な解を構築する必要と、また、変更を共有するサイトを必要とします。GNUプロジェクトは、自由な変更だけに専念するサイトを推奨したいと思います。</p> 109 110 <p>これらの機能で、ウェブページに含まれるJavaScriptプログラムを、本当の意味で、現実的に自由とすることがなされるでしょう。そうすれば、JavaScriptはCやJavaがもはやそうではないように、わたしたちの自由の特定の障害ではなくなるでしょう。わたしたちは、不自由な瑣末ではないJavaScriptのプログラムを拒否したり、置き換えたりできるようになるでしょう。ちょうどわたしたちが通常の方法でインストールするように提供された不自由なパッケージを拒否したり、置き換えたりするように。その時、ウェブサイトに対し、そのJavaScriptを解放させる、わたしたちの運動は開始できるのです。</p> 111 112 <p>それまでの間、不自由なJavaScriptプログラムを実行する一つの容認できるケースがあります: 113 ウェブサイトのオペレータに、そのサイトで自由なJavaScriptのコードとするか、削除することについて文句を言うためにです。そうするのに一時的にJavaScriptを有効とすることをためらってはなりません。しかし、その後には再度無効とするのを忘れずに。</p> 114 115 <!-- any links that used to point to the appendices should point to 116 free-your-javascript.html instead. --> 117 <div class="announcement"> 118 <hr class="no-display" /> 119 <p>ウェブマスタのみなさん: ウェブサイトにおいて、JavaScriptプログラムのライセンスを提示する<a 120 href="/software/librejs/free-your-javascript.html">いくつかの方法</a>があります。</p> 121 <hr class="no-display" /> 122 </div> 123 124 <p><strong>謝辞</strong>: <a href="/people/people.html#mattlee">マット・リー</a>と<a 125 href="https://johnresig.com/">ジョン・レジッグ</a>に、提案された基準の定義への助力に関して感謝します。また、デビッド・パルナキアンに、この問題にわたくしの関心を向けさせてくれたことを感謝します。</p> 126 </div> 127 128 <div class="translators-notes"> 129 130 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.--> 131 </div> 132 </div> 133 134 <!-- for id="content", starts in the include above --> 135 <!--#include virtual="/server/footer.ja.html" --> 136 <div id="footer" role="contentinfo"> 137 <div class="unprintable"> 138 139 <p>FSFおよびGNUに関する問い合わせは<a 140 href="mailto:gnu@gnu.org"><gnu@gnu.org></a>までお願いします(英語)。FSFへの連絡は<a 141 href="/contact/">他の方法</a>もあります。リンク切れや他の修正、提案は<a 142 href="mailto:webmasters@gnu.org"><webmasters@gnu.org></a>までお送りください。</p> 143 144 <p> 145 <!-- TRANSLATORS: Ignore the original text in this paragraph, 146 replace it with the translation of these two: 147 148 We work hard and do our best to provide accurate, good quality 149 translations. However, we are not exempt from imperfection. 150 Please send your comments and general suggestions in this regard 151 to <a href="mailto:web-translators@gnu.org"> 152 153 <web-translators@gnu.org></a>.</p> 154 155 <p>For information on coordinating and contributing translations of 156 our web pages, see <a 157 href="/server/standards/README.translations.html">Translations 158 README</a>. --> 159 正確で良い品質の翻訳を提供するよう努力していますが、不完全な場合もあるかと思います。翻訳に関するコメントと提案は、<a 160 href="mailto:web-translators@gnu.org"><web-translators@gnu.org></a>におねがいします。</p><p>わたしたちのウェブページの翻訳の調整と貢献については、<a 161 href="/server/standards/README.translations.html">翻訳 README</a>をご覧ください。</p> 162 </div> 163 164 <!-- Regarding copyright, in general, standalone pages (as opposed to 165 files generated as part of manuals) on the GNU web server should 166 be under CC BY-ND 4.0. Please do NOT change or remove this 167 without talking with the webmasters or licensing team first. 168 Please make sure the copyright date is consistent with the 169 document. For web pages, it is ok to list just the latest year the 170 document was modified, or published. 171 172 If you wish to list earlier years, that is ok too. 173 Either "2001, 2002, 2003" or "2001-2003" are ok for specifying 174 years, as long as each year in the range is in fact a copyrightable 175 year, i.e., a year in which the document was published (including 176 being publicly visible on the web or in a revision control system). 177 178 There is more detail about copyright years in the GNU Maintainers 179 Information document, www.gnu.org/prep/maintain. --> 180 <p>Copyright © 2009-2013, 2016-2019, 2021 Richard Stallman</p> 181 182 <p>このページは<a rel="license" 183 href="http://creativecommons.org/licenses/by-nd/4.0/deed.ja">Creative 184 Commons Attribution-NoDerivatives 4.0 International License</a>の条件で許諾されます。</p> 185 186 <!--#include virtual="/server/bottom-notes.ja.html" --> 187 <div class="translators-credits"> 188 189 <!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.--> 190 </div> 191 192 <p class="unprintable"><!-- timestamp start --> 193 最終更新: 194 195 $Date: 2021/11/01 13:30:49 $ 196 197 <!-- timestamp end --> 198 </p> 199 </div> 200 </div> 201 <!-- for class="inner", starts in the banner include --> 202 </body> 203 </html>