Javaプログラミングへの第一歩:「Hello World」作成・実行 超詳細解説
プログラミング学習の最初の一歩として、多くの言語で「Hello World」プログラムの作成と実行が行われます。これは、最もシンプルながら、その言語の基本的な開発・実行フローを体験できるからです。Javaも例外ではありません。この記事では、Javaで「Hello World」プログラムを作成し、コンピュータ上で実行するまでの全工程を、初心者の方でも迷うことのないよう、徹底的に詳細に解説します。
この記事の対象読者
- プログラミング自体が初めての方。
- Javaを初めて学ぶ方。
- 「Hello World」を動かす手順は知っているが、なぜそうするのか、その裏側で何が起きているのかをもっと深く理解したい方。
- 開発環境の準備から実行までの各ステップで発生しうる問題の解決方法を知りたい方。
この記事は、あなたのJava学習の確かな基盤となることを目指し、約5000語というボリュームで、各ステップの「なぜ」にも徹底的に焦点を当てて説明していきます。
目次
- はじめに:プログラミング学習とJava
- なぜ「Hello World」なのか?
- Javaとはどんな言語か? なぜJavaを学ぶのか?
- この記事で学ぶことの全体像
- 第1部:Javaの世界へようこそ – 基本概念の理解
- プログラム、ソースコード、コンパイル、実行:それぞれの役割
- Javaのキーワード:JVM、JRE、JDKとは?
- Javaの「プラットフォーム非依存性」とは?
- 第2部:開発環境の準備 – Java Development Kit (JDK) のインストール
- JDKの選び方:Oracle JDK vs OpenJDK
- 【OS別】JDKのダウンロードとインストール手順
- Windows
- macOS
- Linux
- 環境変数の設定:JAVA_HOMEとPATHの重要性
- 環境変数の設定方法(Windows/macOS/Linux)
- 環境変数設定の確認方法
- インストールと環境変数設定に関するトラブルシューティング
- 第3部:最初のプログラムを作成 – Hello World ソースコードの記述
- 開発ツールの選択:テキストエディタ vs 統合開発環境 (IDE)
- テキストエディタを使ったソースコードの記述
- 「Hello World」ソースコードの全解説
public class HelloWorld { ... }
– クラス定義public static void main(String[] args) { ... }
– mainメソッド(プログラムのエントリポイント)public
,static
,void
,main
,String[] args
:各キーワードの意味と役割を深掘り
System.out.println("Hello World");
– 標準出力への文字列出力System.out
,println
:出力メカニズムの詳細- 文字列リテラル
- セミコロン
;
とブレース{}
の意味
- コード記述時の注意点:大文字小文字、スペルミス、インデント、コメント
- ファイル名の規約:クラス名とファイル名の一致
- ファイルの保存:場所、ファイル名、エンコーディングの注意点
- 第4部:プログラムをコンピュータに理解させる – コンパイル
- コンパイルのプロセスとは? (
.java
から.class
へ) - コマンドプロンプト/ターミナルの起動方法(OS別)
- ソースファイルがあるディレクトリへの移動 (
cd
コマンド) javac
コマンドを使ったコンパイルの実行- コンパイル成功時の確認:
.class
ファイルの生成 - コンパイルエラーの読み方と対処法:一般的なエラーとその原因
- コンパイルのプロセスとは? (
- 第5部:作成したプログラムを動かす – 実行
- 実行のプロセスとは? (
.class
を JVM が解釈) java
コマンドを使ったプログラムの実行- なぜ
.class
拡張子を付けないのか?
- なぜ
- 実行成功時の確認:コンソール出力の確認
- 実行エラーの読み方と対処法:一般的なエラーとその原因
- コンパイルと実行の仕組みのまとめ
- 実行のプロセスとは? (
- 第6部:Hello World のその先へ – Java学習の継続
- Hello World で学んだことの振り返り
- 次に学ぶべき基本概念:変数、データ型、制御構造、メソッド、配列
- オブジェクト指向プログラミングの基礎
- 統合開発環境 (IDE) の導入
- 今後の学習リソース
- おわりに:プログラマーへの旅立ち
はじめに:プログラミング学習とJava
プログラミングという広大な世界への扉を開けるとき、最初に学ぶことになるのが「Hello World」プログラムです。これは、単に画面に「Hello World」と表示するだけの、一見すると非常にシンプルなプログラムです。しかし、このシンプルな一歩を踏み出すことで、あなたはプログラミング言語の基本的な文法、コードの作成、そして最も重要な「書いたコードをコンピュータ上で動かす」という一連のプロセスを体験することになります。
なぜ「Hello World」なのか?
「Hello World」は、プログラミング言語の「Hello World」プログラムの国際標準を定めた、非公式ながらも非常に広く認知されている伝統です。なぜこれが定番なのでしょうか?
- 最小限の機能で実行フローを学べる: プログラムを書き、コンパイル(またはそれに類する処理)し、実行するという一連の流れを、複雑なロジックを考えることなく体験できます。
- 開発環境の確認: プログラムが正しくコンパイル・実行できるということは、必要なツール(コンパイラやインタプリタなど)が正しくインストールされ、設定されていることの強力な確認となります。
- 自信につながる: 最初のプログラムが画面に意図した通りに表示されることで、大きな達成感と、これからもっと複雑なプログラムも書けるようになるという自信を得られます。
Javaとはどんな言語か? なぜJavaを学ぶのか?
Javaは1995年にSun Microsystems(現在はOracleによって買収)によって開発された、オブジェクト指向のプログラミング言語です。その登場以来、世界中で非常に広く使われており、現在も主要なプログラミング言語の一つとして確固たる地位を築いています。なぜJavaがこれほど普及し、なぜ今からJavaを学ぶ価値があるのでしょうか?
- 「Write Once, Run Anywhere (一度書けば、どこでも動く)」: Java最大の特徴は、このスローガンに集約されます。Javaで書かれたプログラムは、特定のOSやハードウェアに依存せず、Java仮想マシン (JVM) さえあれば、どのような環境でも同じように動作します。これは、後述するコンパイル方式とJVMの働きによって実現されています。
- 高い信頼性と堅牢性: Javaは、メモリ管理を自動で行うガーベージコレクション機能を持ち、ポインタ操作のような危険な機能がないため、クラッシュやメモリリークといったエラーが起こりにくい設計になっています。大規模で信頼性が要求されるシステム開発に適しています。
- 豊富な標準ライブラリと広大なエコシステム: Javaには、汎用的な機能を提供するクラスやメソッドが大量に用意された標準ライブラリがあります。さらに、世界中の開発者によって作られた膨大な数のサードパーティ製ライブラリやフレームワークが存在し、様々な種類の開発を効率的に行うことができます。
- 強力なコミュニティと豊富な学習リソース: 長い歴史と広い普及率により、Javaには非常に活発な開発者コミュニティが存在します。問題が発生した際の情報源が豊富であり、公式ドキュメント、チュートリアルサイト、書籍、オンラインコースなど、学習リソースにも事欠きません。
- 多様な用途: Javaは、ウェブアプリケーションのバックエンド(Spring Frameworkなど)、Androidアプリ開発、エンタープライズシステム、金融システム、ビッグデータ処理(Hadoopなど)、科学技術計算、組み込みシステムなど、非常に幅広い分野で活用されています。特に、大規模なシステム開発において、Javaは依然として主要な選択肢の一つです。
- オブジェクト指向: Javaは純粋なオブジェクト指向言語です。オブジェクト指向の考え方は、複雑なプログラムを管理しやすく、再利用性の高いコードを書く上で非常に強力なパラダイムです。Javaを学ぶことで、オブジェクト指向の基本をしっかりと身につけることができます。
- 高い求人需要: 上記の通り、Javaは多くのシステムで利用されているため、Javaエンジニアの求人需要は世界的に高い水準を維持しています。
これらの理由から、Javaはプログラミング初心者にとって、学び始める言語として非常に優れた選択肢の一つと言えます。しっかりとした基礎を身につければ、プログラマーとして様々な道が開けるでしょう。
この記事で学ぶことの全体像
この記事では、「Hello World」プログラムの作成・実行を通じて、以下のステップを詳細に追っていきます。
- Javaプログラムを動かすために必要な「開発キット (JDK)」をコンピュータにインストールし、正しく設定します。
- テキストエディタを使って、「Hello World」を表示するためのJavaの「ソースコード」を記述します。
- 書いたソースコードを、コンピュータが理解できる形式(正確にはJVMが理解できる「バイトコード」)に変換する「コンパイル」という作業を行います。
- コンパイルによって生成されたファイルを、「実行」します。
- 実行結果として、画面に「Hello World」と表示されることを確認します。
- 各ステップの裏側で何が起きているのか、そしてエラーが発生した場合の対処法を学びます。
この旅を通じて、あなたはJavaプログラミングの最も基本的なサイクルをマスターし、次のステップへ進む準備ができるはずです。さあ、Javaの世界へ飛び込みましょう!
第1部:Javaの世界へようこそ – 基本概念の理解
Javaで最初のプログラムを動かす前に、いくつかの基本的な概念を理解しておくことが重要です。これらの概念は、Javaプログラムがどのように書かれ、どのようにコンピュータ上で実行されるのかを理解する上で不可欠です。
プログラム、ソースコード、コンパイル、実行:それぞれの役割
- プログラム: コンピュータに行わせたい一連の「命令」を記述したものです。例えば、「画面に文字を表示する」「計算をする」「ファイルからデータを読み込む」といった命令の集まりです。
- ソースコード: 人間が理解しやすいように、プログラミング言語の文法に従って書かれたプログラムのことです。Javaの場合、ソースコードは通常、拡張子が
.java
のテキストファイルとして保存されます。私たちはこのソースコードを編集することで、プログラムの内容を変更します。 - コンパイル: 私たちが書いたソースコードは、そのままではコンピュータは理解できません。コンピュータは0と1の羅列である「機械語」しか直接理解できないからです。コンパイルとは、ソースコードをコンピュータ(またはJavaの場合はJVM)が理解できる形式に「翻訳」する作業のことです。この翻訳を行うソフトウェアを「コンパイラ」と呼びます。コンパイルが成功すると、新しいファイルが生成されます。
- 実行: コンパイルによって生成された「コンピュータが理解できる形式のプログラム」を、実際にコンピュータ上で動かすことです。実行することで、プログラムに書かれた命令が順次実行され、目的の処理が行われます。
Javaのキーワード:JVM、JRE、JDKとは?
Javaの学習を始めると、JVM、JRE、JDKという3つの用語によく出会います。これらはJavaプログラムの開発と実行において非常に重要な役割を果たします。
-
JVM (Java Virtual Machine – Java仮想マシン):
- Javaプログラムを実行するための「仮想的なコンピュータ」です。
- Javaのコンパイラは、ソースコード(
.java
ファイル)を直接機械語には翻訳せず、バイトコードと呼ばれる中間表現(.class
ファイル)に翻訳します。 - JVMは、このバイトコードを読み込み、その上で解釈・実行します。
- JVMはOSやハードウェアごとに異なる実装が存在しますが、どのJVMも同じバイトコードを実行できます。これがJavaの「一度書けば、どこでも動く」というプラットフォーム非依存性を実現する鍵です。
- 例えるなら、JVMは、様々な国の人が共通で理解できる「手話」のようなもので、Javaのバイトコードはその「手話」で書かれた指示書、各国のJVMはその「手話」を解釈して実際の行動(コンピュータ上での処理)に移す通訳者のようなものです。
-
JRE (Java Runtime Environment – Java実行環境):
- Javaプログラムを実行するために必要なものが全て揃ったパッケージです。
- JREには、Javaプログラムを実行するために不可欠なJVMに加えて、基本的なクラスライブラリ(
System
,String
などの、よく使う機能を提供する部品集まり)が含まれています。 - ユーザーが単にJavaで書かれたアプリケーションを動かすだけであれば、JREだけをインストールすれば十分です。
-
JDK (Java Development Kit – Java開発キット):
- Javaプログラムを「開発」するために必要なものが全て揃ったパッケージです。
- JDKには、JREに含まれる全ての機能(JVMとクラスライブラリ)に加えて、Javaプログラムを開発するためのツールが含まれています。
- 主な開発ツールには、ソースコードをバイトコードにコンパイルする
javac
コマンド(Java Compiler)、バイトコードを実行するjava
コマンド、デバッグツール、ドキュメント生成ツールなどがあります。 - 私たちがJavaプログラムを「書き」、それを「コンパイル」し、「実行」するには、このJDKが必要になります。
簡単にまとめると:
* Javaプログラムを実行するだけなら JRE が必要。
* Javaプログラムを開発(書いてコンパイルして実行)するには JDK が必要(JDKにはJREが含まれている)。
* JDKでコンパイルするとバイトコード(.class
ファイル)ができ、そのバイトコードをJVMが実行する。
Javaの「プラットフォーム非依存性」とは?
前述の「Write Once, Run Anywhere」は、Javaの最も強力な特徴の一つです。これはどのように実現されているのでしょうか?
他の多くのプログラミング言語では、ソースコードをコンパイルすると、特定のOSやCPU向けの「機械語」に直接変換されます。例えば、Windows上でコンパイルしたプログラムは、Windowsでしか動作しないのが一般的です。
しかし、Javaでは、ソースコードはまず「バイトコード」という中間的な形式にコンパイルされます。このバイトコードは、特定のOSやハードウェアに依存しない共通の形式です。そして、プログラムを実行する際には、それぞれのOSにインストールされたJVMが、この共通のバイトコードを読み込み、実行時にそのOSやハードウェアに適した機械語に翻訳しながら実行します。
この仕組みにより、開発者はJavaソースコードを一度書けば、Windows、macOS、Linuxといった異なるOS上でも、特別な修正を加えることなく同じようにプログラムを実行できるようになります。これが、Javaが様々な環境で広く利用される大きな理由です。
第2部:開発環境の準備 – Java Development Kit (JDK) のインストール
Javaでプログラムを作成・実行するためには、Java Development Kit (JDK) が必要です。このセクションでは、JDKのインストール方法をOS別に詳しく解説します。
JDKの選び方:Oracle JDK vs OpenJDK
かつて、Javaの公式配布元はSun Microsystems、そしてその後のOracleが提供するOracle JDKが一般的でした。しかし、Oracleのライセンスポリシーの変更などもあり、現在では様々な組織が提供するJDK(これらを総称してOpenJDKと呼ぶことが多い)が広く利用されています。
- Oracle JDK: Oracle社が提供するJDK。商用利用にはライセンスが必要なバージョンもありますが、個人学習や開発目的なら無償で利用できる場合が多いです(ライセンス条項をよく確認してください)。安定しており、パフォーマンスも高いとされています。
- OpenJDK: Javaのオープンソース実装。様々なベンダ(AdoptOpenJDK, Azul Zulu, Amazon Corretto, Eclipse Temurinなど)が提供しています。これらは基本的にはOracle JDKと互換性があり、無償で商用利用可能です。
初心者の方が学習目的で使用する場合、多くのOpenJDKディストリビューション(例: Adoptium (旧 AdoptOpenJDK) から提供される Temurin、Amazon Correttoなど)が無償で利用でき、コミュニティも活発なためおすすめです。Oracle JDKをダウンロードする場合は、最新のライセンス規約をよく確認してください。
どちらを選べば良いか迷う場合:
特にこだわりがなければ、Adoptium (Temurin) または Amazon Corretto のような、無償で利用可能な OpenJDK ディストリビューションを選択するのが良いでしょう。これらは広く使われており、情報も豊富です。この記事では、具体的なダウンロード先として Adoptium のウェブサイトを例に説明しますが、他の OpenJDK ディストリビューションを選んでも基本的な手順は同じです。
どのバージョンを選ぶか:
Javaには多くのバージョンが存在します。バージョンごとに機能が追加・改善されています。多くのプロダクション環境では、LTS (Long-Term Support) バージョンと呼ばれる、長期的なサポートが提供されるバージョンが推奨されます。現在(2024年時点)の主なLTSバージョンは Java 11 と Java 17、そして最新の Java 21 です。
学習目的であれば、最新のLTSバージョン(Java 21など)を選ぶのが良いでしょう。新しい機能を利用できますし、情報も比較的新しいものが見つかりやすいです。
【OS別】JDKのダウンロードとインストール手順
お使いのOSに合わせて、以下の手順でJDKをダウンロード・インストールしてください。
共通の注意点:
- インターネットに接続できる環境が必要です。
- 管理者権限が必要になる場合があります。
- インストール中に表示されるライセンス契約は必ず確認してください。
ダウンロードサイトの例:
- Adoptium (Eclipse Temurin): https://adoptium.net/
- Amazon Corretto: https://aws.amazon.com/jp/corretto/
- Oracle JDK: https://www.oracle.com/java/technologies/downloads/
今回は Adoptium (Temurin) を例に進めます。ウェブサイトにアクセスすると、最新のLTSバージョンが推奨されていることが多いです。お使いのOSとアーキテクチャ(x64など)を選択し、インストーラー形式(.msi, .pkg, .deb, .rpmなど)のファイルをダウンロードしてください。
Windows でのインストール手順
- インストーラーのダウンロード:
- Adoptiumのサイト(https://adoptium.net/)にアクセスします。
- ページの推奨に従い、お使いのWindowsのバージョン(通常はx64)に合った最新のLTSバージョン(例: Java 21)の「.msi」ファイルをダウンロードします。
- インストーラーの実行:
- ダウンロードした「.msi」ファイルをダブルクリックして実行します。
- ユーザーアカウント制御の画面が表示されたら「はい」をクリックして許可します。
- インストールウィザードの実行:
- インストーラーが起動したら「Next」をクリックします。
- ライセンス契約が表示されます。「I accept the terms in the License Agreement」(ライセンス契約の条項に同意します)にチェックを入れ、「Next」をクリックします。
- インストールする機能を選択する画面が表示されます。通常はデフォルト設定(「Add to PATH」や「Associate .jar」などが含まれていることが多い)のまま「Next」をクリックして問題ありません。特に重要なのは「Add to PATH」と「Set JAVA_HOME variable」が有効になっていることです。これにより、後述する環境変数の設定が自動で行われます。
- インストール先フォルダを確認し(変更も可能ですが、デフォルト推奨)、準備ができたら「Install」をクリックします。
- インストールが開始され、進行状況が表示されます。
- インストール完了画面が表示されたら「Finish」をクリックしてウィザードを閉じます。
注意点: インストーラーによっては「Set JAVA_HOME variable」のオプションがない場合があります。その場合は、インストール後に手動で環境変数を設定する必要があります(後述)。
macOS でのインストール手順
- インストーラーのダウンロード:
- Adoptiumのサイト(https://adoptium.net/)にアクセスします。
- お使いのmacOSのバージョンとアーキテクチャ(Intel Chipの場合はx64、Apple Silicon (M1/M2/M3など) の場合はaarch64)に合った最新のLTSバージョン(例: Java 21)の「.pkg」ファイルをダウンロードします。
- インストーラーの実行:
- ダウンロードした「.pkg」ファイルをダブルクリックして実行します。
- セキュリティの警告が表示されることがありますが、「開く」をクリックして進みます。
- インストールウィザードの実行:
- インストーラーが起動したら「続ける」をクリックします。
- 使用許諾契約が表示されます。内容を確認し、「続ける」をクリックします。同意を求められたら「同意する」をクリックします。
- インストール先の選択画面が表示されます。通常はデフォルトの場所にインストールして問題ありません。「インストール」をクリックします。
- Macのユーザーパスワードを求められるので入力し、「ソフトウェアをインストール」をクリックします。
- インストールが開始され、進行状況が表示されます。
- インストール完了画面が表示されたら「閉じる」をクリックしてウィザードを閉じます。インストーラーファイルをゴミ箱に入れるか尋ねられることがあります。
注意点: macOSの場合、通常はインストーラーが自動的に必要な設定を行います。環境変数の設定は不要な場合が多いですが、念のため確認手順を行います(後述)。
Linux でのインストール手順
Linuxディストリビューションによってインストール方法が異なります。ここでは一般的な方法(aptやyum/dnfを使う方法)と、バイナリをダウンロードして手動設定する方法を説明します。
A. パッケージマネージャを使ったインストール(推奨)
多くのLinuxディストリビューションでは、パッケージマネージャを使ってOpenJDKを簡単にインストールできます。これが最も推奨される方法です。
Debian/Ubuntu系 (apt):
- ターミナルを開きます。
- 以下のコマンドを実行して、パッケージリストを更新します。
bash
sudo apt update - OpenJDKをインストールします。利用可能なバージョンを確認するには
apt search openjdk
を実行します。最新のLTSバージョン(例: OpenJDK 17 または OpenJDK 21)をインストールする場合、以下のコマンドを実行します。
bash
sudo apt install openjdk-21-jdk
# または openjdk-17-jdk など
パスワードを求められたら入力し、インストール続行の確認にはy
を入力します。 - (複数のJavaバージョンがインストールされている場合)使用するデフォルトのJavaバージョンを設定します。
bash
sudo update-alternatives --config java
sudo update-alternatives --config javac
リストから使用したいJavaバージョンの番号を選択し、Enterを押します。
Fedora/CentOS/RHEL系 (dnf/yum):
- ターミナルを開きます。
- 以下のコマンドを実行して、OpenJDKをインストールします。利用可能なバージョンを確認するには
dnf search openjdk
を実行します。最新のLTSバージョン(例: OpenJDK 21 または OpenJDK 17)をインストールする場合、以下のコマンドを実行します。
bash
sudo dnf install java-21-openjdk-devel
# または java-17-openjdk-devel など
devel
が付いているものが開発キット(JDK)です。パスワードを求められたら入力し、インストール続行の確認にはy
を入力します。
パッケージマネージャを使った場合、通常は環境変数の設定は自動的に行われます。
B. バイナリをダウンロードして手動でインストール
特定のバージョンが必要な場合や、パッケージマネージャで利用できない場合は、Adoptiumなどのサイトからバイナリファイルをダウンロードしてインストールできます。
- バイナリのダウンロード:
- Adoptiumのサイト(https://adoptium.net/)にアクセスします。
- お使いのLinuxのバージョン(通常はx64)に合った最新のLTSバージョン(例: Java 21)の「.tar.gz」ファイルをダウンロードします。
- ファイルの展開:
- ダウンロードした「.tar.gz」ファイルを、インストールしたい場所(例:
/opt/java/
または/usr/local/java/
。権限が必要な場合はsudo
を使います)に展開します。
bash
sudo mkdir -p /opt/java/
sudo tar -xzf /path/to/your/downloaded/jdk.tar.gz -C /opt/java/
/path/to/your/downloaded/jdk.tar.gz
はダウンロードしたファイルへのパスに、/opt/java/
は展開したいディレクトリに変更してください。
- ダウンロードした「.tar.gz」ファイルを、インストールしたい場所(例:
- 環境変数の設定:
- 手動インストールの場合、環境変数の設定が必要です。以下の手順で設定します。
- テキストエディタでシェル設定ファイルを開きます(例: Bashなら
~/.bashrc
、Zshなら~/.zshrc
)。
bash
nano ~/.bashrc # またはお好みのエディタとファイル - ファイルの末尾に以下の行を追加します。
bash
export JAVA_HOME=/opt/java/jdk-21.X.X # X.X.X はインストールしたJDKのバージョンに合わせて変更
export PATH=$PATH:$JAVA_HOME/bin
/opt/java/jdk-21.X.X
は、JDKを展開したディレクトリのフルパスに変更してください。 - ファイルを保存して閉じます。
- 設定を反映させるために、新しいターミナルを開くか、以下のコマンドを実行します。
bash
source ~/.bashrc # または ~/.zshrc など
環境変数の設定:JAVA_HOMEとPATHの重要性
Java開発において、環境変数 JAVA_HOME
と PATH
は非常に重要です。
JAVA_HOME
: JDKがインストールされているディレクトリの場所を示す環境変数です。多くのJava関連ツール(Maven, Gradleなどのビルドツール、一部のIDEなど)は、このJAVA_HOME
環境変数を見てJDKの場所を特定します。Java自身が必須とするわけではありませんが、設定しておくことが強く推奨されます。PATH
: コマンドプロンプトやターミナルでコマンド名(例:javac
,java
)を入力したときに、OSが実行可能なファイル(コマンド)を探しに行くディレクトリのリストです。JDKのインストールディレクトリ内のbin
フォルダ(ここにjavac
やjava
コマンドがあります)をPATH
に追加することで、どのディレクトリからでもこれらのコマンドを直接実行できるようになります。これが設定されていないと、コマンドを実行する際にJDKのbin
フォルダまでフルパスを指定する必要があり、非常に不便です。
WindowsのインストーラーやLinuxのパッケージマネージャは、これらの環境変数を自動で設定してくれることが多いですが、念のため確認と、必要であれば手動設定の方法を知っておくことは重要です。
環境変数の設定方法(手動)
Windows:
- 「スタート」ボタンを右クリックし、「システム」を選択します。(または「設定」->「システム」->「バージョン情報」->「システムの詳細設定」)
- 開いたウィンドウの左側メニューで「システムの詳細設定」をクリックします。
- 「システムのプロパティ」ウィンドウが開いたら、「詳細設定」タブを選択し、下部にある「環境変数(N)…」ボタンをクリックします。
- 「環境変数」ウィンドウが開きます。
JAVA_HOME
の設定:- 「システム環境変数」のセクションで「新規(N)…」をクリックします。
- 変数名に
JAVA_HOME
と入力します。 - 変数値に、インストールしたJDKのルートディレクトリ(例:
C:\Program Files\Eclipse Adoptium\jdk-21.0.X.X-hotspot
)を入力します。このパスは、実際にJDKがインストールされた場所に合わせてください。通常はC:\Program Files\
やC:\Program Files (x86)\
の下にあります。エクスプローラーで実際のフォルダを開いてパスをコピーするのが確実です。 - 「OK」をクリックします。
PATH
の設定:- 「システム環境変数」のリストから
Path
という名前の変数を選択し、「編集(I)…」をクリックします。 - 「環境変数名の編集」ウィンドウが開きます。「新規(N)」をクリックし、
%JAVA_HOME%\bin
と入力します。 - リストに追加した
%JAVA_HOME%\bin
の行を選択し、「上へ(U)」ボタンを使ってリストの上の方(例えば一番上か二番目あたり)に移動させます。これにより、OSは他の場所よりも先にJDKのbin
フォルダを探すようになります。 - 「OK」をクリックします。
- 「システム環境変数」のリストから
- 「環境変数」ウィンドウと「システムのプロパティ」ウィンドウも「OK」をクリックして閉じます。
macOS / Linux:
macOSやLinuxでは、環境変数はシェルの設定ファイル(例: ~/.bash_profile
, ~/.bashrc
, ~/.zshrc
など)に記述することで設定します。使用しているシェルによってファイル名が異なります。近年のmacOSのデフォルトシェルはZsh (~/.zshrc
)、多くのLinuxはBash (~/.bashrc
または ~/.bash_profile
) です。
- ターミナルを開きます。
- テキストエディタでシェルの設定ファイルを開きます。
bash
nano ~/.zshrc # macOS (Zshの場合)
# または nano ~/.bashrc # Linux (Bashの場合)
# または nano ~/.bash_profile # macOS や一部のLinux (Bashの場合) -
ファイルの末尾に、JDKのインストールパスに合わせて以下の行を追加します。
“`bash
# JAVA_HOME 環境変数の設定
# 以下のパスは、実際にインストールしたJDKのディレクトリに合わせて変更してください。
# macOSの場合: /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home のようになることが多い
# Linux (手動インストール) の場合: /opt/java/jdk-21.X.X のようになることが多い
# Linux (パッケージマネージャ) の場合: パッケージマネージャが自動設定することが多いですが、
# 複数バージョンある場合は /usr/lib/jvm/java-21-openjdk-amd64 のようなパスを指定することもあります。
export JAVA_HOME=$(/usr/libexec/java_home) # macOSでの一般的な方法 (インストール場所が標準的な場合)
# または export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home # macOS (パスを直接指定)
# または export JAVA_HOME=/opt/java/jdk-21.X.X # Linux (手動インストール)
# または export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64 # Linux (パッケージマネージャ、例)PATH 環境変数にJDKのbinディレクトリを追加
export PATH=$PATH:$JAVA_HOME/bin
特にmacOSでは、`/usr/libexec/java_home` コマンドを使うと、システムが管理するJavaの場所を自動的に取得できるため便利です。複数のJavaがインストールされている場合は、特定のバージョンを指定するために上記コマンドのオプションを使うか、直接パスを指定します。
bash
Linuxでパッケージマネージャを使ってインストールした場合、`JAVA_HOME` は `/usr/lib/jvm/` の下にインストールされることが多いです。正確なパスは `ls /usr/lib/jvm/` などで確認してください。
4. ファイルを保存して閉じます。
5. 設定を反映させるために、新しいターミナルを開くか、以下のコマンドを実行します。
source ~/.zshrc # macOS (Zshの場合)または source ~/.bashrc # Linux (Bashの場合)
または source ~/.bash_profile # macOS や一部のLinux (Bashの場合)
“`
インストールと環境変数設定の確認方法
JDKのインストールと環境変数の設定が正しく行われたかを確認するために、コマンドプロンプト(Windows)またはターミナル(macOS/Linux)を開き、以下のコマンドを実行します。
java -version
の実行:
bash
java -version
インストールしたJavaのバージョン情報(例:openjdk version "21.0.1"
,Java(TM) SE Runtime Environment (build ...)
など)が表示されれば成功です。もし「’java’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」のようなエラーが表示された場合は、PATH
環境変数の設定に問題がある可能性が高いです。javac -version
の実行:
bash
javac -version
インストールしたJavaコンパイラ(javac
)のバージョン情報(例:javac 21.0.1
)が表示されれば成功です。もしエラーが表示された場合は、PATH
環境変数またはJAVA_HOME
環境変数の設定に問題があるか、JDK自体が正しくインストールされていない可能性があります。
java
コマンドは実行できるが javac
コマンドが実行できない場合、それはJREはインストールされているがJDKがインストールされていないか、PATH
に追加したディレクトリがJREの bin
ディレクトリを指しており、JDKの bin
ディレクトリを指していない可能性があります。JDKをインストールし直すか、環境変数のパスを再確認してください。
インストールと環境変数設定に関するトラブルシューティング
- コマンドが見つからないエラー (
java
またはjavac
):- 最も一般的な問題です。ほとんどの場合、
PATH
環境変数が正しく設定されていません。JDKのインストールディレクトリ内のbin
フォルダへのパスがPATH
に含まれているか、綴り間違いがないかを確認してください。 - 環境変数を設定した後、新しいコマンドプロンプト/ターミナルを開くのを忘れていませんか? 環境変数の変更は、通常、新しいシェルセッションから有効になります。
- Windowsで手動で環境変数を設定した場合、再起動が必要な場合があります。
- Linux/macOSで設定ファイルを編集した場合、
source
コマンドで設定を再読み込みするか、新しいターミナルを開きましたか? JAVA_HOME
が正しく設定されていないか、それを参照するPATH
の設定 (%JAVA_HOME%\bin
) が間違っている可能性もあります。JAVA_HOME
のパスが実際にJDKが存在する場所を指しているか確認してください。
- 最も一般的な問題です。ほとんどの場合、
- インストールが途中で失敗する:
- ダウンロードしたファイルが壊れている可能性があります。もう一度ダウンロードしてみてください。
- ディスクの空き容量が不足している可能性があります。
- OSのバージョンがJDKの要求仕様を満たしていない可能性があります。
- 過去のJavaバージョンが完全にアンインストールされていないことが原因の場合もあります。一度全てアンインストールしてから再試行してください。
- 複数のJavaバージョンがインストールされている:
- OSのシステム設定や環境変数によって、どのバージョンのJavaがデフォルトで使用されるかが決まります。
- Windowsでは環境変数の
Path
リストで、JDKのbin
ディレクトリのパスがどの位置にあるかによって優先順位が変わります。使いたいバージョンのパスをリストの上位に移動させます。 - macOSでは
/usr/libexec/java_home
コマンドを使ってバージョンを指定してパスを取得できます。export JAVA_HOME=$(/usr/libexec/java_home -v 21)
のように記述します。 - Linuxでは
update-alternatives
コマンド(Debian/Ubuntu系)などを使ってデフォルトバージョンを切り替えることができます。
これらのトラブルシューティング手順を試しても解決しない場合は、使用しているOS、JDKのバージョン、エラーメッセージの内容を添えて、インターネット上のJava関連フォーラムやQ&Aサイト(Stack Overflowなど)で質問してみることをお勧めします。
第3部:最初のプログラムを作成 – Hello World ソースコードの記述
JDKのインストールと環境変数設定が完了し、java -version
と javac -version
コマンドが正しく実行できるようになったら、いよいよ最初のJavaプログラムを作成します。
開発ツールの選択:テキストエディタ vs 統合開発環境 (IDE)
Javaプログラムを書くためのツールには、主に「テキストエディタ」と「統合開発環境 (IDE)」の2種類があります。
- テキストエディタ: プログラミング言語に特化した機能を持つもの(シンタックスハイライト、コード補完など)から、OS標準のシンプルなもの(メモ帳など)まで様々です。コードを書くことに特化しており、軽量で起動が速いのが特徴です。
- 例: Visual Studio Code (VS Code), Sublime Text, Atom, メモ帳 (Windows), TextEdit (macOS), gedit (Linux)
- 統合開発環境 (IDE): ソースコードの記述だけでなく、コンパイル、実行、デバッグ、バージョン管理など、プログラム開発に必要な様々な機能を一つの環境に統合したソフトウェアです。高度なコード補完、リアルタイムのエラーチェック、デバッガによるステップ実行など、開発効率を大幅に向上させる機能が豊富に備わっています。
- 例: Eclipse, IntelliJ IDEA (Community Editionは無償), NetBeans
初心者の方へ:
最初の「Hello World」プログラムを作成する際には、テキストエディタを使用することをお勧めします。IDEは多機能で非常に便利ですが、その多くの機能が初めての方にとってはかえって複雑に感じられることがあります。また、コンパイルや実行といった裏側のプロセスが自動化されてしまうため、各ステップで何が起きているのかが見えにくくなります。
この記事では、まずテキストエディタを使って基本的な開発サイクル(記述 → コンパイル → 実行)を手動で行う方法を学びます。これが理解できた後で、IDEを使うことに挑戦すると、その便利さをより実感できるでしょう。
Windowsなら「メモ帳」や「Visual Studio Code (VS Code)」、macOSなら「TextEdit」や「VS Code」、Linuxなら「gedit」や「VS Code」など、使い慣れたテキストエディタを用意してください。もしインストール済みのテキストエディタがない場合は、VS Code (Visual Studio Code) が多機能で人気があり、Java開発にも適しているためおすすめです。
テキストエディタを使ったソースコードの記述
準備ができたら、テキストエディタを開き、以下のJavaコードを正確に入力してください。
“`java
// これは私の最初のJavaプログラムです
/
画面に “Hello World” と表示するプログラムです。
コメントはプログラムの動作には影響しません。
/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
“`
正確に入力することが非常に重要です。 大文字・小文字の違い、記号(カッコ、セミコロン、引用符など)、スペースなども含めて、全く同じになるように入力してください。プログラミング言語は非常に厳密であり、たった一文字の違いでもエラーの原因となります。
入力が完了したら、このファイルを保存します。保存する際の注意点は後述します。
「Hello World」ソースコードの全解説
今入力した短いコードの中に、Javaプログラムの基本的な構成要素が詰まっています。一行ずつ、その意味と役割を詳しく見ていきましょう。
java
// これは私の最初のJavaプログラムです
これはコメントです。//
から行末までがコメントとして扱われ、Javaコンパイラはこれを無視します。プログラムの説明や覚書きなどに使われます。
java
/*
画面に "Hello World" と表示するプログラムです。
コメントはプログラムの動作には影響しません。
*/
これもコメントですが、/*
から */
までの複数行をまとめてコメントにできます。こちらもコンパイラによって無視されます。
java
public class HelloWorld {
// クラスの中身
}
これはクラス定義です。Javaでは、全てのプログラムは「クラス」の中に記述されます。クラスは、データ(属性)と操作(メソッド)をまとめた設計図のようなものです。
class
: これは「これからクラスを定義しますよ」ということを示すキーワードです。HelloWorld
: これはあなたがこのクラスに付けたクラス名です。クラス名は自由に付けられますが、いくつかの規約があります。- 英数字とアンダースコア
_
、ドル記号$
を使用できます。 - 数字で始めてはいけません。
- Javaの予約語(
public
,class
など)と同じ名前は使えません。 - 慣習として、クラス名は大文字で始め、複数の単語を組み合わせる場合は各単語の先頭を大文字にするパスカルケース (PascalCase) を使用します(例:
MyFirstProgram
)。
- 英数字とアンダースコア
public
: これは「アクセス修飾子」と呼ばれるもので、このクラスが他の場所からアクセス可能であることを示します。今は「公開されているクラス」という意味で理解しておけば十分です。Javaプログラムのエントリポイントとなるクラスは通常public
にします。{ ... }
: ブレース{}
は「ブロック」を示し、このクラス定義の範囲を表します。クラスのメンバー(変数やメソッドなど)はこのブロックの中に記述されます。
java
public static void main(String[] args) {
// mainメソッドの中身
}
これはmainメソッドの定義です。Javaアプリケーションが実行されるときに、最初に実行される特別なメソッドです。全ての実行可能なJavaアプリケーションは、この main メソッドを持っている必要があります。プログラムの「エントリポイント(入り口)」です。
public
: このメソッドが他の場所から呼び出し可能であることを示します。JVMがこのメソッドを呼び出してプログラムを開始するため、public
である必要があります。static
: これは「静的 (static)」メソッドであることを示します。静的メソッドは、クラスのインスタンス(オブジェクト)を生成しなくても直接クラス名を使って呼び出すことができます。プログラムの開始時点でオブジェクトはまだ存在しないため、JVMがmain
メソッドを呼び出すためにはstatic
である必要があります。void
: これはメソッドの「戻り値の型」を示します。void
は「何も返さない」という意味です。main
メソッドは処理を実行するだけで、結果として特定の値を返す必要がないためvoid
になっています。main
: これがこのメソッドの名前です。Javaアプリケーションのエントリポイントとなるメソッドの名前は、必ずmain
でなければなりません(全て小文字です)。(String[] args)
: これはメソッドが受け取る引数です。プログラム実行時にコマンドラインから渡された引数を文字列の配列args
として受け取ります。今回の「Hello World」プログラムではこの引数は使用しませんが、mainメソッドはこの形式で定義する必要があります。String[]
: 文字列の配列であることを示します。args
: 引数を受け取る変数名です。名前はargs
以外でも構いませんが、args
が慣習的に広く使われています。
{ ... }
: ブレース{}
はこのメソッド定義の範囲を示します。メソッドが実行する処理は、このブロックの中に記述されます。
java
System.out.println("Hello World");
これは、画面(標準出力)に文字列を表示するための命令文です。
System
: Javaの標準ライブラリに含まれる、システム関連の機能を提供するクラスです。.out
:System
クラスの持つ、標準出力(通常はコンソール画面)を表すオブジェクトです。これはPrintStream
という型のオブジェクトです。.println
:out
オブジェクトが持つメソッドです。引数として渡された文字列を標準出力に表示し、その後改行します。println
は “print line” の略です。改行しない場合はprint
メソッドを使います。("Hello World")
:println
メソッドに渡している引数です。二重引用符"
で囲まれたHello World
は文字列リテラルと呼ばれ、プログラム中に直接記述された文字列データです。;
: 全てのJavaの命令文(文、Statement)の終わりにはセミコロン;
が必要です。これは文の区切りを示します。セミコロンがないとコンパイルエラーになります。
コード記述時の注意点:大文字小文字、スペルミス、インデント、コメント
- 大文字小文字の区別: Javaは大文字と小文字を厳密に区別します。
HelloWorld
とhelloworld
は全く別のものとして扱われます。キーワード(public
,class
,static
,void
など)、クラス名(System
,String
など)、メソッド名(main
,println
など)は全て、決められた通りに大文字小文字を正確に記述する必要があります。 - スペルミス: 変数名、クラス名、メソッド名などのスペルミスもエラーの一般的な原因です。特に
System.out.println
は長いので注意が必要です。 - インデント: コードの行頭に入れる空白(スペースやタブ)をインデントと呼びます。Javaではインデントは必須ではありませんが、コードの階層構造(どのブロックの中にどのコードがあるか)を視覚的に分かりやすくするために非常に重要です。上のコード例のように、クラス定義やメソッド定義のブロック
{}
の中はインデントを入れて記述するのが一般的なスタイルです。通常、スペース2つまたは4つ、あるいはタブ1つを使います。可読性を高めるため、一定のスタイルを保つようにしましょう。 - コメント: 前述の通り、
//
や/* ... */
で囲まれたコメントはコンパイラに無視されます。プログラムの理解を助けるために積極的に活用しましょう。
ファイル名の規約:クラス名とファイル名の一致
Javaでは、public
クラスを定義する場合、そのクラスを含むソースファイルのファイル名は、クラス名と全く同じにし、拡張子を .java
とする、という規約があります。
今回の例では、クラス名は HelloWorld
です。したがって、ソースファイル名は HelloWorld.java
とする必要があります。大文字小文字も完全に一致させる必要があります。
もしファイル名がクラス名と一致しない場合、コンパイル時にエラーが発生します。
ファイルの保存:場所、ファイル名、エンコーディングの注意点
入力したコードをファイルに保存しましょう。
- 保存場所を決める: デスクトップやドキュメントフォルダ内など、自分で分かりやすい場所に新しいフォルダを作成し、そこに保存することをお勧めします。例:「java_projects」のようなフォルダ名が良いでしょう。このフォルダは、後でコマンドプロンプト/ターミナルからアクセスしやすい場所を選んでください。
- ファイル名を設定する: ファイル名を
HelloWorld.java
とします。前述の通り、クラス名と全く同じにし、拡張子.java
を付けます。テキストエディタによっては、デフォルトで.txt
などの拡張子が付いてしまう場合があるので注意が必要です。必ず.java
となるように手動で入力してください。 - エンコーディングを設定する(重要): ファイルのエンコーディングは UTF-8 を選択することを強く推奨します。UTF-8は世界中の多くの文字を扱える標準的なエンコーディングであり、Java開発で広く使われています。特に日本語などのマルチバイト文字をコード中に記述する場合(文字列リテラルとして表示したい場合など)は、UTF-8でないと文字化けの原因となります。多くのモダンなテキストエディタのデフォルトエンコーディングはUTF-8ですが、メモ帳など一部の古いエディタでは異なるエンコーディング(例: Shift_JIS)がデフォルトの場合があります。保存時にエンコーディングを選択できる場合は、必ずUTF-8を選択してください。
例えば、デスクトップに java_projects
というフォルダを作成した場合、そこに HelloWorld.java
という名前でUTF-8エンコーディングでファイルを保存します。
これで、最初のJavaソースコードの作成は完了です。
第4部:プログラムをコンピュータに理解させる – コンパイル
ソースコード (.java
ファイル) は人間が読みやすい形式ですが、コンピュータ(正確にはJVM)はこれを直接実行できません。そこで必要になるのが「コンパイル」という作業です。
コンパイルのプロセスとは? (.java
から .class
へ)
コンパイルとは、Javaコンパイラ(javac
コマンド)を使って、私たちが書いたJavaソースコード (.java
ファイル) を、Java仮想マシン (JVM) が解釈・実行できる形式であるバイトコード (.class
ファイル) に変換するプロセスです。
この .class
ファイルは、特定のOSやハードウェアに依存しない形式であり、この後の「実行」ステップでJVMによって読み込まれ、その実行環境に合わせて解釈・実行されます。
コンパイルが成功すると、ソースファイルと同じディレクトリに、ソースファイルと同名の .class
ファイルが生成されます。例えば、HelloWorld.java
をコンパイルすると、HelloWorld.class
というファイルが生成されます。
コンパイル時には、Javaコンパイラがソースコードの文法や型などをチェックします。もし記述ミス(文法エラー)があれば、コンパイラはエラーメッセージを出力し、.class
ファイルは生成されません。エラーがない、つまりソースコードがJavaの文法的に正しい場合にのみ、コンパイルは成功し、.class
ファイルが生成されます。
コマンドプロンプト/ターミナルの起動方法(OS別)
コンパイルと実行は、コマンドラインツール(コマンドプロンプト、ターミナル)を使用して行います。JDKに含まれる javac
コマンドと java
コマンドは、これらの環境から実行します。
- Windows:
- スタートボタンをクリックし、「cmd」と入力して「コマンド プロンプト」を選択します。
- または、Windowsキー + R を押し、「cmd」と入力してEnterを押します。
- macOS:
- Finderを開き、「アプリケーション」->「ユーティリティ」->「ターミナル」を選択します。
- または、Spotlight検索(Command + Space)で「ターミナル」と入力してEnterを押します。
- Linux:
- アプリケーションメニューから「ターミナル」を選択します。
- 多くのディストリビューションで、Ctrl + Alt + T のショートカットでターミナルを開けます。
ソースファイルがあるディレクトリへの移動 (cd
コマンド)
コマンドプロンプトやターミナルを開くと、通常はユーザーのホームディレクトリなどで起動します。Javaのソースファイル (HelloWorld.java
) を保存したディレクトリに移動する必要があります。ディレクトリ間の移動には cd
(change directory) コマンドを使用します。
例えば、デスクトップの java_projects
フォルダに HelloWorld.java
を保存した場合、以下のように移動します。
-
Windows:
cmd
C:\Users\YourUsername> cd Desktop\java_projects
C:\Users\YourUsername\Desktop\java_projects>
または、デスクトップに直接保存した場合は、
cmd
C:\Users\YourUsername> cd Desktop
C:\Users\YourUsername\Desktop>
ドライブを変更する必要がある場合は、D:
のようにドライブレターを入力してEnterを押します。パスの区切りはバックスラッシュ\
を使用しますが、スラッシュ/
も受け付けられることが多いです。 -
macOS / Linux:
bash
YourUsername@YourComputer:~ $ cd Desktop/java_projects
YourUsername@YourComputer:~/Desktop/java_projects $
または、デスクトップに直接保存した場合は、
bash
YourUsername@YourComputer:~ $ cd Desktop
YourUsername@YourComputer:~/Desktop $
パスの区切りはスラッシュ/
を使用します。チルダ~
はホームディレクトリを表します。
cd
コマンドの後ろに移動したいディレクトリのパスを指定します。絶対パス(ルートディレクトリからのフルパス)でも、相対パス(現在のディレクトリからのパス)でも指定できます。
現在のディレクトリに含まれるファイルやサブディレクトリを確認したい場合は、Windowsでは dir
コマンド、macOS/Linuxでは ls
コマンドを使用します。
重要: 必ず HelloWorld.java
ファイルが存在するディレクトリでコンパイルおよび実行コマンドを実行してください。
javac
コマンドを使ったコンパイルの実行
HelloWorld.java
ファイルがあるディレクトリに移動したら、以下のコマンドを実行してコンパイルを行います。
bash
javac HelloWorld.java
javac
: Javaコンパイラを起動するコマンドです。JDKをインストールし、PATH
環境変数を正しく設定していれば、このコマンドが認識されます。HelloWorld.java
: コンパイルしたいJavaソースファイルの名前です。拡張子.java
を含めて正確に指定します。
このコマンドを実行すると、Javaコンパイラ (javac
) が HelloWorld.java
ファイルを読み込み、文法チェックとバイトコードへの変換を行います。
-
コンパイルが成功した場合:
- 特に何もメッセージは表示されず、コマンドプロンプト/ターミナルの入力待ちの状態に戻ります。
- ファイルがあったディレクトリを確認すると、新しく
HelloWorld.class
というファイルが生成されているはずです。これがコンパイルによってできたバイトコードファイルです。
-
コンパイルエラーが発生した場合:
- エラーメッセージがコマンドプロンプト/ターミナルに表示されます。メッセージには、エラーの種類、エラーが発生したファイル名、行番号、そしてエラーの内容が記されています。
.class
ファイルは生成されません。
コンパイル成功時の確認:.class
ファイルの生成
コンパイルコマンドを実行した後、エラーメッセージが表示されなかった場合は、コンパイルは成功しています。以下のコマンドでファイル一覧を確認し、HelloWorld.class
というファイルが生成されていることを確認しましょう。
- Windows:
cmd
dir - macOS / Linux:
bash
ls
ファイルリストの中にHelloWorld.java
と一緒にHelloWorld.class
が表示されていればOKです。
コンパイルエラーの読み方と対処法:一般的なエラーとその原因
コンパイルは、プログラムがJavaの文法ルールに従っているかをチェックするプロセスです。コードに間違いがあると、コンパイラはエラーメッセージを出力します。エラーメッセージは初心者には難解に見えるかもしれませんが、重要な情報が含まれています。
一般的なエラーメッセージの例と、その対処法をいくつか紹介します。
例1:セミコロンの忘れ
java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World") // セミコロンが抜けている!
}
}
コンパイルコマンド: javac HelloWorld.java
エラーメッセージ例:
HelloWorld.java:5: error: ';' expected
System.out.println("Hello World")
^
1 error
- エラーメッセージの読み方:
HelloWorld.java:5:
: エラーが発生したファイル名と行番号(5行目)を示しています。error: ';' expected
: エラーの種類です。「セミコロン;
が期待されています」という意味です。System.out.println("Hello World")
: エラーが発生した行のコードです。^
: エラーが検出されたおおよその位置を示しています。この例では、行末の閉じカッコの後にセミコロンがないことを指しています。
- 対処法:
- エラーメッセージが示す行番号を確認します。
- その行のコードを注意深く確認し、セミコロン
;
が必要な場所(命令文の終わり)に抜けていないかチェックします。 - 今回の例では、
System.out.println("Hello World")
の行末に;
を追加します。
java
System.out.println("Hello World"); // セミコロンを追加 - ファイルを保存し、再度コンパイルします。
例2:大文字小文字の間違い
java
public class helloworld { // クラス名が大文字で始まっていない!
public static void main(String[] args) {
System.out.println("Hello World");
}
}
ファイル名は HelloWorld.java
のままです。
コンパイルコマンド: javac HelloWorld.java
エラーメッセージ例:
HelloWorld.java:3: error: class helloworld is public, should be declared in a file named helloworld.java
public class helloworld {
^
1 error
- エラーメッセージの読み方:
HelloWorld.java:3:
: エラーが発生したファイル名と行番号(3行目)を示しています。error: class helloworld is public, should be declared in a file named helloworld.java
: 「helloworld
というクラスはpublic
ですが、ファイル名がhelloworld.java
であるべきです」という意味です。ファイル名とpublic
クラス名が一致していないというエラーです。
- 対処法:
public
クラス名とファイル名の大文字小文字を含めた綴りが一致しているか確認します。- この例の場合、ファイル名
HelloWorld.java
とクラス名helloworld
が一致していません。 - クラス名をファイル名に合わせて
HelloWorld
に修正するか、ファイル名をクラス名に合わせてhelloworld.java
に修正するかのどちらかを行います。一般的にはクラス名を規約通り大文字で始めるので、クラス名を修正する方が良いでしょう。
java
public class HelloWorld { // クラス名を修正
public static void main(String[] args) {
System.out.println("Hello World");
}
} - ファイルを保存し、再度コンパイルします。
例3:キーワードやメソッド名のスペルミス
java
public clas HelloWorld { // 'class' が 'clas' になっている!
public static void main(String[] args) {
System.out.println("Hello World");
}
}
コンパイルコマンド: javac HelloWorld.java
エラーメッセージ例:
HelloWorld.java:4: error: class, interface, enum, or record expected
public clas HelloWorld {
^
1 error
- エラーメッセージの読み方:
HelloWorld.java:4:
: エラーが発生したファイル名と行番号(4行目)を示しています。error: class, interface, enum, or record expected
: 「class
,interface
,enum
, またはrecord
が期待されています」という意味です。clas
という見慣れない単語があるため、Javaコンパイラが「ここでクラス定義などの始まりを期待していたのに違うぞ」と判断しています。
- 対処法:
- エラーメッセージが示す行番号とその周辺を確認し、Javaのキーワードやメソッド名、クラス名などにスペルミスがないか、大文字小文字は正しいかを確認します。
- この例の場合、
clas
を正しいキーワードclass
に修正します。
java
public class HelloWorld { // 'clas' を 'class' に修正
public static void main(String[] args) {
System.out.println("Hello World");
}
} - ファイルを保存し、再度コンパイルします。
その他の一般的なエラー:
error: cannot find symbol
: 変数、メソッド、クラスなどの名前が見つからない場合。綴りミス、大文字小文字の間違い、必要なインポート文が抜けているなどが原因です。error: incompatible types
: 型が合わない場合。例えば、文字列が必要な場所に数値を渡そうとした場合などです。error: reached end of file while parsing
: ブロック{}
やカッコ()
、引用符"
などの対応が取れていない場合。閉じ忘れている箇所がないか確認します。
エラーメッセージは、最初は読みにくいかもしれませんが、エラーの種類、ファイル名、行番号、そしてエラーが起きた箇所のコードという最も重要な情報を常に含んでいます。落ち着いてメッセージを読み、示されている行とその周辺のコードを注意深く見直すことが解決への第一歩です。
コンパイルエラーを全て解消し、javac HelloWorld.java
コマンドを実行して何もメッセージが表示されずに HelloWorld.class
ファイルが生成されれば、コンパイルは成功です。次のステップに進みましょう。
第5部:作成したプログラムを動かす – 実行
コンパイルによって生成された .class
ファイルは、いよいよJava仮想マシン (JVM) 上で実行できます。
実行のプロセスとは? (.class
を JVM が解釈)
実行とは、JDK(正確にはJREに含まれるJVM)が、コンパイルによって生成されたバイトコード (.class
ファイル) を読み込み、その命令を解釈して、コンピュータの実際のハードウェア上で処理を実行するプロセスです。
java
コマンドを実行すると、JVMが起動し、指定されたクラスファイルのバイトコードを読み込みます。そして、そのクラスの main
メソッドを探し出し、そこからプログラムの実行を開始します。
JVMは、バイトコードを直接実行するのではなく、実行環境(OSやCPUアーキテクチャ)に応じた機械語に変換しながら実行します。この変換は、実行時に逐次的に行う「インタプリタ方式」と、よく実行される部分のバイトコードをまとめて効率の良い機械語に変換してキャッシュしておく「JIT (Just-In-Time) コンパイラ」方式を組み合わせて行われるのが一般的です。これにより、Javaはプラットフォーム非依存性を保ちつつ、高い実行性能を実現しています。
java
コマンドを使ったプログラムの実行
javac
コマンドでコンパイルが成功し、HelloWorld.class
ファイルが生成されていることを確認したら、以下のコマンドを実行してプログラムを実行します。コンパイル時と同様に、HelloWorld.class
ファイルがあるディレクトリでコマンドを実行してください。
bash
java HelloWorld
java
: Java実行環境 (JRE) を起動するコマンドです。JDKをインストールし、PATH
環境変数を正しく設定していれば、このコマンドが認識されます。HelloWorld
: 実行したいクラスの名前です。.class
拡張子は付けません。 JVMは指定された名前のクラスを探し、その中のmain
メソッドを実行しようとします。
なぜ .class
拡張子を付けないのか?
java
コマンドに指定するのはクラス名であり、ファイル名ではありません。JVMは指定されたクラス名(例: HelloWorld
)に対応する .class
ファイル(例: HelloWorld.class
)をクラスパスという設定で指定された場所から探し出し、読み込みます。.class
という拡張子はファイルシステム上のファイル形式を示すものであり、JVMがクラスを特定する際には不要な情報だからです。
実行成功時の確認:コンソール出力の確認
java HelloWorld
コマンドを実行すると、プログラムが実行されます。
- 実行が成功した場合:
- コマンドプロンプト/ターミナルに、プログラムが
System.out.println
で出力するように指示した文字列が表示されます。
Hello World
- メッセージが表示された後、プログラムが終了し、コマンドプロンプト/ターミナルの入力待ちの状態に戻ります。
- コマンドプロンプト/ターミナルに、プログラムが
おめでとうございます! あなたはJavaで最初のプログラムを無事作成・コンパイル・実行し、「Hello World」を画面に表示させることができました!これはJavaプログラミングの大きな第一歩です。
- 実行エラーが発生した場合:
- エラーメッセージがコマンドプロンプト/ターミナルに表示されます。コンパイルエラーとは異なり、これはプログラムの実行中に発生したエラーです。最も一般的なエラーは、JVMが実行すべきクラスやメソッドを見つけられないというエラーです。
実行エラーの読み方と対処法:一般的なエラーとその原因
実行時エラーは、プログラムの実行中にJVMやプログラム自身のロジックに問題が発生した場合に起こります。
例1:クラスが見つからないエラー
bash
java Helloworld # クラス名の大文字小文字を間違えている!
.class
ファイルの名前は HelloWorld.class
です。
エラーメッセージ例:
Error: Could not find or load main class Helloworld
Caused by: java.lang.ClassNotFoundException: Helloworld
- エラーメッセージの読み方:
Error: Could not find or load main class Helloworld
: 「Helloworld
というメインクラスを見つけるか読み込むことができませんでした」という意味です。Caused by: java.lang.ClassNotFoundException: Helloworld
: このエラーの原因はClassNotFoundException
です。「Helloworld
という名前のクラスが見つかりません」という意味です。
- 対処法:
java
コマンドの引数に指定したクラス名が、コンパイルして生成された.class
ファイルの元となったクラス名(つまりソースコードのpublic class ...
の部分)と大文字小文字を含めて全く同じであるか確認します。- 今回の例では、クラス名は
HelloWorld
なのにHelloworld
と指定してしまっています。コマンドをjava HelloWorld
に修正して再実行します。 - また、
java
コマンドを実行しているディレクトリに、対応する.class
ファイル (HelloWorld.class
) が存在するか確認します。存在しない場合は、適切なディレクトリに移動してから実行してください。 - クラスパスの設定が必要なケースもありますが、この段階ではカレントディレクトリ(現在コマンドを実行しているディレクトリ)に
.class
ファイルを置いておくのが最もシンプルです。
例2:main
メソッドが見つからないエラー
java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
// 仮に main メソッドの名前を間違えた場合
// public static void mein(String[] args) { ... }
}
コンパイルは成功し、HelloWorld.class
ファイルも生成されますが、main
メソッドの名前が間違っている場合。
実行コマンド: java HelloWorld
エラーメッセージ例:
Error: Main method not found in class HelloWorld, please define the main method as:
public static void main(String[] args)
- エラーメッセージの読み方:
Error: Main method not found in class HelloWorld
: 「HelloWorld
クラスにメインメソッドが見つかりません」という意味です。please define the main method as: public static void main(String[] args)
: 「メインメソッドをpublic static void main(String[] args)
として定義してください」という、期待される main メソッドのシグネチャ(定義形式)を示しています。
- 対処法:
- 実行しようとしているクラス (
HelloWorld
クラス) の中に、public static void main(String[] args)
という名前、戻り値の型、引数の型のメソッドが正確に定義されているか確認します。 static
やvoid
キーワードが抜けていたり、引数の型がString[] args
と異なっている場合もこのエラーになることがあります。- 綴りミス (
main
をmein
など) がないか確認します。
- 実行しようとしているクラス (
これらのエラーは、Javaプログラムの実行開始段階でよく発生する基本的な問題です。エラーメッセージをよく読んで、何が原因でエラーが発生しているのかを特定する練習をしましょう。
コンパイルと実行の仕組みのまとめ
ここまでで、「ソースコードの記述」「コンパイル」「実行」というJavaプログラム開発の基本的なサイクルを体験しました。この流れをもう一度整理しましょう。
- ソースコード (.java): 人間がJava言語の文法に従って記述したテキストファイル。例えば
HelloWorld.java
。 - コンパイル (javac): Javaコンパイラ (
javac
コマンド) がソースコードを読み込み、文法や型をチェックし、問題がなければバイトコードに変換します。 - バイトコード (.class): JVMが解釈・実行できる中間形式のファイル。プラットフォーム非依存。例えば
HelloWorld.class
。コンパイルエラーがある場合は生成されない。 - 実行 (java): Java実行環境 (
java
コマンド) がJVMを起動し、指定されたクラスのバイトコードを読み込みます。 - JVM: バイトコードをその実行環境(OS、ハードウェア)に合わせた機械語に変換しながらプログラムを実行します。
- 結果: プログラムに書かれた処理が実行され、標準出力にメッセージが表示されたり、ファイルが作成されたり、何らかの結果が得られます。
この一連の流れこそが、Javaの「Write Once, Run Anywhere」を実現するメカニズムであり、Java開発の基礎となります。
第6部:Hello World のその先へ – Java学習の継続
「Hello World」プログラムの作成・実行は、Javaプログラミングの旅の始まりに過ぎません。この一歩を踏み出したあなたは、これからより複雑で実用的なプログラムを作成するための準備ができました。次に何を学んでいけば良いのか、いくつかの方向性を示します。
Hello World で学んだことの振り返り
「Hello World」を通して、あなたは以下の重要な概念と手順を学びました。
- Javaプログラムはクラスの中に書かれること。
- プログラムのエントリポイントは
public static void main(String[] args)
メソッドであること。 - 画面に文字列を表示するには
System.out.println()
を使うこと。 - ソースコードは
.java
ファイルに保存し、ファイル名はpublic
クラス名と一致させること。 - 書いたソースコードは
javac
コマンドでコンパイルし、バイトコードである.class
ファイルを生成すること。 - 生成された
.class
ファイルはjava
コマンドで実行すること。 - コンパイルエラーと実行エラーがあること、そしてその基本的な読み方と対処法。
- Java開発にはJDKが必要であり、環境変数 (
JAVA_HOME
,PATH
) の設定が重要であること。
これらの知識は、どのようなJavaプログラムを書く上でも必要となる基礎中の基礎です。
次に学ぶべき基本概念:変数、データ型、制御構造、メソッド、配列
「Hello World」の次は、プログラムがより多様な処理を行えるようにするための基本的な要素を学びましょう。
- 変数とデータ型: 値を格納するための「変数」を宣言し、扱うデータの種類(数値、文字、真偽値など)を示す「データ型」について学びます。
- 例:
int age = 25;
(整数型変数age
に 25 を代入) String name = "Alice";
(文字列型変数name
に “Alice” を代入)
- 例:
- 演算子: 数値計算(足し算、引き算など)、比較(より大きい、等しいなど)、論理演算(かつ、またはなど)を行うための「演算子」の使い方を学びます。
- 例:
int sum = a + b;
boolean isAdult = age >= 20;
- 例:
- 制御構造: プログラムの実行の流れを制御するための構文です。
- 条件分岐 (if文, switch文): 特定の条件が満たされた場合にのみコードの一部を実行する。
- 繰り返し (for文, while文, do-while文): コードの一部を繰り返し実行する。
- メソッド: 特定の処理をひとまとまりにし、名前を付けて繰り返し呼び出せるようにするものです。
main
メソッドもその一つです。メソッドを定義することで、コードを整理し、再利用性を高めることができます。 - 配列: 同じ型の複数のデータをまとめて管理するための構造です。
これらの要素を組み合わせることで、入力された値に応じて異なる処理を行ったり、同じ処理を複数回繰り返したりするなど、より複雑なプログラムを作成できるようになります。
オブジェクト指向プログラミングの基礎
Javaはオブジェクト指向言語です。オブジェクト指向の考え方を理解することは、Javaで効率的かつ大規模なプログラムを書く上で非常に重要です。
- クラスとオブジェクト: 「Hello World」でクラスを定義しましたが、オブジェクト指向におけるクラスは単なるコードのまとまりではなく、オブジェクトの設計図と捉えます。クラスから「インスタンス」(オブジェクト)を生成し、そのオブジェクトを使って処理を行います。
- カプセル化: データとそのデータを操作するメソッドを一つのオブジェクト内にまとめ、データの隠蔽性を高める考え方。
- 継承: 既存のクラス(親クラス)の機能を受け継いで、新しいクラス(子クラス)を作成する仕組み。コードの再利用性を高めます。
- ポリモーフィズム (多態性): 同じ名前のメソッドでも、オブジェクトの種類によって異なる振る舞いをすることを可能にする仕組み。柔軟性の高いプログラムを作成できます。
これらのオブジェクト指向の概念は、最初は難しく感じるかもしれませんが、Javaでの開発を進める上で徐々に理解を深めていくことが重要です。
統合開発環境 (IDE) の導入
テキストエディタを使った手動でのコンパイル・実行に慣れてきたら、次は統合開発環境 (IDE) の導入を検討しましょう。IDEは、コードの記述、コンパイル、実行、デバッグ、テストなど、開発プロセス全体を強力にサポートしてくれます。
代表的なJava向けIDEには以下があります。
- Eclipse: 長い歴史を持ち、無償で利用できる高機能なIDEです。プラグインが豊富です。
- IntelliJ IDEA: JetBrains社が提供するIDEです。高機能で洗練されたUIを持ち、多くのプロフェッショナル開発者に愛用されています。Community Edition は無償で利用可能です。
- NetBeans: Apacheソフトウェア財団が開発する無償のIDEです。シンプルで使いやすいのが特徴です。
これらのIDEを使うと、コードの入力補完やエラーのリアルタイム表示、デバッガによる詳細な実行追跡など、手動では難しかったり手間がかかったりする作業が格段に楽になります。特にエラー発生時の原因特定や修正作業の効率が大幅に向上します。
今後の学習リソース
Java学習を継続するためには、良い学習リソースを活用することが重要です。
- Oracle公式Javaチュートリアル: Javaの基礎から応用まで、公式のドキュメントで体系的に学ぶことができます。https://docs.oracle.com/javase/tutorial/ (英語)
- Java入門に関する書籍: 初心者向けに丁寧に解説されたJava入門書は多数出版されています。自分のレベルや好みに合った一冊を見つけると良いでしょう。
- オンライン学習プラットフォーム: Udacity, Coursera, Udemy, Codecademy, Paizaラーニングなど、Javaに関するコースを提供するプラットフォームがあります。動画や対話形式で学べるものもあります。
- プログラミング学習サイト/ブログ: Qiita, Zenn, はてなブログなどで、Javaに関する様々な技術情報や解説記事を見つけることができます。
- APIドキュメント: Java標準ライブラリや様々なフレームワークの使い方を知る上で不可欠です。最初から全てを理解する必要はありませんが、特定のクラスやメソッドの使い方を調べるときに参照します。Java SE API Documentation で検索できます。
- コミュニティ/フォーラム: Stack OverflowのようなQ&Aサイトや、Java関連のSlack/Discordコミュニティ、勉強会などに参加すると、他の学習者や経験豊富なエンジニアと交流し、質問したり情報を得たりできます。
学習は継続が鍵です。焦らず、一歩ずつ着実に進んでいきましょう。小さなプログラムから作り始め、徐々に複雑な課題に挑戦していくことで、Javaのスキルは確実に向上します。
おわりに:プログラマーへの旅立ち
この記事では、Javaの最も基本的なプログラムである「Hello World」を作成し、コンパイルし、実行するまでの手順を、詳細な解説とトラブルシューティングを含めて網羅的に説明しました。開発環境の準備から始まり、ソースコードの一行ごとの意味、そしてコンパイルと実行の裏側にある仕組みまで、Javaプログラムがコンピュータ上でどのように動くのかという基本的な流れを深く理解していただけたかと思います。
「Hello World」は、プログラミングという広大な世界の入口に立つための一歩です。この小さな成功体験は、あなたがこれからより難しく、より興味深い課題に挑戦していくための大きなモチベーションとなるはずです。
Javaは非常に強力で汎用性の高い言語であり、習得すれば、Web開発、モバイル開発、エンタープライズシステム開発など、多岐にわたる分野で活躍できる可能性が広がります。学習の道は時に険しく、多くのエラーに直面することもあるでしょう。しかし、その度に原因を探求し、解決する過程こそが、あなたのプログラミングスキルを磨き上げる最も重要な経験となります。
この記事で得た知識を土台として、変数、データ型、制御構造、そしてJavaの根幹であるオブジェクト指向といった、さらに進んだトピックの学習に進んでください。そして、テキストエディタでの開発に慣れたら、ぜひIDEの導入を検討し、より効率的な開発手法を身につけましょう。
プログラミング学習は終わりのない旅です。常に新しい技術が登場し、学び続ける姿勢が求められます。しかし、その学びの過程は、論理的思考力や問題解決能力を高め、あなたの視野を大きく広げてくれるでしょう。
この「Hello World」から始まるあなたのJavaプログラミングの旅が、実り多く、楽しいものであることを心から願っています。
頑張ってください!あなたのプログラマーへの道は、今、まさに始まったのです。