自動販売機の中では何が起きている?「もし〜なら」で学ぶ条件分岐
150円のジュースを買いたいのに100円しか入れていなかったら、どうなるでしょうか。
また、お金が足りていてもジュースが売り切れだったらどうなるでしょう。
まずは、それぞれの場面で商品が出るかどうかを予想してみてください。自動販売機がどんなことを確かめればよいかも、紙にメモしておきましょう。
この記事では、飲み物を買うときの判断の流れを紙と鉛筆で試してみます。そのあと、Scratch(スクラッチ)を使って同じルールを組み立てていきます。パソコンが手元になくても、紙を使った実験まで一緒に楽しく取り組めます。
本物の自動販売機には、お金を見分けるセンサーや商品を送り出す装置、在庫を管理する仕組みなど、たくさんの機能が備わっています。今回扱うのは、商品を買うときの判断を学ぶための分かりやすいモデルです。買い物のルールだけに絞り込んで、シンプルに分かりやすく整理しています。
実際の自動販売機の内部をすべてそのまま再現したものではありません。確認する順番やお金を返す仕組みも、すべての実機と同じとは限らない点にご留意ください。
判断に使う「値段・入れた金額・在庫」

今回扱うジュースは1種類だけです。値段は150円で、はじめに2本ある状態からスタートします。
ジュースが買えるかどうかを考えるために、次の3つの情報を使います。
| 情報 | 表しているもの | 基本の設定 |
|---|---|---|
| 値段 | ジュース1本を買うのに必要なお金 | 150円 |
| 入れた金額 | 今回ジュースを買うために入れたお金の合計 | 実験ごとに変える |
| 在庫(ざいこ) | 売ることのできるジュースの残り本数 | 2本 |
「在庫が2本」というのは、あと2本買えるという意味です。「お金が足りているか」と「商品が残っているか」は、それぞれ別々に確かめます。
また、返ってくるお金についても、次の2つの言葉を正しく使い分けます。
- おつり:ジュースが買えたときに、入れた金額から商品の値段を引いて戻ってくるお金
- 返金:ジュースが買えなかったときに、今回入れたお金がそのまま戻ってくること
答えを見る前のミニクイズ

次の5つの実験で、どんな結果になるか予想してみましょう。
値段はすべて150円です。A〜Cは在庫が2本、DとEは在庫が0本の状態から始めます。
※5つの実験は、それぞれ1回ずつ独立して行います。 Aの次にBを試すときも、在庫は表に書かれている本数に戻します。前の実験で入れたお金も残りません。
| 実験 | 始めるときの在庫 | 入れる金額 | 商品は出る? | 終わったときの在庫は? | おつりや返金は? |
|---|---|---|---|---|---|
| A | 2本 | 100円 | 予想を書く | 予想を書く | 予想を書く |
| B | 2本 | 150円 | 予想を書く | 予想を書く | 予想を書く |
| C | 2本 | 200円 | 予想を書く | 予想を書く | 予想を書く |
| D | 0本 | 200円 | 予想を書く | 予想を書く | 予想を書く |
| E | 0本 | 100円 | 予想を書く | 予想を書く | 予想を書く |
特に実験Eでは、商品もお金も両方足りていません。「売り切れ」と「お金が足りない」のどちらを先に伝えるでしょうか。
自分なりの予想をメモしてから、次のルールを読み進めてみてください。
「もし〜なら」で分ける購入の流れ

今回のルールでは、「先に在庫を確かめて、商品がある場合だけ金額を確かめる」という順番に決めます。
- もし在庫が0本なら、「売り切れ」と伝えます。入れたお金を全額返金して、買い物を終えます。
- 在庫があり、もし入れた金額が150円未満なら、「お金が足りない」と伝えます。この場合も全額返金して、買い物を終えます。
- 在庫があり、150円以上入っていれば、ジュースを1本出します。
- ジュースが買えたときだけ、在庫を1本減らします。
- ジュースが買えたときのおつりを「入れた金額 − 商品の値段」で計算して返します。
ここでの「1回の買い物」とは、お金を入れてから商品やおつりを受け取るまでの一連の流れのことです。
買い物が終わったら、記録していた「入れた金額」と「おつり」を0に戻します。ただし、在庫の数は買い物が終わったあとの本数をそのまま残します。
「150円より多い」と「150円以上」の違い
- 「150円より多い」:150円ちょうどは含まれません。1円単位の整数で考えると、151円、152円……となります。
- 「150円以上」:150円ちょうどを含みます。150円、151円、152円……となります。
150円のジュースは、在庫があれば150円ちょうどで買えます。 そのときのおつりは「150 − 150」で0円です。
同じ「もし〜なら」という判断でも、どんな条件を書くかによって結果が変わってきます。
購入の流れを表す分岐図(フローチャート)
次の図は、今回決めたルールの流れを表しています。
条件を確かめるひし形の部分では、「はい」「いいえ」のどちらかへ進みます。

