テラボブログ

プログラム×教育① 型システムと単位

2026年8月1日

「2個で300円のトマト、5個で800円のトマト、どっちが安いでしょう。」

小学校5年生の算数ではこういった問題が出ます。

あなたはこれを見たときに、どのような計算を思い浮かべるでしょうか。

少なくとも、「2+300」と「5+800」の結果を比べる、なんてことはしないのではないかと思います。

それは、単位の持つ意味の違いによって計算を変えるという学習が行われているからです。

冒頭の問題を含め、いくつか例を出してみましょう。

①2個で300円のトマト、5個で800円のトマト、どっちが安いでしょう。

②100円のトマト、200円のトマトを買いました。合わせていくら?

③1個200円のトマトを5個買いました。全部でいくらになったでしょう。

④200円のトマトを買うとき、1000円を出しました。おつりはいくら?

全て値段の話をしているのに、それぞれ計算が違います。

あなたはこれらの計算を、どうやって学んでいったのでしょうか。

単位の難しさ

さて、特に①や③のような複数の単位を含んだ計算は、子どもたちにとって大きな障壁となっています。

直近に行われた令和8年度全国学力・学習状況調査 小学校調査[1]でも、そういった計算が多い領域である「変化と関係」は、全4つの領域の中で一番低い正答率でした。

「①2個で300円のトマト、5個で800円のトマト、どっちが安いでしょう。」と同様の問題も出ましたが、これの正答率は36.2%でした。

なぜこんなにも、子どもは単位の計算に惑わされてしまうのでしょうか。

これには大きく2つの理由があると考えています。

それは

①日常の数と、算数の数との違い

②複雑な単位を扱うことのむずかしさ  です。

①日常の数と、算数の数との違い

私たちの身の回りには、たくさんの数が存在しています。そもそも、数という概念を日々活用し、計算して私たちは生きているのです。

ただ、そのことを子どもたちが知覚することは稀でしょう。

日常において、計算や数は頭の中だけで処理されるのではなく、様々なコンテキストの間にまたがって成り立っているからです。これを「Cognition in Practice」、日本語で「日常生活の認知行動」と呼びます。[2]

子どもたちは、単に状況に頼るのではなく、状況と相互作用しながら、その場に応じた形に数や問題そのものを生成・変化させています。

単位もそうです。日常において、人々は活動の目的や環境に合わせて柔軟に単位を変化・活用します。

例えば、料理をする人が厳密な計量カップの代わりに「フライパンのここぐらいまで」といった目安を用いたり、買い物をする際に厳密な計算ではなく大まかに概算したりなど、子どもたちも生活の文脈の中で単位を柔軟に操作し、状況に応じて必要な形に変形させます。

しかし、学校教育における算数には、そのような状況との相互作用が存在しません。学校の算数は、特定の文脈から切り離された「一般的で客観的な知識」を教え、それをどんな状況でも同じように運用することを求めます。

そこでは問題は他者から与えられる客観的なものであり、解く側には状況に応じて問題を回避したり変形したりする自由はありません。
そしてそれら両者の違いにより、大きなギャップを感じてしまうのです。

果ては「こんなことやっても実生活で使わないじゃないか」という心理的な壁を立ててしまいます。

②複雑な単位を扱うことのむずかしさ

そしてそもそも、日常で感覚的に用いるような単位を数的に扱うことは、難易度が高い行為であることが言えます。

例えば速さを求める問題、「自動車が、2時間かけて120km離れた目的地に着きました。この自動車の速さは、時速何kmですか。」という問題があります。

「速さ」は子どもたちにとって感覚的には理解できます。2つの乗り物の動きを見比べれば、まず間違いなくどちらが速いかを言い当てることができるでしょう。

ただ、速さを数的に扱う場合、道のりや時間などと比べ特殊な単位であることから、途端に感覚から離れていきます。

