Javaの基礎知識

プログラム、プログラミングとは

私たちは日常の中で、レジや非接触決済、表計算ソフトやWebサイト…スマートフォンやPCなどを介して様々なプログラムを利用しています。
「プログラム」とは、コンピュータに対してこの動作をしなさいといった指示をする”作業指示書”です。

コンピュータが理解できるのは0と1からなる「機械語」というもので、人間が機械語で書くのは非常に非効率ですし、現実的ではありません。そのため、作業指示書を人間に理解しやすい形で書き、これを機械語に変換してコンピュータに実行させるという流れが主流になりました。この「機械語に翻訳しやすく、かつ人間にも理解しやすい中間言語」のことを「プログラミング言語」と言います。
また、プログラムを作成する作業を「プログラミング」、プログラミング言語で書かれたファイルのことを「ソースコード」、プログラミングをする人のことを「プログラマ」と言います。なお、プログラミング言語で書かれたソースコードを機械語に翻訳する作業のことを「コンパイル」と呼び、コンパイルを実行するプログラムのことを「コンパイラ」と呼びます。

コンパイラ言語とインタプリタ言語

プログラミング言語において、
事前に一括でコンパイルしておいたものを実行する言語をコンパイラ(型)言語、実行のたびにコンパイルする言語をインタプリタ(型)言語と呼びます。

コンパイラ言語インタプリタ言語
メリット・プログラムの実行速度が速い
・実行前にミスを発見してくれる
・プログラムを即実行できる
・デバッグしやすい
デメリット・修正するたびコンパイルしなければいけない
・デバッグしにくい
・プログラムの実行速度が遅い
・メモリの使用量が多くなりやすい
代表的な言語C、C#、C++、Java、Go、Swift、KotlinPHP、Ruby、Python、Perl、JavaScript

参考サイト: (「参考サイト」はすぐ読まなくてもよく、補足資料の位置づけです)
コンパイラ言語とインタプリタ言語の違いとは?各言語のメリットも解説
プログラミング言語の実行方式まとめ【アセンブラ・コンパイラ・インタプリタとは】

このマニュアルで学習するJavaコンパイラ言語に当てはまりますので、こちらについて掘り下げます!

コンパイラ言語の特徴とメリット

事前にコンパイルを行うため、実行時の処理速度は他の形式の言語と比較して速く、CPUなどにかかる負荷も比較的小さく済みます。そのため、大量の処理や負荷が大きい処理を行う中規模以上のアプリケーションや、消費電力が抑えられることから組み込み系のシステムなどに採用される傾向があります。

コンパイラ言語のデメリット

事前にコンパイルする必要がある、ということはソースコードを変更するたびにコンパイルしないと結果が確認できず、コンパイルの時間がボトルネックになることもあります。また、コンパイルが終わるまでエラーが発生しているのかがわからないため、デバッグに時間がかかる場合があります。そのほか、コンパイル言語はインタプリタ型言語と比較すると習得には敷居が高い言語が多く、コンパイラをインストールする必要があるなど、開発構築の手間が多い場合があります。

Javaの言語処理系

Javaはコンパイラ言語と書きましたが、実はコンパイラ言語とインタプリタ言語の両側面を持っているとも言えます。
Javaの場合、直接機械語に変換するのではなく、機械語に近い中間言語「Javaバイトコード」にコンパイルします。Javaバイトコードとは、Java仮想マシン(JVM)上で実行される専用のコードです。Java仮想マシンは各プラットフォームの差異を吸収するクッション的なソフトウェアであるため、OSなどに依存せずどんな環境でも同じように動作するというメリットがあります。

上記のコンパイラとは異なる観点で分けた概念として、スクリプト言語という くくりもあります。
スクリプト(Script)が日本語だと「台本」「原稿」を意味する通り、自然言語のような感覚で読みやすく、比較的簡単にコードを記述できるプログラミング言語を指します。厳密な定義はなく、非常に抽象的な定義です。なお、スクリプト言語と呼ばれるもののほとんどはインタプリタ言語です。
スクリプト言語とは?概要やどんな種類の開発に向いているかを紹介

Javaとはどんなプログラミング言語?

