プログラムとは何か — CPU・メモリ・ストレージとの関係

この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
プログラムは命令の並びで、実行するとメモリに読み込まれて CPU が 1 つずつ行います。保存しただけでは動かない理由を、3 つの部品の分担から図解で確かめます。

この記事は、プログラムが動くときにコンピュータの中で何が起きているかを扱います。

ファイルの保存と実行は、コンピュータの中では別の出来事です。

その違いは、CPU・メモリ・ストレージという 3 つの部品が何を担当しているかで説明できます。

  • プログラムは命令の並びで、実行すると上から 1 行ずつ進む
  • CPU・メモリ・ストレージの分担と、電源を切ると消えるもの
  • 保存しただけでは動かない理由 — 書き込まれるのはストレージまで
  • 手順の「実行してください」が、実行環境に何を渡しているか

プログラムは命令の列で、実行すると上から順に進む

プログラム(program)は、コンピュータに行わせる命令を、行う順番に並べたものです。

人が読めるその本文がソースコード(source code)で、上から 1 つずつ行うことが実行(run / execute)です。

図の左に並ぶ 3 行が app.js の中身で、CPU が受け取るのは常に 1 行だけです。

値を覚えるだけの行は、画面には何も出しません。

3 行目が終わると実行そのものが終わり、途中で覚えた値も残りません。

途中の行で命令を行えなくなると、そこで実行が終わります。

次の 3 行のうち、真ん中の gokei という名前はどこにも書いていません。

console.log("合計を出します");
gokei();
console.log("終わりました");

エラーで止まったというのは、最後の行に届く前に実行が終わった状態のことです。

最初の行までは画面に出て、真ん中の行でエラーの文字が出て、最後の行は読まれないまま終わります。

プログラムは、上から順に行う命令の並び

プログラムとは、やってほしいことを順番に書き並べたものです。

実行とはその並びを上から 1 つずつ行うことで、途中の行で行えなくなると、その先の行は読まれないまま終わります。

CPU・メモリ・ストレージは何を分担しているか

前の図の「コンピュータ」は、役割の違う 3 つの部品でできています。

命令を 1 つずつ行うのがCPU(Central Processing Unit)、動かしている間だけ中身を置くのがメモリ(memory)、電源を切っても残るのがストレージ(storage)です。

CPU・メモリ・ストレージの分担
CPUprocessorメモリRAMストレージSSD / disk命令を 1 つずつ読み取って行う実行中のものと途中の値を置くファイルを保存しておく何も残らない消える残る「メモリが足りない」はこちら「空き容量が足りない」はこちら
左が部品、中央が担当すること、右が電源を切ったときに残るかどうか。いちばん右の列が、警告メッセージを読むときの手がかりです。
1 つのファイルが命令に分かれ、CPU に 1 つずつ届く
ストレージのapp.js1 行目の命令2 行目の命令3 行目の命令CPU が命令を1 つずつ行うメモリ
左のストレージにある app.js は 1 つのファイルです。メモリに読み込まれると中の命令に分かれ、右の CPU はそれを上から順に 1 つずつ受け取ります。

ストレージにある 1 つのファイルが、メモリの中では命令の並びになり、CPU が受け取るのはそのうちの 1 つだけです。

計算の途中の値もメモリに置かれ、ストレージのファイルは実行中も書き換わりません。

3 つの部品は、1 台のパソコンの中で次のように分かれています。

自分のパソコンの中にある 3 つの部品
自分のパソコン
ストレージ
  • 保存した app.js のファイル
  • 電源を切っても、そのまま残る
メモリ
  • 読み込まれた app.js の中身
  • 途中で覚えた 150 や 200 という値
  • 電源を切ると、まるごと消える
CPU
  • 今行っている命令 1 つだけを受け取る
  • 終わった命令は、もう持っていない
外側が自分のパソコン。ストレージには保存したファイルが残り、メモリには今動いているものだけが入る。

移っていくのは中身だけで、ストレージにある app.js そのものは残ったままです。

メモリに入るのは、今動いているものと、その途中の値だけです。

この分かれ目は、パソコンが出す警告の読み方にも出てきます。

「メモリが足りない」はメモリの話なので、ファイルを消してもふつうは増えません。

「空き容量が足りない」はストレージの話なので、こちらはファイルを消すと増えます。

置いておく場所と、動かす場所は別

ファイルを置いておく場所がストレージ、今動かしているものを置く場所がメモリで、その命令を 1 つずつ行っているのが CPU です。

