WISS2011

例示による携帯プログラミングの拡張
Programming by Example, by Smartphone, for Smartphone

瀬戸優之宮下芳明∗

Summary. 本稿では携帯端末上での実行に特化した言語と，そのプログラムを編集・実行するシステムを提案する．引数の設定にはマルチタッチに対応したスライドバーを使用し，乱数の入力も可能となっている．一定時間ごとに値が増える time ボタンや指が触れた座標にオブジェクトを描画する touch ボタンも備え，複雑な引数の設定も可能である．また，提案言語はイベントドリブンによる条件分岐を備えているが，条件の設定を例示で行うこともできる．例示の内容は加速度，温度，近接，明るさ, 位置情報，方角，時間，音声などが可能で，条件を and や or で重ねることができる．

1

はじめにスマートフォンには高度な環境が整っているにも関わらず，スマートフォンをプログラマが開発環境として利用することは少ない．
著者らはこの点を解決するために，ジェスチャ操作でプログラミングできるシステムと言語を提案した [1]．このシステムではソースを絵文字で表示し，小さな画面でも多くの情報を表示することができる．
本稿ではこのシステムを拡張し，条件分岐の設定を例示で行える仕様にした．これにより，ユーザはより高速な実装が可能になるだけでなく，プログラミングという行為自体を楽しみながら行うことができる．

2

関連研究

携帯端末を用いたプログラミングの研究として，西本らの MoCoPro[2] がある．これは，タッチパネルを搭載した端末上でのエンドユーザプログラミン
グを支援するシステムであり，ECA ルールに基づくビジュアルプログラミングとなっている．これにより，エンドユーザへの理解とプログラミングのしやすさを補助している．志田のえもぷろ [3] では携帯電話のメール機能でもプログラミングが可能となっており，プログラムを送るとサーバー側でコンパイルされ，実行結果がメールで返ってくる．磯野らの携帯端末を用いたジェスチャによるタイルプログラ
ミング支援機能 [4] では，携帯電話の加速度を抽出し，直感的にオブジェクトに動きのタイルを設定することができる．GClue 社の BLOCCO[5] では端末上でよく使う機能やサービスをミニアプリを作成できるアプリケーションとなっている．
∗Copyright is held by the author(s).
Hiroyuki Seto, 明治大学理工学部情報科学科, Homei
Miyashita, 明治大学理工学部情報科学科，独立行政法人科学技術振興機構，CREST

安村の Programming2.0[6] では使いやすいプログラミングについて言及しており，ヒューマンインタフェースの観点から考えるとユーザの記憶に頼るよりもメニュー駆動型の方がユーザ指向であると述べている．Google 社の App Inventor[7] はＰＣでの利用が想定されているものの，ブロックを組み合わせるだけで Android OS 向けのアプリケーションを作成できる．

3システム

図 1 は提案システムでブロック崩しを作った例である．１行目でパドルとなる四角を描画する．引数として [指の絵文字] があるが，これはタッチ位置に四角の中心座標が来ることを表している．２行目は円を描く命令となっており，引数は円の中心のｘ座標，ｙ座標，半径となっている．オプションとして当たり判定（反射）を設定してある．３行目以降はブロックとなる四角の描画になっており，当たり判定（消滅）が設定されている．当たり判定（消滅）を設定すると他の図形と衝突した際に設定をした図形が消える様になっている．図 1 の右はプログラムの実行結果である．

図 1. ブロック崩しのソースコードと実行結果

WISS 2011

3.1

引数入力

プログラムの引数を入力するインタフェースとして，スライドバー入力，テンキー入力，直接入力の３種類を実装した．
スライドバー入力では，マルチタッチに対応したスライドバー上の２点に触れることによって２値間の値の乱数を設定することができる．
テンキー入力では time ボタン，touch ボタンを用意し，他の２入力よりも複雑な指定が可能になっている．引数に time を設定した場合には一定時間毎に値が増加，減少し，touch を設定した場合には画面に触れた箇所の座標にオブジェクトが描画される．
直接入力ではダイアログ内に模擬的な実行画面が表示され，オブジェクトを描画したい場所にタッチすることで座標の引数が設定される．また，マルチタッチによって２箇所の点を対角線とする四角の範囲のランダムな位置にオブジェクトを出現させることも可能である．色の設定では画面にカラーパレットが表示される．また、オプションタブによって当たり判定を設定できる．

