増井ラボノート コロンブス日和

第6回 Dynamic Macro

この記事を読むのに必要な時間:およそ 3 分

便利な予測インターフェース

計算機の上で同じ作業を何度も繰り返さなければならないことがよくあります。計算機は単純な繰り返し作業が得意なはずですが,つまらない作業を人間が繰り返さなければならないことは意外と多いものです。たとえばExcelの表の中の負の数字だけアンダーラインを付けたいときはどうすれば良いでしょうか? そういう機能はExcelには用意されているかもしれませんが,知らなければ使えませんし,同じような処理であってもシステムに用意されていなければどうしようもありませんから,この手の仕事があったときは泣きながら手作業で処理したり,頑張ってスクリプトを書いたりしている人が多いのではないでしょうか。

計算機上の操作を効率化するために予測インターフェースと呼ばれるシステムが広く使われています。スマホのテキスト入力を効率化する「予測入力システム」やブラウザのURL補完機能,エディタの補完機能のような簡単な予測インターフェースは最近よく使われていますし,これまでの購入履歴を基にして商品を推薦するシステムなども一種の予測システムと言えるでしょう。予測インターフェース研究の歴史はけっこう古く,1993年には予測インターフェースの研究をまとめた『Watch What I Do』という本が出版されていますし,最近は例示や予測だけでプログラムを作ってしまおうという研究も行われています図1)。

図1 予測インターフェースに関する書籍

Watch What I Do: Programmin  by Demonstration(Allen Cypher,The MIT Press,1993年) Your Wish is My Command:Programming By Example(Henry Lieberman,MorganKaufmann,2001年) No Code Required:Giving Users Tools to Transform the Web(Allen Cypher/Mira Dontchevam/TessaLau/Jeffrey Nichols ,Morgan Kaufmann,2010年)

左:Watch What I Do: Programmin by Demonstration(Allen Cypher,The MIT Press,1993年)
中:Your Wish is My Command:Programming By Example(Henry Lieberman,MorganKaufmann,2001年)
右:No Code Required:Giving Users Tools to Transform the Web(Allen Cypher/Mira Dontchevam/TessaLau/Jeffrey Nichols ,Morgan Kaufmann,2010年)

予測インターフェースシステムでは,アプリケーションに関連したデータベースやユーザの操作履歴などを基にして,ユーザの次の操作を予測することによってユーザの仕事を減らす工夫をしています。URL補完の場合はよく使われるURLのデータベースが利用できますし,プログラミング言語に関する情報を持っていれば,ユーザが次に入力する言語キーワードを予測できます。このような固定的なデータベースを用意しておくことも重要ですが,ユーザの操作履歴を予測のためのデータベースとして利用すると便利です。ユーザが一度訪れたサイトのURLを覚えておけば補完に利用できますし,予測入力システムではユーザが利用した単語やフレーズが次の予測に利用されます。前述のExcelの例のような場合,負の数字にアンダーラインを付ける操作が繰り返されていることをシステムが検出できればユーザの次の操作を予測できるでしょう。

編集作業の効率化

文章やプログラムのようなテキストを編集するとき,同じような操作を繰り返すことがよくあります。たとえば,連続する行の先頭に記号を挿入したいような場合はカーソルを1行ずつ動かして記号を入力していくのが普通ですが,たくさんの行に対して同じ操作を繰り返すのはたいへんです。行頭に記号を挿入するスクリプトを書けば良いのかもしれませんが,一度きりかもしれない処理のためにプログラムを作成するのは面倒ですし,プログラミングの知識が必要です。また,CSV(Comma Separated Values:カンマ区切り)データの桁を並び替えたいときはどうでしょうか?CSVデータをExcelなどで読み取ってから並びを変えて出力すれば良いかもしれませんが,方法を考えるのも実際に作業するのも面倒です。

キーボードマクロ

