JavaScript

出典: フリー百科事典『ウィキペディア(Wikipedia)』

JavaScript
パラダイム マルチパラダイム
登場時期 1995年
設計者 Brendan Eich
開発者 ネットスケープコミュニケーションズMozilla Foundation
最新リリース 1.8 / 2008年
型付け ダックタイピング
方言 JScript
影響を受けた言語 SchemeSelfPerlPython
  

JavaScriptジャバスクリプトジャヴァスクリプト、略称:JS)はスクリプト言語である。主にWebブラウザ上で動作し、HTMLの動的書き換えや入力フォームの自動補完など、ウェブページの使用感向上を目的として使用されたり、リッチクライアントアプリケーションの構築に使われる。

目次

[編集] 特徴

文法はプロトタイプベースオブジェクト指向型である。多くの場合は、C言語に似た手続き型言語のようなスタイルで書かれるが、関数型言語とも多くの類似点がある。近年ではその柔軟な設計が評価され、様々なアプリケーションで自動実行の用途におけるマクロ言語としても採用されている[1]

当初は、テキストエディタで編集するだけの簡単なアプリ構築に使われていたが、近年では、IntelliJ IDEASpket IDEなどにより、IDEにコード補完・編集時のリアルタイム文法チェック・リファクタリングなどの機能が搭載されるようになり、大規模開発が可能となった。また、Ajaxにおける、ブラウザ間の互換性の問題は、JavaScriptライブラリにより吸収することで、大きく解決された。さらに、ExtJSなどの本格的なGUIライブラリの登場により、デスクトップアプリと差がないアプリを作ることが可能となった。また、DWRなどのJavaScriptとサーバ間をつなぐ技術の発達により、クライアント・サーバ間の通信が著しく容易になり、また、JettyなどのアプリケーションサーバがComet利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のPush型の配信が実用的となった。

なおJavaScriptの間は詰めて表記する。Javaと名前や文法が似ているためしばしば混同されるが、互換性は全くない。Javaと呼ぶ場合はプログラミング言語Javaを指すので注意が必要。名前の由来については誕生を参照。

[編集] 歴史

[編集] 誕生

JavaScriptはネットスケープコミュニケーションズBrendan Eichによって開発され、Netscape Navigator 2.0 で実装された。開発当初はLiveScriptと呼ばれていたが、1995年Sun Microsystemsの開発したプログラミング言語Javaが当時大きな注目を浴びており、NetscapeとSun Microsystemsが技術提携していた事もあった為、JavaScriptという名前に変更された[2][3]1996年マイクロソフトInternet Explorer3.0に搭載されるようになると、その手軽さからJavaScriptは急速に普及していく。1997年、通信に関する標準を策定する国際団体Ecma Internationalによって JavaScript の中核的な仕様がECMAScriptとして標準化され (ECMA 262, ISO/IEC 16262, JIS X 3060)、多くの Webブラウザで利用できるようになった。 ネットスケープ社は、自社サーバ製品で、WEBアプリケーション開発言語としての実装であるLiveWire JavaScriptも開発した[3]が、こちらはあまり普及しなかった。

[編集] 現在のJavaScript

市場のブラウザ間互換性がある程度確立された2000年頃にはGoogleAmazon等の大手企業もJavaScriptを積極的に利用し始めた。代表的なものとしてはGoogle マップ[1]Amazon Diamond Search[2]等がある。2005年、JavaScriptの非同期通信を利用した技術にAjaxという名前がつけられたことによって、高機能なWebアプリケーションの開発言語の一つとして再び注目を集めている。しかし今も尚、JavaScriptによる脆弱性や攻撃は存在しており、状況が本質的に変わった訳ではない[要出典]

また、最近ではMozilla Firefox拡張機能GreasemonkeyOperaの標準機能などにおいて、「User JavaScript」と呼ばれる、JavaScriptを使ったWebのカスタマイズが可能なWebブラウザも出てきている。

[編集] JavaScript 2.0

2000年~2003年にかけて、JavaScript 2.0 を作ろうとした動きがあったが、ネットスケープコミュニケーションズとマイクロソフトの対立でまとまらなかった。当時ネットスケープコミュニケーションズが提案していた案がアドビの ActionScript 2.0 に引き継がれ、マイクロソフトの案が JScript .NET へと引き継がれた。その後 ECMAScript 4 の策定が進められ、2006年の時点でMozilla Foundation はこれに基づいて JavaScript 2.0 を作成することを表明していた。Mozilla は ECMAScript 4 の策定にあたって Python のよさを取り込んだ案を提案しており、自身でもこれを実装している[4]

ただその後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 で導入された名前空間・パッケージなどの機能は導入されない。[5]

[編集] セキュリティ上の制限

XMLHttpRequestや、IFRAMEを使った通信では、ダウンロード元のサーバ以外のURLにアクセスすることが出来ない。 そのため、一般的には、サーバを経由して他のドメインのリソースにアクセスすることが多いが、動的scriptタグの生成などにより、他のドメインのURLにアクセスすることが可能である。

[編集] 互換性問題

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

[編集] サンプルコード

// ブラウザに実装され、多数の拡張が施されたJavaScriptが一般に使用される。
 
alert("Hello, JavaScript.");
 
var userName; //変数宣言。必須ではない。
 