似度を比較している．後者のモードでは加速度の値やある一地点などを例示することができる．例示で入力されたデータはノイズを除去し，値を比較している．
提案システムでは条件を and で複数重ねることや，or で複数設定することができる．例えば「平日の午前に××駅で携帯を振ったら」という条件や「明日か明後日にこのくらいの暗さになったら」という条件も設定できる．

3.3

実例

図 3. ソースと交換の様子

図 3 は携帯端末同士をぶつけることでメッセージをやり取りするプログラムである．１行目は加速度による条件分岐を表している．２行目は文字データを他の端末と交換することを表している．実行すると加速度が閾値以上になるまで待機し，条件を超えたらメッセージのやりとりが bluetooth 経由で行われる．

参考文献

図 2. マルチタッチ対応スライドバーとテンキー

3.2

条件分岐の例示入力

提案する言語では条件分岐を備えており，全てイベントドリブンで実行される．条件分岐の内容は，例示することによっても設定可能である．これにより，ユーザは文字を打たなくて良いどころか，画面に触れることすらなく条件を指定できる．
例示できる値は加速度，温度，近接，明るさなどセンサから取得するものや，位置情報，方角，時間，音声なども含まれる．音声の認識には Google Voice
Search を利用し，音声情報を文字情報に変換している．このような情報を使用することで，プログラマの置かれている環境までもプログラミングに利用できる．
例示の方法は２種類あり，ある程度の時間に渡り値を取得するモードと，端末の任意の一瞬の状態を取得するモードがある．前者のモードでは携帯を振った軌道や道順などを例示できる．例示で入力されたデータは静止やノイズを除去し，正規化した後に類[1] 瀬戸優之, 宮下芳明. ジェスチャ操作で入力する絵
文字ソースの携帯プログラミング. 情報処理学会
インタラクション 予稿集, pp. 453–456, 2011.
[2] 西本裕貴, 志築文太郎, 田中二郎. 携帯端末上でコンテキスト依存プログラムを記述するためのビジュ
アルプログラミング環境. WISS 第 16 回インタラ
クティブシステムとソフトウェアに関するワーク
ショップ論文集, pp. 145–146, 2008.
[3] 志田知優. 携帯電話・pc のメール機能を開発環境として可能にしたプログラミング言語「えもぷろ」の開発. 情報処理学会研究報告. コンピュータと教育研究会報告 2008(64), pp. 55–62, 2008.
[4] 磯野悠, 森口友也, 高田秀志. 携帯端末を用いたジェスチャによるタイルプログラミング支援機能.
情報科学技術フォーラム講演論文集 9（3）, pp.
663–664, 2010.
[5] Blocco. http://www.blocco.jp/.
[6] 安村通晃. Programming2.0：ユーザ指向のプログ
ラミング. 情報処理学会夏のシンポジウム 2006,2006.
[7] Google inc.:
App inventor for android.
http://appinventor.googlelabs.com/about/.

Programming by Example, by Smartphone, for Smartphone

アピールチャート

未来ビジョン
プログラミングを幼稚園や小学校から習い，日常の中で行う時代はきっと訪れる．そのためのＵＩや言語はもちろんのこと，プログラミングについての考えも変化していくだろう．
現在はひとつのプログラムを一人で一気に完成させることが多く，全て完成させるのは時間がかかってしまう上，プロトタイプの作成にすら時間を要する．以前作ったプログラムを改良する際に，「この命令なんだっけ」と思ったことや「◯◯の処理ってどこでやってるんだっけ」と思ったことがある方もいるだろう．また，他人が作ったプログラムを拡張したいと考えても，ソースが公開されていなければ手を加えることはできない．
これらの問題を解決するために，多人数や自分で分割し，機能などを後から追加しやすいような言語が増えていくと予想する．また，自他が作成した完成プログラムを，ソースコードを見ずに拡張できるようにすることも不可能ではない．
分割することによる大きな問題点は連携である．他人の作ったプログラムが想定通りの動きをしないことや，自分のプログラムを拡張した際にバグが発生してしまうことはよくあることである．これらはリンク命令のような連携に特化した命令でカバーされるべきであり，データ引継ぎの際に起こるエラーなどにも柔軟に対応できるようになるべきだろう．