Java
2021.10.14
Javaとは? 歴史や特徴、学習方法やサービスなど初心者向けにわかりやすく解説
2022.02.17

1.Javaとは?

1-1.Javaの歴史

Javaは1990年代前半にサン・マイクロシステムズによって開始されたOakという言語プロジェクトでしたが、商標権に問題があった事からJavaという名前で世界に公開されたプログラミング言語です。プラットフォームに依存しない「Write once, run anywhere(一度書けばどこでも動く)」というコンセプトが人気を博し、その後ソフトウェア開発業者、サービス提供業者、デバイス製造業者など様々なところで利用されるようになりました。

プラットフォームが再編される2000年前半頃には既に開発者が400万人を超え、最も人気のプログラミング言語の一つになっています。

2000年代後半には、Googleがアプリケーション開発にJavaを採用したAndroidを発表、またOracleがサン・マイクロシステムズを買収したことで、データベース製品などと並ぶOracleの主要な製品の一つとなりました。現在でも企業の基幹系システム、サーバー言語、スマートフォン端末などで幅広く使われ続けて今に至ります。

1-2.OSに依存しない

Javaを使用する場合、 Javaプログラムを実行するためのJRE(Java Runtime Environment、Java 実行環境)というものをインストールします。これによりJavaはWindows、MacなどのOSに依存しないであらゆるコンピューター上で動作することができます。

JavaとOSとの間に、JREの中核であるJava仮想マシン(JVM)を介すことで、OSに依存しない実行環境を実現することができる仕組みです。OSだけでなく機器にも依存することがないため、家電を制御するためのプログラムにも利用できます。

1-3.オブジェクト指向である

Javaはオブジェクト指向プログラミング言語の一種です。オブジェクト指向はプログラミング初心者や非ITエンジニアの方にはなかなか理解されづらい概念ですが、プログラムを手順で構築するのではなく、モノ・部品単位で構築するプログラミングの設計思想・考え方のことです。

1970年代という、意外に古くからある概念で、「カプセル化」「多様性」「継承」などの仕組みをプログラミングのまとまりに持たせること中核要素となります。オブジェクト志向はJavaに限らず、C++やC#など様々な言語でも取り入れられており、プログラミングを学んで行けば接する機会は必ずあるはずです。


2.Javaで開発できるプログラム

2-1.Webサービス

Javaは処理速度や安全性が求められる大規模なWebサービスと相性の良い言語です。インターネット上には多くのJava製WebサイトやWebアプリが存在しています。WebのUIやデザインを操るJavaScriptと名前は似ていますが、Javaはデータベースの利用や複雑な処理などサーバー側の処理を得意とし、特徴や用途は大きく異なります。

Javaで作られた有名なサービスとしては、TwitterとEvernoteが挙げられます。元々は日本生まれのプログラミング言語「Ruby」で開発されたWebサービスでしたが、利用者の増加に伴う大量アクセスを処理するために、Javaに移行しています。

2-2.デスクトップアプリ

デスクトップアプリとはPCにダウンロードすることで利用できるアプリです。Javaの場合、Swing・JavaFX といったライブラリを使うことで、テキストフォームやボタンといったUIコンポーネントを簡単に配置して作成できます。

Microsoft Officeの代わりとして有名なOpenOfficeやEclipseというエンジニアの間で普及している統合開発環境ツールもJavaで作られており、様々な業務ツールがデスクトップアプリとして開発されています。

2-3.スマホアプリ

GoogleのAndroid開発のための公式言語に採用されたJavaはスマートフォン向けアプリ開発に用いられています。モバイルアプリ開発に使用されているプログラミング言語としても、まず挙げられるのがJavaで、AndroidアプリのほとんどがJavaで作られており、現在は200万を超えるアプリが登録されています。モバイルアプリ開発は今後も継続して成長していく分野ですので、開発案件の多さや将来的なスキルアップとしても非常に期待できるJavaのフィールドです。

