何故かJavaは敬遠される!?
筆者はIT業界に努めて17年ほどです。
SESとして働きに出ることが多かったのですが、近年はWebエンジニアとして
PHP(Laravel)を使った開発が多くなってきています。
そんな開発現場ですが、プログラミング言語の話題に上がると
- 「Javaはわからない」
- 「Javaって難しいんでしょ?」
- 「環境構築がなぁ・・・」
なんて話をよく聞きます。
私はJavaの方が経験した期間が長かったので、特にそういった苦手意識は無いのですが
Laravelの現場でもそういった話を聞くので、
「フレームワークの特性や、コードの書き方は結構似ているところが多いのに、何でみんな苦手なんだろう?」
と思ってしまうのです。
今回はそのギモンについて、私が思っていることを書いていきます。
(注:Java嫌いな人を論破したいわけではありませんw)
原因その1:インフラ構造上、難しいと思われがち
PHPの環境、所謂LAMP環境ですがこれを構築するのはそこまで難しくありません。
対してJavaの環境を作るためにはApache(もしくはNginx)からTomcatに繋ぐ構築が必要になります。
加えてJVMを動かすため、JAVA_HOME等のPATHを通すことも必要です。
構築にひと手間いるから難しい、と感じている人が多いのでしょうか?
=>Apacheが2つに分かれたと思えばそんなに難しくない
PHPはApacheと関連するモジュールをインストールすればすぐ動きます。
Javaの場合はWebサーバをApache、アプリケーションサーバ(サーブレットコンテナ)をTomcat、とすることでそれぞれにかかる負荷を分散しています。
加えて、JVM上で動くのでTomcatの中でメモリのコントロールが可能です。
PHPの場合、全てをApacheに依存しているのでメモリのコントロールもApacheプロセスで行う必要があります。
(iniファイルや.htaccess等に設定を記述して制御します)
小さいシステムではどちらでも良いですが、アクセス数が多い、あるいは1度のリクエストが重い時などは
Javaの環境があるとコードで制御しやすいです。
原因その2:フレームワークが多すぎ&フレームワーク毎に書き方が変わるので難しいと感じる
Struts、Spring、Play、そしてそれらの亜種(SAStrus、Grails)など、フレームワークの数が多く
学習コストが高いと感じている人が多いのでは?と勝手に思っています。
=> 確かに難しいが、結局MVC。
確かに。確かにそれぞれのフレームワークで環境は異なります。
同じJavaでもControllerの書き方が違ってたり、サーブレットマッピングのやり方も異なります。
でもMVCであることに変わりはありません。本質的なところを理解できれば場違いなほど難しい!ということは無いはず。
但し、後述の内容と組み合わせて、より複雑さは増します(笑
原因その3:ライブラリ管理が2種類。maven?gradle?なんだそれは。
今のJava開発環境で主流のライブラリ管理はmavenかgradleの2種類かなぁと思ってます。
Javaを採用している事業会社だと、技術もレガシーになりがちなので比較的mavenが多い印象。
このライブラリ管理とフレームワークの組み合わせで「環境が整わない」「実行時エラーが多発」
などがあり、結果Javaが難しく感じてしまうのでは?という印象があります。
=> ライブラリ管理なんてどの環境でもやってる。
Laravelならcomposer、pythonならpip、goならgo get(今だとgo install?)、rubyならgemと
いった感じで、どの言語環境でもライブラリ管理は付き物です。
それがJavaの場合2種類あるよ、というだけ。
原因その4:そもそもIDEのセットアップむずくね?eclipse動かないし、動いても重い
eclipse単体はJavaのコードを書けるようなIDE(統合環境)ですが
プラグインも多く、何をインストールすれば良いのやらわかりません。
うまくいってもインストールしたプラグインが多すぎて動作が重いです。
=> 確かにVSCodeなどで開発している人にとってはセットアップ面倒ですね。
ただ、間違えてほしくないのはVSCodeは「エディター」止まりであって「IDE(統合環境)」では無いということです。
とは言うもののVSCodeもかなり拡張機能が優秀で、ほぼIDEに近いシロモノなのですが。
eclipseのセットアップが面倒であればpreiadesからall-in-oneパッケージ拾ってインストールすればいいし
動作の重さはJVMの設定をeclipse.ini弄ってコントロールすればいいだけです。
他にも細々としたモンがいくつかある!
まぁ、上記に書いたこと以外にも
- アプリケーションサーバはTomcat以外にもある(JBoss(悪名高い)とか、Glassfishとか、変わったところではWebSphereとか)
- DBの接続が面倒(JDBCドライバ探してコネクション設定してetcetc...)
- コンパイル言語である。静的型付け。
とかとか。
ここまで書いておいて何だけど、dockerがあるじゃないか!
環境構築の面倒さを色々書いてみたけど、最近ではJVMが入っているdockerコンテナも多数あるので
それ使って環境構築したらいいのでは?と思う次第なのです。
eclipseとかが難しくて嫌ならJetBrains産のIDE使いましょうw
まとめ
いかがでしょうか?Javaは敬遠されがちだけど、冷静になってみると
(多少、学習コストはかかると思いますが)他の開発言語とそんなに極端に変わるものではないと思います。
もちろん、最初は少数でいいからサクっとサービス作りたい!というのであれば
簡単に環境構築でき、動的型付けなPHPなどのスクリプト言語を使えば良いと思います。
但し、本格的にどっしりとした(つまりセキュリティ面やパフォーマンス面を意識したプログラミングをする場合)開発を行うのであれば
Javaの環境を候補に挙げるのも良いと思いますよ。
ここまで読んで頂き、ありがとうございました。