バイブコーディング初心者向けプログラミング言語の基礎 ========================== バイブコーディングでは、言語の名前よりも実行する場所やデータの処理方法を理解するほうが役立ちます。プログラミングの基礎や言語ごとの選択基準、AIが生成したコードの検証範囲を確認できます。 - ウェブ開発は、HTML・CSS・JavaScriptの役割を区別するところから始まります。 - TypeScriptは実行前の型チェックを提供しますが、外部入力を自動で検証するわけではありません。 - Rustの所有権はメモリ管理のルールで、すべてのセキュリティ上のエラーを防ぐ仕組みではありません。 - MojoはCPUとGPUでの高性能計算を目的とした言語です。 - AIが生成したコードは、実行とテストで要件に合っているか確認する必要があります。 バイブコーディングには、言語の役割と実行場所を区別する基礎知識が必要です。ウェブではJavaScriptとTypeScriptが出発点です。データ処理にはPythonを検討してください。RustとMojoは、システム開発と高性能な演算に使われます。 性能の数値は、Microsoftの2025年3月11日の発表に基づいています。 バイブコーディングで言語の基礎が必要な理由 バイブコーディングは、自然言語による依頼を中心に、AIとコードを作る開発手法です。生成したプログラムの実行結果を見ながら依頼を修正します。自然言語による依頼も、実際に動くコードとして実装する必要があります。 言語の基礎知識は、求める機能を具体的に説明するために使います。エラーが発生した箇所の把握にも役立ちます。入門段階では、すべての言語の文法を覚えるよりも、まず役割を区別してください。 実行場所:ブラウザー、サーバー、スマートフォン、OS内部 入力:ユーザーが入力する値や外部から受け取るデータ 処理:計算、検索、分類など、プログラムが実行する作業 出力:画面表示、ファイル作成、データ保存 失敗条件:空の入力、不正な形式、接続の切断 変数と型から知っておきたい基本概念 変数と型は、プログラムがどのようなデータを扱うかを説明する基礎です。条件文と繰り返し文は処理の順序を決めます。関数は関連する処理をまとめ、再利用できるようにします。 概念 分かりやすい定義 機能を説明するときの例 変数 値に名前を付けて参照する手段 検索語を保存する名前 型 値の種類と許される演算に関する規則 数量は数値、タイトルは文字列 条件文 条件に応じて実行する処理を選ぶ構文 タイトルが空なら保存を拒否 繰り返し文 同じ処理を複数の対象に適用する構文 リストの各項目を画面に表示 関数 特定の処理を実行するためにまとめたコード 入力を検査する関数 データ構造 データを整理する方法 順序のあるリスト、名前で検索する値 オブジェクト 関連する状態と動作をまとめて表現する単位 投稿のタイトルと編集機能 例外処理 実行中に発生したエラーに対応する方法 ファイルを読み込めなかったときのエラー案内 API プログラム同士で機能やデータをやり取りするための取り決め サーバーへの検索結果のリクエスト 依存関係 プログラムが利用する外部のコードやツール 日付処理ライブラリ 静的型検査は、実行前に型の使い方を確認する方法です。動的型付け言語も値の型を区別します。動的型付けという言葉は、データの種類がないという意味ではありません。 機械語から高級言語へと変わった理由 言語の発展は、人が記述しなければならない細かな処理を減らしてきた過程です。機械語は、プロセッサーが実行する命令を表現したものです。アセンブリ言語は、その命令に人が読める記号を付けます。 アセンブリは、プロセッサーの命令体系と密接に結び付いています。部品が変わったからといって、すべてのコードを書き直すわけではありません。互換性のない命令体系に移行するときに、修正の負担が大きくなります。 言語または流れ 解決しようとした問題 覚えておきたい概念 機械語・アセンブリ ハードウェアへの処理内容の伝達 命令体系との直接的な結び付き Fortran 科学計算を数式に近い形で表現 数値計算とコンパイラー COBOL 企業の業務データを読みやすい形式で処理 帳簿・取引処理を中心とした表現 Lisp 記号とリストを用いた計算 初期のAI研究と関数を中心とした表現 C システムソフトウェアを効率的に作成 メモリ制御と移植性 SQL リレーショナルデータベースのデータ処理 求める結果を宣言するクエリ C++ 大規模なプログラムの構造化とリソース管理 クラスと複数のプログラミング手法 Java 実行環境が異なるシステム間での移植 JVMとバイトコード Fortranは1957年にIBMで登場しました。Lispは1950年代後半にAI研究とともに発展しました。COBOLは1959年に始まった共同設計作業から生まれました。 CはUnixの開発とともに発展した言語です。別の機種にソフトウェアを移植するうえで貢献しました。ただし、OSやハードウェアに依存するコードは別途修正が必要です。 オブジェクト指向は、関連するデータと動作をオブジェクトとしてまとめる方法です。C++はオブジェクト指向をサポートする言語です。オブジェクト指向という概念自体をC++が生み出したわけではありません。 コンパイラーとインタープリターの違い コンパイラーは、コードを別の表現に変換するプログラムです。変換結果は機械語の場合もあります。バイトコードのような中間的な実行形式になる場合もあります。 インタープリターは、コードや中間表現を解釈しながら実行します。実際の言語実装では、コンパイルと解釈を併用することもあります。言語を高速なコンパイル型と低速なインタープリター型だけに分けると不正確です。 実行に関する概念 役割 代表例 事前コンパイル 実行前にターゲットコードを生成 C・Rustの一般的な実行ファイルのビルド バイトコード 実行環境が処理する中間命令形式 Javaバイトコード、CPythonバイトコード インタープリター コードや中間命令を解釈しながら実行 CPythonのバイトコード実行 JITコンパイル 実行中に必要なコードを機械語に変換 さまざまなJVMとJavaScriptエンジン ランタイム プログラムの実行に必要な機能を提供 JVM、Node.js CPythonは、広く使われているPythonの実装です。ソースコードをバイトコードにコンパイルして実行します。Pythonを、毎回ソースを1行ずつ翻訳するだけの言語として説明すると誤りです。 JavaのJVMは、バイトコードを実行する環境です。この仕組みは、OSが異なってもコードを実行するうえで役立ちます。実際の互換性は、JVMのバージョンや外部ライブラリの影響も受けます。 ウェブの画面とサーバーは何が違いますか? フロントエンドは、ユーザーが接する画面と操作への応答を担当します。バックエンドは、サーバーでリクエストを処理します。データベースは、必要なデータの保存と検索を担います。 HTMLは、文書構造を表現するマークアップ言語です。CSSは、画面のスタイルと配置を指定します。JavaScriptは、条件の判定やユーザー操作の処理を実装します。 名前 分類 主な役割 HTML マークアップ言語 見出し、段落、入力欄などの文書構造 CSS スタイルシート言語 色、間隔、画面の配置 JavaScript プログラミング言語 ブラウザーでの操作への応答とサーバー処理 TypeScript JavaScriptに型システムを加えた言語 実行前のエラー確認とコード管理 React ユーザーインターフェースライブラリ 再利用できるコンポーネントによる画面の作成 Node.js JavaScriptランタイム ブラウザーの外でのJavaScriptの実行 Next.js Reactベースのフレームワーク ウェブアプリのページ構成とサーバー機能 PHP プログラミング言語 サーバーでの動的なウェブレスポンスの生成 SQL データベース言語 データの検索・追加・更新・削除 React、Node.js、Next.jsは、同じ種類のツールではありません。ライブラリは、必要な機能を取り出して使うコードの集まりです。フレームワークは、アプリケーションの構成方法まで提供します。ランタイムは、コードが実行される環境です。 目的別の言語比較 言語は、作る成果物と既存の実行環境を基準に選んでください。下の表は、各言語を検討する際の代表的な出発点です。1つの言語が、表に記載された作業だけを実行するわけではありません。 作りたい成果物 最初に検討する言語 選ぶ前に確認する点 ブラウザーで使うウェブアプリ JavaScript・TypeScript HTML・CSSの基礎と画面構築ツール ファイル整理・業務自動化 Python 入力ファイルの形式と配布環境 データ分析・AIモデルの活用 Python 必要な分析・モデルライブラリ ネットワークサーバー・運用ツール Go 並行処理の構造と既存システムとの連携 JVMベースの業務システム Java・Kotlin 既存コードとライブラリの互換性 iOSを中心としたアプリ Swift Appleの開発ツールとプラットフォームの機能 Androidを中心としたアプリ Kotlin Androidの開発ツールと既存アプリの構造 メモリ制御が必要なシステム C・C++・Rust 性能要件と安全性を検証する能力 CPU・GPU演算の最適化 Mojo 対応ハードウェアと必要な演算機能 リレーショナルデータの処理 SQL データベース製品ごとの構文の違い Pythonの活用の幅広さは、ライブラリのエコシステムとも関係しています。NumPyは、速度を高めるためにコンパイル済みのコードを使います。Pythonで記述したすべての計算が、Pythonのコードだけで実行されるわけではありません。 Goは、言語設計に並行性のサポートを組み込んでいます。並行性は、複数の作業を一緒に進められるよう構成する概念です。並列性は、複数の作業が実際に同時に実行される状態です。並行処理のコードを書いたからといって、計算速度が自動的に上がるわけではありません。 TypeScript・Rust・Mojoの違い TypeScript、Rust、Mojoは、解決しようとする問題が異なります。TypeScriptは、JavaScriptコードの型の確認を支援します。Rustは、メモリ管理に厳格な規則を設けています。Mojoは、高性能な演算とハードウェアの活用を目指しています。 比較基準 TypeScript Rust Mojo 主な関心事 型検査とコード管理 メモリ安全性とシステム制御 CPU・GPUによる高性能な演算 代表的な用途 ウェブアプリ・サーバーアプリケーション システムツール・性能重視のコンポーネント AIインフラ・計算カーネル 最初に理解する概念 JavaScriptとデータ型 所有権・借用・ライフタイム 型・メモリ・並列演算 別途確認する点 外部入力と業務ルール unsafeコードと論理エラー Python連携とハードウェア対応 TypeScriptの型検査 TypeScriptは、JavaScriptに静的型検査を加えます。型を誤って使っているコードを、実行前に見つけるのに役立ちます。型推論によって、一部の宣言は自動的に判断します。 すべての変数に型を直接記述する必要はありません。型注釈は、通常のJavaScriptへの変換過程で削除されます。型宣言だけで、実行中の入力検査が追加されるわけではありません。 Rustの所有権とメモリ安全性 所有権は、値のメモリを誰が管理するかを決める規則です。借用は、所有権を移さずに値を参照する方法です。コンパイラーは、関連する規則を検査してメモリエラーを防ぎます。 Rustの安全性の保証は、正しい実装を前提としています。unsafeコードでは、一部の安全条件について作成者が責任を負います。計算式やアクセス権限の誤りまで、言語が自動的に防ぐわけではありません。 MojoとPythonの関係 Mojoは、Pythonに似た構文を使う別の言語です。CPUとGPU向けの高性能なコードの作成をサポートします。Pythonのコードと接続する相互運用機能も提供します。 既存のPythonコードをそのまま移せると考えてはいけません。必要な機能は、インストールするMojoのバージョンのドキュメントで確認してください。GPUを使うには、対応デバイスとドライバーの条件も満たす必要があります。 言語の説明でよくある間違い 短い言語紹介では、適用条件が抜け落ちがちです。歴史的な事実と現在の機能も区別する必要があります。以下は、言語を選ぶ際に判断を曇らせかねない誤解です。 よくある説明 正確に理解すべき内容 JavaScriptはJavaのウェブ版です 互いに異なる言語 HTMLとCSSはどちらも1991年に登場しました CSS1のW3C勧告は1996年12月17日 KotlinはGoogleが作った言語です 開発元はJetBrains、GoogleはAndroidでサポート Cのコードは再コンパイルすればどこでも実行できます OS・ハードウェアに依存する部分は修正が必要になる可能性 Pythonは現在、人気ランキング1位です 判断には調査機関・時点・集計方法が必要 Rustを使えば、すべてのセキュリティ問題が解決します メモリ安全性とアクセス権限の検証は別の問題 Mojoを使えば、すべてのPythonの処理が速くなります 処理・実装・ハードウェアに応じた測定が必要 虫の事件からbugという言葉が生まれました その事件は、すでに使われていた用語が広く知られるようになった事例 虫が見つかった有名な記録は、1947年のHarvard Mark IIの事例です。Smithsonianは、この事件が関連用語の普及に貢献したと説明しています。ENIACの事例や、用語が初めて生まれた出来事として紹介すると不正確です。 性能の数値はどう読めばよいですか? 性能の数値は、測定した処理に限定して解釈する必要があります。コンパイル時間と完成したアプリの実行速度は、別の指標です。開発ツールが速くなったからといって、ウェブページも同じ比率で速くなるわけではありません。 Microsoftは、TypeScriptツールのネイティブ化を発表しました。2025年3月11日の発表には、プロジェクト別の測定値が掲載されています。以下は、その発表にあるVS Codeのコードベースの事例です。 測定対象 従来の実装 ネイティブ実装 発表された速度向上 VS CodeのコードベースのTypeScriptコンパイル処理 77.8秒 7.5秒 10.4倍 発表時の条件では、処理時間が7.5秒に短縮されました。差を計算すると、1回の処理で70.3秒短縮された事例です。すべてのプロジェクトで同じ結果が出るという意味ではありません。 PythonとCの速度比較にも、同じ原則を適用してください。同じ入力とアルゴリズムで実行したかを確認する必要があります。コンパイルオプションと使用ライブラリも比較条件です。実行環境が示されていない数値は、一般的な速度の倍率としては使いにくいです。 型検査と外部入力の検証 型検査を通過しても、外部データの内容は別途確認する必要があります。AIが生成したコードをレビューするときは、この違いを見落としがちです。型宣言は、プログラムが想定する値の形を表します。 数量を数値型として宣言したウェブアプリを考えてみてください。外部APIが、実際には文字列を送ってくる場合もあります。型名を付けたり型アサーションを使ったりしても、値は検証されません。実行中にデータを検査するコードが必要です。 確認段階 確認する内容 通過しても残る問題 型検査 コード内部の型の使い方 外部から実際に入ってくる値 入力検証 データ形式と許容範囲 ユーザーに許可された操作かどうか 権限検査 リクエスト元のアクセス権限 業務ルールに沿った結果かどうか 機能テスト 想定した入力に対する実際の結果 テストしていない条件 この表は、型の消去とメモリ安全性の範囲を踏まえたレビューの枠組みです。言語が保証する部分と、サービス側で確認する部分を分けています。AIには、各段階の検証を区別して依頼してください。 AIに機能を説明する方法 機能を依頼するときは、入力と期待する結果を一緒に記述してください。プログラム名だけを決めると、動作条件が抜け落ちがちです。既存のプロジェクトがある場合は、使用中の言語とバージョンも伝えてください。 使用する環境を記述してください。 処理する入力の形を説明してください。 正常な入力に対する結果を決めてください。 空の値や不正な入力の処理方法を決めてください。 変更理由と確認方法も一緒に求めてください。 以下は、要件を分けたプロンプトの例です。実際のファイル内容は、プロジェクトに合わせて変更してください。生成結果は、自分で実行して確認する必要があります。 既存プロジェクトの言語と実行環境を最初に確認してください。 CSVファイルからタイトルのある行を読み込み、リストとして表示してください。 必須の列がなければ、エラーメッセージを表示してください。 タイトルが空の行は、別途案内してください。 外部入力の検証と画面表示のコードを分けてください。 既存の依存関係で実装できるかを最初に確認してください。 変更した箇所とテスト方法を説明してください。 エラーが発生したら、再現条件も一緒に伝えてください。エラーメッセージには、発生箇所を絞り込む手掛かりがあります。GitHubのCopilotドキュメントも、生成されたコードのレビューを求めています。コードを採用する前には、実行結果を確認する過程が必要です。 入門学習と教育を選ぶ基準 入門学習は、作りたいものに合わせて範囲を絞って始められます。ウェブ開発なら、まず画面の構造と動作を結び付けてみてください。自動化なら、ファイルの入力と結果の保存から確認するのがよいです。 作る成果物に合った言語を1つ選んでください。 変数・型・条件文・繰り返し文・関数を学んでください。 小さな機能を作成し、実行結果を比較してください。 不正な入力を与えて、失敗時の動作を確認してください。 コードを修正した理由を、自分の言葉で説明してみてください。 教育課程は、完成画面のほかに検証内容も確認してください。エラーを再現して修正する実習があるかを確認できます。使用するバージョンと実行環境が明記されているかも、確認する項目です。 コードの説明:生成した関数の入力と出力を説明する過程 エラー対応:エラーメッセージを読み、原因を絞り込む実習 データ検証:外部入力と失敗条件を処理する例 再現性:同じ環境で再実行するための案内 言語の定義は、各プロジェクトの公式ドキュメントで確認できます。TypeScript Handbookには、型の消去についての説明があります。Rustの公式書籍は、所有権とunsafeを分けて説明しています。Mojo Manualでは、言語機能とPython連携の範囲を確認してください。 FAQ Q. バイブコーディングを始める前に、すべての言語を学ぶ必要がありますか? A. すべての言語を学ぶ必要はありません。まず、作りたいものに合った言語を選んでください。変数・型・関数と実行される場所を理解すれば、依頼内容を具体化できます。 Q. ウェブ開発はJavaScriptとPythonのどちらから始めればよいですか? A. ブラウザ画面の動きを作るなら、JavaScriptが出発点です。HTMLとCSSの役割も一緒に学んでください。Pythonはファイル操作の自動化やデータ処理の出発点として検討できます。 Q. TypeScriptを使えば、JavaScriptを知らなくてもよいですか? A. TypeScriptの実行時の動作を理解するには、JavaScriptの基礎が必要です。TypeScriptはJavaScriptに型システムを加えたものです。型チェックと実際の実行は区別して理解してください。 Q. TypeScriptでは、すべての変数に型を書く必要がありますか? A. 型推論ができる箇所では、自分で書く必要はありません。ツールが代入された値と文脈をもとに型を判断します。明示的な型が必要かどうかは、コードの役割に応じて決めてください。 Q. ReactとNode.jsもプログラミング言語ですか? A. Reactはユーザーインターフェースのライブラリです。Node.jsはJavaScriptの実行環境です。Next.jsはReactベースのフレームワークに分類されます。 Q. Pythonはソースコードを一行ずつ翻訳して実行するのですか? A. 代表的な実装であるCPythonは、ソースコードをバイトコードにコンパイルします。その後、バイトコードを実行します。ソースを一行ずつ翻訳するという説明だけでは、この過程を説明するのは困難です。 Q. Rustを使えば、セキュリティの検証は不要ですか? A. Rustのメモリ安全性は、サービス全体の安全性を意味するものではありません。アクセス権限と業務ルールは別途確認する必要があります。unsafeコードの安全条件も検証対象です。 Q. MojoはPythonの新しいバージョンですか? A. MojoはPythonに似た構文を持つ別の言語です。Pythonとの連携機能を提供しています。既存コードとの互換性は、使用するバージョンの公式ドキュメントで確認してください。 Q. Mojoを使うには、GPUが必ず必要ですか? A. MojoではCPU向けのコードも書けます。GPUはすべてのプログラムの必須条件ではありません。GPU機能を使う場合は、デバイスとドライバーの対応範囲を確認してください。 Q. Goの並行性は、並列処理と同じ意味ですか? A. 並行性は、複数のタスクを一緒に進めるように構成する概念です。並列性は、複数のタスクが実際に同時に実行される状態です。並行性だけで実行速度の向上が保証されるわけではありません。 Q. KotlinはGoogleが開発したのですか? A. Kotlinの開発元はJetBrainsです。GoogleはAndroid開発でKotlinをサポートしています。言語の開発元と、プラットフォームでサポートする主体を区別する必要があります。 Q. TypeScriptコンパイラが速くなると、アプリも同じ割合で速くなりますか? A. コンパイル時間とアプリの実行時間は異なる指標です。Microsoftの性能事例は、開発ツールの処理時間についてのものです。アプリの応答速度は別途測定する必要があります。 Q. AIが作ったコードは、型チェックを通れば完成ですか? A. 型チェックだけで機能の完成を判断することはできません。外部入力とアクセス権限を確認する必要があります。正常時と失敗時の条件で、期待どおりの結果が得られるかテストしてください。 Q. バイブコーディングの講座はどのような基準で選べばよいですか? A. 生成したコードを説明して修正する実習があるか確認してください。エラーの再現と入力検証を扱っているかも確認できます。使用するバージョンと実行環境が明記されている講座は、再現条件を確認しやすいです。 Sources - TypeScript公式ドキュメント: TypeScript for JavaScript Programmers: https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html - TypeScript Handbook: The Basics, 型チェックと型の消去: https://www.typescriptlang.org/docs/handbook/2/basic-types - The Rust Programming Language: What Is Ownership?: https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html - The Rust Programming Language: Unsafe Rust: https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html - Mojo Manual: 言語の概要とPython連携: https://docs.modular.com/mojo/manual/ - Mojo System Requirements: CPU・GPUのサポート条件: https://docs.modular.com/mojo/requirements/ - Python公式用語集: バイトコードと実行に関する概念: https://docs.python.org/3/glossary.html - NumPy 2.0 Manual: Building from source: https://numpy.org/doc/2.0/building/index.html - MDN: What is JavaScript?: https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript - Node.js公式ドキュメント: Introduction to Node.js: https://nodejs.org/learn/getting-started/introduction-to-nodejs - React公式ドキュメント: ユーザーインターフェースライブラリ: https://react.dev/ - Next.js公式ドキュメント: https://nextjs.org/docs - PHP Manual: Introduction: https://www.php.net/manual/en/introduction.php - Go公式FAQ: 設計目的と実行特性: https://go.dev/doc/faq - Go公式ブログ: Concurrency is not parallelism: https://go.dev/blog/waza-talk - Kotlin公式FAQ: 開発主体と対象プラットフォーム: https://kotlinlang.org/docs/faq.html - Android Developers: Kotlin and Android: https://developer.android.com/kotlin - Swift.org: About Swift: https://www.swift.org/about/ - Oracle Java Tutorials: About the Java Technology: https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html - IBM History: Fortran: https://www.ibm.com/history/fortran - John McCarthy: LISP prehistory: https://www-formal.stanford.edu/jmc/history/lisp/node2.html - Howard Bromberg: The COBOL Conclusion, Datamation 1967年3月: https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf - Dennis Ritchie: The Development of the C Language: https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html - Bjarne Stroustrup FAQ: C++とオブジェクト指向: https://www.stroustrup.com/bs_faq.html - IBM: What Is Structured Query Language?: https://www.ibm.com/think/topics/structured-query-language - W3C: Cascading Style Sheets, level 1の公開履歴: https://www.w3.org/standards/history/CSS1/ - Smithsonian National Museum of American History: コンピュータのバグが付いたログブック: https://americanhistory.si.edu/collections/object/nmah_334663 - Microsoft: 10倍高速なTypeScript、2025年3月11日: https://devblogs.microsoft.com/typescript/typescript-native-port/ - GitHub Docs: Copilotのインライン候補の限界と検証責任: https://docs.github.com/en/copilot/responsible-use/inline-suggestions Images - 実習教室で中年の男性がノートパソコンを操作し、隣の女性が机の上のスマートフォンを指さしている。: https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp - サーバールームで、CPUヒートシンクとGPUカードが見えるサーバー内部を確認する女性: https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp --- Category: ナレッジベース Source: https://injoys.com/ja/articles/vibe-coding-programming-language-basics License: cc_by Translation-Status: reviewed