53
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

何故Javaは敬遠されるのか?

Posted at

何故か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の環境を候補に挙げるのも良いと思いますよ。

ここまで読んで頂き、ありがとうございました。

53
23
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?