統合開発環境

From IDE Collections
Jump to: navigation, search
This page is a translated version of the page Integrated development environment and the translation is 100% complete.

Other languages:
English • ‎日本語

統合開発環境(IDE)は、プログラマがプログラムを書いたり、実行したり、デバッグするためのインタラクティブなユーザインタフェースを備えた環境を指します。IDEには、プログラミングに利用するプログラミング言語、コンパイラ、デバッガ、ツールキットやその他のツールが含まれます。一般的なツールがプログラミング活動の一部だけを支援するものであるのに対し、環境は全体を支援するものです。

このページはIDEが進化してきた歴史を時系列に説明しています。IDEの研究に関する国際会議の一覧Category:Academic conferencesを見てください。個別具体的な説明があるIDEの一覧Category:Integrated development environmentsを見てください。

IDEの歴史

1950年代: 手作業によるプログラミングの時代

コンピュータのプログラミング作業は、最初の頃はインタラクティブと言い難いものでした。プログラマはパンチカードを使って機械語を記述し、コンピュータに命令を送っていました。カードにパンチする物理作業には、計算機による支援が入る余地がありませんでした。

1960年代: IDEの登場

世界最初のIDEと言われているのは、Character-based User Interface (CUI)とハイレベルな文字ベースのプログラミング言語が登場したあと、1964年に開発されたDartmouth BASICです。このIDEはテキストエディタを備え、コンパイラを内蔵しており、プログラムをIDEの中でコンパイルして実行できました。当時コンピュータはまだ個人のものではなく、今のスーパーコンピュータがそうであるように、たくさんの人が共有して利用するものでした。Dartmouth BASICは、そのような目的で作られたDartmouth Time Sharing System (DTSS)で動作する開発環境であり、利用者は全員が専門知識を備えたプログラマでした。

1970年代: プロのための、文字ベースのIDE

近代的なIDEには当然備わっているべきと考えられるインタラクティブな機能の多くは1970年代に開発されました。その歴史はInteractive Programming Environments[1]という本によくまとまっています。例えば、デバッガや解析ツール、構造化エディタなどがIDEに組み込まれました。よりインタラクティブな開発環境は、生産性を向上させるために非常に重要な要素と考えられており、研究開発が積極的に行われました。例えば、Interlispというデバッガと解析ツールを備えたIDEは1967年から1970年代を通してXerox PARCで継続的に開発されました。また、Cornell Program SynthesizerMENTORは、それぞれPL/IとPascalというプログラミング言語の構造化エディタを含むIDEで、同時期に開発されました。

1980年代: エンドユーザの登場

1980年代は、プログラミングにおけるヒューマンファクターがにわかに注目を集めた時代です。これは、IBMがパーソナルコンピュータを1981年に発売したのを皮切りに、プログラミングの初学者や、プログラミングの知識を持たないエンドユーザの数が劇的に増えたことが要因と考えられます。ヒューマンファクターに興味を持った研究者はエンドユーザプログラミングやGraphical User Interface (GUI)の研究に注力し、プログラミングの前提知識が不要でも使えるコンピュータの実現を目指しました。Human-Computer Interaction分野の主要な国際会議はこの時代に生まれました。なお、プログラミングに関する主要な国際会議も同様に1980年代生まれです。ソフトウェア工学やプログラミング言語のデザインに関する研究も、同時期に目覚ましい進展があったわけです。ただし、文字ベースの開発環境を改善する研究は、プログラミング言語の設計に関する研究と比べると目立ちません。プログラミング言語の設計指針はホーアの論文[2]のように多数見られますが、IDEの研究はわずかです[3][4]

エンドユーザは通常、プログラムを与えられた状態のまま使用します。したがって、エンドユーザは自分の意図をプログラムのコマンド列に置き換えて考え、しばしばコマンドを何回も繰り返す必要に迫られます。そのような面倒を避けるために、プログラムを作ったり、編集したり、拡張したいという欲求が生まれます。エンドユーザプログラミングは、そのような欲求を持ったエンドユーザやプログラミング初心者が直面するさまざまな課題に応える研究分野です。その方針は、大まかに2つに分けられます。ひとつはプログラミングを簡単にすることで、もうひとつは、いわゆるプログラミングそのものをなくしてしまうことです。例えば、構造化エディタやVisual Programmingに関する研究はひとつめ、Programming by Exampleに関する研究はふたつめの方針に沿った研究といえます。それぞれに関する詳細な説明はCategory:Visual programmingCategory:Programming by exampleに載せてあります。これらの用語の使い分けについては、Myerらのサーベイ論文[5]を読むと詳しく書いてあります。

Visual Programming言語はたいてい何らかのグラフィカルな開発環境を伴うものとして開発されたのですが、文字ベースのプログラミング言語用のIDEはBASIC以来似たような見た目のままでした。そのような開発環境は、ファイルマネージャ、文字ベースのソースコードエディタ、そして文字ベースのデバッガなどから構成されます(例: Eclipse)。グラフィカルな表現はあまり使われません。既存の文字ベースのIDEが持たない機能を提供するために、さまざまなプログラマ向けのツールが開発されてきました。とくに長い歴史を持つツール研究の例として、ユーザインタフェース用ツールキット [6]が挙げられます。しかし、IDEそのものは劇的な変化を遂げることはなかったのです。文字ベースのIDEは、職業プログラマの大部分にとってプログラム開発の主要な手段であり続けました。

