| CARVIEW |
JavaScript
出典: フリー百科事典『ウィキペディア(Wikipedia)』
| JavaScript | |
|---|---|
| パラダイム | マルチパラダイム |
| 登場時期 | 1995年 |
| 設計者 | Brendan Eich |
| 開発者 | ネットスケープコミュニケーションズ、Mozilla Foundation |
| 型付け | ダックタイピング |
| 方言 | JScript |
| 影響を受けた言語 | Scheme、Self、Perl、Python |
| 表・話・編・歴 | |
JavaScript(ジャバスクリプト、ジャヴァスクリプト、ジャワスクリプト、略称:JS)はスクリプト言語である。主にWebブラウザ上で動作し、HTMLの動的書き換えや入力フォームの自動補完など、ウェブページの使用感向上を目的として使用されたり、リッチクライアントアプリケーションの構築に使われる。
目次 |
[編集] 特徴
文法はプロトタイプベースのオブジェクト指向型である。多くの場合は、C言語に似た手続き型言語のようなスタイルで書かれるが、関数型言語とも多くの類似点がある。近年ではその柔軟な設計が評価され、様々なアプリケーションで自動実行の用途におけるマクロ言語としても採用されている[1]。
当初は、テキストエディタで編集するだけの簡単なアプリ構築に使われていたが、近年では、IntelliJ IDEAやSpket IDEなどにより、IDEにコード補完・編集時のリアルタイム文法チェック・リファクタリングなどの機能が搭載されるようになり、大規模開発が可能となった。また、Ajaxにおける、ブラウザ間の互換性の問題は、JavaScriptライブラリにより吸収することで、大きく解決された。さらに、ExtJSなどの本格的なGUIライブラリの登場により、デスクトップアプリと差がないアプリを作ることが可能となった。また、DWRなどのJavaScriptとサーバ間をつなぐ技術の発達により、クライアント・サーバ間の通信が著しく容易になり、また、JettyなどのアプリケーションサーバがComet利用時のメモリ使用量の削減を実現したため、サーバからクライアントへの情報のPush型の配信が実用的となった。
なおJavaとScriptの間は詰めて表記する。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年頃にはGoogleやAmazon等の大手企業もJavaScriptを積極的に利用し始めた。代表的なものとしてはGoogle マップ[1]やAmazon Diamond Search[2]等がある。2005年、JavaScriptの非同期通信を利用した技術にAjaxという名前がつけられたことによって、高機能なWebアプリケーションの開発言語の一つとして再び注目を集めている。しかし今も尚、JavaScriptによる脆弱性や攻撃は存在しており、状況が本質的に変わった訳ではない[要出典]。
また、最近ではMozilla Firefox用拡張機能のGreasemonkeyやOperaの標準機能などにおいて、「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にアクセスすることが可能である。
[編集] 問題点
- 悪意のあるユーザによってクロスサイトスクリプティングや、ブラウザクラッシャー等の危険性のあるページが生成される可能性がある。
- ブラウザ間の、言語仕様そのものの実装に関する互換性は極めて高く、DOMなど関連仕様の実装に関する互換性も比較的高い。しかし、単純な装飾処理や入力チェック等は比較的安易に導入できるため、現状では利用者の多くが言語仕様やDOM仕様、ブラウザベンダの提供する技術文書等に目を通さずに使用している。このため各利用者の使用法に大きな癖があることが多い。ベンダにとっては新しいブラウザの開発にあたり、現存するウェブページの大半が問題なく表示・動作可能な製品を提供することも使命であるため、この実情がブラウザ間での完全な互換性を確立することを困難にしている。
- 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 LasyDog() { //LasyDogクラスのコンストラクタ this.state = "sleeping.."; //stateプロパティをオーバーライド } LasyDog.prototype = new Dog(); //LasyDogはDogを継承(※インスタンスを継承することに注意) var myDog = new LasyDog(); //LasyDogからインスタンス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も参照されたい。
[編集] Firefox での対応関係
| JavaScript バージョン | Netscape/Firefox バージョン | 概要 |
|---|---|---|
| 1.0 | Netscape Navigator 2.0 | |
| 1.1 | Netscape Navigator 3.0 | |
| 1.2 | Netscape Navigator 4.0 - 4.05 | |
| 1.3 | Netscape Navigator 4.06 - 4.7 | ECMA-262 第1版 |
| 1.4 | ||
| 1.5 | Netscape 6.0, Firefox 1.0 | ECMA-262 第3版, ゲッタとセッタ, 定数 |
| 1.6 | Firefox 1.5 | E4X, Arrayの拡張, Array および String の汎用化 |
| 1.7 | Firefox 2.0 | ブロックスコープ, ジェネレータ, イテレータ, 分割代入 |
| 1.8 | Firefox 3.0 | 式クロージャ, ジェネレータ式 |
参考:MDC JavaScript version overviews, Netscape Devedge JavaScript Central
[編集] 主な実装
- KJS
- Narcissus(JavaScript)
- Rhino(Java)
- SpiderMonkey(C言語)
- Google V8 JavaScript Engine(C++)
[編集] 主な開発環境
- Aptana
- Adobe Dreamweaver
- IntelliJ IDEA - リファクタリング機能などを搭載
- JSEclipse
[編集] 外部ライブラリ
以下に、JavaScriptで比較的有名だと思われるライブラリを挙げる。
- AJAJA
- Beyond JS
- Clean AJAX
- common.js
- Concurrent.Thread
- Dojo
- DWR
- Ext JS
- jQuery
- JSDoc
- MochiKit
- mootools
- OpenLink AJAX Toolkit
- Prototype
- qooxdoo
- Rialto
- Rico
- script.aculo.us
- SmartClient
- The Yahoo! User Interface Library (YUI)
[編集] 関連するプログラミング言語
[編集] 関連していると誤解されがちなプログラミング言語
[編集] 関連項目
- Ajax
- Document Object Model (DOM)
- JavaScript Object Notation (JSON) - JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語。
- スタイルシート
- ダイナミックHTML
- ブックマークレット
[編集] 脚注
- ^ 例えば Adobe Acrobat は JavaScript によるマクロ機能を搭載している。
- ^ Marc Andreessen. "INNOVATORS OF THE NET: BRENDAN EICH AND JAVASCRIPT". 2008年1月22日 閲覧。
- ^ a b "NETSCAPE AND SUN ANNOUNCE JAVASCRIPT, THE OPEN, CROSS-PLATFORM OBJECT SCRIPTING LANGUAGE FOR ENTERPRISE NETWORKS AND THE INTERNET". 2008年1月22日 閲覧。
- ^ "Python and JavaScript" (英語). Brendan's Roadmap Updates (2006-02-19). 2007年9月5日 閲覧。
- ^ JavaScript 2.0はECMAScript 3.1ベースに、ECMAScript 4は譲歩 - マイコミジャーナル
[編集] 外部リンク
- Core JavaScript 1.5 Reference - Mozillaによる。Core JavaScript 1.5 リファレンス(邦訳版だが量は少ない)
- Core JavaScript 1.5 ガイド - Mozillaによる邦訳版ガイド。
- JavaScriptコーディングのガイドライン - Apple社による邦訳版ガイドライン。WebKit系ブラウザSafariの指針
- Client-Side JavaScript Guide - Netscape Devedge - window,document等のWebブラウザに特有のオブジェクトの使い方
- Yahoo! JavaScript カテゴリ
- Open Directory - JavaScript カテゴリ
- Javascript Tutorials
- Firecat - Server-Side JavaScript ウェブサーバ
個人用ツール
他の言語
- Afrikaans
- العربية
- Žemaitėška
- Беларуская (тарашкевіца)
- Български
- ᨅᨔ ᨕᨘᨁᨗ
- Català
- Česky
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Eesti
- Euskara
- فارسی
- Suomi
- Français
- Galego
- עברית
- हिन्दी
- Hrvatski
- Magyar
- Interlingua
- Bahasa Indonesia
- Íslenska
- Italiano
- ქართული
- ភាសាខ្មែរ
- 한국어
- Lietuvių
- Latviešu
- Македонски
- മലയാളം
- Монгол
- Bahasa Melayu
- Nederlands
- Norsk (bokmål)
- Polski
- Português
- Română
- Русский
- Simple English
- Slovenčina
- Slovenščina
- Shqip
- Српски / Srpski
- Svenska
- தமிழ்
- Тоҷикӣ
- ไทย
- Türkçe
- Українська
- Tiếng Việt
- 中文
- 粵語
- 最終更新 2008年12月4日 (木) 12:20 (日時はオプションで未設定ならばUTC)。
- All text is available under the terms of the GNU Free Documentation License. (詳細は 著作権 を参照)
Wikipedia® は Wikimedia Foundation, Inc. の米国およびその他の国における登録商標です。 - プライバシー・ポリシー
- ウィキペディアについて
- 免責事項