このように、ある条件を確かめて、その結果によって次の動きを変える仕組みを「条件分岐(じょうけんぶんき)」と呼びます。
今回の例では、「在庫は0本か」「入れたお金は足りているか」が条件にあたります。
紙と鉛筆で試す「自動販売機ごっこ」

決めたルール通りに動くかどうか、実際に人間が動かして試してみましょう。
2人で取り組む場合は「お客さん役」と「自動販売機役」に分かれます。1人で行う場合も、役を交代しながら進められます。
用意するもの
- 「ジュース・150円」と書いた商品カード
- 在庫を表す、鉛筆で描いた2つの丸(◯◯)
- ジュースの代わりに渡す、小さめのカード2枚
- 「50円」「100円」などと書いた、お金代わりのメモ紙
- 予想や結果を書く紙、鉛筆、消しゴム
値段のカードは、売り場に見立てて机の上に置いておきます。小さなカードは、ジュースが買えたお客さんに1枚渡します。丸印は、ジュースの残り本数を数えるために使います。
実験を進める手順
- 実験A〜Eの中から1つ選び、指定された在庫の数だけ紙に丸を描きます。どうなるかの予想も先に書いておきましょう。
- お客さん役が、指定された金額のメモ紙を自動販売機役に渡します。
- 自動販売機役は、分岐図を指でなぞりながら、「在庫」→「金額」の順番で条件を確かめます。
- ジュースが買えた場合は、商品カードを1枚渡して、紙の丸を1つ消しゴムで消します。おつりがあるときは、おつりのメモ紙も渡します。
- ジュースが買えなかった場合は、その理由(「売り切れ」または「お金が足りない」)を伝え、受け取ったお金のメモ紙をそのまま全額返します。丸は消しません。
- 出た商品、残りの在庫、おつり、返金額を紙に記録して、最初の予想と比べます。次の実験を始める前に、カードや在庫を決められた最初の状態に戻しましょう。
同じ金額を入れても、在庫が2本あるときと0本のときでは結果が変わります。
入れたお金だけを見ていると、「売り切れ」を見落としてしまうので注意しましょう。
ミニクイズの答え合わせと解説

自分で予想した紙と実験の結果を、下の表と見比べてみてください。
| 実験 | 商品 | 在庫の変化 | 買えたときのおつり | 買えなかったときの返金 | 自販機が伝える言葉 |
|---|---|---|---|---|---|
| A:在庫2本・100円 | 出ない | 2本→2本 | なし | 100円 | お金が足りない |
| B:在庫2本・150円 | 1本出る | 2本→1本 | 0円 | なし | ジュースを1本どうぞ |
| C:在庫2本・200円 | 1本出る | 2本→1本 | 50円 | なし | ジュースを1本どうぞ |
| D:在庫0本・200円 | 出ない | 0本→0本 | なし | 200円 | 売り切れ |
| E:在庫0本・100円 | 出ない | 0本→0本 | なし | 100円 | 売り切れ |
※表の「なし」は、そもそもおつりの計算や返金を行う場面ではないという意味です。おつり0円で買えた実験Bとは区別しています。
A〜C:値段と入れた金額の確認
- A:在庫はありますが、100円では150円に足りません。商品は出ず、在庫も減りません。入れた100円は全額返金されます。
- B:150円ちょうどなのでジュースが買えます。ジュースが1本出たため、在庫は2本から1本に減ります。おつりは0円です。
- C:200円あるので買えます。在庫は1本に減り、「200 − 150」で50円のおつりが出ます。
※A〜Cはすべて「在庫が2本ある状態」からスタートしている点も確認しておきましょう。
DとE:先に確かめる「在庫」
- D:お金は200円あって足りていますが、在庫が0本なのでジュースは出せません。「売り切れ」と伝えて200円を返金します。
- E:最初の「在庫が0本か」というチェックに当てはまります。そのため、まず「売り切れ」と伝えて100円を返金し、お金が足りているかどうかの判定までは進みません。
これは、今回「まず在庫から確認する」というルールにしたためです。世の中のすべての自動販売機がこの順番で確認しているわけではありません。
在庫2本からの連続購入テスト

