プログラムを動かすには、人間が書いたコードをコンピューターがわかる言葉に「翻訳」する必要があります。その翻訳方法に、大きく分けて2つのやり方があります。
料理で例えるなら、レシピ(ソースコード)を元に、日持ちする冷凍食品(実行ファイル)を前もって作っておく方法です。
良いところ 👍
大変なところ 😥
代表例: Java, C++
料理で例えるなら、注文(実行)が入るたびに、その場でレシピ(ソースコード)を見ながら調理する方法です。
良いところ 👍
大変なところ 😥
代表例: PHP, JavaScript (ブラウザやNode.js)
<br>
一目でわかる違い
特徴 | コンパイル (事前翻訳) | JITコンパイル (その場翻訳) |
---|---|---|
翻訳のタイミング | 実行する前 | 実行するその瞬間 |
ソースコード | 完成品からは見えない | そのまま見える |
開発の流れ | 修正のたびに再翻訳が必要(時間がかかる) | 書けばすぐ動く(スピーディー) |
得意なこと | 大規模なデータの高速処理 | 素早い開発や修正 |
これは、プログラムを動かす前の「準備の大変さ」が違うからです。
Javaは、動かす前に「コンパイル」という時間のかかる準備が必要です。 大規模なプロジェクトだと、この準備に数時間かかることもあります。
この**面倒で時間のかかる準備作業を自動でやってくれるのが「CI/CDツール」**です。 例えるなら、大規模な食品工場で、調理から梱包までを自動で行う機械システムのようなものです。品質を保ちながら大量生産するには、この自動化システムが欠かせません。
PHPやHTMLは、書いたコードがそのまま動きます。面倒な「準備」が必要ありません。 そのため、準備を自動化するCI/CDツールも、そもそも必要ないことが多いのです。
例えるなら、注文ごとにその場で作るレストランのキッチンです。柔軟にサッと料理を提供できるので、大規模な自動化工場は必要ありません。
最近のちょっと複雑な話 最近のVueやReactといった技術では、PHPのように手軽なはずなのに、あえてJavaのような「準備(ビルド)」の工程を入れることがあります。これはソースコードを分かりにくくするなどの目的がありますが、「結局、昔ながらの面倒な手間が増えただけでは?」という意見も出てきています。
結論から言うと、TypeScriptが作ったルール(型定義)を、実際にプログラムを動かすJavaScriptの実行エンジンが無視してしまうからです。
JavaScriptの動き方 (JIT) JavaScriptを動かすエンジン(V8など)は、とても柔軟です。「これは数字」「これは文字」と細かく決めず、「だいたいこんな感じのデータね」と大まかに捉えて、その場でサッと処理するのが得意です。
TypeScriptがやろうとすること
TypeScriptは、JavaScriptに「この変数には数字だけ入れてね(int
型)」のように、**きっちりとしたルール(型)**を持ち込もうとします。コードが整理されて、間違いが減ることを期待するからです。
でも、現実は…
しかし、いざプログラムを動かすと、JavaScriptのエンジンはTypeScriptが決めたルールを気にしません。結局、いつも通り「だいたいこんな感じのデータね(var
)」として扱ってしまいます。
そのため、TypeScriptでルールを厳しくしても、根本的な処理速度の向上には繋がらないのです。
例えるなら、「どんな食材でも最高の火加減で調理できる万能オーブン(JITエンジン)」があるのに、わざわざ食材ごとに「これは180度で10分」と細かい指示書(TypeScriptの型定義)を付けているようなものです。結局オーブンは自分の判断で最適に調理するので、指示書は手間になるだけで、味や調理時間は変わりません。
これは、料理に例えると「完成品のインスタント食品」を使っているからです。
Vueを使う方法には、大きく2つのやり方があります。
HTMLに直接書き込む方法(今回のやり方)
これは、完成済みのVueの機能を、HTMLファイルに<script>
タグで読み込んで使う、一番シンプルな方法です。
完成品のインスタント食品を、お湯を注ぐだけで食べるようなものです。小麦粉から麺を打つための道具(npm
)は必要ありません。書けばそのままブラウザが読んでくれるので、npm install
は不要です。
専門の道具(Vue CLIなど)を使う方法
こちらは、npm install
でたくさんの開発用ツールをインストールし、それらを使って部品(コンポーネント)を組み立てていく本格的な開発手法です。
小麦粉や卵といった材料(ソースコード)から、製麺機(npm
やビルドツール)を使って本格的なラーメンを作るようなものです。この方法では、準備のためにnpm install
が必須になります。
今回のケースは1の方法なので、「npm install
は関係ないですよ」ということだったのです。