体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

Direct Manipulationとプログラミング環境をScalaで書いてみる─by Scala福岡2017

DMに関心を持った背景

福岡を拠点に高速分散処理技術を生かしたスマートデバイス×ビッグデータ領域に強みを持つスタートアップ、グルーブノーツのRockstarエンジニア、花田恒一氏は、Direct Mnipulationとプログラミング環境をScalaで実装した話を発表した。

Direct Manipulation(DM)とは、Shneidermanによって提唱された直感的、身体的に操作でき、すぐに結果がフィードバックされるインタラクションのスタイル。

現在、ほとんどのUIはDMとなっている。DMでない代表例は、コマンドラインの操作。実際にキーを叩く動作があるので、直感的ではない。

一方DMである例とは、新規フォルダーを作ってそこにドラッグ・アンド・ドロップでファイルを入れたり、ゴミ箱に捨てるという操作などだ。

なぜ、DMに関心を持っているか。元々花田氏はFLOWerというビジュアルプログラミング環境の開発に携わっていた。

株式会社グルーヴノーツ 花田恒一氏
データの流れが見える新プログラミング言語「Flower」を開発した学生プログラマたちが目指すこと

ビジュアルプログラミング環境には同じく日本人が作ったViscuitもあるが、いずれもキーボードの操作に慣れていない子どもたちがプログラミングを始められるために作られた開発環境。テキストを書くことなく、絵を描いて配置すればプログラムができる。

現在はDM+CodeそしてCode+DMというように、プログラムをキーボードやマウスを使わずに開発する環境を開発している。その一例がScalaで設計・実装しているsigHexだ。

キーボードやマウスを使わずに開発する環境として重要なインタラクションの一つに、ジェスチャーがある。ジェスチャーを使うことで、ボタン減らしするなど、うまくインタラクションデザインすると使いやすくなる。特にタッチUIでは本当に重要な要素で、Direct Manipulationに貢献してくれる。

ただ、ジェスチャーには欠点がある。それはデザインや実装が難しいこと。そして見えづらいのでデバッグしにくいことだ。

ジェスチャーとひと言で言っても、タップやダブルタップ、ピンチイン、ピンチアウト、フリック、ホールドなどいろんな操作がある。

次にジェスチャーの可能性について。タップとダブルタップ、フリック、ホールド、スクロールなど指の動きがあるところまで重複している操作がいくつかあるが、どう区別するかわかりにくい。

それらのイベントを見分けるために、DFA(決定性有限オートマトン)やNFA(非決定性有限オートマトン)など複数の可能性をチェックする必要がある。

それができればパーサの文字列の解釈とジェスチャーのイベントの解釈は似ているので、パーサコンビネータ(パーサ同士を組み合わせて新しいパーサをつくる技法)で楽に書けるのではないかと考えたというわけだ。

パーサの文字列解釈とジェスチャーのイベント解釈は似ている

簡単なモデルで紹介、ある入力の文字列”(10 20 30)”をパーサに入力して、List(10,20,30)と出力する。これをScalaで書くと、次のようになる。

abstract class Parser[+A] extends
(String
=> A)

さらに続きの文字列があるとする。それをScalaで書くと次のようになる。

abstract class Parser[+A] extends
(String
=> (A, String))

図の様な空白で区切っているような文字列だと、エラーになる。それを考慮してScalaで書くと、Resultという型とcase classを作ることになる。

abstract class Parser[+A] extends String
=> Result[A]

abstract class Result[+A]
case class Success[+A](item:A,next:String) extends Result[A]
case class Error(msg:String) extends Result[Nothing]

1 2 3 4次のページ
CodeIQ MAGAZINEの記事一覧をみる
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。