プログラミング入門「JavaScript」

JavaScript コンピュータ
JavaScript

「プログラミングを始めるなら、まず何の言語を学べばいいですか?」と聞かれたとき、私はよく JavaScript を勧めています。 もともとは、HTMLに動きをつけるためのシンプルなスクリプト言語という立ち位置でしたが、その “役割が明確” という点が初心者にとって大きなメリットになります。 扱う機能が比較的絞られていて、覚えるべき文法も多すぎないため、プログラムの流れや基本的な考え方を身につけるには、JavaScriptはとても学びやすい言語だと感じています。

もちろんJavaScriptには、プロトタイプベースの独特なオブジェクト指向や、変数初期化の曖昧さ、数値型がデフォルトで double になるなど、一般的な言語と比べると扱いにくい部分も少なくありません。 ただし、学習の目的を「プログラムの流れを理解すること」に置くのであれば、こうした癖はそれほど大きな障害にはなりません。むしろ、最低限の文法だけでコードを書き始められるという点では、初心者向けにちょうど良い側面もあると感じています。

ところが近年では、JavaScriptを取り巻く環境は大きく変わりました。 JavaScriptだけでフロントからバックエンドまで開発する「フルスタック開発」が一般化し、さらに React をはじめとしたフレームワークの知識が必須 でないと、プログラマ求人に応募すらできないケースも増えています。 もはや、私が知っていた “HTMLに動きをつけるためのシンプルなJavaScript” とはまったく別物と言ってもよいほど、巨大で複雑なエコシステムへ変わってしまいました。

JavaScriptがここまで“出世”したことには正直感心します。しかし、先ほど触れたような言語特有の扱いづらさ——プロトタイプベースのオブジェクト指向や、型の曖昧さ、変数の初期化ルールなど——は、その後どうなったのでしょうか。 これらは本来、開発規模が大きくなるほど影響が増す種類の問題です。

そもそもJavaScriptは、Webブラウザ上で動作する“HTMLの標準スクリプト”として進化してきた背景があります。そのため、既存の膨大なWebサイトとの互換性を壊すような破壊的変更 (breaking changes) は非常に行いにくいはずです。 もし仮にそのような大改革が行われるのであれば、大きなニュースとして広く話題になり、技術に疎い私の耳にすら入ってきたことでしょう。

それでは、現在使われているJavaScriptの代表的なテクノロジをまとめて見たいと思います。

Babel ― 新しいJSを古い環境向けに変換するツール

Babel は、最新のJavaScriptで書いたコードを、古いブラウザでも動く形に変換するツール(「JS → JS」の変換ツール)です。 クラス構文やモジュール、JSX、TypeScript などをサポートし、互換性問題を気にせず“今風の書き方”ができるようにしてくれます。

ただし、Babelはあくまで変換ツールであり、JavaScript自体の癖や仕様が改善されるわけではありません。

TypeScript ― JavaScriptの弱点を補う“型付き”上位互換言語

TypeScript は、JavaScriptにを導入した上位互換の言語です。 型チェックによってミスを事前に防ぎ、大規模開発でも扱いやすいコードが書けるようになります。

● 主な特徴

  • 変数・関数に型を指定でき、バグを早期発見できる
  • クラスやインターフェースなど、より整理された構造で書ける
  • 開発後はコンパイルされ、通常のJavaScriptに変換されて動作する

TypeScript は JavaScript の上位互換なので、文法そのものはほぼ同じです。 しかし、型を前提にしたコード設計やインターフェース、アクセス修飾子などが加わるため、実際の書き方や考え方は JavaScript とは大きく異なります。

つまり TypeScript は、見た目はJavaScriptでも、書き方の思想はまったく別の言語と言ってよい存在です。

言語そのものの複雑さは増しますが、JavaScriptの曖昧さを大きく改善し、現代の開発では事実上の標準となりつつあります。

React(リアクト) ― UIを部品化するためのライブラリ

React は、Web画面を「コンポーネント」という小さな部品に分けて作るための JavaScript ライブラリです。 JSXという記法で、JavaScriptの中にHTMLのようなコードを書けるのが特徴です。

動的なUIを扱いやすく、大規模開発でも再利用・管理がしやすいため、多くの企業が採用しています。 発音は日本語では一般的にリアクトでOKです。

TypeScriptとReactの共通点