2-4.組み込み系システム

OSに依存しないという特徴を持つJavaは元々、家電製品の組み込みソフトウェアを開発するための言語として開発されたものです。家電製品は競争が激しく、日々バージョンがアップデートされていますが、ハードウェアに依存しないプログラムであるJavaを製品に入れることはソフトウェアのメンテナンス面でも都合が良いです。スマホやBlu-rayプレーヤーなどがJavaの組み込みシステムが搭載されている家電として例になるでしょう。

2-5.基幹システム・金融システム

Javaはその安定性やセキュリティの高さから、銀行システムやクレジットカードシステムなどの金融系、大企業の基幹系と言われる会計システムや配送システム向けの大型プロジェクトに採用されています。大企業向けのシステム開発は多額の費用でSIerが請け負い、大量の人材が投入されるので、人材需要としても活性化しており、この分野での仕事は日々求人に出されています。

2-6.ゲーム

Javaはゲームを作ることも可能です。世界でも最も有名で人気のあるMinecraftもJavaで作られており、オセロゲームやシューティングゲームといったレトロな動きをするゲームであれば教材も豊富に存在します。

一方で、JavaにはC#にとってのUnityのようにゲームに特化した開発環境がないため、0から自分でゲームに必要な様々な要素をプログラミングする必要があります。本格的な3Dゲームのようなゲームの開発をJavaで行うのは難易度が高く、初心者で本格ゲーム開発の仕事を得る期待はしない方が良いかもしれません。


3.Javaを採用するメリット

3-1. 処理速度が速い

Javaはコンパイル型言語で、プログラムをビルドしてから走らせます。そのために実行時に機械語に変換する必要があるインタプリタ型言語に比べて、高速に動作します。コンパイル言語の中では、かつては遅いといわれていたJavaですが、JITコンパイルの導入など年々性能は改善され続けており、今では主要言語の中でもかなり速いポジションにいます。

人気の出たサービスなどで高速な処理速度がいるようなサービスでJavaが用いられているケースは多いです。

3-2. 安定性やセキュリティが高い

Javaは仮想マシンでアプリケーションを実行するため、システム内に存在するアクセスしてはいけないメモリ領域に、アクセスできないような仕組みになっており、意図的にシステムダウンを引き起こしたり、重要データを読み出したりすることができないようになっています。また、

豊富なセキュリティ関連のライブラリも恵まれていることから、安定性やセキュリティが求められる銀行や会計など安全に配慮が必要な業務システムにも採用されています。

3-3. ドキュメントが豊富にある

Javaは、あらかじめ用意されているライブラリやAPIが数多くあります。Swingのようなグラフィカルアプリから、JSP・サーブレットのようなサーバサイドアプリや「日付処理」「データベース処理」「配列・繰り返し処理」「文字列操作」等一般的なシステムやアプリで必要となる機能が標準で提供されています。

また、比較的歴史も長く多くのユーザーがいるため、実用的なライブラリやOSSなども簡単に見つけることができ、画像処理であれば「OpenCV」、グラフィックなら「JavaFX」、構文解析なら「JavaParser」といったように目的に応じた実用的な機能を手軽に実装することができます。


4.Javaを採用するデメリット

4-1.学習コストが高い

Javaは学習コストの高さが難点です。プログラミング初心者がJavaを習得するには、他のプログラミング言語と比較して難易度が高いと言われることが多いです。文法やルールが、他の言語と比べると多く、同じ命令であってもJavaの方がソースコードの記述が多くなりがちです。

また、初心者がつまずきやすいオブジェクト指向への理解や開発を始めるための適切な環境構築・初期設定などが必要となることも学習コストが高いと言われる一因です。

4-2.小規模開発には向かない

1人で作成するようなシンプルなプログラムや一つ二つの機能を持つ小規模システム開発では、Javaよりも労力が不要なプログラミング言語が利用されることがあります。

