トップ / カリキュラム / 第8章

CHAPTER 08

業務システムとJava

ここまでの知識を、実際の業務システムの姿につなげます。Javaのシステムはどんな部品構成で、どう作られ、どう動き続けているのか。架空の経費精算システムを例に、現場の全体像を描きます。

読む目安:約20分現場でどう作られ、動き続けているか

この章でわかること

  1. Webシステムの三層構造(画面・業務ロジック・データベース)の中で、Javaがどこを担当しているか説明できる
  2. 開発から運用までの流れ(設計→実装→テスト→ビルド→デプロイ→運用)と、各段階で出る言葉がつながる
  3. エンジニアとの打合せで、聞くべきこと・確認できることが具体的に浮かぶ

架空の例:経費精算システム「ケイヒくん」

最終章では、ここまで学んだことを1つのシステムに重ねてみます。題材は、社員がスマホやPCから経費を申請し、上長が承認し、経理が会計システムへ連携する、よくある経費精算システムです。Spring Bootで作られていると仮定します。

Javaはどこにいるのか:三層構造

多くの業務Webシステムは、次の3つの層に分かれています。

① 画面(フロントエンド)ブラウザやスマホアプリ。社員が見て操作する部分。HTML・JavaScript などで作られる。Javaの担当外
→
② 業務ロジック(バックエンド/サーバー)申請内容を検証し、承認ルートを判定し、金額を計算し、データベースに保存する。ここがJava(Spring Boot)の担当
→
③ データベース申請・承認・社員・勘定科目などのデータを保管。PostgreSQL、Oracle Database、MySQL など。Javaから SQL で読み書きする
Javaは真ん中の層にいます。画面から「申請を出す」操作が届くと、Javaのプログラムが内容を確認し、業務ルールを適用し、データベースに記録して、結果を画面に返します。「サーバー側のロジック」「バックエンド」と言われたら、この層のことです。

第5章・第6章の知識で、中身を想像する

経費申請が1件届いたとき、Javaの中では何が起きているでしょうか。これまで学んだ要素で組み立ててみます。

@Service                                           // 「業務処理を担当する部品」の印(Spring)
public class ExpenseService {

    public ApprovalRoute submit(ExpenseRequest req) {   // 申請を受け取り、承認ルートを返す

        if (req.getReceipt() == null) {               // 分岐:領収書がなければ受け付けない
            throw new ValidationException("領収書を添付してください");
        }

        BigDecimal total = BigDecimal.ZERO;
        for (ExpenseItem item : req.getItems()) {       // 繰り返し:明細を1行ずつ合計
            total = total.add(item.getAmount());
        }

        ApprovalRoute route = routeFor(total);           // メソッド呼び出し:金額で承認ルートを決める
        repository.save(req, total, route);              // データベースに保存(Springの部品経由)
        return route;
    }
}
  • @Service / public class ExpenseService経費処理を担当するクラス(第3・6章)。@Service はSpringに「業務処理の部品ですよ」と知らせる印(第7章)
  • submit(ExpenseRequest req)メソッド(第5章)。申請(ExpenseRequest クラスのインスタンス)を引数で受け取り、承認ルートを戻り値で返す
  • if (...) throw new ValidationException分岐と例外(第5章)。条件を満たさないとき、例外を投げて処理を止める。画面には「領収書を添付してください」と出る
  • for (ExpenseItem item : ...) / BigDecimal繰り返し(第5章)で明細を合計。金額なので BigDecimal(第4章)
  • repository.save(...)データベースへの保存。SQLを直接書かず、Springの部品に任せている(第7章)

全部、学んだ要素でできています。本物のシステムはこの何百倍の量がありますが、1つ1つのクラスやメソッドを見れば、この程度の構造の積み重ねです。「読めないもの」ではなく「量が多いもの」だと分かれば、エンジニアの説明も頭に入りやすくなります。

作られてから動き続けるまで

システムは「作って終わり」ではありません。開発から運用までの流れと、各段階で出てくる言葉を並べます。

① 要件定義・設計何を作るか決め、クラスや画面、DBの構造を設計する
→
② 実装エンジニアがIDEでJavaのコードを書く。Gitで変更履歴を管理
→
③ テストJUnitによる自動テスト + 人の手による結合・受入テスト
④ ビルドMaven/Gradleで部品を集め、JARファイルに固める
→
⑤ デプロイ(配置)JARをサーバーやクラウドに置いて起動する
→
⑥ 運用・保守監視、ログ確認、障害対応、バージョンアップ、法改正対応
CI/CDという言葉を聞いたら、③〜⑤を自動化する仕組みのことです。コードを変更するたびに自動でテストとビルドが走り、問題なければ自動で配置される。これが整っているシステムは、小さな改修を素早く安全に出せます。

環境の使い分け

同じプログラムを、目的の異なる複数の場所で動かすのが普通です。「本番に反映する前にステージングで確認します」という会話はこの話です。

環境用途経理・管理部門との関わり
開発環境エンジニアが作りながら試す場所通常は関わらない
テスト/ステージング環境本番と同じ構成で、リリース前に確認する場所受入テスト(UAT)で実際に操作して確認する。ここで業務目線の確認を怠ると本番で発覚する
本番環境実際に業務で使う場所障害時の影響範囲、データの正しさに直結

運用の現場で起きていること