基本の実験ができたら、次は「在庫2本」の状態から、150円を入れて続けて3回買う実験をしてみましょう。
今度は、1回ごとに在庫を元に戻しません。 買う人は、1回ごとに新しく150円を入れます。
始める前に、3回それぞれでどんな結果になるか予想してみましょう。
| 回数 | 買う前の在庫 | 入れる金額 | 商品 | 買った後の在庫 | おつり | 返金 |
|---|---|---|---|---|---|---|
| 1回目 | 2本 | 150円 | 1本出る | 1本 | 0円 | なし |
| 2回目 | 1本 | 150円 | 1本出る | 0本 | 0円 | なし |
| 3回目 | 0本 | 150円 | 出ない | 0本 | なし | 150円 |
3回目は、お金が足りているのに売り切れになります。2回目の買い物で在庫が0本になってしまったからです。
このように、前の買い物で変化した在庫の数が、次の買い物の判断に使われます。
プログラミングでは、こうした「そのときの残り本数や入れた金額などの記録」を状態(じょうたい)と呼びます。毎回同じ150円を入れても、自販機の「状態」が変わっていれば同じ結果にはなりません。
Scratchで作る購入プログラム

Scratch(スクラッチ)は、命令が書かれたブロックをつなぎ合わせてプログラムを作るツールです。
紙の上で試した条件分岐のルールを、実際のブロックに置き換えて作ってみましょう。
基本操作をあらかじめ確認しておきたい方は、関連記事「スクラッチの使い方を小学生向けに解説|ジャンプゲームの作り方」もぜひ参考にしてください。
今回作るプログラムのルール
- ジュースは150円の1種類だけで、在庫2本からスタートします。
- キーボードから、今回入れたお金の合計を入力します。
- 入力は「100」「150」「200」のように、0以上の整数を半角数字で入れるルールとします(文字や小数の入力対策などは発展編とします)。
- 買えなかったときは全額を返金して買い物を終え、買えたときは商品とおつりを渡して買い物を終えます。
- 次の買い物に向けて「入れた金額」と「おつり」はリセットしますが、「在庫」はそのまま引き継ぎます。
- 商品やおつりを渡す動きは、キャラクターの吹き出しのセリフで表現します(おつりの硬貨は十分に用意されている前提とし、小銭の枚数計算などは行いません)。
手順1:数字を記録する「変数」を作る
まずは Scratchの作成画面 を開きます。(画面が英語になっている場合は、左上の地球儀マークから日本語に切り替えてください)
金額や本数など、変わりゆく数字を一時的に覚えておく入れ物を変数(へんすう)といいます。
画面左側の「変数」カテゴリーから「変数を作る」を選び、次の4つの変数を「すべてのスプライト用」で作成しましょう。
| 変数名 | 記録する内容 | 最初の値 |
|---|---|---|
| 値段 | ジュース1本の値段 | 150 |
| 入れた金額 | 今回入力されたお金 | 0 |
| 在庫 | 残りの本数 | 2 |
| おつり | 買えたときに返す差額 | 0 |
変数の左側にあるチェックボックスにチェックを入れると、ステージ画面上に現在の数字が表示されます。好きなキャラクター(スプライト)を1つ選んで、そのキャラクターの中にプログラムを組んでいきます。
※変数についてもっと詳しく知りたい方は、「プログラミングの「変数」とは?小学生でもわかるようにやさしく解説」もご覧ください。
手順2:スタート時の設定とお金の入力
「イベント」にある「⚑(緑の旗)が押されたとき」ブロックの下に、初期設定ブロックをつなげます。値段を150、在庫を2、入れた金額とおつりを0にします。
その下に「制御」の「ずっと」ブロックを置き、その中に「調べる」の「何円入れますか? と聞いて待つ」を入れます。続けて「入れた金額を(答え)にする」を配置します。
「答え」ブロックには、キーボードから入力された数字が入ります。
【注意】在庫を2にするブロックは、必ず「ずっと」の外側に置いてください。 もし「ずっと」の中に入れてしまうと、1回買い物をするたびに在庫が2本に戻ってしまい、売り切れのテストができなくなってしまいます。