userName = prompt("名前を入力して下さい",""); //入力を要求する
 
if(userName != "") {
  //名前の入力があった場合
  document.write(userName, "さん、ようこそ!"); //画面に出力
} else {
  //名前の入力がなかった場合
  document.write("名無しさん、ようこそ!");      //画面に出力
}
//JavaScriptでの継承の方法
 
function Dog() {                     //Dogクラスのコンストラクタ
  this.state = "sitting";            //stateプロパティを設定
  this.showState = function() {      //showStateメソッドを定義
    alert("I am " + this.state + "."); 
  }
}
 
var normalDog = new Dog();           //DogクラスからインスタンスnormalDogを作成
normalDog.showState();               //“I am sitting.”が出力される。
 
function LazyDog() {                 //LazyDogクラスのコンストラクタ
  this.state = "sleeping..";         //stateプロパティをオーバーライド
}
LazyDog.prototype = new Dog();       //LazyDogはDogを継承(※インスタンスを継承することに注意)
 
var myDog = new LazyDog();           //LazyDogからインスタンスmyDogを作成
myDog.showState();                   //“I am sleeping...”が出力される。
 
/*
  JavaScriptでは,クラスはコンストラクタによって定義される。
  プロトタイプベースでは,原型(=プロトタイプ)となるインスタンスを継承して新しいクラスを作る。
  そのため,継承のためには少なくとも1つインスタンスを用意する必要がある。
*/

[編集] DOMとの関連

DOM(DocumentObjectModel)とJavaScriptの関連について述べる。DOMとはHTMLやXMLで書かれた文章にアクセスするためのAPI(の仕様)であり、一方でJavaScriptは1つのプログラミング言語である。したがって、DOMとJavaScriptはまったく独立に存在しうるものであり、JavaScript以外から呼び出されるDOM実装(例えばpythonのDOMライブラリ)や、DOMを備えないJavaScript実装(例えばSpiderMonkey)も存在する。

しかし、JavaScriptがwebサイトのリッチ化を目的として多く使われていること、DOMがHTMLのタグ属性を参照/変更する機能をもつこと、そしてJavaScriptからDOMが通常の画面出力と同様な方法で呼び出せること(たとえばFireFox上で動作するJavaScriptでは通常の画面出力にはdocument.write()が、DOMが保持するHTMLオブジェクトに新たなノードを付け加えるにはdocument.createElement()が使われる)が原因で、しばしば「DOMはJavaScriptの一部」と誤解されがちである。実際、これらが組み合わさると、あたかも「JavaScriptのみでwebサイトの文字色が動的に変更できた」かのように見える。

以上のことについては、Mozilla Developer CenterのThe DOM and JavaScriptも参照されたい。

[編集] バージョンとブラウザ対応関係

バージョン リリース日 相当規格 Netscape
Navigator
Mozilla
Firefox
Internet
Explorer
Opera Safari Google
Chrome
1.0 1996年3月 2.0 3.0
1.1 1996年8月 3.0
1.2 1997年7月 4.0-4.05
1.3 1998年10月 ECMA-262 1st edition / ECMA-262 2nd edition 4.06-4.7x 4.0
1.4 Netscape
Server
1.5 2000年11月 ECMA-262 3rd edition 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 6)
6.0,
7.0,
8.0,
9.0
1.6 2005年11月 1.5 + Array extras + Array and String generics + E4X 1.5 3.0, 3.1
1.7 2006年10月 1.6 + Pythonic generators + Iterators + let 2.0 3.2, 4.0 1.0
1.8 2008年7月 1.7 + Generator expressions + Expression closures 3.0
1.8.1 1.8 + Minor Updates 3.5
1.9 1.8.1 + ECMAScript 5 Compliance 4

[6]

[編集] 主な実装

[編集] 主な開発環境

[編集] 外部ライブラリ

以下に、JavaScriptで比較的有名だと思われるライブラリを挙げる。

[編集] 関連するプログラミング言語

[編集] 関連していると誤解されがちなプログラミング言語

  • Java(JavaScriptと名称は似ていて間違えやすいが、違う言語(文法もほとんど似ていない)。詳しくは誕生を参照。)

[編集] 関連項目

[編集] 脚注

  1. ^ 例えば Adobe Acrobat は JavaScript によるマクロ機能を搭載している。
  2. ^ Marc Andreessen. "INNOVATORS OF THE NET: BRENDAN EICH AND JAVASCRIPT". 2008年1月22日 閲覧。
  3. ^ a b "NETSCAPE AND SUN ANNOUNCE JAVASCRIPT, THE OPEN, CROSS-PLATFORM OBJECT SCRIPTING LANGUAGE FOR ENTERPRISE NETWORKS AND THE INTERNET". 2008年1月22日 閲覧。
  4. ^ "Python and JavaScript" (英語). Brendan's Roadmap Updates (2006-02-19). 2007年9月5日 閲覧。
  5. ^ JavaScript 2.0はECMAScript 3.1ベースに、ECMAScript 4は譲歩 - マイコミジャーナル
  6. ^ John Resig. "Versions of JavaScript". Ejohn.org. 2009-05-19 閲覧。

[編集] 外部リンク

ウィキブックス
ウィキブックスJavaScript関連の教科書や解説書があります。