界面駭客日記(40) - お手軽プログラミングの楽しみ 増井俊之


20年以上前にパソコンが世の中に出始めたころは、 パソコンにはBASIC言語のインタプリタが内蔵されているのが普通であり、 パソコンを買った人の多くがBASICのプログラミングを楽しんでいました。 今ではほとんど信じられない世界ですが、 当時のパソコンにはディスクもファイルも存在しなくても プログラミング環境は存在したわけで、 プログラムを作ることをホビーとして楽しむことが パソコン購入の大きな動機となっていたように思われます。

現在のパソコンは、 文書作成や表計算のような仕事に使ったり インターネットの利用のために使ったりするのがほとんどであり、 ホビーとしてプログラムを作る人はごく少数になってしまったようです。 FlashやJavaは多くのWebページやサーバで使われていますが、 普通のパソコンにはこれらのプログラミング環境は標準装備されていませんから 興味があったとしてもすぐに実験することはできず、 大規模な開発環境を購入する資金やインストールの手間が必要になります。 また、これらのシステムでは、 新しくウィンドウを作成して文字を表示するといった 簡単なプログラムを作りたい場合でも、 そのためには 言語の仕様/開発環境の使い方/ライブラリの構成など 沢山の知識が必要になるので、 プログラミングを始めるためにはかなりの気合いが必要です。

このような状況のため、 現在は 「全くプログラミングを行なわない一般ユーザ」と 「真剣にプログラミングを行なうプログラマ」 の2種類の人間しか存在せず、 「気が向いたときに簡単なプログラムを書くホビープログラマ」のような人間は ほぼ絶滅してしまったように思われます。

往年のパソコンでは、電源を入れるとすぐBASICインタプリタが動作し、

CLS
と入力して画面を消去したり、
LINE (10,10)-(100,100),1
と入力して画面上に線を描いたりしたものですが、このように ようなプログラミング環境はないものでしょうか。 昔のBASICを今さら導入するのは考えられませんが、 実は、現在標準的なパソコン環境でも、 軽い気分でプログラミングを行なうことが可能です。

VBScript

VBScriptはWindowsに標準搭載されているプログラミング言語で、 マイクロソフトの製品である プログラム開発環境「Visual Basic」のサブセットです。 VBScriptは単体でプログラミング言語として使われることはあまりなく、 以下のようにHTMLテキストにプログラムを埋め込むことによって Internet Explorerの中でプログラムを実行することができます。

フィボナッチ数を計算するVBScriptプログラムをHTMLページに埋め込んだもの:

<html><body>
<h1>フィボナッチ数計算</h1>
<script language="VBScript">
<!--
Dim v1,v2,sum,i
v1 = 1
v2 = 1
n = 40

For i = 1 to n
  Document.Write v1 & " "
  sum = v1 + v2
  v1 = v2
  v2 = sum
Next

MsgBox "フィボナッチ数を" & n & "個計算しました。"
-->
</script>
</body></html>
このHTMLファイルをブラウザで表示しようとすると、 VBScriptのプログラムが実行され、 並んだ数を足す操作を40回繰り返した結果がHTMLに埋め込まれ、 以下のような表示が得られます。 計算の最後でMsgBox関数を呼ぶことにより 小さな確認ウィンドウが表示されています。

Internet Explorerでの表示結果:

VBScriptはWindows/Internet Explorerでは標準で使用することができますから、 何も用意しなくても簡単にプログラミングを楽しむことができます。 VBScriptは以下のような特長を持っています。

VBScriptのプログラムテキストに".vbs"という拡張子をつけてセーブすると、 普通のアプリケーションのように動かすことができます。 たとえば以下のようなプログラムを "memoabc.vbs" のような名前でセーブしてからそのアイコンをダブルクリックすると、 メモ帳が開いて「abc」が入力されます。 このように、VBScriptを使うと 別のアプリケーションを操作するプログラムも 簡単に作成することができるので便利です。
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\Windows\notepad.exe"
WScript.Sleep 1000
WSHShell.SendKeys "abc"

sgl

特別なソフトウェアを購入したりインストールしたりしなくても、 Internet Explorerの中でちょっとしたプログラムを動かしたり 簡単な計算やバッチ処理を実行できるという点で、 VBScriptはお手軽プログラミングに向いていますが、 WindowsとInternet Explorerでしか使えませんし、 画面に線を描いたり音を出したりすることさえできませんから、 昔のBASICよりも面白味に欠けるともいえます。 VBScriptのかわりにVisual Basicを購入すれば何でもできるのですが、 価格や使い勝手の面でかなり敷居が高くなってしまいます。

