Javaを知らない俺がモダンなJava開発をめざす
古い情報も多いので意外と情報収集が難しい
選択肢ありすぎワロタ
さすがにHello Worldくらい一瞬でいけると思っていたが、最初の環境選定の時点で選択肢が多すぎて、どの資料を信じればいいのか路頭に迷ってしまった。
2020年に投稿されたYouTube動画を見ても「今でもMakeで根性のビルドを行っているプロジェクトも少なくはない」的なコメントに出会ったりなど、歴史が長いだけあって一言にJavaといっても、その言葉が指す内容は広範だ。
とはいえ、SIerに所属している身として、さすがに「Javaナニモワカラナイ」というのは通用しなさそうなので、重い腰を上げてモダンなJava開発について調べることにした。
JDK、JRE、JVMってなに
Javaを始めようとするとJDKとか意味わからん単語が出てくる。
それぞれ、以下の略。
- Java Development Kit:Javaの開発環境、JREを含む
- Java Runtime Environment:Javaの実行環境、JVMを含む
- Java Virtual Machine:Java仮想マシン
Javaでは、元になるソースコードをJavaバイナリにコンパイルする。このバイナリはプラットフォームに依存せず、JVM上で動作する。JVMは、これらJavaバイナリを各プラットフォームが解釈可能なネイティブコードに変換する役目を担う。
なにはともあれ、Javaで開発したいなら、とりあえずJDKをインストールすればOK。
JDKのバージョン
有象無象の種類があるが、Oracle由来のOpenJDKがメジャーらしい。
サポート方式の違いから、大きくはJava 8とそれ以降に分かれる。
最新はJava 17だが、多くのソフトウェアがJava 8のまま。 Java 8以降はLTSのバージョンが移り変わるため、一度作って長 く使いたいタイプのソフトウェアはJava 8を使わざるを得ない状況らしい(間違ってるかも)。
一度作ったらそれ以上のお金はもうかけたくない、継続的かつインクリメンタルな開発など考えられないというケースではLTSのバージョンが切り替わっては困るというワケ。
事業会社の社内システムなんかは大半が外注だろうし、無理もないという感じだ。だからこそDXだ、内製化だ、と叫ばれているいまがある。
中にはJava 8以前のものも少なくないらしいが、モダンなJava開発を志す趣旨から大きく逸れるので、そっちはほとんど調べていない。
Java 8とは言うけれど
これがまた分かりにくいのだが、Java 8はJDKでいうと1.8を指すようだ。
知らねーよ、という感じだがJava 8で書きたいならOpenJDK 1.8をインストールしよう。
今回はモダンを目指すのでインストールするのは最新のOpenJDK 17といきたいところだが、私は競技プログラミングをするのでせっかく学ぶならAtCoderで使えるバージョンが使いたい。
調べると、AtCoderで使えるのはJava 8もしくはJava 11のみのようだ。残念だが、ここはJava 11を使うことにする。
JDKのインストール
仕事ではWindows、プライベートではMacを使うのだが、往々にしてWindowsのほうが環境構築は複雑になるので、Windowsについて記載していく。
さすがにWindowsホスト上で開発をする気にはならないので、JavaそのものはWSL2にインストールすることにする。
JDKはaptで入れることもできるが、私はHomebrewを使用した。
brew install openjdk@11
Homebrewでインストールすると、パスを通すように言われるので通しておく。
私の環境では/home/linuxbrew/.linuxbrew/opt/openjdk@11/bin
に通した。
IDEいろいろありすぎ
次にIDEの選定だ。
- Eclipse
- IntelliJ IDEA
- NetBeans
- VSCode
などがあるようで、古いプロジェクトではEclipseが多数派だが、モダンなデファクトはIntelliJらしい。
VimmerとしてはVSCodeNeoVimすらない環境で文字入力ができるのか不安な気持ちがあったが、郷に入っては郷に従えでIntelliJをチョイスした。
ちょっと使ってみたが、アノテーションを書くと勝手にimport文を書いてくれたりしてスゲー便利な感じ。
IntelliJの設定
プロジェクトを開いたら、File
> Project Structure
> Project Settings
> Project
> Project SDK
でWSL上のJDKを指定しておく。今回だと11 (WSL)
を選ぶことになる。
※私の場合は選択肢に11 (WSL)
がなかったので、Add JDK
から\\wsl$\Ubuntu-20.04\home\linuxbrew\.linuxbrew\Cellar\openjdk@11\11.0.12\libexec
を追加した。
さらに、File
> Settings
> Build, Execution, Deployment
> Build Tools
> Gradle
からGradle JVM
に11 (WSL)
を設定する。
ビルドツールの選定
さらっとGradleを設定したが、ビルドツールのデファクトはMavenらしい。
ただし、Gradleのほうが新しく、機能面でも優れており、だんだんと人気が増しているとのことなので今回はGradleをチョイスした。
ちなみに、大昔はMakeで、一昔前はAntというのがデファクトだったらしい。Antというのは聞いたこともなかったが、これから触れる意味はあまりなさそうなので今回はスルーした。
アノテーションまみれで長ったらしいコード
Javaが好きな人に言ったら怒られるかもしれないが、Javaのコードを見ると、とにかく長ったらしくてゴチャゴチャしているし、そこら中によくわからないアノテーションが付きまくっていて、プロジェクトのディレクトリも無駄に深かったりと、面倒そうな印象がある。
まあ、そんなこと言ったら、PythonもRustもHaskellも初見ではクソ意味わからない見た目をしているので、単純にJavaを知らなさすぎるというだけなんだろう。
さて、このまま書いてもいいが、いかんせん長くなってきたので、実際のコーディングについては記事を分けようと思う。
とりあえず、環境構築はこんなところで。