動き始めたJavaのシステムは、運用担当者やエンジニアによって見守られています。障害報告や運用報告で見かける言葉を、第2章・第5章の知識でつなげます。

  • ログ:プログラムが「今これをした」「ここで例外が起きた」と書き残す記録。障害調査はまずログから。「ログに〜Exceptionが出ている」は第5章の例外の記録
  • スタックトレース:例外が起きたとき、「どのクラスのどのメソッドの何行目で起きたか」を呼び出し順に並べた記録。エンジニアはこれを見て原因箇所を特定する
  • ヒープ/メモリ不足(OutOfMemoryError):JVMに割り当てたメモリ(ヒープ)を使い切った状態(第2章)。大量データの一括処理で起きやすい
  • GC停止(ストップ・ザ・ワールド):ガベージコレクションのために処理が一瞬止まる現象(第2章)。普段は気にならないが、極端に長いと「画面が固まる」として報告される
  • バッチの異常終了:夜間の繰り返し処理(第5章)が、想定外のデータや接続切れで途中停止。「どこまで処理したか」「再実行して二重計上にならないか」が論点になる
  • 脆弱性対応:使っている部品やJDKに弱点が見つかり、更新が必要になる(第7章)。Log4jの件が代表例

経理担当者が運用で確認できること

・バッチの再実行ルール:途中で止まったとき、最初からやり直すのか途中からか。二重計上を防ぐ仕組み(冪等性、べきとうせい)はあるか
・金額計算の方式:BigDecimal を使っているか、端数処理のルールはどこで定義されているか(第4章)
・変更の経路:重要なデータ(金額、承認状態)を書き換えられる処理は限定されているか(第6章のカプセル化)
・バージョンとサポート期限:JDK・Spring・主要ライブラリのバージョンと、サポート終了時期(第7章)
これらはコードが読めなくても聞ける質問です。そして、聞かれたエンジニアは「分かっている人だ」と受け止めます。

Javaを選ぶべきとき、選ばなくてよいとき

最後に、第1章の問いに戻ります。新しいシステムを作る・刷新する場面で、Javaはどう位置づけられるでしょうか。

Javaが有力な場面

10年単位で使い、止められない基幹系・業務系
大人数・複数ベンダーで開発し、担当者が入れ替わる
既存のJava資産(システム・人材・ノウハウ)がある
金融・会計など、正確性と監査対応が重視される

他の選択肢が合う場面

数週間で作る小規模ツール、試作品 → Python、JavaScript など
データ分析・機械学習 → Python
画面の見た目・動き → JavaScript(Javaとは別物)
社内の定型作業の自動化 → ノーコード/ローコード、スクリプト
どちらが「良い言語」かではなく、何年使うか・誰が保守するか・間違えたときの影響は何かで決まります。これは技術の話であると同時に、投資判断とリスク管理の話でもあります。

この教材を終えて

おつかれさまでした。8つの章を通じて、次のことを学びました。

  1. Javaは1995年生まれの言語で、「どこでも動く」「人が多い」「後方互換性」「部品が豊富」という理由から企業システムの定番になった
  2. ソースコードはコンパイルされてバイトコードになり、JVMが動かす。「Javaを入れる」はJDKを入れること
  3. コードは「クラス>メソッド>文」の入れ子で、入口は main
  4. 変数には型がある。金額は BigDecimal
  5. 処理の流れは順次・分岐・繰り返し。例外は想定外への備え
  6. オブジェクト指向は、データと処理をまとめる整理術。カプセル化は統制の考え方と同じ
  7. Spring、Maven、JUnit、LTS、OpenJDK。言葉を役割で分類する
  8. Javaは三層の真ん中にいて、作られ、テストされ、配置され、運用され続ける

コードが書けるようにはなっていません。でも、エンジニアの説明が「知らない言葉の羅列」から「構造のある話」に変わって聞こえるはずです。それがこの教材のゴールでした。言葉を忘れたら、用語集に戻ってきてください。

この章のまとめ

  • 業務Webシステムは「画面・業務ロジック・データベース」の三層。Javaは真ん中の業務ロジック層を担当する
  • 実際のコードは、第3〜7章で学んだ要素(クラス・メソッド・分岐・繰り返し・例外・BigDecimal・Springの印)の積み重ね
  • 開発から運用まで「設計→実装→テスト→ビルド→デプロイ→運用」。CI/CDはこの自動化。環境は開発・ステージング・本番を使い分ける
  • 運用で出る言葉(ログ、スタックトレース、ヒープ、GC、バッチ異常終了、脆弱性)は第2・5・7章の知識でつながる
  • Javaを選ぶかどうかは、使う年数・保守する人・間違えたときの影響で決まる投資判断

確認クイズ

この章の内容を3問で確かめましょう。選ぶとすぐに解説が表示されます。

Q1. 業務Webシステムの三層構造のうち、Java(Spring Boot)が主に担当するのはどこですか?

Javaは真ん中の業務ロジック層(バックエンド)を担当します。画面はHTML/JavaScript、データの保管はデータベース製品の役割です。

Q2. 「本番に反映する前にステージング環境で受入テストをお願いします」と言われました。これはどういう依頼ですか?

ステージングは本番と同じ構成のリリース前確認の場です。ここで業務目線の確認を怠ると、問題が本番で発覚します。

Q3. 障害報告に「スタックトレース」が添付されていました。これは何を示すものですか?

スタックトレースは例外発生時の「現場までの道筋」の記録で、エンジニアが原因箇所を特定する手がかりになります。

読み終えたら、読了にしておきましょう。トップページのカリキュラムに記録が付きます(このブラウザ内だけに保存されます)。