ITが生活のいろんな部分に入り込んでくるにつれ、プログラミングの重要性がどんどん増しています。しかし、Visual StudioEclipseに代表されるような開発環境の使い勝手を向上させる研究は、意外といっていいほど見当たりません。その中でも著名な研究は、Last authorをたどるとたいてい2人の研究者に行き着きます。ユーザインタフェース(UI)・Human-Computer Interaction(HCI)という研究分野はありとあらゆる人が使う情報機器を対象とします。プログラマ向けUIである開発環境だってもちろん研究対象となるはずなんですが、関連研究の少なさ、関わってきた人の少なさから、これまでは世界的にもマイナーな研究分野だったと言えると思います。

ただ、僕はこの研究分野はすごく重要だし、今後どんどん成長すると思っています。現に、ここ一年でWebベースの開発環境Cloud9や教育目的のKhanAcademyに組み込まれたインタプリタ、ライブコーディングが可能な開発環境LightTableなど、プログラミング体験を全く別のものにする試みがたくさん走り始めています。これらはプロダクトの例ですが、研究としては2つの分野の学際領域にあるので、まずは隣接分野との比較を通して輪郭をなぞってみます。さらに、これからの開発環境のあるべき姿(研究が進む方向)について考えてみます。

ちょっと長くなりそうなので、このページでは最初の3分の1だけ書くことにしますね。プロダクトでも研究でも、もし紹介から漏れている興味深いプロジェクトがあったらぜひ教えてください。

  • このページ: UIツールキットと開発環境(研究分野: HCI, 主な学会: CHIUIST
    • 分野のオーバービュー
    • これまでHCIで開発環境の研究が少なかった理由
      • 開発環境の開発が大変だったから
    • これからHCIで開発環境の研究が増える理由
      • 開発環境の開発が簡単になったから
      • 既存の開発環境が多種多様なアプリケーション開発に対応しきれなくなったから
      • インターネットの常時接続が普通になったから
  • 次回: プログラミング言語と開発環境(研究分野: SE, PL, 主な学会: ICSEPLDI, SPLASH/Onward!
  • 次々回: これからの開発環境研究

UIツールキットと開発環境

まず、UI・HCI分野での開発環境研究について書いてみます。UIとHCIはとても似た言葉ですが、微妙にニュアンスの違いがあります。UIは情報機器の道具としての使い勝手に焦点を当てる言葉ですが、HCIはより広く、情報機器と人の間の関係性を指しており、UIという言葉で括れない研究がたくさん生まれてからできた言葉です。

この分野で有名なUISTという国際会議では、UIを構築するためのツールキット、つまりUIプログラマが使う道具が数多く提案されてきました。もっとも網羅的な最近のサーベイ論文は2000年のジャーナルに載ったPast, Present, and Future of User Interface Software Toolsでしょうか。同じ著者が1995年に同じジャーナルにUser Interface Software Toolsというサーベイ論文を書いているので、そろそろ次の世代のサーベイ論文が出てもいい頃だと思うのですが…何かよさそうなものがあったら教えてください。

これらのサーベイで触れられているUIツールキットは開発環境の外部ツールやソフトウェアのライブラリとして提供され、アプリケーション開発工程の一部だけを支援するものがほとんどです。一方で開発環境の研究は、ふつう、コーディングとデバッグなど、プログラミングのワークフロー全体を支援してくれます。

ツールキットと開発環境比較の具体例として、インタラクティブな画像処理のプログラムをプロトタイピングするためのツールEyepatch[Monzy et al., 2007]と、同様のプログラミング全般を支援する開発環境DejaVu[Kato et al., 2012]を簡単に紹介します。

左がEyepatchです。GUIの画面上で画像処理のサンプルをたくさん記録して、機械学習などのアルゴリズムを使って物体認識などをさせることができます。認識結果はネットワーク経由で送出されるので、他のプログラムから自由に利用できます。要は、画像認識を使ったインタラクティブなアプリケーションを作りたいときに、その部分のコードを書く手間を省いてくれるのです。ただし、アプリケーションを書くには別に立ち上げた開発環境とEyepatchの間を往復しなくてはなりません。

一方、右が拙作のDejaVuです。通常のコーディングに使われる統合開発環境をベースに、CanvasとTimelineというインタフェースを追加しています。(これらのインタフェースの使い勝手については公式サイトに詳しく書いてあります。)DejaVuは開発環境そのものであり、一般的な画像処理のプログラミング体験全体を支援することを目指して作られているため、単体でアプリケーションを作ることができます。

つまり、ツールキット研究はプログラマが使える道具を提案しますが、開発環境の研究はプログラマのプログラミング体験(PX)を向上させることを目指します。ここで、UIとHCIという言葉の違いを思い出してみてください。開発環境の研究は、単なるUIの改善に留まらない、ユーザ体験(User experience, UX)を重視するHCIの研究なのです。僕を含む何人かの研究者は、UXにあやかってProgrammer’s experience, PXという言葉を作り、積極的に使っています。開発環境を作りこんでPXを改善すれば、プログラマの生産性は必ず向上します。PXという考え方をより多くの人に知ってもらうことは、このブログを立ち上げた大きな理由の一つです。

これまでHCIで開発環境の研究が少なかった理由

開発環境の開発が大変だったから

HCI分野において本気の開発環境研究がなかなか生まれにくかった背景には、どうしても研究上の新規性に比して実装にかかるコストが大きめになることがあったように思われます。

5-10年前の段階では、オープンソースの統合開発環境のコードベースがとても大きく、あまり整理されていませんでした。そのため、何かを新しく作るには書くコード量が多く、既存の環境の上に乗せるプラグインを作るにしても読むコード量が多く…と、かなり苦労しないと開発環境を作り上げることができなかったのです。例えば2006年の段階では、テキストベースのコードエディタの中に絵などのマルチメディアコンテンツを貼りこめる構造化エディタを作れるフレームワークBarista[Ko et al., 2006]を提案しただけでも、ちゃんと研究論文になっています。

これからHCIで開発環境の研究が増える理由

開発環境の開発が簡単になったから

直近の5-10年の間に、開発環境の実装に必要なコンポーネントが急速に整備されてきています。そして、オープンソースの開発環境のコードが整理されてきており、それなりに読みやすくなってきています。

例えば、画像を貼りこめるエディタを提供する開発環境Sikuli[Yeh et al., 2009]の実装ではJava Development Kitの標準コンポーネントJTextPaneが使われており、Baristaのような手法は最早不要となっています。Visual Studioチームはcompilers as servicesと銘打って、コードネームRoslynでインキュベーションプロジェクトを進めています。Roslynは、統合開発環境が提供するすべての機能を開発者向けにAPIとして提供することを目指しています。また、上述のDejaVuはC#ベースのオープンソースな統合開発環境SharpDevelopを拡張して実装してあるのですが、大して本体のコードをいじらずに不要な機能を削ったり必要な機能を他コンポーネントから呼び出したりできました。

既存の開発環境が多種多様なアプリケーション開発に対応しきれなくなったから

最近、Processingのようにシンプルなワークフローが魅力の開発環境が人気を博すなど、プログラミング体験を重視することの価値が認められ始めています。全てのアプリケーションに対して一つの統合開発環境やいくつかのワークスペースといったアドホックな対応で済ますのではなく、特定の種類のアプリケーションに対して、そのワークフローに特化した開発環境を提供する研究が増えてきているのです。

背景には、既存の開発環境が提供するテキストベースのプログラミングとデバッグだけでは開発が難しい種類のアプリケーションが増えていることが挙げられます。画像処理や機械学習、実世界のセンサやアクチュエータを用いる開発においては、テキストでは到底表現しえない、特別な可視化を必要とするさまざまなデータ構造を扱うことになります。また、単純なイベントドリブンのプログラムと、画像処理やゲームの実装でよく使われるフレームベースのプログラムでは、必要な開発支援手法はかなり異なります。これらの問題に対する解答例として、上述のDejaVuや、それに先立つ研究として、Physical Computingのためのd.tools[Hartmann et al., 2006]や機械学習のためのGestalt[Patel et al., 2010]などが提案されてきたのです。

インターネットの常時接続が普通になったから

インターネットに接続された環境が一般的になったことも、新しい開発環境づくりに貢献しています。

例えば、プログラマならソースコードを書きながらWebを閲覧することは頻繁にあると思います。そこで、Web上のサンプルコードをエディタのコード補完機能で検索し、直接入力できるようにするBlueprint[Brandt et al., 2010]や、Web検索と閲覧の動作をキャプチャして、URLへのリンクを自動的に行番号と紐づけてあとで閲覧できるようにしてくれるHyperSource[Hartmann et al., 2011]という開発環境の拡張機能などが提案されています。

さらに、インターネットを介して、他の人の助けを借りてプログラミングできる開発環境も提案されています。既存研究としては、他の人とリアルタイムに協力してプログラミングできるよう特別にデザインされたWebベースの開発環境Collabode[Goldman et al., 2011]や、同じ開発環境を使っている人たちがエラーでつまづいた場合の解決法をクラウドで共有して、何かエラーが起きたときに適切な修正候補を提案してくれるHelpMeOut[Hartmann et al., 2010]などがあります。

このように、今後もさまざまなタイプのアプリケーション開発に最適化された開発環境がどんどん提案されるはずです。僕も研究を続けますし、もっと多くの人に関心を持ってもらって、日本発の研究やプロダクト開発も盛り上がってほしいな、と思っています。


2 Responses to ““開発環境の研究”とは? / HCI編”

Trackbacks and Pingbacks:

  1. “開発環境の研究”とは? / HCI編 補遺 | junkato.jp

    […] 早いもので、“開発環境の研究”とは? / HCI編を書いてからもう一年近く経ってしまいました。すぐにPL編を書こうと思っていたのですが、何となくHCI編も分野を嘗めきれていない気がして筆が進みませんでした。論文を読んでいろいろと歴史を紐解いていくうちに、この違和感の正体が分かってきたので頭の中の整理を兼ねてざっと補遺を書いておきます。そのうち補遺の補遺が出るやもしれません。 […]

  2. 開発環境研究をしているラボ一覧 | junkato.jp

    […] ぱっと思いついたのを並べてみました。前の記事と、その前の記事に載っている研究をした人たちは全部ここの中の人たちです。思い出したら増やします。 […]

Leave a Reply

  • (will not be published)