例えば車が2台あって、それらの全長を足すことはできますが、それらの最高速度を足すことは基本的にしません。それは、「速さ」という単位が足し算可能な「外延量」ではなく、割り算が求められる「内包量」というグループであるからです。

外延量と内包量

この外延量と内包量を一言で言えば、大きさと程度です。実は単位には、大きく分けてこの2つが存在しています。

外延量とは、大きさ・長さなどの足し算引き算が可能な量のことで、日常的によく登場します。

それに対し内包量は、速度・濃度などの直接の足し算や引き算ができず、計算の過程において割り算が出てくることの多い量を指します[3]。冒頭の「トマト1個あたりの値段」についても内包量であり、求めるのに割り算を使用しています。

これが小学生にとって外延量とのギャップを感じ、混乱の元となってしまう訳です。

悪名高い「みはじ(orきはじ)」という公式も、その認知的負荷を軽減するために生まれた公式である可能性があります。

しかし当然ながら内包量の理解を後回しにしているため、「みはじ」で解けない問題(いわゆるテンプレでない問題)に出会ったときに解けなくなってしまいます。

例えば以下のような問題です。こういった問題は「みはじ」以上の子どもの理解を測るため、中学校受験等でよく出てきます。

良ければ解いてみてください。

「長さ4kmのトンネルを、時速72kmで走る列車が通過します。列車の長さが160mのとき、列車がトンネルに入り始めてから完全に抜け出すまでに、何分何秒かかりますか。」

(答え:3分28秒)

単位の役割

話を戻します。

さて当たり前の話ではありますが、冒頭のトマト問題の単位を消すと、意味が分からない問題になってしまいます。

「2で300のトマト、5で800のトマト、どっちが安いでしょう。」

私たちはその日常の経験から、ある程度単位を予測することもできます。

ただ、もっと文章内に出てくる数が増えたらどうなるか。いちいちその数値の意味を推測するのがどれだけ大変か、想像に難くないでしょう。

単位は、我々の思考に負荷をかけると同時に、我々の思考を助ける役割を持っているわけです。

これはいわば「体系・ルール」を規定することによるトレードオフであると言えます。

型システムとは

プログラミング言語には、数における単位の働きと近い、型システムというものが存在しています。

Wikipediaからその説明を引用してみましょう。

「型システム(かたシステム、英: type system)は、コンピュータプログラミングの数々の構成要素および値に対して、型(type)と呼ばれる特性を付与するための数々の規則群から成立している形式体系である。」[4]

ざっくり言えば、一般にプログラムでは全てのデータに「型」と呼ばれる特性を付与し、その特性に合った計算や使い方をする、といったイメージです。

これを、前述した「単位」に読み替えて理解してみましょう。

「単位システムは、値に対して、単位と呼ばれる特性を付与するための形式体系である。」

確かにとらえ方によっては、単位は単なる数値に対して付与することで、その性質や計算方法、使い方を規定する形式と言ってよいでしょう。

型システムも同様の機能を持っていますが、ただ型システムが付与する特性は、値段・長さ・重さのようなものではありません。

型システムが付与する特性

型システムが付与する特性は、文字列・数値・真偽のような、日常とややかけ離れたものです。

私たちはコンピュータ上で使っているデータが、文字列なのか、数値なのかなどは気にしていません。

年齢・性別・電話番号・マイナンバーが表示されているとき、私たちは性別のみを文字列として、それ以外を数値として認識しています。

しかしプログラム上では、マイナンバーや電話番号は文字列として認識され、年齢や性別は数値として扱われることが一般的です。
(性別などは、内部で男:1、女:2、その他:0のように管理されることが多いため)

これは、その数値の使われ方や、扱いやすさに応じて型を割り振っているからです。

例えば電話番号を数値として扱ってしまうと、番号の冒頭の0は省略されてしまう可能性があり、電話番号として使えなくなってしまいます。

また、性別を文字列として扱ってしまうと、国ごとに言語が変わり別のデータとなってしまい、管理が困難になってしまいます。

