(これまでの増井俊之の「界面潮流」はこちら)
同じような操作を何度も実行しなければならないとき、手間を省くために操作を自動化したくなります。たとえば、テキストファイルの行の先頭に“> ”という文字列を追加していきたいとき、何度も“> ”をタイプするのは面倒ですから、なんらかの方法で自動化できれば便利です。エディタに「n行にわたって行頭に文字列を追加する」のような機能があればいいのですが、様々な自動化要求すべてに対応することは不可能ですから、特殊な自動化処理を行ないたい場合は、なんらかの方法でユーザが自力でプログラムを作成して計算機に与える必要があります。
ユーザが「操作マクロ」を定義できるエディタは多いですし、本格的なプログラミングが可能なEmacsのようなエディタもありますが、こういったプログラミングは敷居が高く難しいものですから、たいていはあきらめてこつこつ作業するのが普通だと思います。しかし、手軽にちょっとした自動化処理を指示できると嬉しいでしょうから、誰でも簡単なプログラミングを行なえるようにするエンドユーザプログラミングや例示プログラミングという考え方が提唱されています。
本格的なプログラミングは難しいかもしれませんが、料理のレシピのような手順書であれば簡単に書いたり利用したりできますし、大抵の人はアナログ時計のアラームをセットできるわけですから、環境さえ用意すれば誰でも簡単なプログラミングができるようになる可能性は充分あるといえるでしょう。
■エンドユーザプログラミング
操作手順のような簡単なプログラムを誰でも手軽に作って利用できるようにしようというのがエンドユーザプログラミングの考え方です。テキストだけ利用するよりも図を併用した方がわかりやすいことが多いので、ビジュアルプログラミングがよく採用されています。ビジュアルプログラミングの研究は長い歴史がありますが、まだ本格的なプログラミングに利用されているとはいえません。しかし、音楽家の間ではMaxというビジュアルプログラミングシステムが広く利用されていますし、Lego Mindstormsのような教育システムでもビジュアルプログラミング言語を採用することによって、プログラムの敷居を下げるのに成功しています。
MacintoshにはAutomatorという簡単なビジュアルプログラミングシステムが搭載されており、アプリケーション操作を自動化するプログラムを手軽に作れるようになっています。下図は、人間を表現するアイコンへファイルをDrag&Dropすることによってその人にファイルをメールで送るというプログラムをAutomatorで作成したものです。これは顔アイコンシステムで提案されているものですが、Automatorを使うとこのように非常に簡単に実装することができます。
■例示プログラミング
プログラミングが難しいのは、抽象的思考が必要になるからかもしれません。レシピを記述したり目覚まし時計をセットしたりする操作は具体的だからわかりやすいといえるでしょう。文字盤の「7」のところに針をあわせるという操作は、時刻が文字盤の上に具体的に表現されているのでわかりやすいのですが、昔のビデオデッキのように「7:00」のような数字を入力する操作が必要な場合、時刻やチャンネルの数字による表現が抽象的でわかりにくいため、ビデオの予約は難しいという印象が定着してしまったのでしょう。ビデオの録画予約が苦手な人でも、チャンネルを変えたり録画ボタンを押したりすることはできるでしょうから、このような具体的な操作だけで予約ができるようになっていればよかったのかもしれません。
例示プログラミングの手法を使うと、抽象的な表現を利用せず、具体的な操作だけをもとにしてプログラミングを行なうことができます。私が作成したDynamic Macroというシステムでは、テキストエディタ上で何か同じ操作を二度繰り返すと、繰り返した操作がプログラムとして登録され、その操作を何度も繰り返し実行させることが可能になっています。例えば“> ”という文字列を二度入力した後で「繰り返しキー」を押すことによってこの操作がプログラムとして登録され、このキーを押すだけで自動呼び出しすることができます。ユーザはプログラミングを行なっている意識が無くても、同じことを二度実行しただけでその操作がプログラムとして登録されるのが特徴です。
このように、例示プログラミングシステムでは、具体的な操作を行なうことによってプログラムを自動生成することができます。複雑なプログラムを作ろうとすると例を沢山与える必要がありますが、単純なプログラムを作りたい場合は有効な手法だといえるでしょう。
■自動化の展望
ユーザが簡単にプログラミングを行なうためのツールや環境は最近増えているようです。前述のAutomatorはあらゆるMacintoshに標準装備されていますし、Firefoxの動作を自動化するChickenfootやMozReplのようなシステムも手軽に使えるようになりました。ちょっと前のパソコンではプログラミング環境を用意するのが大変でしたが、最近はあらゆるブラウザがJavaScriptのプログラミング環境を持っているので、プログラミングを始めるための敷居はかなり低くなっています。これらを活用した例示プログラミング/エンドユーザプログラミングシステムがこれから増えてくることでしょう。
現在は、プログラミングの対象はEmacsとかMacアプリケーションとかブラウザのような、パソコン上のソフトウェア限られていますが、将来的には全世界のセンサやアクチュエータを自在にプログラミングできるようになってほしいものです。「近くに友達がいれば連絡する」とか、「株価が上がったら株を売る」といったプログラムを誰でも簡単に作って利用できると便利でしょう。「近く」のような概念は普通のプログラム言語では簡単に表現することができませんが、こういった漠然とした概念は、ビジュアルプログラミングや例示プログラミングを利用した方が指定しやすいかもしれません。ユビキタスコンピューティングにおける様々な自動化を支援する環境に今後期待したいところです。