Java Script

Java Scriptとは略語で「JS」と呼ばれており、スクリプト言語の一種です。
ネットスケープコミュニケーションズ社のBrendan Eichによって開発されたスクリプト言語で、Netscape Navigator 2.0から実装されました。
開発当初は、「LiveScript」と呼ばれていましたが、後に「Java」という言語を開発したSun MicrosystemsとNetscapeが技術提携したため、「JavaScript」という名前に変更されました。
2005年、JavaScriptの非同期通信を利用した技術である「Ajax」という名前がつけられたことによって、高機能なWebアプリケーションの開発言語の一つとしてサイド注目を浴びた。

JavaScriptの特徴

文法はプロトタイプベースのオブジェクト指向型です。多くの場合は、C言語に似た手続き型言語のようなスタイルで書かれていますが、関数型言語とも多くの類似点があります。近年ではその柔軟な設計が評価され、様々なアプリケーションで自動実行の用途におけるマクロ言語としても採用されています。
当初は、テキストエディタで編集するだけの簡単なアプリ構築に使われていましたが、近年では、IntelliJ IDEAやSpket IDEなどにより、IDEにコード補完・編集時のリアルタイム文法チェック・リファクタリングなどの機能が搭載されるようになり、大規模開発が可能となりました。
また、Ajaxにおける、ブラウザ間の互換性の問題は、JavaScriptライブラリにより吸収することで、大きく解決されました。
さらに、ExtJSなどの本格的なGUIライブラリの登場により、デスクトップアプリと差がないアプリを作ることが可能となりました。
また、DWRなどのJavaScriptとサーバ間をつなぐ技術の発達により、クライアント・サーバ間の通信が著しく容易になり、また、JettyなどのアプリケーションサーバがComet利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のPush型の配信が実用的となりました。

JavaScriptの歴史

誕生
JavaScriptはネットスケープコミュニケーションズのBrendan Eichによって開発され、Netscape Navigator 2.0 で実装されました。開発当初はLiveScriptと呼ばれていましたが、1995年にSun Microsystemsの開発したプログラミング言語Javaが当時大きな注目を浴びており、NetscapeとSun Microsystemsが技術提携していた事もあった為、JavaScriptという名前に変更されました。1996年にマイクロソフトのInternet Explorer3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していきます。1997年、通信に関する標準を策定する国際団体Ecma Internationalによって JavaScript の中核的な仕様がECMAScriptとして標準化され (ECMA 262, ISO/IEC 16262, JIS X 3060)、多くの Webブラウザで利用できるようになりました。 ネットスケープ社は、自社サーバ製品で、WEBアプリケーション開発言語としての実装であるLiveWire JavaScriptも開発しましたが、こちらはあまり普及しませんでした。
現在のJavaScript
市場のブラウザ間互換性がある程度確立された2000年頃にはGoogleやAmazon等の大手企業もJavaScriptを積極的に利用し始めました。代表的なものとしてはGoogle マップやAmazon Diamond Search等があります。2005年、JavaScriptの非同期通信を利用した技術にAjaxという名前がつけられたことによって、高機能なWebアプリケーションの開発言語の一つとして再び注目を集めています。
しかし今も尚、JavaScriptによる脆弱性や攻撃は存在しており、状況が本質的に変わった訳ではありません。また、最近ではMozilla Firefox用拡張機能のGreasemonkeyやOperaの標準機能などにおいて、「User JavaScript」と呼ばれる、JavaScriptを使ったWebのカスタマイズが可能なWebブラウザも出てきています。
JavaScript2.0
2000年~2003年にかけて、JavaScript 2.0 を作ろうとした動きがありましたが、ネットスケープコミュニケーションズとマイクロソフトの対立でまとまりませんでした。当時ネットスケープコミュニケーションズが提案していた案がアドビの ActionScript 2.0 に引き継がれ、マイクロソフトの案が JScript .NET へと引き継がれました。その後 ECMAScript 4 の策定が進められ、2006年の時点でMozilla Foundation はこれに基づいて JavaScript 2.0 を作成することを表明していました。Mozilla は ECMAScript 4 の策定にあたって Python のよさを取り込んだ案を提案しており、自身でもこれを実装しています。
ただその後ECMAScriptの標準化作業が、Mozilla / Adobe / Opera / Google らが推す ECMAScript 4 と、Microsoft / Yahoo! らが推す ECMAScript 3.1に事実上分裂してしまった影響から、2008年8月に大きな方針転換が有り、JavaScript 2.0のベースを策定するプロジェクトとして新たに「ECMAScript Harmony」が発足しました。同プロジェクトでは ECMAScript 3.1をベースとしつつも、ECMAScript 4 に入る予定だった機能のいくつかを取り込む形で標準を策定する予定となっています。なお、ECMAScript 4 で導入された名前空間・パッケージなどの機能は導入されません。

