実行環境(ランタイム)とは?
実行環境(ランタイム環境)とは、プログラムが動いている間にその周りで必要になるソフトウェアです。コードを実行するエンジン、呼び出す標準ライブラリ、メモリやエラー、オペレーティングシステムへのアクセスを管理するしくみが含まれます。JVM、Node.js、CPythonがその例です。
更新日: 2026年9月24日
Node.jsで console.log(typeof process) を実行すると object と表示されます。同じ行をChromeのコンソールに貼り付けると undefined と表示されます。言語はどちらも同じJavaScriptですが、プログラムは2つの異なる実行環境の中で動いていて、それぞれが別の道具を与えているのです。
console.log(typeof process); // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser
実行環境が提供するもの
コードが記述するのは、何をするかだけです。実行されるとき、コードはあなたが1行目を書く前からインストールされていたソフトウェアの層に頼っています。その層は、普通は5つの部分でできています。
- 実行エンジン。 コードを実行する何かが必要です。インタプリタ、仮想マシン、JIT(ジャストインタイム)コンパイラのいずれかです。CPython、Java仮想マシン(JVM)、V8は実行エンジンです。
- 標準ライブラリ。 テキスト、数学、日付、ファイル、ネットワークを扱う既製の関数群です。Pythonの
jsonモジュールやJavaのjava.utilパッケージなどがあります。 - メモリ管理。 ランタイムはオブジェクトのためにメモリを確保し、Python、Java、JavaScriptでは、何も使わなくなったメモリをガベージコレクタで解放します。
- エラー処理。 何か問題が起きると、ランタイムはプログラムを制御された形で止め、トレースバックやスタックトレースとして場所を報告します。
- オペレーティングシステムへのアクセス。 ファイルの読み込み、ネットワーク接続、環境変数やコマンドライン引数の読み取りは、すべてランタイムを通ります。ランタイムがプログラムに代わってオペレーティングシステムに頼むのです。
Pythonのランタイムに、ランタイム自身のことを尋ねてみましょう。
答えはコードが動く場所によって変わります。Linuxサーバーでは platform.system() は 'Linux' を返し、Macでは 'Darwin'、Windowsでは 'Windows' を返します。再帰の上限(CPythonの既定値は1000)は、Python言語ではなくランタイムが決めたルールです。最初の1行より前に読み込まれている何十ものモジュールは、ランタイムが自分の準備をした跡です。
Java: JDK、JRE、JVMの違い
Javaでは層ごとに名前が付いているので、層の構造がよく見えます。
| 名前 | 正式名称 | 中身 | 必要な人 |
|---|---|---|---|
| JVM | Java Virtual Machine | バイトコード(.class ファイル)を実行し、メモリを管理するエンジン | 下の2つの両方に含まれる |
| JRE | Java Runtime Environment | JVMと標準クラスライブラリ | Javaプログラムを実行するだけの人 |
| JDK | Java Development Kit | JREと開発ツール: javac、jar、javadoc、jdb | Javaプログラムを書く人 |
流れはこうです。javac Main.java(JDKのツールであるコンパイラ)がソースコードを Main.class に変換し、java Main がJVMを起動します。JVMはクラスを読み込み、実行環境のライブラリを使って実行します。1つの .class ファイルがWindows、macOS、Linuxのどれでも動くのはJVMのおかげです。オペレーティングシステムごとに専用のJVMがあり、どれも同じバイトコードを理解します。
Java 11以降、OracleはJDKだけを配布し、JREを単独でダウンロードする手段はなくなりました。Eclipse Temurinのように、今もJREのパッケージを公開しているディストリビューションもあります。Javaを学ぶならJDKをインストールしてください。JREの中身はすべて含まれています。手順はJavaのインストールガイドで説明しています。
JavaScript: ブラウザとNode.js
JavaScriptはWebページの中で動くように設計されたので、最初の実行環境はブラウザでした。ブラウザのランタイムは、ページの document、window、タイマー、ネットワーク通信のための fetch をコードに与え、ファイルへの直接アクセスは意図的に禁止しています。
Node.jsはGoogleのV8エンジンをブラウザから取り出し、別のランタイムで包んでいます。document はありませんが、ファイル用の fs、サーバー用の http、環境変数や引数のための process オブジェクトなどがあります。DenoとBunは同じ言語向けの新しいランタイムで、それぞれ独自のツールを持っています。どれも同じ中核のJavaScriptを実行し、違うのは周りにあるものです。詳しくはNode.jsランタイムとイベントループのページを読んでください。
Python: CPythonとその仲間
「Pythonをインストールする」とは、実行環境をインストールすることです。CPythonインタプリタ、標準ライブラリ、パッケージを追加するための pip が含まれます。同じ言語向けのほかのランタイムもあります。PyPyは高速化のためにJITコンパイラを加えたもので、MicroPythonはマイコンで動くほど小さなランタイムです。
仮想環境(python3 -m venv .venv)は新しいランタイムではありません。既存のインタプリタを指し、1つのプロジェクトに専用のインストール済みパッケージ一式を与えるものです。これにより、2つのプロジェクトが同じライブラリの別のバージョンを使えます。仮想環境を参照してください。
コンパイル時と実行時
「ランタイム」はある時点を指す言葉でもあります。ソースが翻訳されているコンパイル時に対して、プログラムが動いている期間のことです。コンパイラが拒否する間違いはコンパイル時エラーで、ゼロ除算のようにプログラムの実行中にだけ現れるものは実行時エラーです。実行環境は、この2つ目の期間に存在するソフトウェアです。
機械語へ直接コンパイルされるCにも、小さなランタイムがあります。Cプログラムは、コンパイラのツールチェーンが用意したスタートアップコードから動き始め、printf や malloc などの関数はCの標準ライブラリ(多くのLinuxではglibc、WindowsではUniversal C Runtime)から来ています。仮想マシンとガベージコレクタがないだけです。
よくある誤解
- 「実行環境とはオペレーティングシステムのこと」 オペレーティングシステムは、すべてのプログラムのためにハードウェアを管理します。実行環境は、その上に乗る1つのプログラムのための層です。JVM自体もWindows、macOS、Linuxが動かすプログラムの1つで、それらを置き換えるものではありません。
- 「Node.jsは言語かフレームワーク」 Node.jsはJavaScriptの実行環境です。Expressなどのフレームワークは、その中で動くライブラリです。
- 「IDEをインストールすればランタイムも入る」 VS CodeにはPythonもJavaも含まれていません。エディタと実行環境は別々にインストールします。ただしIntelliJ IDEAのように、JDKをダウンロードしてくれるIDEもあります。
- 「同じ言語ならどこでも同じ動きをする」 ファイルへのアクセス、既定の上限、使えるモジュールなど、ランタイムが提供する機能は異なることがあります。Node.jsで動くコードがブラウザで失敗するのは、まさにこのためです。
次に読むもの
多くのランタイムの中にある実行エンジンはインタプリタで、そのページではコンパイラとの比較もしています。どのランタイムの下にもオペレーティングシステムがあります。まだ使ったことのないランタイムで練習するなら、JavaコースかJavaScriptコースを始めましょう。
よくある質問
実行環境の具体例を教えてください
Node.jsは実行環境ですか?
「ランタイム」とは結局どういう意味ですか?
JREとJDKのどちらをインストールすればいいですか?
javac と、JREの中身がすべて含まれています。JREだけでは既存のJavaプログラムを実行することしかできません。Java 11以降、OracleはJDKだけを配布しているので、現在のJavaのバージョンではJDKを選ぶのが普通です。JDK、JRE、JVMは何の略ですか?
javac などの開発ツールを加えたものです。