JavaScript
概要
JavaScript は Web の言語です ── すべてのブラウザでネイティブに動作する唯一の言語であり ── Node、Deno、Bun を通じて完全なサーバーサイドプラットフォームでもあります。動的型付けで、イベント駆動型、そして遍在しており、世界で最も広くデプロイされているプログラミング言語となっています。
強み
- どこでも動く:ブラウザ、サーバー、エッジ関数、さらには組み込みでも。
- コンパイルステップがなく、編集して再読み込みするだけで即座のフィードバック。
- 巨大な npm エコシステムと膨大なコミュニティ。
- promise と
async/awaitによるファーストクラスの非同期処理。
トレードオフ
- 静的型がない ── 多くのエラーが実行時にしか表面化しない。
- 歴史的な難点:緩い等価比較(
==)、thisのバインディング、暗黙の型強制。 - 規律がなければ、コールバックや依存関係の散乱を生みやすい。
- 同じ言語のフロントエンドとバックエンドは、アーキテクチャの境界をあいまいにしうる。
使いどころ
手早いスクリプト、小さなプロジェクト、学習、プロトタイプ、あるいはビルドステップを追加する価値がない環境には、素の JavaScript を選びましょう。それより大きく、より長く保守されるものには、ほとんどのチームが代わりに TypeScript を選びます ── とはいえ、ブラウザや小さな Node ツールで何かを動かす最速の手段は依然として JS です。
バイブコーディングとの相性
AI アシスタントは JavaScript を流暢に扱いますが、型がないため、生成されたコードが誤ったデータ形状を黙って前提にすることがあります。モダンな構文(const/let、アロー関数、async/await、モジュール)と厳密等価を使うこと、データ形状が重要な箇所には防御的なチェックや JSDoc コメントを追加することを AI に指示しましょう。インポートが正しくなるよう、環境 ── ブラウザか Node か、ESM か CommonJS か ── を指定しましょう。頼れるコンパイラがないので、挙動を直接検証できるよう、小さな実行可能な例やテストを依頼しましょう。
const fetchTitle = async (url) => {
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const html = await res.text();
return html.match(/<title>(.*?)<\/title>/i)?.[1] ?? "(no title)";
};
fetchTitle("https://example.com").then(console.log);