自己紹介
皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、約30年にわたって企業システムの開発に携わってきました。現在も現役のアーキテクトとして、重要システムの技術設計やソリューションの選定を担当しています。直近では、システム開発へのAI適用(AI駆動開発)という全社的な施策でリーダーを務めています。
セミナーでの登壇や雑誌への技術記事の寄稿を行ってきたほか、以下の書籍も執筆しています。
- 「マスタリング Java EE 5」(翔泳社、2007年)
- 「アプリケーションアーキテクチャ設計パターン」(技術評論社、2017年)
- 「Javaエンジニアのためのソフトウェアテスト実践入門」(技術評論社、2024年)
Udemy講座のご紹介
この一連の記事の内容は、私が講師を務めるUdemy講座『新 Java Basic編 / AI対応版』および『新 Java Advanced編 / AI対応版』と同じ範囲をカバーしています。
AIとチャットできるオールインワンの学習環境をリリースしました
Udemy講座の演習を動かすための学習環境として、Windows向けのデスクトップアプリ「Codinable(コーディナブル)」をリリースしました。
エディタ、実行結果、テスト結果、SQL、Webブラウザ、そしてAIチャットを1つの画面にまとめた、オールインワンの学習環境です。
学習に必要なものは、すべてCodinableの中で完結します。
- 演習の実行環境(Java 25、Gradle、Bashなど)が一式同梱されており、JDKのインストールや環境変数の設定は不要です
- インストールして「新規コース開始・再開」からコースを選ぶだけで、講座のすべての演習がそのまま動きます
- 書き換えて動かなくなっても、「初期化」で配布時の状態に戻せます
- 開いている演習のファイルと実行結果を踏まえて、AIに質問したり(Askモード)、ファイルの書き換えを指示したり(Agentモード)できます
AIに書き換えを指示し、差分を確かめてから実行する、というAI駆動開発の基本の流れを、Codinableの中だけで安全に体験できます。
AIチャットは、受講者ご自身が生成AIサービス(Anthropic、OpenAI、Googleのいずれか)のAPIキーを登録して使うBYOK(Bring Your Own Key)方式です。利用料金は各社から直接請求されます。APIキーを登録しなくても、AIチャット以外の機能はすべて使えます。
Codinableのインストーラは、以下のGitHubのReleasesページからダウンロードできます(64ビット版のWindows 10/11、管理者権限は不要)。
Java SEを網羅的にカバーした技術記事シリーズについて
Java SEの膨大なテクノロジー領域を、広くそして深くカバーした一連の技術記事をQiitaに投稿しています。AIエージェントがコードを書く時代に、プログラムが動く仕組みと構造を理解し、AIが書いたコードを設計とレビューの観点で判断できるようになることを目指した内容です。
シリーズ全体の構成と範囲、各記事へのリンク先は以下のとおりです。
| Udemyコース | 記事 | 主な内容 |
|---|---|---|
| 新 Java Basic編 / AI対応版 | 1.1 コースの概要と全体構成 | (コース固有の内容のため割愛) |
| 1.2 開発環境とサンプルコードのセットアップ | (コース固有の内容のため割愛) | |
| 1.3 Javaの概要 | Javaの位置付けと歴史、Java Virtual Machineの仕組み、Javaの言語特性 | |
| 1.4 JDKとJavaの開発環境 | JDKの構成、開発環境とAPIリファレンス | |
| 1.5 Javaのエディションとバージョン | エディションとリリースモデル、バージョンと主要な機能、Java SEクラスライブラリの全体像 | |
| 2.1 Javaプログラムの基本とHello, World! | コンパイルと実行の仕組み、プログラムの構造、ソースコードの記法と名前 | |
| 2.2 Codinableによる基本的な開発 | エディターと「▶ 実行」の仕組み、AIに書かせ、レビューし、実行して確かめる | |
| 3.1 型とメモリー | 変数と型、プリミティブ型と参照型、プリミティブ型の範囲と表現の限界 | |
| 3.2 リテラルと値の型 | 数値リテラルと既定の型、文字・文字列リテラルとテキストブロック | |
| 3.3 型変換と精度・桁あふれ | 型チェックと型変換、縮小変換で失われるもの、varによる型推論 | |
| 4.1 演算子の評価順と落とし穴 | 式の評価の順序、算術演算の落とし穴、比較と論理演算 | |
| 5.1 配列の構造と範囲 | 配列の構造、多次元配列 | |
| 5.2 参照の共有とnull | 参照の代入と共有、nullとNullPointerException | |
| 6.1 制御構文の概要 | 構造化プログラミングと3つの制御構造、ブロックとローカル変数のスコープ | |
| 6.2 条件分岐 | if文の構造と条件の順序、複数の条件の組み合わせ、switch文とフォールスルー、switch式と網羅性、三項演算子と分岐の書き方の選択 | |
| 6.3 繰り返し | for文と拡張for文、while文とdo-while文、ループの制御と無限ループ、ループのネスト | |
| 7.1 クラスの基本 | クラスとインスタンス、クラスの宣言とインスタンスの生成 | |
| 7.2 クラスの主要なメンバー | フィールドとメソッド、スコープとthis、コンストラクタ | |
| 7.3 オーバーロードと様々なメソッド呼び出し | シグネチャとオーバーロード、メソッド呼び出しの形と処理の流れ、クラスの状態の有無 | |
| 8.1 スタティックなメンバー | インスタンスメンバーとスタティックメンバー、スタティックフィールドと共有される状態、スタティックメソッドとスタティック初期化子 | |
| 8.2 finalと定数 | finalによる再代入の禁止、定数 | |
| 9.1 パッケージとインポート | パッケージとFQCN、インポートと名前解決、パッケージ構成と依存の方向 | |
| 10.1 カプセル化とアクセス修飾子 | アクセス修飾子と公開範囲、カプセル化とアクセサメソッド | |
| 10.2 クラスの関連と依存 | 関連と方向・多重度、依存と依存の方向 | |
| 11.1 継承と多態性 | 継承の構造とコンストラクタの連鎖、オーバーライドの成立条件、抽象クラスによる共通化と実装の強制、型の変換と多態性 | |
| 11.2 委譲と継承の使い分け | 委譲の構造、継承か委譲か | |
| 12.1 インタフェースと多態性 | インタフェースによる外部仕様の分離、クラスの階層と無関係な機能の追加、インタフェースの様々なメンバーと抽象クラスとの使い分け | |
| 13.1 Objectクラスとオブジェクトの様々な特性 | Objectクラスの役割、同一性と等価性、equals()とhashCode()の契約、参照の値渡しとイミュータブル、インスタンスのコピー | |
| 14.1 AIが書いたコードの読み方と不具合の切り分け | AIが書いたコードを読む手順、スタックトレースによる発生箇所の特定、再現と追跡、デバッガーの考え方と実行結果をAIに渡す方法 | |
| 15.1 列挙型 | 列挙型の構造、分岐と比較の設計、値と振る舞いを列挙型にまとめる設計 | |
| 16.1 文字列を表すクラスの特徴とAPI | Stringの不変性と文字列プール、StringのAPIの仕組み、文字列連結の仕組みとStringBuilder | |
| 16.2 正規表現とAPI | 正規表現の部品とマッチングの流れ、PatternとMatcherの仕組み、グループと置換・形式チェックの落とし穴 | |
| 17.1 ラッパークラスの特徴とAPI | ラッパークラスの構造と自動変換、オートボクシングの落とし穴と使い分け、数値ラッパーのAPIと浮動小数点の特殊な値 | |
| 17.2 数値関連クラスとそのAPI | 浮動小数点数の誤差の仕組み、BigDecimalの構造と使い方、数値と文字列の変換とその他の数値クラス | |
| 18.1 コレクションの構造と選び方 | コレクションの全体像と宣言の形、リストの内部構造、ハッシュの仕組みとセット、マップの構造とキー、要素の順序とデータ構造の選び方 | |
| 18.2 ソートと不変コレクション | 比較の仕組み(ComparableとComparator)、ソートされたセットとマップ、不変コレクションとビュー | |
| 19.1 例外の仕組みと伝播 | 例外とは、try-catch文と例外の伝播、チェック例外と非チェック例外、例外をどこで扱うか、スタックトレースの読み方 | |
| 19.2 後始末と例外の設計 | リソースの後始末、ユーザー定義例外と例外チェーン、例外の握りつぶし、アサーションと事前条件の検証 | |
| 20.1 古典的な日時クラスとAPI | 古典的な日時クラスの構造と問題点、既存コードの読み方とDate and Time APIへの置き換え | |
| 20.2 Date and Time API | 日時クラスの分類とイミュータブルな設計、ローカル日時の生成・計算・比較、日時の差分計算、タイムゾーンと瞬間、日時と文字列の相互変換 | |
| 21.1 入れ子クラス | 入れ子クラスの種類と構造、メンバークラスによる内部構造の隠蔽、匿名クラスとクロージャ | |
| 21.2 Optionalクラスとnull値の取り扱い | nullの入り込む経路とnullチェック、Optionalによる戻り値と引数の設計 | |
| 21.3 java.langとjava.utilパッケージのその他のクラス | Systemクラスと実行環境、プロパティファイルによる値の外部化、国際化対応、Objectsクラスによるnull安全な比較 | |
| 21.4 Java標準のその他のツール | javaコマンドとプログラムへの値の渡し方、JARファイルとクラスパス、JavadocによるAPIの約束事の記述 | |
| 新 Java Advanced編 / AI対応版 | 1.1 コースの概要と全体構成 | (コース固有の内容のため割愛) |
| 1.2 開発環境とサンプルコードのセットアップ | (コース固有の内容のため割愛) | |
| 2.1 モジュールシステムの構造 | モジュールが解決する課題、依存・公開・読み取り可能性、モジュールパスとモジュールグラフ、クラスパスとの共存 | |
| 3.1 スレッドの仕組みとスレッドセーフ | スレッドとメモリーの関係、スレッドの状態と待ち合わせ・割り込み、競合状態・可視性と同期化、デッドロックと明示的なロック、wait()とnotify()によるスレッド間通信、共有しない設計:イミュータブルとスレッドローカル、仮想スレッド | |
| 3.2 Executorフレームワークと非同期タスク | Executorフレームワークの構造、スレッドプールの種類と選び方、ExecutorServiceのシャットダウン、ScheduledExecutorServiceによる定期実行、FutureとCallableによる結果と例外の受け取り、複数タスクの一括実行と分割処理 | |
| 3.3 同期化支援と並行コレクション | 同期化支援のCountDownLatchとCyclicBarrier、マルチスレッド環境におけるコレクション、アトミック変数、並行処理コードのレビューの進め方 | |
| 4.1 ラムダ式と関数型インタフェースの仕組み | ラムダ式が成り立つ仕組み、処理を引数で渡す設計、遅延実行とクロージャ、メソッド参照 | |
| 4.2 ストリームのパイプラインの構造 | パイプラインの3つの段階と遅延評価、中間操作と終端操作、コレクタによる集約、副作用と並列ストリーム | |
| 5.1 ファイル入出力の仕組み | パスとファイル操作の構造、ストリームの層とデコレータ、文字コードと文字化け、リソースのクローズと読み込み方の選択 | |
| 5.2 バイト配列ストリームとシリアライズ | メモリー上のバイト配列とストリーム、シリアライズの仕組み、デシリアライズの危険と互換性 | |
| 6.1 TCPとUDPによるネットワーク | TCPとUDPの通信の流れ、ByteBufferの位置とリミット、TCPのサーバーとクライアント、ブロッキングとノンブロッキング、UDPによる送受信 | |
| 6.2 HTTPによるアプリケーション連携 | HTTPのメッセージとWeb API、HTTPクライアントAPIと同期呼び出し、非同期呼び出しとCompletableFuture | |
| 7.1 総称型の仕組み | 総称型が保証するもの、型消去の仕組みと制約、ジェネリックなメソッドと境界型パラメータ、型パラメータの互換性とワイルドカード、PECSによるAPI設計 | |
| 8.1 クラスローダーの仕組みとClassクラス | クラスのロードとライフサイクル、クラスローダーの階層と親への委譲、リソースの読み込みとコンテキスト・クラスローダー、Classクラス | |
| 8.2 リフレクションの仕組みとAPI | リフレクションの仕組み、動的な生成と呼び出し、リフレクションの使いどころと代償 | |
| 8.3 アノテーションの仕組みとAPI | アノテーションの仕組み、Java SEのアノテーションとコンパイラの警告、カスタムアノテーションとフレームワークの仕組み | |
| 9.1 レコードによる不変のデータの設計 | レコードの構造と値に基づく等価性、不変条件とコンパクトコンストラクタ、レコードパターンによるデータの種類の振り分け |
「Oracle認定Javaプログラマ」との対応関係について
『新 Java Basic編 / AI対応版』と『新 Java Advanced編 / AI対応版』は認定資格である「Oracle認定Javaプログラマ」(Silver、Gold)の範囲ともリンクしていますので、資格取得のための教材としても有用です。
ただしこのコースの目的は資格取得ではなく、あくまでも実践的なJavaスキルの習得にあるため、「Oracle認定Javaプログラマ」の範囲と完全一致しているわけではありません。「Oracle認定Javaプログラマ」には含まれていなくても現場実践の観点では必要と思われるものは範囲に取り込み、逆に「Oracle認定Javaプログラマ」の範囲の中でも一部の(現場での活用が限定的な)機能については、敢えて触れていません。

