# プログラムが動くまで — 機械語への翻訳

> レベル: 初級 ／ 対象: 大人
> 出典: Kotowary — https://kotowary.com/learn/units/how-programs-run?level=beginner&audience=adult
私たちが書いたプログラムは、そのままではコンピュータに通じません。あいだに**翻訳**が必要です。

## これは何をする係？

人が書いた文字の並び（※1 ソースコード）は、人間には読めても**CPUには読めません**。CPUが直接理解できるのは※2 機械語——[0と1](/learn/units/binary-and-data)で書かれた命令だけだからです。

だから、動かす前に必ず「人のことば → CPUのことば（機械語）」への**翻訳**が入ります。プログラミング言語が読みやすい形をしているのは人のため、翻訳はそのギャップを埋める作業です。

**登場人物メモ**:

- **※1 ソースコード** — 人が書いたプログラムの文字の並び（元の原稿）
- **※2 機械語** — CPUが直接実行できる、0と1で表された命令

## 仕事の流れ

1. 人が**ソースコードを書く**（読みやすいことばで）
2. それを**機械語に翻訳する**（CPUのことばへ）
3. [CPU](/learn/units/cpu)が機械語を**1命令ずつ実行する**
4. 計算・表示などの**結果が出る**

まん中の「翻訳」があるからこそ、人は読みやすい形で書け、機械はきっちり実行できます。

## 2つの翻訳のやり方

翻訳を**いつやるか**で、大きく2つに分かれます。

- **コンパイル（先にまとめて翻訳）** — 実行の前にソース全体を機械語へ翻訳し、できた実行ファイルを動かす。翻訳済みなので**動きが速い**
- **インタプリタ（その場で1行ずつ翻訳）** — 動かしながら1行ずつ翻訳して実行する。すぐ試せて**手軽**だが、翻訳しながらなので**やや遅め**

料理でたとえるなら、コンパイルは「全部作り置きしてから出す」、インタプリタは「注文が来るたびその場で作る」。どちらも最後に食べられる（実行できる）のは同じです。

## ⚠️ うまくいかないとき

- **書き間違い** — 文法が違うと翻訳でつまずき、実行前にエラーになる
- **手元では動くのに別の環境で動かない** — 翻訳結果はCPUやOSの種類に合わせて作られるため、環境が違うとそのままでは動かないことがある
- **翻訳のやり方の取り違え** — 速さ重視か手軽さ重視かで向き不向きがある

翻訳のしくみをもっと詳しく（コンパイル型・インタプリタ型・バイトコード＋VM）は中級で扱います。
