冷蔵庫のドアを開くと、庫内が明るくなります。自動ドアは、人が近づくと開きます。スマートフォンの画面は、指で触れた場所に反応します。
どれも身近で、ふだん不思議に思うことはありません。
けれども、これらの製品が自分の意思で動いているわけではありません。動き方を決めたのは、人間です。そして、その決めごとを機械に実行させる方法の一つが、プログラミングです。
この記事では、「自動」と呼ばれている動きの中に、どれだけの決定が入っているのかを見ていきます。
「自動」は何もしなくても動くことではない
自動ドアを見ていると、ドアが人に気づいて、自分で開いたように見えます。しかしドアは、周囲の状況を人間のように理解しているわけではありません。
人が近づいたことを何らかの方法で受け取り、あらかじめ決められたとおりに動いています。
「自動」という言葉は、動きの原因が見えないときに使われます。原因がないわけではありません。見えていないだけです。

「人が来たら開く」は人間が決めた
自動ドアをつくるとき、最初にあるのは、
人が近づいたら、ドアを開けたい
という人間の意図です。
ただし、この意図だけではドアは動きません。
どれくらい近づいたら反応するのか。開いたあと、いつ閉じるのか。人がドアの間に立っているときは、どうするのか。
一つひとつを決めなければ、機械は動けません。私たちが「自動」と呼んでいる動きは、人間が決めた細かな取り決めの積み重ねです。
プログラミングは意図を実行できる形に変える
人間なら、「危ないときは閉めないで」と言われれば、その場を見て判断できます。
コンピューターには、それができません。「危ないとき」がどういう状態なのかを、機械が扱える情報として示す必要があります。何を手がかりに判断するのか。その手がかりがどうなったときに、どう動くのか。
プログラミングとは、こうした意図を、機械が迷わず実行できる形に置き換える作業です。
プログラミングはとても細かい
「人が近づいたらドアを開ける」。—文にすれば、たったの一行です。
ところが、実際に安全に動かそうとすると、決めることは一行では終わりません。
自動ドアが決めていること
- どこからどこまでを「近づいた」とするか(センサーの検知範囲)
- 横を通り過ぎるだけの人に、反応しないようにするか
- 人ではないもの(荷物、カート、雨、落ち葉)を検知したときは、どうするか
- 開いたあと、何秒間そのままにするか
- 閉じ始めたあとに人を検知したら、途中でも開き直すか
- ドアの間に人が立ち止まっているときは、閉じないようにするか
- 開く速さと閉じる速さは、同じでよいか
- 停電したとき、開いたままにするか、閉じたままにするか
一つでも決め忘れると、「動くけれど危ないドア」になります。
自動ドアは、単純な機械に見えます。単純に見えるのは、これらの決定がすべて済んでいて、私たちの目に触れないからです。
スマートフォンのタッチパネルが決めていること
画面に触れたとき、機械が受け取るのは「触れた」「離した」「どこか」という情報だけです。そこから先は、すべて決めごとです。
- 触れた位置が、どのボタンの範囲に入っているか
- 触れてから離すまでが短ければタップ、長ければ長押し
- その「長い」は、何秒からか
- 触れたまま位置が動いたら、スワイプ
- 何ミリ動いたら「動いた」ことにするか
- 手のひらが当たっただけの反応を、無視するかどうか
同じ画面の同じ場所に触れても、触れ方によって結果は変わります。その違いは、機械が理解しているのではありません。人間が「区別することにした」ものです。

ゲームの「自然な動き」もつくられたもの
家電やスマートフォンだけではありません。ゲームの中の動きも同じです。
敵が近づいてくる。床が往復する。時間が切れると終わる。どれも自然に見えますが、自然に起きているものは一つもありません。
敵は、自分で考えて追いかけてくるのか
ゲームの敵がこちらを見つけて追いかけてくると、本当に考えているように見えます。
しかし、敵が自分で目的を決めたわけではありません。
どこまで近づいたら追いかけ始めるのか。追いかけている途中で見失ったら、どうするのか。壁に当たったら、どちらへ回り込むのか。離れすぎたら、あきらめて元の場所へ戻るのか。
これらはすべて、ゲームをつくった人が決めています。
自動ドアとゲームの敵は、見た目にはまったく違うものです。けれども「ある状態になったら、決められた反応をする」という点では、同じ形をしています。
難しさも、設計されている
敵の速さ。敵の数。攻撃してくる間隔。障害物の位置。制限時間。アイテムが出る確率。
これらの数値を少し変えるだけで、ゲームの難しさは変わります。「ちょうどいい」と感じる場面も、「理不尽だ」と感じる場面も、誰かが数値を決めた結果です。
ここまで来ると、プログラミングが「ものを動かす技術」だけではないことが分かります。どう動かせば、遊ぶ人がどう感じるか。そこまで含めて設計できます。むしろ、そちらのほうが本題かもしれません。

まとめ
身の回りにある製品も、ゲームも、自分の意思で動いているわけではありません。
誰かが「こう動かしたい」と考え、その意図を、機械が実行できる細かな取り決めに置き換えた。私たちが目にしているのは、その結果です。
次に何かが自動で動いたときは、こう考えてみてください。
- 何をきっかけに動いたのか。
- その動き方を決めたのは、誰か。
- 自分なら、どこを変えるか。
最後の問いに答えられたとき、もう使う側ではなく、決める側に立っています。