Javaは、1996年にSun Microsystems社(後にOracle社に吸収合併)からリリースされて以降、世界中で多く使われる人気のプログラミング言語で、Googleが開発に用いることが多い三大言語(Java、C++、Python)のひとつです。Javaを利用した様々なアプリケーションが存在し、Webアプリケーションを始めとし、モバイルアプリ(Spotifyなど)、基幹システム開発、組み込みシステム開発からIoT開発まで幅広い分野で活用されています。
世界のプログラミング言語の人気の尺度を示す指標を出す「TIOBE Index」が2024年12月に出した最新の統計結果だと、Python、C++に次ぐ第3位がJavaです。
多岐に渡るプログラミング言語の中で2004年から上位5位以内に居続けていることから、その人気の高さは確かなものでしょう。

OSに依存しない

Javaを開発する当時の目標「write once, run anywhere」(一度書けばどこでも実行できる)の言葉通り、OS(WindowsやMacなどのオペレーティングシステム)を問わず実行させることが出来ます。多くのプログラミング言語では、別のOSで動作させるには環境に応じて作り直す必要があることと比べると、大きなメリットです。
なお、異なる機種やOSでも同じプログラムが動作できることをマルチプラットフォーム/クロスプラットフォームと言います。

オブジェクト指向

オブジェクト指向の考え方で開発されていることによって、誰がプログラムを書いても結果的に比較的読みやすく、プログラムの再利用性や拡張性が高く、複数人での開発に適しています。
オブジェクト指向については別の単元で説明しますが、あるデータとそれを使用するための基本的な操作をひとまとめにした「オブジェクト」に機能を分割し、それを組み合わせてプログラムを設計する概念・手法です。

その他の特徴

・開発当初からセキュリティを考慮された設計となっており、他のプログラミング言語に比べて安定性が高く、セキュリティ面で信頼されています。
ライブラリの豊富さ(ライブラリ:プログラムの部品や機能)
・C++の構文を多く引き継いでおり、C#やDart、RudyなどJavaから影響を受けている言語も多いので、Javaを習得することで他のプログラミング言語も学習しやすくなります。
・幅広い分野で活用できることから、需要が高いことも学習する上での利点です。
・・・などなど

参考サイト:
Javaとは?世界中で利用されるプログラミング言語の人気の理由
Javaとは? 『プロになるJava』著者 きしだなおきが解説! Javaの特徴・歴史・将来性・学習方法

Javaの開発環境

プログラミングに最低限必要なツール

皆さんのPCでJavaでプログラミングして実行するまでに最低限必要なツールは以下

JDK(Java Development Kit)

Java言語でプログラミングを行う際に必要なソフトウェアのセット・パッケージです。
コンパイラやデバッガ、クラスライブラリ、Javaプログラム実行環境(Java仮想マシン)などが含まれます。特にJRE(Java Runtime Environment)はJavaアプリケーションを実行するための環境を指し、JDKに含まれています。

統合開発環境(IDE)

ソフトウェア開発のための様々な機能を持った統合的な開発ツールです。
一般にプログラム開発するにはエディタ(コードを記述する用のツール)が必要ですが、統合開発環境はただのエディタに留まりません。コーディングだけではなく、コンパイルやビルド、デバッグといった開発のための一連の作業を1つのツール上でシームレスに実行することができます。本マニュアルでは、統合開発環境としてJavaの開発で多く用いられているEclipseを使用します。

なお、Webアプリケーションを開発するにはアプリケーションサーバ(Tomcat等)、データを蓄積・管理するデータベース(DBMS)も必要になりますが、ここでは割愛します。

Javaのプログラミングから実行まで

Javaの言語処理系の章で、ソースコードをバイトコードにコンパイルして、その後Java仮想マシンで実行するという流れを説明しました。また、コンパイラ言語での説明にもあった通り、手順が多く難しそうな印象を持つ方もいたのではないでしょうか。かつてはそういった手間も多かったのですが、現在ではIDE/統合開発環境(マニュアルではEclipse)を使用することにより、それらの手間は省力化され、プログラマはコーディングのみに注力できるようになっています。

具体的には、Javaのプログラミングから実行までの操作は以下だけです。
・ソースコードの作成:コードを記述する
・コンパイル:ソースコードを保存すると、バックグラウンドで自動で実行(クラスファイルを生成)
・クラスファイルの実行:「実行」メニューを選択

以上がJavaの基礎知識です!
今すぐ全て覚えられなくても、Javaエンジニアの第1歩としてこの単元の内容は押さえていきましょう。

今後の学習の流れとしては、まずJavaの基礎として構文など最低限必要な知識を学んでいき、
続いてSpring BootによるWebアプリケーション開発を学んでいきます。

次の単元以降は、学習を始めるための環境セットアップとしてEclipseなどを導入していきます!

タイトルとURLをコピーしました