2026年10月8日に、Python公式glossaryのbytecode説明とMDNのJavaScript Introductionを再読しました。CPythonはsourceをbytecodeへ変換し、仮想マシンが実行する実装として説明されています。JavaScriptは言語であり、browserやserver runtime、Web APIとは役割を分けて確認します。コンパイル型とインタープリタ型の単純な二分や人気順位だけでは、配布・保守・性能・担当者の条件は決まりません。
最初の言語を選ぶときは、人気順を探す前に「何を、どこで動かすか」を決めます。同じWebサービスでも、browser内の処理とserver側の処理では条件が違います。候補を二つ程度に絞り、同じ小課題を動かして、導入・読みやすさ・必要な機能を比べる方法があります。
30秒で要点
- 言語は処理を記述するもの、実行環境は動かす仕組み、frameworkは構築を助ける枠組みです。
- 用途・配布先・既存資産・チームの経験から候補を絞り、必要な機能と運用条件を確認します。
- コンパイル型とインタープリタ型だけで言語を排他的に分類しません。bytecodeやJITなどを組み合わせる実装もあります。
名前より役割を先に分ける
表が収まらない場合は、横にスクロールできます
| 層 | 例 | 選ぶときの問い |
|---|---|---|
| 言語 | JavaScript、Python、Java | 何をどんな文法で書くか |
| 実行環境 | browser、Node.js、CPython、JVM | 配布先で動かせるか |
| library / framework | 既存機能や構築の枠組み | 保守・版・必要機能が合うか |
JavaScriptとJavaは別の言語です。HTMLは構造、CSSは見た目を記述し、Web制作では処理言語と組み合わせます。プログラミングの基礎とWeb制作の基礎で、この区別を確認できます。
図は架空の選定手順です。同じ結果が出ても、配布、保守、チームでの読みやすさまで同等とは限りません。小課題の結果と、未検証の運用条件を別に記録します。
翻訳と実行は組み合わされる
「コンパイル型は事前翻訳、インタープリタ型は翻訳せず一行ずつ」とだけ覚えると、実装を取り違えます。
- Python公式glossaryは、CPythonがsourceをbytecodeへ変換し、VMが実行すると説明しています。すべてのPython実装が同じ内部構造という意味ではありません。
- MDNのJavaScript解説は、interpretedまたはJIT compiledという表現を使います。JITは実行時のコンパイルを含みます。
- OracleのJava基礎資料は、source→javac→classのbytecode→JVMという流れを示します。JDK 8時代の教材なので、ここでは基本構造だけを参照し、現行APIの推奨手順には使いません。
この違いだけから速度や開発費を順位付けできません。実際には処理、library、実装、入力、実行環境などが影響します。並行性は複数の仕事を進める構成、並列性は同時に実行することとして区別し、言語名だけで並列実行が実現すると考えないようにします。
6つの用途から候補と確認点を挙げる
次は用途の例で、採用率の順位や排他的な対応表ではありません。実案件では利用する製品・frameworkの公式対応言語と版を別途確認します。
表が収まらない場合は、横にスクロールできます
| 用途 | 候補の例 | 選定前の確認 |
|---|---|---|
| Web frontend | JavaScript、TypeScript | 対象browser、変換手順、UIの保守 |
| Web backend | JavaScript、Python、Java、PHP、Ruby、Go | server環境、既存資産、監視と認証 |
| mobile | Swift、Kotlin、JavaScript、Dart | OS、配布、native機能、使用framework |
| AI / data | Python、R | 必要library、データ形式、再現性 |
| game | C++、C#、Python | engine側の対応、性能、制作ツール |
| systems / 組込み | C、C++ | hardware、memory、toolchain、検証条件 |
PythonならAIが完成する、C++なら常に高速、cross-platformなら費用が必ず下がる、といった保証はありません。まず必要な機能と制約を書きます。データ分析ツール入門やframework選定は、その次の判断に使います。
同じ小課題を別の言語で書く
個数のリストを合計する架空課題をJavaScriptで書きます。入力は配列、各値と合計は安全に扱える非負整数とします。Python例と比べるときも、この共通範囲の入力に揃えます。
function totalItems(counts) {
if (!Array.isArray(counts)) throw new TypeError("array required");
let total = 0;
for (const count of counts) {
if (!Number.isSafeInteger(count)) throw new TypeError("integer required");
if (count < 0) throw new RangeError("negative count");
total += count;
if (!Number.isSafeInteger(total)) throw new RangeError("total too large");
}
return total;
}
console.log(totalItems([2, 3, 1]));
結果は6です。空配列は0、文字の3や真偽値、負数は拒否します。Pythonの整数とJavaScriptのNumberは扱える範囲が同じではないため、極端に大きい入力まで同値とは主張しません。これは文法と入力契約を比較する教材で、実行速度の比較ではありません。
目的から小試行までの5段階
- 目的を決める。 Web画面、API、分析など、最初に返したい結果を一つ書きます。
- 候補を挙げる。 配布先が対応する言語を二つ程度挙げ、既存の技術があるか確認します。
- 状況を調べる。 学習時間、予算、チーム経験、運用担当、既存資産を書き出します。
- 同じ軸で比べる。 必要library、公式資料の分かりやすさ、版の維持、診断しやすさを比較します。求人や将来性を使うなら地域と時点を含む別資料が必要です。
- 小さく試す。 同じ正常・拒否例で結果を確認し、選んだ理由と未確認事項を記録します。実行できたという理由だけで本番採用まで決めません。
学習の入り口としてMinecraftを使う例もあります。公開が必要になったらdeployの基礎へ進みます。この教材の計算成功は、mobile・game・Java環境や実運用の確認を済ませた意味ではありません。