ストレージに書き込んだものは電源を切っても残り、メモリに入っていたものは消えます。

ファイルを保存しただけでは、なぜ動かないのか

保存は、ソースコードの文字をストレージに書き込むことです。

書き込まれる先は、作っている my-app という予約アプリのフォルダの中です。

保存すると、ストレージのどこに置かれるか
ストレージ
my-app(今作っている予約アプリのフォルダ)
  • app.js — 保存したソースコード
  • 保存し直すと、このファイルの中身が変わる
ほかのフォルダ
  • 写真や書類のファイル
  • 実行していないファイルも、そのまま置かれている
外側がストレージ。my-app が今作っている予約アプリのフォルダで、保存した app.js はその中に入る。

ここに置かれたファイルを、CPU が自分から読みに行くことはありません。

保存しただけの状態では、命令はまだ 1 つも行われていません。

手順ストレージメモリ画面
保存だけapp.js が書き込まれる何も入らない何も出ない
保存して実行app.js はそのまま読み込まれて動き出す350 と出る

保存だけの行はストレージで止まっていて、メモリに何も入らないので、CPU は命令を 1 つも受け取りません。

画面に何も起きないのは、実行を指示していないからです。

実行し直すと、古いメモリの中身は捨てられ、新しいファイルが読み込まれます。

直した内容が動くのは、この読み込み直しが起きたときです。

手順に「実行し直してください」と書かれているのは、このためです。

保存は、反映ではない

保存は、文字をストレージに書き込むところまでです。

動いているプログラムは読み込んだ時点の中身のまま進むので、ファイルを直しても、実行し直すまで画面の結果は変わりません。

「実行してください」は、実行環境にファイルを渡すこと

ファイルをメモリに読み込み、CPU に命令を届けるのが実行環境(runtime。ソースコードを読み取り、命令を CPU に行わせるソフトウェア)です。

手順の「実行してください」は、この実行環境にファイルを渡すことです。

自分で打ち込むのは、いちばん左の 1 行だけです。

その 1 行は、手順の中にこういう形で出てきます。

# JavaScript (Node.js) のソースコードを実行する
node app.js

# Python のソースコードを実行する
python app.py

この 1 行がコマンド(command。ソフトウェアに何をするかを文字で伝える指示)です。

先頭が実行環境の名前、後ろがソースコードのファイル名で、間は空白で区切ります。

コマンド 1 行の中身
コマンド 1 行(node app.js)
先頭 — 実行環境の名前
  • node — JavaScript のソースコードを読む
  • python — Python のソースコードを読む
後ろ — 渡すファイル
  • app.js — 保存したソースコードのファイル名
  • 実行環境が、ストレージからこれを読み込む
  • ファイル名の代わりに、決めておいた短い名前を書くこともある
外側がコマンド 1 行、中の 2 つが先頭と後ろ。手順に出てくるコマンドは、この 2 つに分けて読める。

先頭を見ればどの実行環境が要るのか、後ろを見ればどのファイルが読み込まれるのかが分かります。

この 1 行を打ち込む画面は、この講座の「開発環境とは」の記事で扱います。

言語が変わっても、先頭が受け取るソフトウェア、後ろがそれに渡すもの、という読み方は同じです。

もう 1 つ、手順の文言で分かれるところがあります。

実行を指示したあとの終わり方は、2 つに分かれます。

実行を指示したあと、終わり方は 2 つに分かれる
実行を指示する最後の行まで進んで終わる結果が出て入力に戻る要求を待ち続ける命令がある止めるまで終わらない
1 つの指示から上下に分かれます。上の枝は最後の行で終わるプログラム、下の枝は止めるまで終わらないプログラムです。

下の枝が、手順に「起動したままにしてください」と書かれているプログラムです。

保存のたびに自動で読み込み直す実行環境もあります。

その場合でも、画面が変わるのは新しいファイルが読み込まれてからです。

実行の指示は、ファイルを渡すこと

「実行してください」は、実行環境というソフトウェアにファイルを渡してください、という意味です。

渡し方が node app.js のような 1 行で、最後の行まで進んで終わるものと、止めるまで終わらないものがあります。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1ソースコードを保存しただけのとき、そのファイルはどの部品に置かれていますか。

Q2「プログラムを実行する」とは、コンピュータが何をすることですか。

Q3node app.js というコマンドで、先頭の node は何を指していますか。