Q1ソースコードを保存しただけのとき、そのファイルはどの部品に置かれていますか。
プログラムとは何か — 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)です。
ストレージにある 1 つのファイルが、メモリの中では命令の並びになり、CPU が受け取るのはそのうちの 1 つだけです。
計算の途中の値もメモリに置かれ、ストレージのファイルは実行中も書き換わりません。
3 つの部品は、1 台のパソコンの中で次のように分かれています。
- 保存した app.js のファイル
- 電源を切っても、そのまま残る
- 読み込まれた app.js の中身
- 途中で覚えた 150 や 200 という値
- 電源を切ると、まるごと消える
- 今行っている命令 1 つだけを受け取る
- 終わった命令は、もう持っていない
移っていくのは中身だけで、ストレージにある app.js そのものは残ったままです。
メモリに入るのは、今動いているものと、その途中の値だけです。
この分かれ目は、パソコンが出す警告の読み方にも出てきます。
「メモリが足りない」はメモリの話なので、ファイルを消してもふつうは増えません。
「空き容量が足りない」はストレージの話なので、こちらはファイルを消すと増えます。
置いておく場所と、動かす場所は別
ファイルを置いておく場所がストレージ、今動かしているものを置く場所がメモリで、その命令を 1 つずつ行っているのが CPU です。
ストレージに書き込んだものは電源を切っても残り、メモリに入っていたものは消えます。
ファイルを保存しただけでは、なぜ動かないのか
保存は、ソースコードの文字をストレージに書き込むことです。
書き込まれる先は、作っている 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。ソフトウェアに何をするかを文字で伝える指示)です。
先頭が実行環境の名前、後ろがソースコードのファイル名で、間は空白で区切ります。
- node — JavaScript のソースコードを読む
- python — Python のソースコードを読む
- app.js — 保存したソースコードのファイル名
- 実行環境が、ストレージからこれを読み込む
- ファイル名の代わりに、決めておいた短い名前を書くこともある
先頭を見ればどの実行環境が要るのか、後ろを見ればどのファイルが読み込まれるのかが分かります。
この 1 行を打ち込む画面は、この講座の「開発環境とは」の記事で扱います。
言語が変わっても、先頭が受け取るソフトウェア、後ろがそれに渡すもの、という読み方は同じです。
もう 1 つ、手順の文言で分かれるところがあります。
実行を指示したあとの終わり方は、2 つに分かれます。
下の枝が、手順に「起動したままにしてください」と書かれているプログラムです。
保存のたびに自動で読み込み直す実行環境もあります。
その場合でも、画面が変わるのは新しいファイルが読み込まれてからです。
実行の指示は、ファイルを渡すこと
「実行してください」は、実行環境というソフトウェアにファイルを渡してください、という意味です。
渡し方が node app.js のような 1 行で、最後の行まで進んで終わるものと、止めるまで終わらないものがあります。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2「プログラムを実行する」とは、コンピュータが何をすることですか。
Q3node app.js というコマンドで、先頭の node は何を指していますか。