SpringやJavaで強みとされる拡張性や再利用性が使える場合は、そのような小規模開発でも効率良く開発ができますが、要件に上手く当てはまるライブラリ・パッケージを利用できない場合は、RubyやPHPのフレームワークを利用して直感的にプロジェクトを作成した方が早くできることがあります。

4-3.環境構築などの設定に手間がかかる

Javaでアプリを開発していく際に必要となってくるTomcatや関連ライブラリは、依存関係やバージョン管理を統合開発環境であるEclipseなどを通して行う必要があります。最近ではSpring bootなどの初心者フレンドリーなフレームワークも出てきましたが、プロジェクトを開始し、自分のPC上で開発しているアプリの動作を確認するという開発の初期段階になかなか辿り着かず、最悪の場合挫折してしまうなどの難点が出てきます。

また、OracleのホームページからJavaをダウンロード・インストールし、環境変数に追加する作業も初心者にはひと手間かかる作業でしょう。


5.Javaエンジニアはどれくらい人気がある?

Javaは既にバージョン15と盛衰の激しいプログラミング言語の中でも長い期間使われていますが、まだまだ需要や人気は健在です。2020年に行われたJavaエンジニアの調査では全世界でJavaを主要言語とするエンジニアは520万人、サブ言語とする人間も含めればもっと大きな数になるという推定値が出されています。これはプログラミング言語別使用率のランキングで示されている結果としては42%のJavascriptに続いて36%の2位という結果です。

調査結果をそのまま受け取ると世界のプログラマの3人に1人はJavaを使っているということになり、これはプログラミング言語が主要なものでも10〜20は挙げられる中で特異とも言える結果です。Javascriptはフロントエンドとして各サーバーサイド言語のペア相手として使われていることが多いので、データ処理などを行うサーバーサイド言語としては実質一番使用されているということが読み取れます。

また、この調査では使用率などの人気ランキング以外にも、Javaの使用のされ方についても調べられています。業界別のJavaの使用率としては金融業界・Fintech業界が最も高く44%、IT・システム開発業界が次に高く42%、第三位はモバイルアプリ開発で25%と、システム開発の中でも比較的大規模で大きな金額が動く分野や業務システム向けとしては圧倒的な地位・ポジションを誇っているのがJavaです。

Javaを実務で使えるようになればスキルはあるのに自分の使用言語はマイナーだというたまに聞くエンジニアの悲しい悩みとは一切無縁でしょう。

(参考)数字で見る 2020年における Java の現状
https://blog.jetbrains.com/ja/idea/2020/10/a-picture-of-java-in-2020-ja/


6.Javaプログラミングの基本的な流れ

6-1.Javaプログラムを実行するステップ

実際にJavaプログラムがどのように動くか、定番のHello Worldを出力する最も簡単なプログラムで見てみましょう。プログラムを書いていくコツは簡単なものから一つずつ実行して、実現したいプログラムに近づけていくことです。このプログラムを作成し動かしていく手順はファイル作成→コードの記載→プログラムのコンパイル→クラスファイルの実行と四つのステップで順に進めていきます。

ファイルの作成やビルド方法については、Eclipseなどの使用している統合開発ツールにもよりますが、画像付きで見た方が分かりやすいです。ここでは長くなってしまいますので割愛しますが、お使いの開発環境に応じて調べてみると良いでしょう。

