エンジニアではなくても、プログラミング言語として耳にすることの多い「Java」。
Java SE8のサポート有償化に伴い、一時は「終わった」と話題になっていましたが、基幹システムや会計システムなどの改修で使用されているのはもちろん、現在も継続的に新バージョンが発表されていたり(2024年1月現在の最新Ver.はJava SE21、2024年3月にはJava SE22がリリース予定)、新規のスマートフォンアプリ開発案件でも使用が予定されていたりと、まだまだ使う企業も多い印象です。
今回はそのJavaについて、お伝えしていきたいと思います。
そもそもJavaとは?
ITエンジニアとして活躍中の方には言わずもがなの情報で恐縮ですが、JavaはC言語を基に、1995年に米国のSun Microsystems(サン マイクロシステムズ)社が開発したプログラミング言語です。
-
C言語を基に、1995年に米国のSun Microsystems(サン マイクロシステムズ)社が開発したプログラミング言語
2010年にORACLE社に吸収合併され、その後はORACLE社がJavaを提供しています。
Javaの実行環境の中枢ともいえるJava仮想マシン(JVM)は、サーバーから家電、スマートフォン、デスクトップパソコンなど幅広いプラットフォームの環境の違いを吸収し、プログラムが適切に実行され、実行内容に差異がないように共通動作を実現する機能を備えています。
上記によりJavaの動作や開発がOSに依存しないため、プラットフォームに左右されず共通動作を実現することができます。まさに、「write once, run anywhere(一度書けばどこでも実行できる)」というJavaの理念が具現化されているといえます。
世界的にも使用頻度が高く、前からある基幹システムの改修から新しいスマートフォンアプリの開発まで、幅広く使われています。代表的な例で行くと、金融系のシステムや、PCゲーム「MINECRAFT」、「X(旧Twitter)」や「Amazon」といったサービス、Androidのスマートフォンアプリ、カーナビやBlue-rayプレーヤー(組み込みJava)などが挙げられます。
- 金融系システム
- PCゲーム「MINECRAFT」
- X(旧Twitter)
- Amazonなど
処理速度や安定性、実行環境の自由度の高さ、使用されている環境が多岐にわたるため仕事が多いなどといったメリットはかなり大きいですが、その分学習コストが高かったり、小規模なシステムの場合はその機能を持て余してしまい開発コストだけがかさんでしまったりというデメリットもあります。
これから学習を始めたい方や、アーキテクチャ選定などに携わる方は特に、ほかの言語と同様、「何に使うのか」「目的のために使う言語として適切なのか」を考える必要があるでしょう。
Javaエンジニアの需要・将来性について
フォスターフリーランスを運営する弊社フォスターネットは、元々エンタープライズ系の案件を多く保持していたこともあり、Javaエンジニアの方の登録が多い傾向にあります。
そのことも影響している可能性はありますが、以前登録者アンケート内で質問した「現役フリーランスが開発初心者におススメする言語」にも2位にランクインしています。
世界的に見ても、WebサービスやAndroidアプリ開発などの案件は多いですし、エンタープライズ系の案件も改修などで当面需要が高い状態が続く見込みです。各エージェントや企業の案件数を見ても、Java案件数の多さは1~2位を争うところにいますので、もうしばらくは安定的に案件へ参画することができるでしょう。
上記のようなメリットがある一方で、「ほかの言語と比べ、経験年数が長くなっても金額が上がりにくい」傾向もあります。もちろん、全く上がらないわけではなく、後述する最新のFW/ライブラリや最新バージョンのキャッチアップによる金額アップ、上流やマネジメント等を担当することによるポジションアップ等もあります。
ただ、PythonやScalaなどと比べると、使う人口が多いため希少性が上がりづらく、それに伴って金額が上がりづらいのは事実です。
金額アップに成功したエンジニアの皆さんは「フロントエンド開発やインフラ構築など複数技術がわかるフルスタックエンジニアになる」、あるいは「コミュニケーション力を生かし、上流やマネジメントを担当する」ことなどで実現しています。
いずれにしても、業務内でも可能であれば積極的にAWSやフロント等の仕様書を見たり、個人でAWSサーバーを立ててみたりと、自己学習を進めることは必須です。
- 案件数が多いことから一定期間の需要は見込める
- 報酬が上がりにくい
- 報酬アップを狙うなら別のスキルが必須
また、一部企業ではJavaのシステムを他の言語にリプレイスする、といったような動きも出てきていますので、Javaだけではなく他言語も、と狙う場合はそういった案件を中心に探すか、エージェントへ声掛けをしてみてください。
フォスターフリーランスでも、案件探しはもちろん、今後のキャリアパスを含めたご相談も承ります!
トレンド&定番フレームワーク/ライブラリのご紹介
フレームワーク(Framework)とライブラリ(Library)も、Javaで開発するプロジェクトには欠かせない存在ですよね。
フレームワークやライブラリを使わずに開発する現場はとても少なく、案件に経験必須の記載はなくとも現場独自のフレームワーク・ライブラリを使用することが一般的になっています。
どちらもアプリケーション開発時のコードの量を減らすことができる便利なものですが、駆け出しエンジニアの方はその違いの説明がうまくいかないと聞きます。
では、実際どんな違いがあるのでしょうか? よくある説明では下記のような形が多いかと思います。
フレームワーク | アプリケーション構築のための枠組み・骨組み・テンプレート |
ライブラリ | 作業を簡略化するため、頻繁に使われるコードや機能を簡単に使えるようにまとめたもの |
分かりやすいよう料理を例にすると、フレームワークは「レシピがあり、食材がそろったキット=適宜調味料を足したり、調理をしたりするもの」、ライブラリは「調理を簡単にするツール=電子レンジや圧力鍋など、調理する際に便利なもの」となるようです。
よりエンジニア向けにいうのであれば、下記と説明できます。
-
「アプリケーション設計上の決断がフレームワーク開発者によって既になされており、フレームワークがメインプログラムとなってユーザー・コードへの制御を行う」、もの
※このようにプログラムの制御がユーザー・コードから再利用コードの方に移っている現象を「制御の反転」(Inversion of Control,IoC、別名「ハリウッドの原則」)と呼び、フレームワークの本質・定義とされています。
-
「プログラムの制御に関する主導権をユーザー・コードが持ち、どういった順番で組み合わせてどんなアプリケーションを構築するかという設計上の判断はプログラマに委ねられている」もの
さて、違いについてのご説明はこのあたりとして、まずは具体的なフレームワークを見ていきましょう。
- Spring(Spring Framework)
- SpringBoot
- Struts
- Seaser2
- Intra-mart
- MyBatis
- PlayFramework
- JUnit
- Jakarta EE(Java EE)
- Hibernate
- JSF(JavaServer Faces)
- Spark Framework
- Apache Wicket
- GWT(Google Web Toolkit)
- Dropwizard
- ZK
- Ninja web framework
- Grails ※Groovy言語のWebアプリケーションフレームワーク
さすがは使用頻度の高いJavaといったところでしょうか、数の多さでは群を抜いています。
始めたばかりの方やこれから勉強する方は、「どれから手を付ければ……?」と悩んでしまうかもしれません。その際は、案件が多いフレームワークはSpring、最近案件の数が増えてきて金額も他より高くなりやすいのがSpringBootなので、まずSpringをお勧めします。
-
これから勉強する方はSpringがおすすめ
※因みに、SpringBootは「Springの機能の使い分けが困難」という欠点を解消するために作られたフレームワークで、複数フレームワークを使用する際のBean定義やXML設定などを可能な限り自動設定したり、Javadocと同じようにアノテーション(注釈)が記述できたりします。
エンジニアの方々の経歴書上では「Spring」とまとめている方も多いですが、経歴書を最初にチェックするのが人事や調達担当である場合は、「記載がない=SpringBootの経験がない」と判断されてしまうことがあります。多少手間であっても、使用している場合は記載をお勧めします。
また、プロジェクト内の単体テストでJunitが使われていることも多いので、テストエンジニアからのステップアップを狙う方には必須といえるでしょう。
では次に、ライブラリの方も少しご紹介します。
<CSV読み込み・出力>
- Open CSV
- OrangeSignal CSV
- Super CSV
<JSON>(JavaScript Object Notation=オブジェクト記法のデータ変換フォーマット)
- Jackson
- JSON in Java
<画像処理>
- OpenCV
- GRAL
- JFreeChart
<構文解析>
- JavaParser
- Scanner
<ssh>
- JSch
- Apache Mina SSHD
<機械学習>
- Tribuo
- TensorFlow
- Deeplearning4j
簡単に使用用途別に分けてみました。機械学習系はデータを扱う部署との連携なども必要なことから需要が高まっていますので、特に今後伸びしろがあるといえるでしょう。
ざっと上げただけでもこれだけありますので、フレームワークやライブラリごとに得意な機能や向いているものが異なることも踏まえ、言語と同じく「何に使うのか」「目的のために使うフレームワークとして適切なのか」を考える必要があります。
この記事では、Javaの需要についての解説やトレンド&定番フレームワーク/ライブラリのご紹介をしてきました。Javaは汎用性能が高く、大規模開発にも広く利用されていたり、Androidアプリの開発などで新規プロジェクトの立ち上げが走っていたりと、Javaをメイン言語としている企業もまだまだ多いです。
Pythonなどの他言語の伸びからJavaの将来性を危惧する声もありますが、今後すぐに仕事がなくなることは考えにくいので、現時点では焦る必要はないでしょう。むしろ、オブジェクト指向を身に着けるには最適な言語のため、Javaを学ぶメリットは大きいと考えられます。
Javaの案件をお探しの場合も、Javaから別言語へのキャリアチェンジをしてみたい方も、ぜひ一度フォスターフリーランスで話をきいてみてください。