界面骇客日记(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ファイルをブラウザで表示しようとすると、 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