対話型AIにアドバイスを受けながら進めるJavaプログラミングの入門連載。初回は、Javaというプログラミング言語の概要と、学習環境の構築をAIを活用しながら学習します。その誕生からOpenJDKに至るまでの歴史とJavaの特徴を理解し、次回以降で使うための学習環境をJDKとVS Codeで準備しましょう。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
対話型AIの登場で、プログラミングの世界は大きく変わりました。質問するだけでコードを提供したり、アドバイスしてくれたりするAIは、コーディングや学習の効率を大きく向上させるツールとしての地位を確立しつつあります。
本連載は、AIにアドバイスを受けながら進めるJavaプログラミングの入門です。AIがコーディングしてくれる今、なぜプログラミングを学ぶ必要があるのでしょうか?
後述しますが、2024年3月の原稿執筆現在、まだAIが出す回答が全て信用できるかどうかは疑わしいところがありますし、そもそもAIから「正しい」答えを引き出すには、どういったコンテキスト(文脈)を含めるかや、質問の仕方が大きく影響します。現場で通じるソフトウェア開発には、昔からあるコード生成ツールやAIを使うか、人手によるかにかかわらず、作られたコードが「その時、その場で正しいかどうか」を瞬時にレビューできる「プログラミング脳」が必要と考えます。「正しいコード」をAIに生成させる質問をするにも、プログラミング脳が必要です。AIの示す答えを検証しながら、プログラミング脳を強化していきましょう。
まずは、Javaの概要を知るところから始めていきましょう。本連載では、まずは無料で手軽に使えるAIとして、「Microsoft Copilot」を使い(注)、準備が整ったところ(次回以降)でプログラミングに特化されたAIである「GitHub Copilot」を使っていきます。なお、Microsoft Copilot(以降、Copilot)に限らずAIでは、同じ質問を投げても、タイミングによって異なる返答となることがあるので、この点に留意しておいてください。
注:Windowsユーザーなら「Microsoft Edge」ブラウザで簡単に使えるAIです。無料版では、1日当たりのチャットが300回、1セッション(連続したチャット)当たりのチャットが30回までに制限されています。有料版では、このような制限はありませんが、トークン数やファイルサイズなどには一定の制限があります。
Microsoft Edgeを起動します。空のタブが表示されるので、ウィンドウ右上の「Copilot」アイコンをクリックします(図1)。[Ctrl]+[Shift]+[,]でも呼び出せます。
Copilotのための右ペインが現れるので、使いやすいように目いっぱい広げます。ペインの境界線をドラッグすればOKです。ブラウザビューが少し残りますが、これ以上小さくできないというところまで広げましょう(図2)。
ペイン下部にある入力窓に、質問を入力していきます。まずは「そもそもJavaとは?」と入力してみました(図3)。
4項目に分けて、Javaの特徴が明快に示されていますね。ここにある通り、Javaは1995年にサン・マイクロシステムズ(Sun Microsystems)によってリリースされた歴史あるプログラミング言語です。Javaの公式サイトによる説明でもこれを裏付けています。それぞれの項目について、以下で掘り下げてみましょう。
「Copilot」ペインには「Copilot は間違いをする可能性があります。」と表示されているように、AIは完璧ではありません。AIの出力結果をそのまま“うのみ”にするのではなく、それが正しいのかどうか確認しながら学ぶようにしましょう。具体的には、公式サイトの情報に当たったり、操作やコードであれば自分で手を動かして確かめてみたりするなどです。
Javaは、「Write Once, Run Anywhere!」(一度書けばどこでも動く)をうたっています。図3では触れられていないJavaの特徴の一つに、コンパイラ型言語であることがあります。コンパイラ型言語とは、ソースコードを実行前にコンパイルという作業を通し、実行可能な形式に変換しておくタイプのプログラミング言語のことです。これに対してPythonやJavaScriptといったインタプリタ型言語では実行時にソースコードを逐一解釈します。このような性質から速度面で不利であり、コンパイラ型言語であるJavaは速度の点で有利です。
「Write Once, Run Anywhere!」は、Javaのコンパイラがプラットフォーム(OS)上で直接動くネイティブコードを生成するのではなく、Javaバイトコードというプラットフォームに依存しないコードを生成することで実現されます。コンパイラによって生成されたJavaバイトコードは、プラットフォーム上で直接動かさない代わりに、Java仮想マシン(JVM)という仮想的なプラットフォーム上で動かします。これにより、Windows、macOS、Linuxなど、異なるプラットフォーム上で同一のプログラムが動作します(図4)。
Javaは、オブジェクト指向プログラミング言語です。オブジェクト指向とは、プログラムの部品を「オブジェクト」(モノ)と見なし、データや振る舞いをオブジェクトに持たせることで、オブジェクト相互のやり取りで成り立つプログラミングモデルです(図5)。現実世界に存在するモノには、名前とか数量などのデータや、歩く、計算するといった振る舞いがあります。それらをオブジェクトとしてまとめることで、現実社会の問題をプログラミングの世界に投影しやすくするのがオブジェクト指向です。
オブジェクト指向は、現在主に使われている言語(C#、Python、Ruby、JavaScriptなど)では当たり前と言える言語仕様ですが、Javaの登場時はC++をはじめとしてまだまだ少数派で、本格的なオブジェクト指向プログラミングをサポートするJavaは大いに注目されました。
Javaは、豊富なライブラリを備えます。ライブラリとは、特定の用途のために作られたプログラムの集合体です。プログラミング言語の基本機能だけでは実用的なプログラムを作ることはできないので、ライブラリの充実がおのずとそのプログラミング言語の用途を左右します。
Javaでは、フレームワークを使ったWebアプリ、Windowsデスクトップアプリ、Androidなどのモバイルアプリ、サーバサイド開発などのために多くのライブラリが用意されており、非常に幅広い分野で活用できます。このことも、Javaの人気の一翼を担っています。
Javaのプログラムは、比較的安全性が高いと言えます。この場合の「安全性」とは、主にメモリの利用に関してのことです。厳密な型チェックによって同じメモリ領域を異なる方法で使用することから生じる問題を回避し、ガベージコレクションの仕組みでメモリの解放漏れといった問題も回避できます。もちろん、プログラムの安全性を高める仕組みはこれだけではありませんが、これらの仕組みによって基本的な安全性が保障されるのです。
ここでは掘り下げませんが、Javaが中規模から大規模のプロジェクトに向く理由をCopilotに尋ねてみると、さらに突っ込んだ回答が得られるかもしれないので、試してみてはいかがでしょうか。
Copilotは触れませんでしたが、「Java」はプログラミング言語と実行環境の両方を指すことが多いです。前者はコンパイラなどを含んでおりJDK(Java Development Kit)、後者はランタイムのみが含まれておりJRE(Java Runtime Environment)と呼ばれます。
Sun Microsystemsは2010年にOracleに買収されて、Javaは現在Oracleの登録商標となっています。OracleはJavaの有償化を進めようとしましたが、現在では無料で使えるオープンソースのコミュニティー版と、サポートのある有償版に分けて提供されています。コミュニティー版と有償版のJavaには大きな機能差はないので、サポートの必要性に応じてどちらかを選択すればよいようになっています。コミュニティー版のJDKは「OpenJDK」、有償版のJDKは「Oracle JDK」と呼ばれます。
本連載の目的とJavaの概要を紹介したところで、ここからはJavaの学習環境を構築します。ただ、環境構築といっても漠然としているので、それについてCopilotのアドバイスを受けてみましょう。「Javaプログラムの作成に必要なものを教えてください。」とCopilotに投げてみました(図6)。
5項目に分けて提案されました。このうち、3.(Java仮想マシン(JVM))と4.(基本的なプログラミング知識)は考慮しなくてよさそうです(4.は、そもそもこの連載の目的ですしね!)。5.(コマンドラインまたはターミナル)も、OSに標準で備わるものなので、特に考慮せずによさそうです。よって、1.と2.を検討しましょう。
まずは、Java開発キット(JDK)です。「JDKにはOpenJDKとOracle JDKの2種類がある」と書きましたし、Copilotの回答にも「OracleとOpenJDKなどのウェブサイト」とあります。さて、そのどちらを使うのがよいでしょうか? ということで、Copilotに「学習用途です。Oracle JDKとOpenJDKのどちらを使うべきでしょうか?」と投げてみました(図7)。
学習用なら、OpenJDKがオススメということです。まとめると「オープンソースソフトウェアであり、無料で利用できてコミュニティーによるサポートも得られる」ということなので、安心してOpenJDKを使うことにしましょう。OpenJDKは、OpenJDKのトップページにおいて「Download ……」と表示された部分から最新版のリンクをたどって入手してください(図8)。本稿では、2025年3月の原稿執筆時点における最新版である「OpenJDK JDK 23.0.2 GA Release」を例にして解説しています。
このページには、プラットフォームごとのバイナリが配置されているので、プラットフォームに適したものをダウンロードしてインストールします。なお、ダウンロードのタイミングでファイル名に含まれるバージョン番号は変化するので、適宜読み替えてください。
図8でダウンロードしたファイル(openjdk-23.0.2_windows-x64_bin.zip)をエクスプローラーで展開します。展開先はどこでも構いませんが、ここではC:\としました。異なる場所に展開した読者は、以降の解説でパスを置き換えてください。C:\に展開すると、jdk-23.0.2というフォルダが作成されていることを確認してください。
Javaのコンパイラなどを実行できるように、ユーザー環境変数Pathに「C:\jdk-23.0.2\bin」を追加してください。追加後、ターミナルを起動し、「java --version」コマンドを実行して、図9のように表示されればJavaが利用できるようになっています。
Windowsにおける環境変数の設定方法については、本記事では解説を割愛します。具体的な手順は、@ITの記事「【Windows 11対応】Path環境変数を設定/編集して、独自のコマンドを実行可能にする」などを参考にしてください。
次は、Javaのソースコードの作成のためのテキストエディタまたはIDE(統合開発環境)です。Copilotの回答には、大きく2つの選択肢(簡単なプログラム、本格的な開発)が提示されていました。本連載ではシンプルなコードが中心になることから、前者の「メモ帳やVS Code」を使うことにしましょう。本連載では、開発現場でも使うことが多い「VS Code」(Visual Studio Code)を使うことにします。VS Codeをまだ使っていない方は、「Download Visual Studio Code - Mac, Linux, Windows」からダウンロードしてインストールしておきます(図10)。
図10の画面で、窓アイコンの下の「↓Windows Windows 10, 11」をクリックしてインストーラをダウンロードし、実行します。インストーラが起動したら、全て既定値のままで進めればインストールは完了します。この方法でインストールしたVS Codeは、インストールしたユーザーのみが使えます。
Copilotはそこまで答えてくれませんでしたが、VS Codeをインストールしたら、VS Codeの環境を整えておく方がよいでしょう。VS Codeは拡張機能が豊富なので、Javaプログラムの作成に適した拡張機能をCopilotに聞いてみましょう。「Javaプログラムを作成する場合の、VS Codeのおすすめの拡張機能を教えてください。」と投げてみました(図11)。
6つ提示されました。順番に見てみると、1.(Java Extension Pack)がよさそうです。Microsoft提供で、5つの拡張機能のAll-in-oneパッケージなのが便利そうです。4.(IntelliCode)と5.(Bracket Pair Colorizer)は1.で賄えそうですし、他は高度な用途のためのものに見えます。そこで、1.をインストールすることにします。なお、Java以前の話だからなのかCopilotは提示してくれませんでしたが、VS Codeを日本語化する拡張機能は用途に関係なく必要なので、これもインストールします。
ここからは、VS Codeを起動して作業します。拡張機能をインストールするには、左端のアクティビティバーにある拡張機能アイコンをクリックします。プライマリサイドバーが拡張機能の一覧に変わるので、検索窓にキーワードを入力するなどして目的の拡張機能を探してインストールします。
検索窓に「japanese」と入力すると、関連する拡張機能の一覧が表示されるので、その中から「Japanese Language Pack for Visual Studio Code」をインストールしておきます。
同様に検索窓に「java」と入力して、一覧の中から「Extension Pack for Java」をクリックします(図12)。名称は、Copilotが提案したものからは少し異なりますが同じものです。
Copilotでは5つの拡張機能のパッケージとなっていましたが、現状では7つの拡張機能で構成されるようです。最低限必要なもののみ個別にインストールしてもよいですが、ここでは全てインストールしてしまうことにします。[インストール]ボタンをクリックしてください(図13)。
拡張機能のインストールが終了すると、「Get Started with Java Development」と表示された「ようこそ」タブがエディターグループに現れます(図14)。Javaランタイムの準備などのチェック項目が表示されていますが、ここでは無視して閉じてしまって構いません。
以降では、さっそくJavaのプロジェクトを作って、簡単なサンプルを動かしてみましょう。ここでも、Copilotにプロジェクト作成についてのアドバイスを受けてみます。「Java Extension Packを使うときの、プロジェクトの作成手順を教えてください。」と投げてみました。
かなり長いのですが、開発環境の準備からプログラムの実行まで、5つの手順が提示されました。簡単な質問でも、ここまで案内してくれます(実行まで示してくれているようですが)。1.(環境構築)については完了しているので、ここでは2.以降を検討します。実際に試してみたところ、2.(ワークスペースの準備)と4.(プログラムの記述)は不要で、3.(Javaプロジェクトの初期化)で済んでしまうようです。このように、Copilot(AI)の提示する回答は、誤りとまではいかなくても最新ではないというケースもあるので、自身の責任で検証しながら進めるようにしましょう。以降では、3.の手順を実行してみます。
プロジェクトは、コマンドパレットから作成します。[表示]−[コマンドパレット...]を選択するとコマンドの入力窓が上部に表示されるので、そこに「create java」と入力します。候補が幾つかリストアップされるので、「Java: Create Java Project...」を選択します(図16)。プロジェクトの種類には「Maven」「Gradle」など幾つかありますが、本連載では多機能なプロジェクト管理は不要なので、シンプルな構成としています。
ここで、「Maven、Gradleって何?」と思ったら、これもCopilotに聞いてみるとよいでしょう。制約こそありますが、Copilotは何を聞いても疎んじることはないので、積極的に利用しましょう。
プロジェクトのタイプを聞かれるので、「No build tools」を選択します(図17)。本連載ではシンプルなサンプルが中心なので、開発現場で使うようなビルドツールは不要だからです。その分、プロジェクトのフォルダ構成もシンプルになります。
プロジェクトの作成先を聞かれるので、適当なフォルダを選択してください。さらに、プロジェクト名を聞かれるので、今回のサンプルのプロジェクト名として「intro」と入力します(図18)。
プロジェクトが作成されて、ファイルエクスプローラーに幾つかのフォルダと初期ファイルが生成されます(図19)。
プロジェクトに限らず、VS Codeでフォルダを開こうとした場合には、「このフォルダー内のファイルの作成者を信頼しますか?」などと聞かれることがあります。通常、問題ないはずなので、「はい、作成者を信頼します」を選んで先に進んでください。
ここでは、App.javaファイルに注目しましょう。App.javaファイルは、プログラムのエントリーポイント(最初に実行されるコード)となるファイルです。クリックして開いてみると、図20のようになっています。
これが、Javaのソースコードです。意味について探る前に、まずは実行してみましょう。実行は簡単で、図15の5.で提示してくれたように、「public static void main…」の上にある[Run]をクリックするだけです。VS Code内でターミナルが開き、コマンドが自動で実行されます(図21)。最後に、「Hello, World!」と表示されていれば成功です。
Windows環境では、プログラムの実行で「パブリックネットワークとプライベートネットワークにこのアプリへのアクセスを許可しますか?」というダイアログが表示されることがあります。対象が「OpenJDK Platform binary」であることを確認して、[許可]をクリックしてください。
以降の回でも、このようにプロジェクトを作成してプログラムを実行していくので、手順をよく押さえておきましょう。
動作確認ができたところで、Javaのソースコードを見てみます(リスト1)。
public class App { (1) public static void main(String[] args) throws Exception { (2) System.out.println("Hello, World!"); (3) } }
わずか数行のコードですが、ここにJavaの大事な基本が詰まっています。ここも、Copilotに説明させてみましょう。「以下のJavaプログラムについて説明してくれませんか。(続けてリスト1のコード)」と投げてみました。かなり長い、詳細な回答が返ってきます(図22)。
この回答だけでも十分ですが、リスト1のコードに合わせてみると、図23のようになるでしょうか。
要点は以下の(1)〜(3)の通りです。まだ扱っていない用語がたくさん登場しています。気になった用語は、「インスタンスとは?」「アクセス修飾子とは?」というようにCopilotに質問していけば、芋づる式に知識を得ることができて(先述のように真偽が不明な部分もあるので自分で確認する必要がありますが)、学びも深まるのではないでしょうか。
(1)クラス定義
Javaでは、「クラス」を作ることがコーディングの第一歩です。ここでは、「App」というクラスが作成されています。Javaの決まりとして、クラスの名前とソースコード名から拡張子を除いた部分は一致する必要があります。
(2)メソッド定義
クラスの中には、「メソッド」を定義してクラスの動作を指定していきます。ここでは、「main」というメソッドが定義されていることを理解しておきましょう。複雑に見える書式は、本連載でおいおい明らかになります。
(3)実行する文
メソッドの中には、「文」を記述して実行させたい内容を指定していきます。ここでは、「System.out.println("Hello, World!");」と記述されていますが、これは「標準出力に文字列『Hello, World!』を書き出せ」という意味の文です。この文が実行されたので、ターミナルに「Hello, World!」と表示されたわけです。
今回は、Javaというプログラミング言語の概要と、学習環境の構築をAIに聞きながら学習しました。
次回は、プログラミングの基本といえる変数、データ型、演算子を学習します。
WINGSプロジェクト 山内直
WINGSプロジェクト所属のテクニカルライター。出版社秀和システムを経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。
・たまデジ。 | たまプラーザで生活、仕事する。(https://naosan.jp/)
WINGSプロジェクト
有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティー(代表山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手掛ける。2021年10月時点での登録メンバーは55人で、現在も執筆メンバーを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。
・サーバーサイド技術の学び舎 - WINGS(https://wings.msn.to/)
・RSS(https://wings.msn.to/contents/rss.php)
・X: @WingsPro_info(https://x.com/WingsPro_info)
・Facebook(https://www.facebook.com/WINGSProject)
Copyright © ITmedia, Inc. All Rights Reserved.