HMMMML3:他人を意識したモチベーション向上を考えたプログラミング環境
中橋 雅弘†

宮下芳明†

本稿で提案するプログラミング言語 HMMMML3 における超好意的解釈コンパイラは，スペルミ
スを大幅に許容するとともに，複数の解釈が成り立つ場合はその全ての解釈を実行し，タブ切り替えによってユーザに選択させる．プログラムの正確さをスコア化しランキングサイトにアップロードする機能も持つ．全てのプログラムは HTML5 上で実行されるので，スマートフォンでも実行可能である．これにより，プログラミングする過程においても，その成果を見せるときも，ユーザはより他人を意識し，それがモチベーション向上につながると考えている．

HMMMML3：Programming Environment that Makes Users
Conscious of Others and Motivates them
MASAHIRO NAKAHASHI†

HOMEI MIYASHITA†"Super-generous compiler" in programming language HMMMML3 proposed in this paper allows
misspelling greatly, that the user can select from all executed interpretations by switching tabs. It calculates thescore of the program from the accuracy, and uploads it to the ranking-site. Moreover, all programs can be
executed on HTML5 so that they are executable on smart phones; we consider that motivate the user higher.

1.

はじめに学習に対するモチベーションの低下につながると考えている．著者らはこうした思想から「モチベーション本稿で提案するプログラミング言語 HMMMML3 はを向上させる言語」としてこれまで HMMMML[2]これまで開発してきた HMMMML の機能を HTML5[3](Homei Miyashita's Motivating Multi-Lingual Markupで動作するように拡張したものである．これによりスLanguage)を開発してきた．本稿では，この言語をさマートフォン上で自作プログラムを動かすことができ，らに発展させた HMMMML3 ついて述べる．

他人に見せることも容易になった（図 1）
．

2.

関連研究

プログラミング教育といっても，概念の理解を重視することもあれば，C 言語や Java などの汎用的な言語に繋げられるような理解を重視することもある．その違いによって，対象の年齢層，指導方針は大きく変
図1 スマートフォン上で動作する HMMMML プログラム

安村はユーザ指向のプログラミング言語デザインの指針として Programming 2.0 を提唱し，これからのプログラミング言語は人間の特性をふまえて設計されなければならないと述べている[1]．しかし現在のほとんどのプログラミング言語は，極めて厳密な構文指向であり，守らなければならないルールが非常に多いだ
けでなく，それらをひとつでも間違うと実行結果を表示すらしてくれない．こうした制約はプログラミングを学び始めたばかりの人にとって大きな障害であり，† 明治大学 理工学部 情報科学科
Department of Computer Science, Meiji University

わってくる．目的に沿った形で，プログラミング教育の研究はこれまでに数多く行われてきた．
井後らは学生が C 言語に対して苦手意識を持つのは，プログラムが英単語で記述されているからと考え，日本語プログラミング言語「なでしこ」を用いて C言語への導入を図った[4]．長らも対象を大学生とし，Java への移行を考えたプログラミング言語 Nigari の開発を行った[5]．Nigari は宣言を省略し，プログラムを自動的に可視化することで，プログラムの流れの直感的理解を促した言語である．これら 2 つの研究とは違い，よりビジュアルなインターフェースを用いて子供へのプログラミングの概念教育を考えたプログラミ

情報処理学会 インタラクション 2011

ング言語が Scratch である[6]．Scratch はあらかじめ用ザに表示する．MIDI で音を鳴らすには，play.note(ノ意された簡単なスクリプトを，ブロックを組み立てるート番号)，指定したサイズの Google マップを表示すように組み合わせることでプログラミングを行うもの

るには draw.map(緯度，経度，横幅，縦幅)と１行で行である．これにより子供でも楽しんでいるうちに条件える．動画ファイル・音楽ファイルも全て play"ファ分岐，繰り返し，オブジェクト指向といった考え方がイル名"で実行する．

身につく．原田が開発したビジュアルプログラミング
言語 Viscuit は，絵を描きマッチングを指定するだけでプログラミングを行うことができる[7]．マッチン
グには Fuzzy Rewriting を用いており，これまでのビジュアルプログラミング言語にはみられなかった柔軟な動きを実現した．これにより子供でもプログラミングの楽しさを容易に知ることができる． Viscuit はコンピュータの凄さを伝えることを目的としている．

3.

HMMMMLHMMMML (Homei Miyashita's Motivating MultilingualMarkup Language)は単純かつ直観的な文法表現を工夫

図2 HMMMML を用いた１行プログラミングの例

4.

HMMMML2したものである．AT 車的な支援思想に則り，前章でHMMMML は「好意的な解釈によってとりあえず述べた Scratch[6]や Squeak[8]，MAX/MSP/Jitter[9]に代実行する」ものだったが，HMMMML2 では「好意的表される直感性を追及したビジュアルなインタフェーな解釈によってとりあえず実行し，その後でコンパイス，あるいは例示プログラミング手法[10][11]まではラがどこを修正したのかをユーザに教える」ものに発検討せず，あくまでテキストを入力してコンピュータ展させた．「そこのゲッキョク駐車場を右に曲がっを動作させる範疇で支援のデザインを行ってきた．て」と指示されたタクシー運転手に例えるなら，「そHMMMML で３回 Hello と表示するときには，「forタグ」を使用して以下のように書ける．
<for 3> print "Hello" </for>
カウンタとしての変数の宣言や初期値設定;条件式;増分処理を指定する必要がない．

んな駐車場はありません」と言って正しく言い直すまで右折しないのがこれまでのコンパイラ的思考であり，「月極駐車場のことを指しているんだな」と好意的に解釈して右折するのが HMMMML 的思考である．しかしこれでは，乗客は漢字の読み方を間違えたままでマウスカーソル位置に半径 20 の円を描画するにはあり，学習の促進を考えたとき，最も理想的なのは，draw.circle(mouse.x, mouse.y, 20);

とりあえず右折してから「ほんとはツキギメって読むと書ける．エディタに備わっている無限ループボタンんですよ」と小声で教えてくれる運転手ではないだろをオンにして実行すると，図 2 のようなペイントツー

うか．

ルを１行で実現できる．無限ループは ESC キーやウ

HMMMML2 では，if 文の条件式内で「a=1」と書ィンドウの閉じるボタンでプログラムを終了することいた場合，これを「a==1」と好意的に解釈して実行ができる．

した上で，ソースコードには「a=1 を a==1 に修正しさらに，セミコロンの有無やドット抜け，括弧の閉ました」とコメント文が入るようにした（図 3）．

じ忘れについても許容するコンパイラを搭載している
ため，先ほどのプログラムはdrawcircle(mousex,mousey,20と書いても同じ結果を得ることができる．
if 文の条件式内で==の代わりに=を使用してしまっても==と解釈し，大文字小文字の混同や配列変数を含む宣言忘れについても許容して動作する．
say "Hello"と実行すると人工音声で"Hello"と発音し，google"Hello"と実行すると"Hello"の検索結果をブラウ

図3 解釈結果の実行後提示

これまでのプログラミング言語やその開発環境では，エラーとなっているところに下線を表示し「実行前に直させる」インタラクションデザインとしていたが，

HMMMML2：超好意的に解釈するコンパイラ

HMMMML2 は「早く実行結果が見たい」というユーザの気持ちを優先させ，まず実行し，そのあとで正しい表現が何であったかを伝えるのである．
4.1

超好意的解釈コンパイラ

ンを押すと，ソースコードは
say “Hello”//s を say に修正しましたという内容に修正されている．
また，現状のシステムで好意的に解釈できないよう

HMMMML2 では，さらに好意的な解釈を行う「超な特殊なエラーが発生した場合は，そのプログラムを好意的解釈コンパイラ」を搭載した．ひとつのミスもサーバ上にアップロードする機能を備えた．これによ許さない超頑固なコンパイラの対極の存在を生み出すり集められた多くのプログラムからエラーの典型を導ことが出来れば，「超好意的」から「超頑固」までのき出し，超好意的解釈コンパイラの解釈機能強化に役広い範囲で支援度合の段階的調整ができるので，プロ立てることができる．

グラマのスキル向上を促すインタラクションデザインにつなげられると考えた．

5.

HMMMML3

はじめてプログラミングに挑戦する人に多いのが，HMMMML2 までは，あくまでもユーザ個人に対し全角スペースを入力してしまった場合である．てのモチベーション向上だった．HMMMML3 では他

HMMMML2 では，プログラムに直接関係ないと思わ人を意識したユーザのモチベーション向上を考えた．

れる全角スペースや２バイト文字は全てコメントとし人間は自分の実力を他人に自慢したい，認めてもらいて好意的に無視するようにした．

たいという欲求を尐なからず持っている．例えば，著

HMMMML2 では，スペルミスに対しての許容幅を者らの研究室で毎年行われているプログラミング発表拡張した．予約語にない命令，例えば ptint “Hello”と会では，研究室のメンバーを驚かせたいという理由だいう文字列があったとき，これは print を意図して記けで，異常なモチベーション向上が起こっている．ま述されている可 能 性が 高い の で ， コン パ イ ル時にた，中田らの調査によると，Linux 開発に携わるボラprint と置き換えて実行するようにした．コンパイラ

ンティアのユーザのモチベーション向上には，他人に内部のアルゴリズムとしては，予約語との一致率を計認められたいという欲求が大いに影響していることが算して類似した予約語に置換している．

示されている[12]．人工的なシステムがどれほどユー

HMMMML2 の言語仕様では，p で始まって文字列ザに対して配慮したとしても，他人による「生きた」が続く命令が print しかないため，p “Hello”と記述しフィードバックには敵わないと著者らは考えた．そこても print “Hello”と解釈される．

で以下の拡張を行った．

これに対し，s “Hello”と書いた場合は，say(人工音5.1

ランキング声で読み上げ）と show(ダイアログ表示)の２通りがHMMMML3 では，プログラムの正確さの評価を行考えられる．HMMMML2 では，複数通りの解釈がない，スコアとして換算し，ユーザの成績をサーバにアりたつ場合は，その全ての解釈を実行することとした．

ップロードする機構を設けた．図 5 のランキングサイ

それぞれタブを切り替えることで実行結果を見ること

トで全国のユーザのプログラミング成績のランキングができ，「採用」ボタンを押すことでその解釈を選択が閲覧できる．HMMMML エディタに twitter のアカすることができる（図 4）．

ウントでログインしていれば，ユーザ名にはそのアカウント名が表示され，それを用いてユーザ同士で健闘を讃え合うこともできる．また，これによりプログラマのコミュニティが容易に形成できるのではないかと考えている．

図4 複数解釈に対するタブ表示

たとえば図 4 において，タブ１を選択すると「Hello」が読み上げられ（say としての解釈）タブ２を選択すると「Hello」というダイアログが表示される（show としての解釈）．タブ１を選択して採用ボタ
図5 ランキングサイト

情報処理学会 インタラクション 20115.2

スマートフォンへの対応

また，HMMMML のほとんどの命令を HTML5 に移として，超好意的解釈-超頑固解釈を調整できるスライダを考えている．このスライダを用いて，好意的解植することに成功した．例えば，前章でも紹介した釈に依存しないほど高得点を得ることができるシステ

say 命令の場合， Google Translate API の読み上げ機

ムにすれば，支援のための補助輪をユーザが自ら外し，能(非公開 API)を用い，ここから返ってくる mp3 ファ

より高度なプログラミングの世界に飛び出してくれるイルを html5 の<audio>要素で再生することで実現しはずである．

た．今までの HMMMML とインタフェースは同一で，本システムは著者らが主観的に定めたデザインポリ実行ボタンを押すと Chrome が立ち上がって実行する

シーに基づいて試作されたものにすぎないため，今後仕組みになっている．

さらに改良を重ね，これまで数多く提案されてきてい以下に図 1 で紹介したプログラムのソースコードを示す．このプログラムは，ランダムな場所に球を配置し，その球にぶつからずに長い軌跡を描くほど得点が高くなるゲームである．ゲームオーバーになると，指定した URL にジャンプするようになっている．
score=0;<for 99>
draw.sphere(random(400),random(400),random(20));</for><while><if get.red(mouse.x,mouse.y)!=0>
draw.box(0,0,400,400)
show "SCORE = "+scorego "http://miyashita.com"</if>score = score+10;
set.color(0,255,0);draw.circle(mouse.x,mouse.y,3);</while>そして完成したプログラムは，エディタの実行ボタンのとなりにある星形のボタンを押すだけで，特定のURL へとアップロードされる．プログラムは実行ボタンからももちろん実行できるが，ブラウザにそのURL を打ちこむことでも実行できる．すなわちスマートフォンを所持した人が近くに一人でもいれば，自作のプログラムをいつでも，どこでも見せることができるのである．このようにプログラムを容易に他人に見せられる環境を提供したことで，ユーザは自分が作ったプログラムを用いて誰かを喜ばせたり，楽しませる体験ができる．そこから得られるものこそユーザに一番知ってもらいたいものであり，その体験はユーザのプログラミングに対するモチベーションを著しく向上させると考える．

6.

展望

今後は，超好意的解釈に依存しないための追加機能

るエンドユーザプログラミング支援手法とも比較した実験やワークショップを行っていきたい．

参考文献

1) 安村通晃．Programming2.0：ユーザ指向のプログラミング，情報処理学会夏のシンポジウム
2006．
2) 宮下芳明．プログラミングに対するモチベーシ
ョンを向上させる新言語 HMMMML の開発，
第 51 回プログラミング・シンポジウム予稿集，pp.57-64，2010．
3) 中橋雅弘，宮下芳明．HMMMML2:超好意的に解釈するコンパイラ．夏のプログラミングシン
ポジウム 2010，長野，2010 年．
4) 井後宏康，原佑輔，松江信太郎，吉末千紘．
「なでしこ」によるプログラミング言語の導入，
http://mis.edu.yamaguchiu.ac.jp/kaisetu/sotsuron2007/n-ihmy-resume.pdf5) 長慎也，甲斐宗徳，川合晶，日野孝昭，前島真一，筧捷彦．Nigari-Java 言語へも移行しやすい
初学者向けプログラミング言語，コンピュータと教育研究会報告，pp.13-20，2003．
6) Scratch: http://scratch.mit.edu/
7) 原田康徳．子供向けビジュアル言語 Viscuit とそのインタフェース，ヒューマンインタフェース
研究会報告，pp.41-48，2005．
8) Cardelli, L. and Pike, R. Squeak: a language forcommunicating with mice. In Proceedings of the 12th
Annual Conference on Computer Graphics andinteractive Techniques SIGGRAPH '85. 1985.
9) Max/MSP/Jitter
http://cycling74.com/products/maxmspjitter/10) 増井俊之．インターフェイスの街角(47) - 例示
プログラミング．Unix Magazhine．Vol．16, No．
11，2001．
11) Hartmann, B., Wu, L., Collins, K., and Klemmer, S.
R. Programming by a sample: rapidly creating web
applications with d.mix.
In Proceedings of UIST2007. 2007.
12) 中田智之，串田洋介，二本柳寿史，佐久間明彦，
古 澤 理 ． Linux ハッカーのモチベーション．
http://www.waseda.jp/seminoue/file/archives/2004_Motivation_of_Linux.pdf．
20004