このような作業を簡単にするために「キーボードマクロ」という機能が用意されているエディタがあります。キーボードマクロとは,一連のエディタ操作を1つのキー操作に割り当てることにより,複雑な編集操作を楽に実行しようというものです。たとえば「行頭に記号を挿入してから1つ下の行に移動する」という処理を[A]というキーに割り当てておけば,[A]を連打することによって連続する行の先頭に記号を入力していくことができますし,「カンマで区切られた部分を選択して移動してから次の行に移動する」という処理を[B]というキーに割り当てておけば,[B]を連打することによってCSVの桁を入れ替えていくことができます。

Dynamic Macro

キーボードマクロは便利な機能ですが,キーボードマクロの定義開始と終了のための操作が必要であるうえに,処理を正確に登録するのが難しいという問題があります。たとえば前述の例の場合,「1つ下の行に移動する」処理を定義に含めることを忘れてしまうと正しく動きません。

キーボードマクロの機能をもっと簡単に使えるようにするため,私はキーボードの繰り返し操作から次の操作を予測して,自動的にキーボードマクロとして登録できるDynamic Macroというシステムを作って長年Emacsの上で利用しています。

Dynamic Macroの原理は非常に単純で,

  • 「同じ編集操作を2回繰り返したあとで[CTRL][t]を押すと繰り返された操作が再実行される」

というものです。「二度あることは三度ある」と言うように,同じことが二度あればもう一度あるのは世の中でごく普通のことです。二度実行した操作をもう一度実行することもよくあることですので,この方法はたいへん効果的です。

Dynamic Macroの利用例

Emacs上に実装したDynamic Macroの利用例を示します。図2はEmacsでabcabcと入力したところです。

図2 Emacsでabcabcと入力

図2 Emacsでabcabcと入力

ここで[CTRL][t]を押すと,Emacsのキー操作履歴から「abcの入力」の繰り返しが検出され,キーボードマクロとして登録されて実行され,図3のようにもう1つabcが挿入されます。

図3 [CTRL][t]キーでもう1つabcが入力される

図3 [CTRL]+[t]キーでもう1つabcが入力される

再度[CTRL][t]キーを押すと,図4のようにまたabcが入力されます。

図4 [CTRL][t]キーでさらにもう1つabcが入力される

図4 [CTRL]+[t]キーでさらにもう1つabcが入力される

これは単純な例でしたが,Dynamic Macroはもっと複雑な編集操作でも使うことができます。

図5のようなテキストの上から2行を図6のように編集したとします。

図5 Dynamic Macroでもっと複雑な編集操作

図5 Dynamic Macroでもっと複雑な編集操作

図6は,行頭にputs "を入力してから行末に移動して"を入力して次の行に移動するという操作を2回繰り返した結果ですが,ここで[CTRL][t]キーを押すと,この操作の繰り返しが検出されてマクロ登録されて実行されるので,画面は図7のように変化します。

図6 テキストを編集してみる

図6 テキストを編集してみる

図7 [CTRL][t]キーで入力補完

図7 [CTRL]+[t]キーで入力補完

さらに[CTRL][t]キーを何度か押すと画面は図8のように変化します。

図8 [CTRL][t]キーを何度か押してみる

図8 [CTRL]+[t]キーを何度か押してみる

このように,複雑な操作であっても,同じ操作を2回繰り返したあとではDynamic Macroで何度でも連続実行できることになります。

著者プロフィール

増井俊之(ますいとしゆき)

1959年生まれ。慶應義塾大学環境情報学部教授。ユーザーインターフェースの研究者。東京大学大学院を修了後,富士通半導体事業部に入社。以後,シャープ,米カーネギーメロン大学,ソニーコンピュータサイエンス研究所,産業技術総合研究所,Appleなどで働く。2009年より現職。携帯電話に搭載される日本語予測変換システム『POBox』や,iPhoneの日本語入力システムの開発者として知られる。近著に『スマホに満足してますか? ユーザインターフェースの心理学』。

コメント

コメントの記入