第1回SIGPXを開催しました

投稿者: 加藤 淳
投稿日:
カテゴリ: research, sigpx

2 月 27 日(土)東京工業大学の会場をお借りして第 1 回 Special Interest Group on Programming Experience (SIGPX)を開催しました。開催にあたって考えていたことは、だいたい最初のプレゼンテーションで喋ったのですが、もう少し詳しく書いてみます。また、実際に SIGPX を開催して考えたこともあわせて書き残しておきたいと思います。

第1回SIGPX

SIGPX

私は常々、プログラミングのための環境はアプリオリに用意されている道具として語られることが多いように感じていました。これは、プログラミングを楽しむ母集団のなかで、プログラミング環境を作る人の数を考えれば当たり前かもしれません。例えばゲーム作りならUnity、プログラミング教育といえばScratch、マイコンのプログラミングならArduino…というように、目的に応じてすでに用意されている統合開発環境を便利に使う、という人が多いでしょう。

ただし、これらの環境もまた誰かの手で設計されたものであり、一般的なアプリケーションのユーザインタフェースと同様に設計次第で使い勝手が大きく変わります。プログラミングは、人がプログラムを作る行為です。その体験が、使う道具によって左右されるのは当たり前のことです。道具にはいろいろな種類があって、しかも、使い合わせることが容易なもの、難しいものがあります。Apple が iPhone のハードウェアからソフトウェアまでを全部一気通貫で開発し、他のベンダーが入る余地を残さないのと同じように、その組み合わせでしか動作しないものもあります。きれいに分類することは難しいのですが、次のようなものがあります。(具体例など、詳しくは後ほど紹介します。)

  • プログラミング言語
  • ツールキット
  • 統合開発環境

これらを設計するためには、プログラミング言語・ソフトウェア工学・Human-Computer Interaction など多岐にわたる研究分野に関する知識が必要です。また、設計したものを実際に使ってもらうためには、(プログラミングのための環境に限らないですが)最近ではコミュニティを育てるという視点も非常に重要です。SIGPX は、そうした幅広い知見を交換し、蓄積するための場として立ち上げたものです。プログラミングのための環境を作ったり評価したりしている人々(研究者、開発者)が中心になると思いますが、環境を使っている人々が事例紹介などを通してフィードバックを返せる場にもなってほしいと願っています。

また、国際的に見ても SIGPX のような研究内容への注目は非常に高まっています。以前から VL/HCC という国際会議はありましたが、ソフトウェア工学に関するトップ会議 ICSE と併催で Live Programming に関するワークショップ LIVE 2013 が開催されたり、Live Coding に関する初めての国際会議 ICLC 2015 が開催されたりしています。今年はオブジェクト指向に関する国際会議 ECOOP 併催で LIVE 2016 と PX/16 が開催されます。イベントの一覧はSIGPX の Web サイトに載せているのでそちらをご覧いただくとして、国際的な研究・開発コミュニティから日本の SIGPX 関係者がちゃんと見えるようにするためにも、何かしら看板のようなものは必要だと考えています。それが、SIGPX の Web サイト開設当初より英語版のページを用意している理由です。

そんなわけで、第 1 回は多岐にわたる発表があって懇親会まで盛り上がったので、とりあえず成功といってよさそうです。これからも引き続き開催したいと思っているので、ご指導ご鞭撻のほどよろしくお願いいたします。参加にご興味のある方は加藤に直接ご連絡いただくか、Facebook グループにご参加ください。

さて、ここからは具体例を挙げながら、プログラミング体験を提供する道具にどんな種類があるのか見ていきます。自己紹介も兼ねたいので、自分の研究も積極的に宣伝していく方向で:)

プログラミング言語

プログラミングのための道具というと、まず多くの人が思い浮かべるのが言語かもしれません。モチはモチ屋ということで SIGPX もう一人の発起人である増原先生にお任せする所存なのであまり詳しく書きませんが、私の専門である Human-Computer Interaction 分野でも新しい言語を設計することはあります。

例えば文字ベースの言語ではすべてのことがらを文字で表記することが当たり前ですが、変数や定数の名前を決めるのが難しいことも多いと思います。多くの学生が同じ仕様のプログラムを書く教室で、変数名の統計を取って、目的に合った変数名を推薦してくれるシステム[UIST '15]が提案されていたりします。この問題は、プログラムが実世界の内容を取り扱うようになったとき顕著になります。例えば、ジェスチャ認識のプログラムでは何らかの姿勢情報を参照する必要がありますが、あらゆる姿勢に名前をつけるのは無理です。そこで私は、姿勢情報を表すリテラルには特別に写真を使えるようにする、Picode[CHI '13]というプログラミング言語の拡張を提案しました。