クロスプラットフォームで計算やグラフィクスが利用できる システムとしてはJavaが有力です。 Javaは本格的なオブジェクト指向言語であり、 あらゆるライブラリが揃っていますし フリーの開発環境が沢山あるので 本格的なプログラミングをするには向いているのですが、 言語仕様/開発環境/ライブラリのすべてについて かなりの知識が必要になりますから 残念ながらお手軽さは充分とはいえません。

一方、いろいろなプラットフォームで使えるスクリプト言語として Perl, Python, Rubyなどが最近広く使われています。 RubyやPythonは本格的なオブジェクト指向言語ですが、 深い知識がなくても使うことができるようになっています。 例えばRubyでは

puts "abc"
と記述するだけで"abc"を印刷することができますが、 このように「簡単なことは簡単に/複雑なことはそれなりに」 プログラムすることができるため、 非常に気軽にプログラミングを楽しむことができます。

Windows, Macintosh, Linuxなどで同じようにグラフィクスやサウンドを扱うことができる 「SDL」というマルチメディアライブラリが公開されています[*1]。 また、SDLをRubyから利用することができる 「Ruby/SDL」システムが公開されている[*2]ので、 Rubyから簡単に画面描画や音の処理を行なうことができます。 また、産業技術総合研究所の江渡浩一郎氏は、 SDL/Rubyをさらにお手軽に使えるようにした「sgl」というシステムを 作成しています[*3]。 sglではRuby/SDLの難しい部分を隠蔽しており、 BASIC並の手軽さでプログラミングを行なうことができます。

例えばsglでは以下のようにして黄色い背景に青い矩形を描くことができます。

require 'sgl'
window 100,100       # 100x100のウィンドウ生成
background 100,100,0 # 背景に黄色を指定
color 0,0,100        # 描画色に青を指定
rect 20,20,80,80     # 四角を描く
wait

Rubyの制御構造を使うと、複雑な絵を書くことも簡単です。

require 'sgl'
window -200,-200,200,200
color 100
x = 190.0
y = 180.0
10000.times do
  x = x + y / 2.0
  x -= 400 if x > 200
  x += 400 if x < -200
  y = y - x / 2.1
  y -= 400 if y > 200
  y += 400 if y < -200
  rect x,y,x+1,y+1
end
wait

このように、 sglを使うとBASICと同じぐらいの手軽さでグラフィクスプログラミングを 楽しむことができますし、 Rubyの高度な言語機能やライブラリを使うこともできますから、 本格的なアプリケーションも作ることができます。

エンドユーザプログラミング

現在のパソコンのアプリケーションは、 様々はカスタマイズや設定ができるようになっています。 たとえば、最近流行りのTV録画ソフトでは 様々な予約条件や設定を指定できるようになっているため システムはかなり複雑なものとなってしまっています。 一方、もしユーザが自分で 「月曜日の9時になったら録画プログラムを起動する」 のような簡単なプログラムを書くことができれば、 録画ソフトでいろいろな設定方法を用意する必要は少なくなるはずです。 ワープロの場合でも、ユーザが簡単にプログラムを書いて文字列を操作することができれば、 「文字列AをBに置き換える機能」 「選択範囲を字下げする機能」 ...など、 考えられるすべての機能を用意しておく必要はなくなるかもしれません。

このように、簡単なプログラムをユーザが作ることによって カスタマイズや自動化を行なうことを 「エンドユーザプログラミング」といいます。 エンドユーザプログラミングでは本格的なプログラミング能力は必要はなく、 お手軽プログラミングができれば充分です。 現在のほとんどのアプリケーションでは エンドユーザプログラミングはサポートされていませんが、 ユーザがプログラムを書いてシステムを制御することが簡単にできれば 計算機の使い方は変わってくるかもしれません。


「界面駭客日記」は今回で終了になりますが、 計算機のインタフェースはまだまだ進化途上です。 今後もいろいろ新しいインタフェースシステムを提案していきたいと思っています。 またどこかでお会いしましょう!
  1. SDL: http://www.libsdl.org/
  2. Ruby/SDL: http://www.kmc.gr.jp/~ohai/rubysdl.html
  3. sgl: http://eto.com/2001/sgl/

Toshiyuki Masui