手順3:在庫があるかを確かめる条件
金額を入力するブロックの下に、「制御」の「もし〜なら・でなければ」ブロックをつなげます。条件を入れる六角形のすき間には、「演算」の「=」を使って「在庫 = 0」と組み立てます。
- 「なら」の内側:「見た目」の「〜と2秒言う」を使って、「売り切れ」と伝えるセリフと、入れた金額を返すメッセージを入れます。ここでは商品は出ないので、在庫を減らすブロックは入れません。
- 「でなければ」の内側:在庫が0ではない、つまり「ジュースがまだ残っているとき」の処理へ進みます。
手順4:お金が足りているかを確かめる条件
在庫の判定の「でなければ」の中に、さらにもう1つ「もし〜なら・でなければ」ブロックを入れ込みます。
内側の条件には、「演算」の「<」を使って「入れた金額 < 値段」と入れます。「<」は、左の数が右の数より小さいかどうかを調べる記号です。
- 「なら」の内側:お金が足りていません。「お金が足りない」というセリフと、全額返金のメッセージを表示します。
- 「でなければ」の内側:お金は値段と同じか、それ以上入っています。つまり、無事にジュースが買える処理へ進みます。
※Scratchの「演算」ブロックには「≧(以上)」を調べるブロックがありません。そのため今回は、「値段より少ない(未満)」を確かめて、そうではない場合(でなければ)を150円以上として扱っています。 150円ちょうどのときも、この「でなければ」側へ進みます。

手順5:商品とおつりを渡してリセットする
ジュースが買える側(一番内側の「でなければ」)の中に、次の3つのブロックを入れます。
- 「ジュースを1本どうぞ」と2秒言う
- 「在庫を −1 ずつ変える」
- 「おつりを(入れた金額 − 値段)にする」
「在庫を −1 ずつ変える」は、今の数から1を引く命令です。「在庫を 1 にする」にしてしまうと、残り本数が何本であっても1本に書き換わってしまうので注意しましょう。


おつりを伝えたあと、一番外側の「もし〜なら・でなければ」ブロックのすぐ下に、「入れた金額を 0 にする」「おつりを 0 にする」を配置します。この2つは「ずっと」の内側に置くことで、買い物が成功しても失敗しても毎回実行されます。
結果を表示する前にリセットしてしまうと、いくら返せばいいのか分からなくなってしまいます。必ず、「メッセージを伝え終わってからリセットする(在庫の数は減らしたまま保つ)」という順番を守りましょう。
考え方を整理した「擬似コード」
全体の流れを言葉で分かりやすく表すと、以下のようになります。(※Scratchに直接貼り付けて動かすものではなく、頭の中を整理するためのメモです)
もし 在庫が0本 なら
「売り切れ」と伝え、入れた金額を全額返す
そうでなく、もし 入れた金額が値段より少ない なら
「お金が足りない」と伝え、入れた金額を全額返す
それ以外(在庫があり、お金も足りている)なら
商品を1本出す
在庫を1本減らす
おつり = 入れた金額 - 値段
おつりを返す
どの場合も今回の取引を終了する
入れた金額とおつりを0に戻す
在庫の数はそのまま保つ
ブロックの組み立て完成テキスト
実際のScratchブロックのつながりを文字で表した完成例です。
※ブロックの表記は Scratch公式の日本語設定データ を参考にしています。
「(入れた金額)と[円を返します]」の部分は、「演算」にある文字をつなぐ「◯ と ◯」ブロックを使います。
左側に変数を入れ、右側に「円を返します」と入力して、「〜と言う」ブロックにはめ込みます。

完成したプログラムを動かしてみよう
基本の実験A〜Eを試して、最初の予想表と同じ動きをするか確かめてみましょう。
- 実験A〜C:試すたびに緑の旗を押して、在庫を2本に戻してからスタートします。
- 実験D・E:緑の旗を押したあと、金額を入れる前に画面左の「在庫を 0 にする」ブロックを1回だけカチッとクリックして準備します。
キャラクターのセリフと、画面に表示される在庫の数が合っているか確認しましょう。「おつり」の変数はセリフが出ている間に確認でき、セリフが終わると0に戻ります。
連続購入のテストは、最初に1回だけ緑の旗を押し、続けて「150」を3回入力します。途中で旗を押さずに、在庫が「2 → 1 → 0 → 0」と変化し、3回目に150円がそのまま返金されれば大成功です。
実験を終えるときは、画面上部にある赤い丸ボタンを押してプログラムを止めます。
バグを見つけるプチチャレンジ!