また本コースは「スキルの積み上げやすさ」と「現場におけるスキル活用」の観点で構成されているため、テーマの登場順序や組み方にも差異があります。例えば「Oracle認定Javaプログラマ」では、現場での利用頻度が高い「列挙型」は「Silver」の出題範囲に入っていませんが、本コースでは『新 Java Basic編』に登場します。
なお本コースと「Oracle認定Javaプログラマ」における主要な出題範囲との対応関係は、以下の表に掲載のとおりです。
| 資格種別 | 出題範囲 | 対応するコース | 対応する記事 |
|---|---|---|---|
| Silver | Javaテクノロジと開発環境についての理解 | 新 Java Basic編 / AI対応版 |
1.4 JDKとJavaの開発環境 1.5 Javaのエディションとバージョン |
| 簡単なJavaプログラムの作成 | 新 Java Basic編 / AI対応版 |
2.1 Javaプログラムの基本とHello, World! 9.1 パッケージとインポート |
|
| Javaの基本データ型と文字列の操作 | 新 Java Basic編 / AI対応版 |
3.1 型とメモリー 3.2 リテラルと値の型 3.3 型変換と精度・桁あふれ 16.1 文字列を表すクラスの特徴とAPI |
|
| 演算子と制御構造 | 新 Java Basic編 / AI対応版 |
4.1 演算子の評価順と落とし穴 6.1 制御構文の概要 6.2 条件分岐 6.3 繰り返し |
|
| 配列の操作 | 新 Java Basic編 / AI対応版 | 5.1 配列の構造と範囲 | |
| クラスの宣言とインスタンスの使用 | 新 Java Basic編 / AI対応版 |
7.1 クラスの基本 13.1 Objectクラスとオブジェクトの様々な特性 |
|
| メソッドの作成と使用 | 新 Java Basic編 / AI対応版 |
7.2 クラスの主要なメンバー 7.3 オーバーロードと様々なメソッド呼び出し 8.1 スタティックなメンバー |
|
| カプセル化の適用 | 新 Java Basic編 / AI対応版 | 10.1 カプセル化とアクセス修飾子 | |
| 継承による実装の再利用 | 新 Java Basic編 / AI対応版 | 11.1 継承と多態性 | |
| インタフェースによる抽象化 | 新 Java Basic編 / AI対応版 | 12.1 インタフェースと多態性 | |
| 新 Java Advanced編 / AI対応版 | 4.1 ラムダ式と関数型インタフェースの仕組み | ||
| 例外処理 | 新 Java Basic編 / AI対応版 |
19.1 例外の仕組みと伝播 19.2 後始末と例外の設計 |
|
| モジュール・システム | 新 Java Advanced編 / AI対応版 | 2.1 モジュールシステムの構造 | |
| Gold | Javaの基礎 | 新 Java Basic編 / AI対応版 |
8.2 finalと定数 15.1 列挙型 21.1 入れ子クラス |
| 例外処理とアサーション | 新 Java Basic編 / AI対応版 |
19.1 例外の仕組みと伝播 19.2 後始末と例外の設計 |
|
| Javaのインタフェース | 新 Java Basic編 / AI対応版 | 12.1 インタフェースと多態性 | |
| 汎用とコレクション | 新 Java Basic編 / AI対応版 |
17.1 ラッパークラスの特徴とAPI 18.1 コレクションの構造と選び方 18.2 ソートと不変コレクション |
|
| 新 Java Advanced編 / AI対応版 | 7.1 総称型の仕組み | ||
| 関数型インタフェースとラムダ式 | 新 Java Advanced編 / AI対応版 | 4.1 ラムダ式と関数型インタフェースの仕組み | |
| JavaストリームAPI | 新 Java Advanced編 / AI対応版 | 4.2 ストリームのパイプラインの構造 | |
| 組込み関数型インタフェース | 新 Java Advanced編 / AI対応版 | 4.1 ラムダ式と関数型インタフェースの仕組み | |
| ストリームに対するラムダ演算 | 新 Java Advanced編 / AI対応版 | 4.2 ストリームのパイプラインの構造 | |
| モジュール型アプリケーションに移行する | 新 Java Advanced編 / AI対応版 | 2.1 モジュールシステムの構造 | |
| 並列処理 | 新 Java Advanced編 / AI対応版 |
3.1 スレッドの仕組みとスレッドセーフ 3.2 Executorフレームワークと非同期タスク 3.3 同期化支援と並行コレクション |
|
| 並列ストリーム | 新 Java Advanced編 / AI対応版 | 4.2 ストリームのパイプラインの構造 | |
| I/O(基本およびNIO2) | 新 Java Advanced編 / AI対応版 |
5.1 ファイル入出力の仕組み 5.2 バイト配列ストリームとシリアライズ |
|
| JDBCによるデータベース・アプリケーション | 別コース『Java DBアクセス』 | - | |
| ローカライズ | 新 Java Basic編 / AI対応版 | 21.3 java.langとjava.utilパッケージのその他のクラス | |
| アノテーション | 新 Java Advanced編 / AI対応版 | 8.3 アノテーションの仕組みとAPI |

