JDKをインストールして実行環境を作る（後編）

＜目次＞
◆　Open JDK のインストールと設定
・インストール
・フォルダ構成
・PATHとJAVA_HOMEの設定


◆　お試しJava
・コマンドプロンプトで「Hello World！」

***

##◆　Open JDK のインストールと設定
####・インストール
インストールは以下から行います。
http://jdk.java.net/
https://bit.ly/3DPaiuS

zipファイルがダウンロードされるので、任意の場所に展開します。


####・フォルダ構成
フォルダ構成について概要を説明します。

#####＜bin＞
以下の記事の説明がわかりやすかったので、引用させていただきます。
参考 - 東京ウェブ制作　大和賢一郎代表　FAQ（よくある質問と回答）
http://www.1mouke.com/hpbldr_faq/faq00000059.html
>	bin は binary（バイナリ）の頭文字です。
ソフトウェアを構成するファイルの動作モジュールのことを「バイナリファイル」と呼びます。
車で言えば「エンジンの中身のパーツ」に相当します。例えば車を運転する時、私たちは「エンジンがついている」ことは知っていますが「エンジンの中にどんなパーツが入っているか？」は知りませんし、知る必要もありません。それを知らなくても運転はできますから、車は走ります。
ソフトウェアも同じで、bin は エンジンなのです。 bin のなかに何が入っているか？を、普通のユーザは知る必要はありませんし、勝手にいじってしまうと、エンジンを壊してしまう恐れもあるのです。
なお bin フォルダというのは、ホームページビルダーに限らず、多くのアプリケーションソフトに存在します。
いずれにせよ、さわったり、いじったりせずに、そのまま、そっとしておくのが賢明だと思われます。

#####＜conf＞
プロパティファイルが格納されているフォルダです。
プロパティファイルについては以下の記事の説明がわかりやすかったので引用させていただきます。
参考 - POTEPAN STYLE ” 【Java基礎】プロパティファイルから情報を読み込む ”(2019-10-30)
https://style.potepan.com/articles/16758.html
>プロパティファイルとは？
プロパティファイルとは、キーと値でプログラムで使用する設定値などを保存するためのファイルです。Javaアプリケーションの設定ファイルとして一般的に使われています。
プロパティファイルには、プログラムの既定値やデータベースの接続情報などの情報を保存します。このような情報は後から変更になったり、開発/本番などの環境によって内容が違ってくるため、プロパティファイルに記述しておくことで、後から変更が発生してもコンパイルなしでプログラムの動作を変えられます。
次のJavaプログラムを見てください。
ソースコードの中にデータベースのホスト名や認証情報が直接書かれています。
このようなプログラムだと、データベースの接続先が変わるたびに、再コンパイルが必要となり、ソースの管理や運用面で非常に手間になります。

```Java
Connection connection = DriverManager.getConnection(
    "jdbc:postgresql://dev-database01:5432/dbname", 
    "dev-user", 
    "dev-password");
Statement statement = connection.createStatement();
```
>データベースの情報をプロパティファイルから読み込むように、プログラムを書き換えたものが次の例です。
外部のファイルからデータベースの情報を読み込んでいるため、Javaのソースコード上から環境依存する情報が消えました。これにより、接続先が変わってもJavaの再コンパイルは不要になりました。

```Java
ResourceBundle rb = ResourceBundle.getBundle("sample");
 
Connection connection = DriverManager.getConnection(
    rb.getString("db"), 
    rb.getString("user"), 
    rb.getString("password"));
Statement statement = connection.createStatement();
```
>▪️ プロパティファイル（sample.properties）

```
#この行はコメントです。
db=jdbc:postgresql://dev-database01:5432/dbname
user=dev-user
password=dev-password
```

#####＜include＞
ヘッダファイル（インクルードファイル）が格納されているフォルダです。
- e-Words https://bit.ly/3h59aK8 より引用
>ヘッダファイルとは、C言語やC++言語などで用いられる、関数などの宣言のみを記したファイル。他のプログラムのソースコードなどに取り込んで一体化することで、宣言された関数などを呼び出して利用できるようにする。 
C言語などの処理系にはソースコードに外部のファイルの内容を取り込んで結合するインクルードの仕組みが用意されており、「#include <ファイルのパス>」というディレクティブを記述することでプリプロセッサがその位置にパスで指定されたファイルの内容を展開してくれる。