TypeScript と React は、どちらも JavaScript と“よく似た見た目”を持ちながら、実際には JavaScript とは異なる仕組みの上で動く技術です。 TypeScript はコンパイル型言語に近い書き方を導入し、React はJSX を使うテンプレートエンジン的なパラダイムを持っています。 どちらも JavaScript の弱点を補っていますが、そのアプローチはまったく異なります。

では、これらの技術に JavaScript の知識が必要かと言えば、「知識はあるに越したことはないが、実際のコーディングではあまり使わない」というのが実情です。 さらに言えば、TypeScript や React が生成した JavaScript コードを直接編集するのは望ましくありません。 あくまで生成物であり、手を入れるとツールチェーンの整合性が崩れるためです。

ここまで整理すると、ほぼ結論が見えてきます。 かつて「初心者向け」として扱われていた JavaScript ですが、現代の開発環境では、TypeScript や React を使う前提になった時点で、実質的に “直接触る機会の少ない存在” になっています。 極端に言えば、もはや JavaScript は裏方として残るだけで、表舞台では「いらない子」のような扱いになってしまったとも言えます。

Node.js ― サーバーサイドで動くJavaScript環境

Node.js は、JavaScript をブラウザではなくサーバー側で実行できるようにしたランタイムです。 非同期処理が得意で、WebサーバーやAPI、ツール類まで幅広く作れます。

これにより JavaScript がフロントとバックエンドの両方で使えるようになり、フルスタック開発の基盤となりました。

もっと言えば、Node.js も実際の開発ではほとんどが TypeScript 前提で書かれます。 そのため、コードを書く段階ではもはや JavaScript ではなく、あくまで TypeScript から生成された JavaScript が実行されているだけ、というのが現状です。

また、「JavaScript はサーバーサイド向きの言語なのか?」という問いに対しては、元々がフロントエンド用に設計された言語であることを考えれば、答えはおのずと見えてきます。 本来サーバー用途を想定していなかったため、適性については “推して知るべし” といったところです。

Electron ― デスクトップアプリを作れる“JavaScriptベース”の仕組み

Electron は、HTML・CSS・JavaScript を使って Windows / macOS / Linux 向けのデスクトップアプリを作る仕組みです。 内部的には Chromium(ブラウザ)+ Node.js が動いており、Web技術でGUIアプリを構築できます。

ただし実際の開発現場では、ここでも JavaScript ではなく TypeScript で書かれるケースが主流です。 そのため、見かけこそ“JavaScriptでアプリが作れる”ですが、実態は TypeScript ベースのアプリ開発と言った方が正確です。

ちなみに、人気のコードエディタである Visual Studio Code(VSCode) も Electron を基盤に作られています。 Web技術でデスクトップアプリを構築する代表例であり、Electron が広く普及した理由の一つとも言えるでしょう。

まとめ

JavaScriptは、HTML上で動作する唯一の言語であり、比較的習得しやすい点は確かです。 しかし、現代の開発現場で求められているのは JavaScript そのものの知識ではなく、言語の弱点を補うための TypeScript や各種フレームワークの習得です。

さらに、プロジェクトごとに必要とされるフレームワークが異なるため、いわゆる JavaScriptフルスタック開発 には膨大な学習が必要となります。 加えて、それらフレームワークの寿命は短く、常に学び続けることが前提になるため、学習コストは決して低くありません。

結果として、JavaScript周辺の開発は、初心者向けという印象とは裏腹に、非常に学習コスパの悪い領域になっていると言えるでしょう。

また、求人についても、実際には「とりあえず人手が欲しい」というニーズを満たすために分業制が敷かれているケースが多く、募集要件に書かれたスキルセットがそのまま実務内容を反映しているとは限りません。 フレームワークごとに担当が細分化され、特定の技術だけを扱うポジションも多いため、JavaScript全体を理解していなくても採用される場合があります。

その結果、自分が書いているコードが最終的に何の役に立つのか分からないまま、ただ割り当てられた部分だけを機械的に実装する──そんな“コード生成マシン”のような働き方になってしまう可能性も高くなります。

この方向性が正しいのかどうかは断言できませんが、現状のJavaScriptは「プログラムから生成されるコード」という位置づけが強く、Webの世界における“バイナリ(マシン語)”のような存在になりつつあります。 開発者が直接書く機会は減っていても、基礎として理解しておく価値は依然として高いと言えます。

そう考えると、JavaScriptはむしろ初学者がプログラミングの基礎を身につけるための言語として適しているのではないでしょうか。 直接使わなくても土台として役立つ——そんな立ち位置に変化してきているように思います。

コメント