1990年代: アプリケーション開発の複雑さが増加した時代

1990年代はプログラミングがより複雑で面倒なタスクになった時代です。例えば、GUIを文字だけで開発するのは簡単ではありません。そこで、1991年にリリースされたVisual Basic 1.0は、グラフィカルなGUIビルダを文字ベースのIDEに組み込みました。これによって、プログラマはインタフェースのデザインと機能の実装の間をシームレスに行き来することが可能になりました。1995年には、LiebermanがノーマンのGulf of execution and evaluationという概念[7]をプログラミングに適用しました。静的な文字ベースのソースコードから動的なプログラムの振る舞いを理解することの難しさを指摘した[8]のです。そして、この問題を解決するためにZStepというIDEに組み込まれたビジュアルなデバッガを提案しました。これは、プログラムのソースコード中の表現とその出力の間の関係を、プログラム実行中に可視化するものです。

2000年代: 自然なプログラミングの実現に向けて

2000年代に入ると、文字ベースのIDEに対するさまざまな改善手法が提案されました。そのような研究事例の中でも著名なのがNatural Programmingプロジェクト[9]でしょう。これはMyersらが1998年に始めた取り組みです。彼らのそれ以前の研究は、プログラミング初心者がプログラミング言語の使い勝手に関してどのような問題を抱えているかを分析したもの[3]であったのに対し、Natural ProgrammingプロジェクトはIDEとそれに付随するライブラリにより注目したものでした。彼らの研究は人間中心のアプローチで進められています。すなわち、まずプログラマの振る舞いを調査して、それに対する改善策を提案するのです。例えば、エンドユーザ向けプログラミングシステムを習得する際の6つの課題[4]が調査されました。この研究では、Liebermanの提案したGulf of execution and evaluationのアイデア[8]が拡張されています。そして、その後続研究として実際の技術的改善案がいくつも提案されました。

これまでに述べたようなIDEの改善案を研究できるようになったことには3点の理由が挙げられます。

  1. インターネット はプログラマ同士の協業の方法を広げました。また、オープンソースの技術を劇的に増加させました。例えば、IDEの利用履歴を匿名化して収集し、分析して活用することで使い勝手の向上を狙ったり、インターネット越しの共同作業を支援することができるようになりました。
  2. プログラムの種類 はこれまでにない速度で継続的に増えています。とくに、カメラを利用したインタラクティブなアプリケーションやロボットアプリケーションのような、物理的なインタラクションを含むプログラムの活用が増加しています。このようなプログラムを開発する際は、ツールによる支援やIDEの改善が必要になります。
  3. 技術の進歩 によってIDEの拡張が容易になりました。拡張用フレームワークが整備され、IDEがオープンソースで配布されるようになり、プログラミング言語の機能が向上してリフレクションAPIのようにプログラムを改変するための機能を容易に追加できるようになりました。このような技術の進歩により、プログラマは、既存のIDEが提供する機能はそのままに、改善点だけに集中できるようになりました。

参考文献

  1. David R. Barstow, Howard E. Shrobe, Erik Sandewall, Stephen W. Smoliar. Interactive programming environments
    Vol. 9, ACM, New York, NY, USA, July 1984. [URL] [BibTeX]
  2. C. A. R. Hoare. Hints on Programming Language Design
    Programming Languages, pp.31-40, 1983. [URL] [BibTeX]
  3. 3.0 3.1 John F. Pane, Brad A. Myers. Usability issues in the design of novice programming systems
    1996. [BibTeX]
  4. 4.0 4.1 Andrew J. Ko, Brad A. Myers, Htet Htet Aung. Six Learning Barriers in End-User Programming Systems
    Proceedings of the 2004 IEEE Symposium on Visual Languages and Human-Centric Computing, pp.199-206, 2004. [BibTeX]
  5. Brad A. Myers. Visual programming, programming by example, and program visualization: a taxonomy
    Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, pp.59-66, New York, NY, USA, 1986. [URL] [BibTeX]
  6. Brad A. Myers, Scott E. Hudson, Randy Pausch. Past, present, and future of user interface software tools
    ACM Transactions on Computer-Human Interaction (TOCHI), 7(1):3-28, New York, NY, USA, March 2000. [URL] [BibTeX]
  7. Donald A. Norman, Stephen W. Draper. User Centered System Design; New Perspectives on Human-Computer Interaction
    L. Erlbaum Associates Inc., Hillsdale, NJ, USA, 1986. [URL] [BibTeX]
  8. 8.0 8.1 Henry Lieberman, Christopher Fry. Bridging the gulf between code and behavior in programming
    Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, pp.480-486, New York, NY, USA, 1995. [URL] [BibTeX]
  9. Brad A. Myers, John F. Pane, Andy Ko. Natural programming languages and environments
    Communications of the ACM, 47(9):47-52, New York, NY, USA, September 2004. [URL] [BibTeX]