Java Scriptと検索エンジン

Java Scriptと検索エンジンの関係を解説していきます。
Google(Googlebot)やYahoo!(YST)など多くのロボット型検索エンジンは、Java scriptを読み込むことが困難であるといわれています。
つまり、検索エンジン最適化(SEO)を意識したサイト構造して、Java scriptを多用することは不利であるといわれています。
以前までは、全くと言って良いほど検索エンジンはJava scriptを読み込んでくれませんでしたが、今後Java scriptは検索エンジンに完全に読まれるということになるかもしれません。
しかし、現状読まれづらいのは確かであるため、サイトを構築する際にJava scriptを多用するのは推奨できません。
検索エンジンの技術が益々進歩していき、検索エンジンがJava scriptを完全に読み込む日は、そう遠くないかもしれません。

JavaScriptのセキュリティ問題

JavaScriptは、アクセス先サーバにより送信されたプログラムを動作させる機構です。HTMLのようなテキストや画像の位置を指定するだけの簡易な構文解析とは異なり、複雑な計算処理による無限の組み合わせをともなう構文解析処理が必要となるため、JavaScriptを動作させるソフトウェアでは、セキュリティホールを作らずに開発されることが期待できる機能とはいえません。これは構文解析を行うシステム共通の問題といえますが、JavaScriptが問題なのは、サイトの信頼性を意識することのない不特定のアクセス先サーバによって、意図的に構文解析システムのエラー検知を回避するエラーコードが送信され、それがリアルタイムに実行されることにあります。つまり、バッファオーバーランなどを意図的に発生させるといった通常のコンパイラでは有り得ない要求を構文解析システムが受けることにより、任意のコードが実行され、クライアントPCのコンピュータが乗っ取られるわけです。悪意あるサイトにアクセスすることはないとしているユーザであっても、iframeなどによりアクセスさせられている場合があります(クロスサイトスクリプティング)。また、ブラウザクラッシャーについては簡単に作成することができます。これまでのセキュリティホールの数々は「JavaScript 脆弱性」などとして検索することにより確認することができます。多くのブラウザではJavaScriptやiframeは無効にすることができます。

JavaScriptにおける互換性の問題

■JavaScriptの登場当初は、ブラウザベンダー間で言語仕様の独自拡張競争が繰り広げられたためブラウザ間の互換性が極めて低かったです。しかし、現在ではECMAScriptの登場により言語の実装に関する互換性は極めて高くなり、DOMなど関連仕様の実装に関する互換性も比較的高くなっています。ただ、現在でもECMAScript以前の古い書式やブラウザ独自のDOMを使ったコードが使用されている場合が多く、互換性が完全に解消されたとは言えない状況です。
■単純な装飾処理や入力チェック等は比較的安易に導入できるため、現状では利用者の多くが言語仕様やDOM仕様、ブラウザベンダの提供する技術文書等に目を通さずに使用しています。また、JavaScript関連の書籍・Tipsサイト等も仕様に目を通さずに執筆・出版している場合があり、ひどい場合には標準に従わない古いコードや特定ブラウザしか動作しないコードをサンプルとして紹介している場合があります。このため各利用者の使用法に大きな癖があることが多いです。ベンダにとっては新しいブラウザの開発にあたり、現存するウェブページの大半が問題なく表示・動作可能な製品を提供することも使命であるため、この実情がブラウザ間での完全な互換性を確立することを困難にしています。
■1999年のECMA262-3以来、数えるほどのベンダ独自拡張があっただけで、言語仕様自体の変更は無かったと言えます。しかし、XULでの使われ方や、Ajaxと呼ばれる使われ方など、複数の人間が長期間携わって作り管理するようなものが目に付くようになってきています。スレッド機能を持たないことを除けば、現在の言語仕様に限界が見えてきているわけではありませんが、より楽な管理を実現する為に、言語仕様改訂を待ち望む声は少なくありません。

関連タグ

Ajax、JScript、ECMAScript、Java、Document Object Model、ネットスケープコミュニケーションズ、ActionScript、Mozilla Foundation、Python、AJAJA、Rhino、Narcissus、Comet、Jetty、ブックマークレット、JavaScript Object Notation、Ecmaインターナショナル、Greasemonkey、XMLHttpRequest、データ記述言語、ダック・タイピング、プロトタイプベース、Self、リファクタリング、クロスサイトスクリプティング、手続き型プログラミング、ダイナミックHTML、ブラウザクラッシャー、 Adobe Dreamweaver、XUL、マクロ言語、アップル・コア、スタイルシート、Adobe Acrobat、拡張機能 (Mozilla) 、Netscape Navigator (ネットスケープコミュニケーションズ)、セキュリティホール、関数型言語、ブラウザ戦争、KJS