Help us understand the problem. What is going on with this article?

Javaと.NETの特性を比較してみた

前説

この記事を書く意図はJavaと.NETを比較することで技術の優劣をつけることではありません。
エンジニア界隈では言語対して、往々にして宗教戦争があります。Javaのエンジニアは.NETがWindowsしか乗らないとディスったり、.NETのエンジニアはJavaは書き方がうるさいと愚痴ったりします。そういう争いは生産性がなく、無意義と考えています。

この記事を書くことで双方の言語体系、Webフレームワーク、デプロイ方法を比較することで片方しか経験していないエンジニアがもう片方の技術特性を理解に役立てれば幸いです。

開発ツール

工、その事をよくせんと欲せば、必ずその器を利とす。(職人が立派な仕事をしたいと思ったらまず道具を研ぐ)。

まずは開発に欠かせないツールについて説明します。

フレームワーク ツール 解説
.NET Visual Studio, Visual Studio Code, Rider Microsoftの公式IDEのVisual Studioは.NETの全プラットフォームに対応できる。
Java Intellij, Eclipse, Visual Studio Code コードの実行とデバッグの役割、JDKに依存する
Java Mavan, Gradle テンプレート管理、パッケージングの役割。JDKに依存する
Java JDK コンパイルと実行(Runtime)の役割を持つ

.NETはVisual Studio(以後VSと略す)をインストールすれば開発に着手できる。JavaはIDEだけインストールしては駄目で、JDKやMavenをインストールして設定しなければいけない。JDKとMavenを自動的にインストールしてくれるIDE(Intellij)あるが、なるべく自分でインストールして設定したほうが良い。そうじゃないと意味のわからない地雷を踏むことになる。

環境構築の手軽さだけで言うなら.NETに軍配が上がる。頭を使わず次へ次へとポチポチすればいい。Javaはまずはツールの特性と責務を理解して設定する必要がある。

初心者にとってJavaの最初の関門を少し狭く感じるかもしれません。しかし、Javaは環境構築に苦労するぶん、プロジェクトの仔細がわかるようになる。

まぁ、どちらもVisual Studio Code(以後Vscodeと略す)を使って開発できるので、技術を体系的に理解する目的なら環境構築はVscodeを推奨する。

次に各種ツールをもう少し詳細的に説明します。

責務 .NET Java 解説
プロジェクト管理 VS,Vscode,Rider Intellij, Eclipse, Vscode Vscode使ってるぶん大差ない、課金してIdeaやRiderを買ったほうが少し効率上がる。Eclipseはゴミ
テンプレート管理 IDE+MSBuild or IDE+SDK IDE+Maven or IDE+Gradle .NETプロジェクトはsln+csprojファイルで構成される。Javaはpom.xmlファイルで構成される。
コンパイル・デバッグ IDE+MSBuild+SDK or IDE+SDK IDE+Maven+SDK or IDE+Gradle+SDK .NETコンパイラは独立してる。 JavaのコンパイラはJDKに統合されており、Mavenプロジェクトはpom.xmlで構成されているが、コンパイラはpom.xmlを認識しないため、コンパイルするにはMavenが必要
パッケージ管理 Nuget Mavan, Gradle Nugetは簡単。JavaのMavanやGradleは柔軟で強力。
パッケージング・デプロイ IDE+MSBuild+SDK or IDE+SDK IDE+Maven+SDK or IDE+Gradle+SDK .NETコンパイラは独立してる。 JavaのコンパイラはJDKに統合されており、Mavenプロジェクトはpom.xmlで構成されているが、コンパイラはpom.xmlを認識しないため、パッケージするにはMavenが必要。

.NETのSDKが提供されてくれる豊富なテンプレートは簡単で使いやすい。JavaのMavenは柔軟で強力だが、複数プロジェクト管理は.NETより不便に感じる。

この差はコンパイラとテンプレートから来てる。

Javaプロジェクトには公式な標準テンプレートがないため、IDEはプロジェクトのフォルダ整理くらいしかしてくれません。そのぶん自分で任意のディレクトリをSourceRootやResourceRootに決めたりでき、非常に柔軟性に優れています。しかし、柔軟がゆえにチーム開発においてプロジェクト管理の負担が増えるデメリットにもなる。まぁ、MavenやGradleのおかげでJavaのカオス時代は終焉しました。

言語の特性

分類 .NET Java
クラス構成 namespace : 命名空間と実際のディレクトリ構成と一致しなくても構わない Package : 命名空間とディレクトリは一致せなばならん
クラス csファイル : クラス名とファイル名は一致しなくてもOK javaファイル : クラス名とファイル名は一致しなくてもOK、だたし、1つのクラスで定義できるpublicクラスは1つのみ
コンパイル出力 .dll, .exeファイル .jar, .warファイル

Webフレームワーク

.NETのWebフレームワークはMicrosoft公式のものがデファクトスタンダードです。Javaは公式のServlet APIあるが、デファクトスタンダードはSpringです。MVCフレームワークで比較して行きたいと思います。

機能 .NET Java 解説
コア機能 ASP.NET Servlet
MVCフレームワーク ASP.NET MVC Spring MVC
テンプレートエンジン Razor Thymeleaf Razorは直感的で使いやすい、Springはテンプレートエンジンの提供がなく、MavenからThymeleafを入れられる
データ永続層 Entity Framework Hibernate or MyBatis EFは簡単で習得しやすい。JavaのHibernateは簡単だけど癖がある、 MyBatisはゴリゴリSQL書く必要がある。

.NETのWebフレームワークは最初からテンプレートエンジンやデータ永続層を提供してくれるので理解しやすく習得が早い。JavaのWebフレームワークはテンプレートエンジンとデータ永続層は選択肢が豊富でプロジェクトの特性に合わせて柔軟に構成できます。Javaのデータ永続層に関して欧米ではHibernateが人気、アジア圏はMyBatisの使用者が多い。(※Googleドレンド調べ)

個人的にデータ永続層なら.NETのEntity FrameworkはHibernateとMyBatisのいいとこ取りして、使ってて心地よい。

デプロイ

.NET Coreのおかげで.NETはやっとWindowsのみの呪縛から開放され、選択肢が増えて非常に喜ばしい。正直、デプロイに関してはもはや.NETもJavaも大差ない。

責務 .NET Java
OS Window, Linux Windows, Linux
Webサーバー IIS, Kestrel Tomcat

IISはGUIなので簡単にデプロイできるが、Windowsでしか使えない難点がある。

まとめ

Javaも.NETも各々の良さがあり、優劣をつけられるものではありません。

フレームワークは所詮手段に過ぎず、両方のフレームワークの特性を理解することで目的を達成するための最適な選択ができるようになります。

しかし、生態圏でいうとJavaのほうが圧倒的に有利です。コミッターの数も.NETの比ではない。
私は.NET畑出身なので、どうしても.NETに愛着がわきます。でも、仮に「新人にNETとJavaどっち勉強したほうがいい?」って聞かれたら、「Windowsに拘らなければJavaのほうがいいよ」とJavaを勧めます。

結局技術は一時的なものでで、生態圏は永遠です。PHPが未だに現役なのもこのためです。

dongsu-iis
Husband | Father | Engineer | Developer | SIer
https://dongsu.dev/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした