01 / FROM JAVA TO SYSTEM
Javaだけでシステムを作るわけではない
これまでの記事では、 Javaそのものについて 一つずつ整理してきました。
例えば、 変数や条件分岐、 クラス、 List、 Map、 enum、 Streamなどです。
これらは、 実際のシステム開発では バラバラに使うわけではありません。
複数の仕組みを組み合わせて、 一つの機能を作ります。
画面
↓
Java
↓
業務処理
↓
SQL
↓
データベース
まずは、 この大きな流れを イメージできれば十分です。
業務システムでは、 Javaの文法そのものよりも、 「Javaを使って各仕組みをどうつなぐか」 が重要になってきます。
02 / WEB APPLICATION
例えば、画面から検索するとどうなる?
業務システムでよくある処理を 一つ考えてみます。
画面で社員番号を入力して、 「検索」ボタンを押す。
ユーザーから見ると、 ただ検索ボタンを押しているだけです。
しかし、 システムの中では いくつもの処理が動いています。
画面
↓
リクエスト
↓
Controller
↓
Service
↓
Repository / DAO
↓
SQL
↓
データベース
データベースから取得した結果は、 今度は逆方向に戻っていきます。
データベース
↓
Repository / DAO
↓
Service
↓
Controller
↓
画面
これが、 Webアプリケーションでよく見る 基本的な流れです。
03 / CONTROLLER
Controllerは何をしている?
Springなどを使ったJavaの Webアプリケーションでは、 Controllerという役割が登場します。
@GetMapping("/employees")
public Employee findEmployee(
@RequestParam String id) {
return employeeService.find(id);
}
細かい設定はさておき、 ここでは 「リクエストを受け取る場所」 と考えてみます。
例えば、 ブラウザから
/employees?id=1001
のようなリクエストが来たら、 Controllerが受け取ります。
そして、 自分ですべての処理をするのではなく、 次の処理へ渡します。
Controller = リクエストを受け取り、 必要な処理へつなぐ場所
04 / SERVICE
業務処理はServiceにまとめる
Controllerから呼ばれた先では、 実際の業務処理を行います。
こうした処理を Serviceにまとめる構成が よく使われます。
public Employee find(String id) {
Employee employee =
employeeRepository.findById(id);
if (employee == null) {
return null;
}
return employee;
}
実際の業務システムでは、 ここにさまざまな 業務ルールが入ります。
例えば、
・入力値を確認する
・権限を確認する
・複数のデータを取得する
・条件によって処理を分ける
・計算する
・登録処理を行う
これまで学んできた if、 for、 List、 Map、 enum、 Streamなどは、 こうした場所で使われます。
Javaの文法は、 業務処理を作るための部品になる。
05 / DATABASE
Javaからデータベースを操作する
業務システムでは、 データを保存するために データベースを使います。
例えば、 社員情報が保存されているとします。
employee
id name
----------------
1001 Tanaka
1002 Sato
1003 Suzuki
Javaからデータを取得するときには、 SQLを使います。
SELECT
id,
name
FROM
employee
WHERE
id = '1001';
そして、 SQLの実行結果をJava側で受け取ります。
Database
↓
SQL
↓
Java
↓
Object
つまり、 JavaとSQLは 別々の知識ではありますが、 業務システムでは 一緒に使うことが多くなります。
06 / OBJECT MAPPING
データベースの値をJavaのオブジェクトにする
データベースから取得したデータを、 Javaで扱いやすい形にすることもあります。
id name
----------------
1001 Tanaka
これをJavaのオブジェクトとして 扱うイメージです。
Employee employee;
employee.getId();
employee.getName();
ここで、 以前学んだ 「クラスとオブジェクト」 の知識がつながります。
データベースのデータを Javaのオブジェクトとして扱うことで、 Javaの中でさまざまな処理を 行えるようになります。
クラスやオブジェクトは、 教材の中だけに登場するものではありません。 業務システムでは、 DBのデータやリクエストなどを Javaのオブジェクトとして扱う場面が 多くあります。
07 / API
画面がない場合はAPIとして呼ばれることもある
Javaのシステムは、 必ずしもブラウザの画面から 呼ばれるとは限りません。
別のシステムから APIとして呼ばれることもあります。
別システム
↓
HTTP Request
↓
Java API
↓
業務処理
↓
Database
↓
Response
例えば、 JSON形式でデータを受け取ります。
{
"employeeId": "1001",
"name": "Tanaka"
}
Java側では、 このJSONをオブジェクトとして受け取り、 必要な処理を行います。
処理結果を再びJSONとして返すこともあります。
Java Object
↓
JSON
↓
API Response
ここでも、 クラス、 オブジェクト、 メソッドなど、 これまで学んだJavaの知識が そのまま登場します。
08 / BATCH
Javaは画面処理だけではない
業務システムでは、 画面を使わずに 定期的に処理を実行することもあります。
例えば、
毎日 0:00
売上データを取得
↓
データを加工
↓
集計
↓
ファイル出力
↓
処理終了
こうした処理を バッチ処理として Javaで作ることもあります。
バッチでも、 やっていることは 基本的には同じです。
データを取得
↓
Javaで処理
↓
データを加工
↓
保存・出力
ListやMap、 Stream、 日付処理、 String処理なども、 ここで活躍します。
09 / PUTTING IT TOGETHER
ここまでのJava知識が全部つながる
例えば、 「社員情報を検索する」 という一つの機能を考えてみます。
【画面】
社員番号を入力
↓
「検索」
【Controller】
リクエストを受け取る
↓
【Service】
業務ルールを確認
↓
【Repository / DAO】
SQLを実行
↓
【Database】
社員情報を取得
↓
【Java Object】
Employeeとして受け取る
↓
【Controller】
結果を返す
↓
【画面】
社員情報を表示
この一つの処理の中に、 これまで勉強してきた Javaの知識がたくさん登場します。
10 / FRAMEWORK
そこでSpringなどのフレームワークが登場する
実際のJava開発では、 JavaだけでWebシステムを 一から作るわけではありません。
Spring Frameworkなどの フレームワークを利用することで、 Webアプリケーションを 効率よく構築できます。
Spring
↓
Controller
↓
Service
↓
Repository
↓
Database
Springには、 DI、 MVC、 Web API、 データベースアクセスなど、 Javaによるシステム開発を 支えるさまざまな仕組みがあります。
ただし、 ここで重要なのは、 Springを覚えることと Javaを理解することは 同じではないということです。
Javaを理解しているからこそ、 Springのコードが 「何をしているのか」を理解できる。
まずJavaの基本を理解し、 その上でフレームワークを学ぶと、 より仕組みが見えやすくなります。
11 / WHAT JAVA REALLY MEANS
「Javaが分かる」とは何なのか
Javaを勉強していると、 文法をどれだけ覚えればいいのか 分からなくなることがあります。
しかし、 実際の開発では 文法を一つずつ 独立して使うわけではありません。
例えば、
if
↓
業務条件を判断する
List
↓
複数のデータを扱う
Map
↓
keyとvalueでデータを管理する
Class
↓
データと処理をまとめる
Stream
↓
データを加工する
Exception
↓
異常を扱う
そして、 これらを組み合わせて 一つの業務処理を作ります。
さらに、 Spring、 SQL、 DB、 APIなどと組み合わせることで、 実際の業務システムになります。
12 / COMPLETE PICTURE
Java開発の全体像
ここまでを、 一つの図として整理してみます。
ユーザー
↓
画面
↓
HTTP Request
↓
Controller
↓
Service
↓
Repository / DAO
↓
SQL
↓
Database
↓
Repository / DAO
↓
Java Object
↓
Service
↓
Controller
↓
HTTP Response
↓
画面
+
API
+
Batch
Javaは、 このシステム全体の中で 業務処理を実装するための 中心的な役割を担います。
Javaそのものを覚えることがゴールではありません。 Javaを使って、 データを受け取り、 処理し、 保存し、 他のシステムと連携する。 そこまで見えてくると、 「Javaでシステムを作る」 という感覚がつかみやすくなります。
FIELD NOTE
Javaは「単体」で使うものではない
Javaを書く。
それだけでは、
まだシステムにはなりません。
画面からデータを受け取る。
Javaで処理する。
SQLでデータを取得する。
DBに保存する。
APIで別のシステムとつなぐ。
必要なら、
バッチで自動的に処理する。
これまで勉強してきた Javaの文法や仕組みは、 こうした実際のシステムを 作るための部品です。
クラス、 List、 Map、 enum、 Stream、 Exceptionなど。
一つ一つを見ると 小さな機能に見えます。
しかし、 それらを組み合わせることで、 実際の業務システムの 一つの機能になります。
Javaを覚える。 ↓ Javaで処理を書く。 ↓ システムの一部を作る。
ここまでつながれば、 Javaの基礎から 実際の開発へ進む準備は かなり整ってきます。