(参考記事)Java EclipseでHello Worldを表示(https://itsakura.com/java-eclipse-hello)

実行するHello.Java(任意のファイル名、好きな名前をつけてください。)のソースコードは以下で、このクラスファイルを実行するとHello Worldと出力されます。

■Hello.javaプログラム

class Hello{
  public static void main(String[] args){
    System.out.println("Hello World");
  }
}

クラスとmain関数をプログラム内で宣言して、ターミナルに文字を出力するプログラムの完成です。これは非常に簡単な内容ですが、ファイルを作成して、ソースコードを書いて、ビルドして、実行するというステップは基本となるJavaプログラムの動かし方です。

6-2.Javaの基本的な構文

文字を出力するだけではあまり簡単なのでプログラミングの基本構文であるif文とfor文をJava で見てみましょう。

if 文は英語のifの通りでもし格好内の条件だったらという条件分岐を作るのに用いられます。test_pointは70より大きいので合格と表示されます。

■if文

int test_point = 80;
if(test_point > 70){
  System.out.println("テストに合格しました。");
} else {
  System.out.println("不合格です。");
}

もう一つfor文も見てみましょう。繰り返し処理をする際に使用されるもので、例えば1から100までの数字を足していくような計算をプログラムが処理してくれます。

■for文

int sum = 0;
for (int i = 1; i <= 100; i++){
 System.out.println(i);
    sum += i;
}
System.out.println("合計は" + sum +"です。");

7.Javaを学ぶのに必要な時間や学習方法

7-1.Javaを学ぶのに必要な時間

Javaはこれまで見てきたように、金融系・運送系のシステムなどの大規模業務システム開発向けやAndroidアプリ開発を始めとして多種多様に用いられており、求人数も多く給与や待遇も他の言語を扱えるエンジニアより良い傾向にあります。

一方で、他言語と比べると初期設定・環境構築の複雑さやフレームワークを適切に使うためのスキルも必要など習得が難しいとされており、あくまでも目安ですが、基礎レベルの習得には400~500時間、実践的に開発を行えるようになるには約1,000時間の学習時間がかかると言われています。

7-2.学習方法別のメリット・デメリット

プログラミング言語の学習時間や効率は自分にあった学習方法を選ぶことでも変わってきますが、それぞれの勉強方法について見ていきましょう。

(1)書籍やWebサービスで独学で学ぶ

書籍やWebサービスを利用した独学のメリットは費用が教材代だけしかかからず、自分のペースで学習を進めることができることが挙げられます。一方、デメリットとしては分からない点やコードを書いていくうちに遭遇するエラーの解決方法を聞ける相手がいないため、学習に時間がかかってしまったり、最悪はプログラミングの勉強を辞挫してしまったりする可能性があります。

(2)プログラミングスクールに通う

プログラミングスクールに通う方法もあります。教材やカリキュラムが整っており、体系的に基礎から学習できるため、短期間で知識を身につけることが可能です。デメリットは、スクール代が数十万円とかなり高いこと、またスクールによっては基礎しか学べずあまり応用的なスキルが身につかない場合があることです。

(3)e-ラーニングで学ぶ

動画教材などを使ったe-ラーニングも人気です。e-ラーニングのメリットは、スクールに通うよりは安く体系だった教材やカリキュラムで勉強できること、また自由な時間に学習できるため隙間時間を有効活用できる点です。デメリットは、質問に対するサービスが充分でなかったり、あるいは質問は別料金だったりすることです。

またサービスによってはオリジナルアプリを作っていくなどの応用的な課題が少なく実践的なスキルが身につかない可能性があることです。ただし、e-ラーニングのタイプによっては、基礎だけでなく実践編を用意しているものもあり、サービス内容やカリキュラムを精査していく必要があります。

いずれの勉強方法でもそれぞれ提供されているサービスを調べて自分にあった勉強方法を選べると実りのある学習に繋がるでしょう。


8.Javaの資格について

8-1.Oracle認定Javaプログラマ(Oracle Certified Java Programmer)

JavaシルバーやJavaゴールドと言われるものです。Oracle社が認定しているJava資格で、資格に有効期限はありませんが、Javaのバージョン毎に認定試験も新しくなります。「Bronze」「Silver」「Gold」の3つのランクに分類されており、順に難易度が高く出題範囲も広くなっていきます。

こちらの資格は受験料が高額で躊躇しがちですが、Javaの開発元による公式ベンダー資格ということもあり、資格の中ではおすすめです。資格を持っていると客観的に自分の実力を相手に伝えることができるので、Goldまで取っているとある程度転職活動にも有利に働く可能性があります。

勉強時間や実務経験や人によって大きく変わるもので、あくまで目安ですが、Btonzeは1〜2ヶ月(30〜60時間)、Silverは3〜4ヶ月(60〜120時間)、Goldは半年程度(180時間)を見込むと参考になるかもしれません。

8-2.Javaプログラミング能力検定試験

ビジネス能力認定のサーティファイ株式会社が運営している、日本国内の民間資格です。

こちらの資格は3級・2級・1級と順に難易度が上がっていきます。この資格は、実際にJavaを使ったプログラミングの知識や技能をテストし、書かれたプログラムを補完する問題もでます。

1級になると提示された変更・追加点をプログラムに反映した上で変更仕様書を作成するといった実務のような試験が実施されるという特徴があり、特に一級を所持しているとOracle認定資格同様に評価を受けることでしょう。

8-3.Android技術者認定試験

直接的なJavaの資格ではありませんが、Android開発にはJavaが用いられるため間接的にJavaの資格と言えるものです。公式サイトでも「受験対象者」の使用プログラミング言語にJavaが対象となっています。

モバイルアプリ開発用に資格を取りたいという方にはおすすめの資格です。レベルは「ベーシック」と「プロフェッショナル」の2段階設定となっていますが、モバイルアプリ開発ということもあり、資格としては比較的新しめの資格であり、参考書などはこれまでの二つよりは少ないかもしれません。


9.Javaを学ぶのにお勧めの書籍

9-1.スッキリわかるJava入門

スッキリわかるJava入門 は、未経験者が抱きやすい「なぜ?」に答える念入りな解説に加えて、初心者がつまずきやすいポイントについて実際のプロジェクトや指導経験を元にアドバイスを行っています。途中で置き去りにされることなく、初めてプログラミングを学ぶ人でも安心して最後まで読むことができる1冊です。

Javaを始める際に特につまずきやすい開発環境の準備とエラーへの対応には、「dokojava」という仮想開発環境が読者向けに用意されており、安心して実際のJavaプログラの実行を行うことができるので、実践的に学習を進めていくことができます。

9-2.独習Java

人気の「独習」シリーズでのJava版で標準教科書として様々なことが学べます。多くの新しいプログラミング言語を始めるエンジニアが、このシリーズにお世話になっているのではないでしょうか。

解説、例題、理解度チェックという3ステップで、サンプルプログラムを見ながら、基本的な仕様から実践的な内容まで理解できるものです。オブジェクト指向、ラムダ式、マルチスレッド、アノテーション等、重要な技術の理解を深めていくため、基本をしっかりおさえたいという方には実際に書いて実行結果を確認しながら進めていくのがおすすめです。

9-3.Effective Java

Javaプログラマにとっては定番の技術書であるEffective Javaのバージョンアップや変化に合わせて、改訂が重ねられてきました。

上述の二冊よりは内容がプログラミング初心者にとって少し難しいかもしれませんが、コーディングの中で繰り返し現れやすいパターンを学び、Javaの理解を深め、大規模システムにも耐えられる高品質なプログラムの作成を助けてくれる良書で、Javadで良いコードを書くにはという大切なことを教えてくれる本です。入門書の次にJavaの参考書としてオススメです。


10.Javaを学ぶならトレノキャンプへ

トレノキャンプではJavaを実践的に学ぶためのコースを、オンラインで提供しています。オンデマンド配信なので、いつでも好きなときに受講が可能です。講座の詳しい内容は下記のバナーをクリックしてご覧ください。

この記事をシェア
おすすめの受講コース
  • Javaエンジニア完全パック -実務に必要なスキルを網羅-
  • はじめてのデータベース ~仕組みの理解とSQL~
  • Javaプログラミング本格入門シリーズ①~データ構造とアルゴリズム~
  • Javaで学習するユニットテスト入門 ~JUnitで理解するテスト手法~