スクウェア・エニックスが3月に出荷開始したロール・プレイング・ゲーム「ファイナルファンタジー XII」(以下FF12)では,味方キャラクタのAI(行動パターン)をプレーヤ(ユーザー)が設定できるのをご存知だろうか。それも,ドラゴンクエストなどのようにあらかじめ決められたパターンから選択するのではなく,かなり自由度の高い設定が可能である。AIを自由にプログラミングできると言ってもいいほどだ。

 AIの設定(FF12ではガンビットと呼ぶ)は,「<体力が30%以下の味方>に対して<回復魔法を唱える>」のように「条件付きの対象」とそれに対する「行動」の組を優先順位をつけて複数指定することで行う。もちろん,コードを記述するわけではなく,あらかじめ用意された選択肢の中から対象と行動を画面上で選択していくのだが,選択肢の数が非常に多いために自由度は高い。例えば

(1)体力が30%以下の味方に回復魔法を唱える
(2)火に弱い敵に対して火の攻撃魔法を唱える
(3)最も体力が低い敵を武器で攻撃する
(4)体力が80%以下の味方に回復魔法を唱える
 ・・・

と設定した場合,(1)まず体力が30%以下の味方がいれば安全のために回復し,(2)そのような味方が存在せず,代わりに火に弱い敵がいたら火の魔法を唱え,(3)そのような敵がいなければ最も体力の低い(倒しやすい)敵を武器で攻撃する,といった具合になる。最後の(4)を実行するのは敵が一人もいないとき,つまり戦闘が終わったときだ。

プログラミングで重要な点を体で覚えられる

 ところで,記者がなぜここでFF12のガンビットを取り上げたのか,疑問に感じた方もいらっしゃるだろう。それは,FF12をプレイすることがプログラミングを始めるきっかけになるのでは,と考えたからである。

 FF12は,条件分岐やループなどの制御構文に相当するものをプレーヤに提供していないし,条件式のANDやORをとることもできない。これをもって「プログラミング」と呼ぶことには少し抵抗があるかもしれない。だがガンビットには,プログラミングで非常に重要ないくつかの点を体で覚えられるという特徴がある。

 1つは,プログラミングによる作業の自動化によるメリットを実感できることだ。FF12には,倒すのに1時間以上もかかるようなモンスターも登場するが,ガンビットを適切に設定しておけば,その間テレビを見たりご飯を食べたりできるようになる。そこまで戦闘に時間がかかる状況でなくても,「味方が睡眠状態になったから○○の呪文をかけて起こす」といった操作のほとんどを自動化できるのは大変便利だし,忙しすぎて操作が間に合わないこともなくなる。クリアするまでに100時間以上かかることが少なくないロール・プレイング・ゲームでは,こうした自動化のメリットは非常に大きい。

 2つ目は,エラーや例外的な事項の処理の重要性を身をもって理解できることだ。プログラミングでは,エラー/例外的な状況に対する処理をきちんと実装しておかないと,実用的なプログラムにならないのが普通だ。本筋の処理よりも,むしろエラーや例外的な状況に対する処理を記述したコードのほうが多い,というケースも少なくない。FF12で味方の状態異常にきちんと対処していなかったためにパーティが全滅,などという目に何度かあえば,こうした点も自然に身に付くだろう。

 3つ目は,プログラムが杓子定規に解釈されるために,細かい点まで厳密に考慮して記述する必要があることを学べる点だ。人間にものを頼む場合には,多少頼み方がいいかげんであっても適切に判断して処理してくれる。しかし,コンピュータ相手のプログラミングでは,細かい違いが大きな違いを生み,意図した通りの結果にならないことが多い。FF12の条件付き対象には,「敵1体」「最も近い敵」「リーダーの敵」など少しずつ異なるものがいくつかある。これらがどのような結果の違いを生むのか,どう使い分けるべきかを理解できるようになれば,プログラミングにおいてどこまで細かい点に気をつけるべきかという感覚も身に付くと思う。

自動化のメリットを理解することが大切

 ちょっとしたプログラムやスクリプトを書くことで,定型的な作業を自動化する---。一昔前なら,ログ解析やファイル形式の変換,テキスト処理などのためにプログラムやスクリプトを記述する(以下まとめてプログラミングと呼ぶ)のは一般的な習慣だった。だが,最近は少なくなったように思える。記者も,昔はファイル形式の変換などのために簡単なプログラムを書くことがよくあったが,最近ではほとんどない。

 プログラミングを日常的にする人が減った理由はいくつかある。一つは,そもそも必要性を感じることが少なくなったことが挙げられる。ほとんどの処理は既存のアプリケーションで実現できるし,できなければまずインターネットを検索してフリー・ソフトなどを探すのが早道だろう。多くの人が望むような処理なら,既に誰かがソフトを作っていることが多い。

 GUIが一般的になって,既存のツールを組み合わせて一つの処理を実行する,というのが難しくなったのも理由の一つだ。Unixでは,コマンドライン・プログラムをパイプで組み合わせたり,ちょっとしたシェル・スクリプトを書いたりして独自の処理を実現するのが一般的だったが,WindowsのGUIツールの多くはそうした操作を前提に作られていないからである。

 だが,最も重要な原因は,プログラミングによる処理の自動化が,どれだけ便利であるかを身をもって体験していない人が増えたことではないだろうか。GUIツールによる手作業が多少面倒でもそれを当然のことと考え,プログラミングによる自動化など頭に浮かばない,というわけだ。スクリプトを書くのに要する時間(+デバッグの時間),手で作業した場合の時間,スクリプトを再利用できるかどうかなどを考慮したうえでどちらにするかを決める,というなら分かるが,単なる食わず嫌いではもったいないように感じるのである。

 筆者が期待するのは,FF12をプレイすることで,そのような人々のプログラミングに対する抵抗感がなくなり,ひいてはプログラミングを始めるきっかけになれば,ということだ。FF12の販売本数は4月の時点で200万本以上。仮に「自動化って便利」「プログラミングするのは面白い」と感じる人が10人に1人,あるいは100人に1人いたとしても,結構な数になる。こうした人々,特に若い人々が広い意味でのプログラミングを始めてくれたら---それが記者の願いである。