プログラムが思い通りに動かない不具合のことを「バグ」と呼びます。
もし次のようなトラブルが起きたら、プログラムのどこを見直せばよいでしょうか? 答えを見る前に考えてみましょう。
挑戦1:150円ちょうどを入れたのに買えない
- 状況:在庫は2本あり、200円を入れると買えるのに、150円を入れると買えません。
- ヒントと直し方:金額を調べる条件を見直してみましょう。「入れた金額 > 値段」としてしまうと、同じ金額(150円)のときが除外されてしまいます。お手本のように「入れた金額 < 値段」を使い、その「でなければ」で買い物処理を行うように修正します。
挑戦2:買えなかったのに在庫が減ってしまう
- 状況:在庫2本のときに100円を入れたら、商品は出ないのに在庫が1本に減ってしまいました。
- ヒントと直し方:「在庫を −1 ずつ変える」ブロックが、条件分岐の外側に飛び出していませんか? このブロックは、必ず「ジュースが買えたときの枠(内側の『でなければ』)」の中に配置します。
挑戦3:おつりが「−50円」になってしまう
- 状況:100円を入れて買えなかったとき、おつりが「−50円」と表示されてしまいました。
- ヒントと直し方:失敗したときにも「100 − 150」の引き算を実行していないか確認しましょう。おつりの計算は買えたときだけに行い、買えなかったときは入れた100円をそのまま全額返すようにブロックの位置を直します。
一度にたくさんの場所を変えてしまうと、どこを直して動いたのかが分からなくなってしまいます。「1つ直したら、もう一度動かして確かめる」を心がけましょう。
さらに広がる!3つのアレンジアイデア

基本のプログラムができたら、さらに工夫を加えてみましょう。
1. 値段を変えてみる実験
「値段」の変数を180に変えて、179円、180円、200円を入れたときの動きを試してみましょう。
条件やおつりの計算で「値段」の変数を使っていれば、最初の数字を変えるだけで自動的に180円を基準に判断してくれます。
プログラムの中に「150」と直接数字を書き込んでしまっている場所がないかチェックしてみましょう。
2. 商品を2種類に増やす実験
150円のジュースに加えて、120円のお茶を追加してみましょう。
「どちらを買いますか?」と聞いてから、選んだ商品の値段と在庫を使って判断するようにします。
ジュースを買ったときにお茶の在庫まで減ってしまわないよう、「ジュースの在庫」「お茶の在庫」と変数を分けて管理するのがポイントです。
3. 「補充ボタン」を作ってみる
「補充(ほじゅう)」という新しいスプライトを描いて、クリックすると在庫が2本増えるボタンを作ってみましょう。
「このスプライトが押されたとき」ブロックに「在庫を 2 ずつ変える」をつなげます。ジュースが売り切れになったあと、補充ボタンを押して再び買えるようになるか試してみてください。
まとめ:条件分岐のポイント

今回の自動販売機のプログラムでは、在庫とお金の条件を確かめて、「商品を出すか」「理由を伝えてお金を返すか」を正しく振り分けました。
これがプログラミングの基本である条件分岐です。
- 150円ちょうどでもきちんと買えること
- 買えたときだけ在庫が1本減ること
- 前の買い物で減った在庫の数が、次の買い物の判断に影響すること
プログラムを作るときは、「まず結果を予想してから動かし、実際の動きと見比べる」ことがとても大切です。
思い通りにいかないときは、条件の書き方やブロックを置く順番を一つひとつ見直していきましょう。
紙の実験でもScratchでも、「何を確かめて、その結果によって何をするのか」を順序立てて決めることが、プログラミング的思考を伸ばす一番の近道になります。
保護者の方へ

お子さまが試行錯誤しているときは、すぐに答えを教えるのではなく、次のように問いかけてみてください。
- 「どうしてその結果になったと思う?」
- 「自販機は今、どの順番で確かめたかな?」
- 「次に試すなら、いくら入れてみたい?」
言葉で説明するのが難しそうなときは、分岐図を指でなぞったり、紙に描いた丸を一緒に消したりしながら考えると、頭の中がすっきりと整理されます。
「条件を考えてものを動かす面白さ」は、ゲームやアニメーション作りの中でも自然と深まっていきます。
子ども向けプログラミング教室「テックチャンス」では、Scratchなどを基礎から楽しく学べるコースをご用意しています。公式の推奨学年は小学1〜3年生ですが、小学4〜6年生のお子さまでもこれまでの経験に合わせて最適な学習ステップをご案内できます。
教室の雰囲気や実際の授業の進め方を体験できる「無料体験授業」も随時受け付けています。プログラミングを通じたものづくりに興味が湧きましたら、ぜひお近くの教室やオンラインでの体験をご検討ください。