ツールキット

ライブラリや API という言葉もありますが、見方がちょっと違うだけで全部ツールキットと呼べるものです。その名の通り、プログラミングのときに使える一揃いの道具です。Java のための GUI ツールキット AWT, Swing のように、基本的には決まった言語にしか用意されていないものもあれば、OpenCV のようにさまざまな言語にポーティングされているものもあります。

Human-Computer Interaction の研究分野では、ユーザインタフェース設計を助けるためのツールキットが数多く発明されてきました。たとえばスクロールバー[Interfaces '98]やプログレスバー[UIST '07]など、さまざまな Widget の設計が議論されてきました。Widget は GUI を簡単に作れる便利な部品です。実世界で動作するセンサやアクチュエータを PC/Mac から簡単に利用できるよう全て USB デバイスとして実装し、API を提供するPhidgets[UIST '01]というものもあります。実世界の物体は画面上のピクセルのようには動かせませんが、私はそれを GUI と同じような API で動かせるライブラリとしてPhybots[DIS '12]を作りました。

統合開発環境

統合開発環境は、その名前の通り、コンパイラ、エディタ、デバッガのような複数のツールが統合されたものです。統合開発環境を使えば、別のツールに切り替えるメンタルワークロードがありません。プログラミングのワークフロー全体を支援する、大きなツールです。かつては統合開発環境を作ったり拡張したりすることは一人では難しかったのですが、最近は状況が変わってきています。冒頭で挙げた Scratch と Arduino は、どちらも統合開発環境です。オープンソースプロジェクトなので、その気になれば使い勝手を自分好みに手直しできます。Unity も、C#のコード編集にはMonoDevelopというオープンソースの開発環境を利用しています。また、既存のインタプリタなどを使えば、簡単な開発環境なら 10 分で作れるのです。

統合開発環境を作るための部品の再利用性が高まり、一人でも作れる規模になってきたことで、研究も盛んになってきました。多くは、特定の用途のプログラムを書きやすくする Domain-Specific Language (DSL)と同じような発想で、特定の用途のプログラム開発をしやすくする Domain-Specific Environment の研究です。私が以前 Microsoft Research Asia でインターンしたときに作ったDejaVu[UIST '12]は、既存の統合開発環境(MonoDevelop)を拡張してインタラクティブな画像処理を行うプログラム開発をしやすくしたものです。プログラミング言語を拡張した例として挙げた Picode は Processing をベースにしており、実は言語だけでなくさまざまな面で手を加えています。例えば、ポーズライブラリというユーザインタフェースの追加や姿勢情報を処理するためのビルトインライブラリの追加などを行っています。

ここまでプログラミング体験を提供する、プログラムを作るためのいろいろな道具を紹介してきましたが、最近の道具はインターネットに繋がっているのが当たり前になってきています。オンラインにあるソースコードリポジトリからサンプルコードを引っ張ってくるコード補完の拡張Blueprint[CHI '10]や、アプリケーション起動中に発生した例外の内容とソースコードの文脈から原因とアドバイスを検索して表示してくれるデバッガの拡張HelpMeOut[CHI '10]など、間接・直接に多くの人の協力を得てプログラミングすることが当たり前になっていくでしょう。私は、プログラマとエンドユーザという二項対立には意味がないと思っているので、例えばプログラマが表現力を決めてデザイナがコンテンツを作り、それを閲覧するユーザがいつでもプログラマやデザイナになれる統合デザイン環境というものを提唱しています。TextAlive[CHI '14]はそのような考え方をベースに Web 上で動画をプログラミングできるようにした環境です。

SIGPX では、プログラミング体験を提供するあらゆるものを対象に、プログラミング言語、ツールキット、統合開発環境だけでなく、ネット越しの「誰か」とどう協力するか、もしかしたらコミュニティ設計を支援する方法なども含めてみなさんと勉強していければいいなと思っています。ちなみに、第 1 回 SIGPX の最後に 1 時間ほど議論する時間を設けたのですが、PX の定義は人によりけりでした。この記事はあくまで私見ということで、みなさんの思う PX について、ぜひ聞いてみたいと思っています。