#####＜jmods＞
JMODファイルが格納されているフォルダです。
-tyablog.net　” Java JMODファイルとは、JARファイルとの違い。 ”(2020-04-05)
https://tyablog.net/2020/04/05/java-how-different-jmod-and-jar/ より引用
>JMODファイルは、Java9から追加された、
モジュールという単位で、
クラスファイルとネイティブコードなどをZipアーカイブしたファイルです。
JMODファイルは、Javaのコンパイル、リンク時に利用する為のファイルです。
JARのように、ランタイム時に参照して実行するようなことはできません。
実行時に使おうとすると、下記の例外が発生します。
”java.lang.module.ResolutionException”
あくまでビルド時に使うもの。
特に JIMAGE (カスタムRuntime) を生成するのを目的に利用します。

#####＜legal＞
各モジュールの著作権およびライセンス関連のファイルです。

＜lib＞
これといった説明がされている記事がありませんでした、ライブラリフォルダという感じでしょうか（尻切れトンボですみません、、進みます）


####・JAVA_HOMEとPATHの設定
環境変数の設定は、コントロールパネル＞システムとセキュリティ＞システム＞システムの詳細設定＞環境変数　から設定を行います。

#####＜JAVA_HOME＞
JAVA_HOMEは他のアプリケーションがJavaを利用する際に参照する環境変数で、インストールしたディレクトリまでのパスを設定します。

システム環境変数の「新規」ボタンから以下を入力し、OKボタンを押下します。
変数名：JAVA_HOME
変数値：インストールしたディレクトリまでのパス

確認のため、環境変数画面のOKボタンを押下し、コマンドプロンプトで
set JAVA_HOME
で実行し、JAVA_HOMR=指定したパス　が表示されれば完了です。

#####＜PATH＞
PATHには実行に必要なjava.exeやjava.c.exeなど、Java実行に必要なモジュールの存在するディレクトリ（binフォルダ）までのパスを設定します。

設定する際には、binフォルダまでのフルパスの代わりに%JAVA_HOME%\bin と指定します。
このようにすることで、今後異なるJDKを使用する場合やJDKのバージョンが変わったりする場合でもPATHの設定ではなくJAVA_HOMEの設定を変更するだけで済むようになります。
PATHは他のアプリケーションが使用しているパスも登録されており重要度が高いため、直接PATHを編集しなくてよくすべき、ということです。

登録は環境変数でPATHを選択し編集、編集の新規で%JAVA_HOME%\binを追加すれば完了です。


##◆　お試しJava
####・コマンドプロンプトで「Hello World！」
実際にJavaファイルを手作成し、コンパイルして実行してみましょう。
今回は「Hello World！」と出力するだけのJavaファイル（Otameshi.java など）を作成し、任意の場所（C:\Java\Otameshi など）に配置します。

コマンドプロンプトを開き、作成したJavaファイルを格納したディレクトリまで移動します。（cd C:\Java\Otameshi）
javac コマンド（javac.exe)でコンパイルします。
先ほど実行ファイルが格納されているbinフォルダにPATHを通したので、そのままのディレクトリからjavacコマンドを実行することができます。
javac Otameshi.java を実行するとコンパイルされ、同じフォルダ内にclassファイル（Otameshi.class）が作成されます。

javaコマンド（java.exe）で実行します。
こちらも先ほど同様binフォルダに格納されているファイルなので、カレントディレクトリのまま実行できます。
java Otameshi を実行すると「Hello World！」と出力されます。


***

参考文献
この記事は以下の情報を参考に執筆いたしました。
-Let'sプログラミング　” OpenJDKのダウンロード及びインストール ”
https://www.javadrive.jp/start/install/index1.html
-Let'sプログラミング　” PATHの設定及び環境変数JAVA_HOMEの設定 ”
https://www.javadrive.jp/start/install/index4.html
-TechAcademyマガジン　” Javaのプログラムをコマンドプロンプトでコンパイルする方法を現役エンジニアが解説【初心者向け】 ”(2018-01-01)
https://techacademy.jp/magazine/22824