Picode: ソースコードに写真を貼り込める統合開発環境

'11-13 IDE Robot ACM CHI '13

PicodeはMicrosoft Research CORE 7 プログラムの支援を受けて始まり、現在はGitHubで開発が進められているオープンソースプロジェクトです。

概要

プログラムのソースコードは、大抵の場合、文字や記号表現を用いて記述するものである。このような表現は、論理的な処理の精確な記述に適している一方で、画像や多関節ロボットの姿勢情報など、具体的なデータセットを分かりやすく見せることができない。この問題は、実世界の人やロボットの姿勢情報を扱うプログラミングで顕著である。

そこで我々は、人やロボットの姿勢データを写真と紐づけ、ソースコード中に写真を貼り込める開発環境Picode (旧名Roboko)を試作した。まず、写真と紐づけられた姿勢データを第一級オブジェクトとして扱う拡張を既存の文字言語に施した。次に、姿勢データを引数に取るAPIライブラリを提供した。そして、エディタに写真を貼り付けられるような開発環境を実装した。

Picode editor

Picode IDE

本研究では、姿勢情報を用いるプログラミングのワークフローを支援するため、写真を貼りこめるよう拡張したエディタを含む文字ベースの統合開発環境(IDE)に、姿勢情報と写真の記録および紐づけを自然に行える例示インタフェースと、記録した写真を閲覧できる"Pose library"を追加した。このIDEを用いたプログラミングは、人やロボットの姿勢情報を写真とともにキャプチャする例示から始まる。そして、写真をエディタにドラッグ&ドロップしたり文字を入力したりすることでソースコードを書き上げ、プログラムを実行する。ソースコードはキャプチャした写真と姿勢情報のデータセットと共に再配布できる。

Picode API

現在、以下のようなAPIがサポートされている。(Javadoc)

Pose Robot.getPose()
現在の姿勢を返す
float Pose.distance(Pose pose)
二つの姿勢間の差異を返す [0.0-1.0]
boolean Pose.eq(Pose pose, float threshold)
二つの姿勢が同じとみなせるかどうか返す (二つの姿勢間の差異がthresholdより小さいかどうか返す)
boolean Robot.setPose(Pose pose)
ロボットの姿勢を指定する
Action Robot.action()
ロボットの姿勢の推移を表すActionオブジェクトを返す
Action Action.pose(Pose pose)
このActionの最後に指定した姿勢への推移を追加する
Action Action.stay(int ms)
このActionの最後に指定した時間のまま静止するようにする
ActionResult Action.play()
Actionを再生する

サンプルコード

鉄琴演奏ロボ
かえるの歌を演奏する。
挙手でスライド送り
右手を挙げるとスライドを次に送り、左手を挙げると一つ前に戻す。
旗揚げゲーム
画面に出てくるキャラクターと同じほうの手を素早く挙げると高得点。
Overview of the Picode IDE

未来ビジョン

"Programmers are people, too."という言葉がある。この、プログラマだって人である、という言葉には、プログラマがいかに分かりづらい言語を理解し、使いづらい開発環境と格闘してきたか、プログラマと一般人の溝がいかに深いか、という現状認識が現れているように思われる。

しかし私は、プログラマと一般人の溝が近年急速に埋まりつつあるように感じている。まず、開発環境を整えるのが簡単になった。以前なら必要なファイルを揃えてパスを通して、と大変な手間だったものが、今はブラウザを開くだけでよい。プログラミングの学習もKahn Academyなどでインタラクティブに進められる。また、プログラミングできる対象が身近になってきた。LEGO Mindstorms NXTのように実世界で動くものはもちろん、例えばスマートフォン上でスマートフォン用のプログラムを書いたり(TouchDevelop)、Webサービス同士をif-thenルールで連携させたり(IFTTT)できる。家電製品がネットワークに繋がるようになってきたから、これらを遠隔制御する実用的なプログラムも簡単に書けるようになるだろう。

また、プログラミング言語の研究者コミュニティでは、言語だけでなく開発環境まで含めたプログラマの体験を重視する研究が増えてきている。我々のコミュニティで道具としてのUIから体験としてのHCIに研究の主流がシフトしたように、言語、ライブラリ、開発環境を個々に評価するのではなく、全体のワークフローを重視する流れが生まれている。

我々は、このような追い風を受けながら、"People are programmers."の世界を実現していきたいと考えている。

発表文献