このように、データの使い方によって効率的に使い分け、特定の計算を禁じるように、型が存在しているのです。

言語による型の違い

型システムは、言語ごとに少しずつ異なりますが、大きく2つのタイプに分かれています。

それが、静的型付けと動的型付けです。

静的型付けは、プログラムを実行する前に型を確定し、その型に合っていないプログラムを実行した場合、エラーが発生します。

動的型付けは、データごとに型を決定する必要はなく、実行時にプログラムが自動で型を決定してくれます。

静的型付けを代表する言語としてCJavaがあり、動的型付けを代表する言語としてPythonJavaScriptがあります。

前者2つの言語は学習難易度の高さで知られている一方、後者2つの言語は高校の情報科で採用されるほど初心者に適した言語とされています。

そう、つまりは型を意識してプログラムを書くことは難しいということです。

普段意識しない文字列・数値などの「単位」を意識する必要がある。多くの人がプログラミングの学習で挫折してしまうのは、こういった面もあるのかもしれません。

そのため、動的型付けが初学者には好まれているのです。

「じゃあ全員が動的型付けを使えばいいじゃん」と思われるかもしれません。しかし、自動で型を決定してくれるということは、エラーが起きにくい反面、「人間側の勘違いに気づくのが難しい」ということでもあります。

年齢の30歳に1を足したつもりが、301歳になってしまう。マイナンバーと電話番号の数が足され、マイナンバーが違う人のものになってしまう。そんなミスが起こってもエラーは出ません。「値段と個数は足してはいけません!」と言ってバツをつけてくれる算数の先生がいない状態と同じです。

これには一長一短あることがお分かりでしょう。

実際、F#というプログラミング言語のように、型に加えてわざわざ現実の単位をさらに付与することのできる言語があるほど、人間側の間違いが明示的なエラーになることは重要です。

型システムにも「体系・ルール」を規定することによるトレードオフが存在するということです。

終わりに

ここで算数に話を戻すと、同じ考え方が「単位の指導」にもそのまま現れることが予想できます。

最初から単位を意識して解く必要があるようにして、「値段+個数はダメ」と一つひとつ検算させるのは、いわば静的型付け的な指導です。

勘違いをその場で修正できる一方で、認知的負荷は高く、「面倒くさい」「実生活で使わない」という壁も生みやすいでしょう。

逆に単位をあまり意識させず、状況の中で感覚的に解かせるのは動的型付け的で、初めは軽快に進む分、子どもの勘違いが表に出ずらく、速さや割合でつまずいて初めて露呈します(現代の算数教育はこちらなのでしょう)。

どちらが正しいという話ではなく、いつ厳密さを求め、いつ状況に委ねるかという設計の問題なのです。

単位を含む問題でよくあるのは、「出てくる数字が3つ以上になると解けない・出てくる数字が自然数じゃなくなると解けない・小さい方の数字を割る数にする」のような、生徒が感覚でなんとか解こうとしている場面です。

こうしたときに、単位を意識する場面を一旦作ってあげるようにしています。

日常で無意識に使っている数の単位から、算数の厳密な単位へ。

気にせず使っているデータから、プログラムの厳密な型システムへ。

この厳密性・論理性への転換に目を向け、良い教育へのヒントを探っていきたいと思います。

(文責・本多廉)

引用文献

[1] 国立教育政策研究所「令和8年度 全国学力・学習状況調査」https://www.nier.go.jp/kaihatsu/zenkokugakuryoku.html (2026年7月25日閲覧)

[2] Jean Lave (1988) Cognition in Practice: Mind, Mathematics and Culture in Everyday Life, Cambridge University Press.

[3] 遠山啓(2009)『遠山啓エッセンス3 量の理論』日本評論社.

[4] 「型システム」『ウィキペディア(Wikipedia)』https://ja.wikipedia.org/wiki/型システム(2026年7月25日閲覧)