FedoraでのJava開発環境構築と学習法01

FedoraでのJava開発環境構築と学習法01 Java

Fedora39(192.168.1.25)でのJDK17での開発環境構築と学習法をGeminiに尋ねながら、実践してみたいと思います。
まず、Fedora39に開発用のユーザー(testuser)を追加しました。

# useradd testuser
# passwd testuser
ユーザー testuser のパスワードを変更。
新しいパスワード:testpass ← 見えません
正しくないパスワード: このパスワードは辞書チェックに失敗しました – 辞書の単語に 基づいています
新しいパスワードを再入力してください:
passwd:testpass
すべての認証トークンが正しく更新できました。

その上で、以下に進みました。

≪プロンプト01≫

あなたは卓越したJavaプログラマであり、SEです。
私は、Fedora39サーバーにJavaの開発環境を置いて、そこで色々なプログラム・システムをつくりたいと思っています。
ただ、私は初心者で、Javaファイルをどのように設置して、システムを構築すべきかがわかっていません。どのように練習すれば効率が良いでしょうか?

≪Geminiの回答01≫

Fedoraは最新のライブラリがいち早く導入されるため、Javaのモダンな開発環境を構築するには最適の環境です。
初心者が効率よくJavaを習得し、システム構築まで辿り着くためのロードマップを「プロの視点」で構成しました。

1. まずは「土台」を作る:環境構築

Fedoraでは dnf を使って一瞬で環境が整います。まずは長期サポート版である Java 17 をインストールしましょう。

sudo dnf install java-17-openjdk-devel

開発の効率を上げる3点セット

①エディタ: 最初は VS Code(Remote Development拡張機能を使用)でサーバーに接続するのが一番楽です(後述します)。慣れてきたら IntelliJ IDEA を検討してください。
②ビルドツール: Maven または Gradle。これが無いと、外部ライブラリの管理で地獄を見ます。
③Git: バージョン管理は必須です。

2. 効率的な練習の3ステップ

Javaは「ファイル1つ」で完結する段階から、複数のクラスが連携する「システム」へとステップアップする必要があります。

Step 1: 単一ファイルの作成(文法の理解)
まずは /home/user/java-practice/ のようなディレクトリを作り、手作業でコンパイルする経験を10回だけやってください。

やること: javac Main.java → java Main

目的: Javaのプログラムが「クラス単位」で動くことを体感するため。

Step 2: オブジェクト指向の壁(設計の理解)
ここが最大の難所です。「犬」や「猫」のクラスを作る例題ではなく、「何かの管理システム」を想定して作りましょう。

練習台: 「簡易図書管理システム(コンソール版)」

学ぶこと: カプセル化、継承、ポリモーフィズム。

Step 3: フレームワーク(Spring Boot)の導入
現代のJava開発で、すべてを一から書くことは稀です。Spring Boot というデファクトスタンダードを使いましょう。

理由: セキュリティ、データベース接続、Webサーバー機能がすべてセットになっています。

練習: 自分のブラウザから http://サーバーIP:8080 にアクセスして「Hello World」が出るまで。

3. 推奨する「ディレクトリ構造」のベストプラクティス

初心者の方が迷うのが「どこに何を置くか」です。Javaでは Standard Directory Layout(Maven標準)に従うのが鉄則です。

my-project/
├── src/
│ ├── main/
│ │ ├── java/ <– あなたの書くソースコード (.java)
│ │ │ └── com/example/myapp/
│ │ └── resources/ <– 設定ファイル (db.propertiesなど)
│ └── test/ <– テストコード (ここを書くのがプロへの近道)
├── pom.xml <– 設計図(ライブラリ管理)
└── target/ <– コンパイルされた成果物 (.class / .jar)

4. 挫折しないためのアドバイス

完璧主義を捨てる: Javaの仕様は膨大です。まずは「動くもの」を作る楽しさを優先してください。
エラーメッセージと友達になる: Javaのエラー(Stacktrace)は非常に親切です。一番上の行を読んで、何が起きたか推測する癖をつけましょう。
公式ドキュメントを読む: ネットの記事は古いことが多いです。OracleやSpringの公式サイトを見る習慣を。

≪プロンプト02≫

Standard Directory Layout(Maven標準)に従って、ファイルをコンパイルする方法を教えてください。

≪Geminiの回答02≫

Maven標準(Standard Directory Layout)に従うことは、Javaエンジニアとしての「共通言語」を話す第一歩です。
この構造では、手動で javac を打つのは非常に大変なため、通常は ビルドツール(Maven本体) に任せるのがプロのやり方です。Fedora 39での具体的な手順を解説します。

1. Mavenのインストール

まずは、FedoraにMavenをインストールしましょう。

sudo dnf install maven

[testuser@home home]$ sudo dnf install maven

あなたはシステム管理者から通常の講習を受けたはずです。
これは通常、以下の3点に要約されます:

    #1) 他人のプライバシーを尊重すること。
    #2) タイプする前に考えること。
    #3) 大いなる力には大いなる責任が伴うこと。

セキュリティー上の理由で、あなたがタイプしたパスワードは表示しません。
[sudo] testuser のパスワード:
testuser は sudoers ファイルにありません。

① rootユーザー(特権階層)に切り替える

su

② testuser を wheel グループに追加する
Fedoraでは、wheel という名前のグループに所属しているユーザーだけが sudo を使えます。

usermod -aG wheel testuser

③ 設定を反映させるために一度ログアウト
一度接続を切り(VS Codeを閉じるか exit)、再度ログインし直してください。これで testuser は「大いなる力」を手に入れた状態になります。

2. プロジェクト構造の作成

手動でディレクトリを作るのは手間なので、Mavenの機能を使って「雛形」を生成します。

mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

これにより、標準的な構造が自動生成されます。

tree コマンドのインストール

sudo dnf install tree

自分のホームディレクトリに移動して実行

cd ~
tree

/home/testuser/
├── java-practice/ <– 1. 手動コンパイルの練習場所
│ ├── Main.class <– コンパイル済みバイナリ
│ └── Main.java <– ソースコード
└── my-app/ <– 2. Maven標準構造のプロジェクト
├── pom.xml <– プロジェクトの設計図
└── src/
├── main/
│ └── java/
│ └── com/
│ └── example/
│ └── App.java <– メインのソースコード
└── test/
└── java/
└── com/
└── example/
└── AppTest.java <– テストコード

3. ファイルのコンパイルと実行

Mavenを使うと、個別のファイルをコンパイルするのではなく、「プロジェクト全体」を対象にコマンドを打ちます。

① コンパイル(Compile)
src/main/java 内にあるすべてのソースコードをコンパイルします。

mvn compile

[testuser@home ~]$ mvn compile
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.083 s
[INFO] Finished at: 2026-03-08T07:10:52+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (/home/testuser). Please verify you invoked Maven from the correct directory. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MissingProjectException

POMがないというエラーが出ました。

cd  /home/testuser/my-app

ここで、改めて、

mvn compile
tree

/home/testuser/my-app/
├── pom.xml <– プロジェクトの設計図
├── src/ <– あなたが書くソースコード
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── example/
│ │ └── App.java
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── AppTest.java
└── target/ <– Mavenが生成した作業領域
├── classes/ <– コンパイルされた「実行用ファイル」
│ └── com/
│ └── example/
│ └── App.class <– App.javaを翻訳したもの
├── generated-sources/ <– 自動生成されたソース(通常は触りません)
│ └── annotations/
└── maven-status/ <– Mavenのビルド状態管理用
└── … (ビルドの履歴や管理ファイル)

成果物は target/classes/ に生成されます。

② パッケージ化(Build)
コンパイルし、テストを実行した上で、実行可能な jar ファイル(配布用パッケージ)を作成します。

cd /home/testuser/my-app/
mvn package

成果物は target/my-app-1.0-SNAPSHOT.jar のように生成されます。

tree

/home/testuser/my-app/
├── pom.xml <– プロジェクトの設計図
├── src/ <– あなたが書いたソースコード
│ ├── main/
│ │ └── java/
│ │ └── com/example/App.java
│ └── test/
│ └── java/
│ └── com/example/AppTest.java
└── target/ <– Mavenが自動生成した成果物(配布用)
├── my-app-1.0-SNAPSHOT.jar <– ★【最重要】これが「完成したプログラム」
├── classes/ <– コンパイル済みの実行用ファイル
│ └── com/example/App.class
├── test-classes/ <– テストコードのコンパイル済みファイル
├── surefire-reports/ <– テスト結果のレポート(合格した証拠)
├── maven-archiver/ <– JARファイル作成時の管理情報
├── generated-sources/ <– 自動生成されたソース
└── maven-status/ <– ビルドの進捗・状態管理ファイル

③ 実行
生成された jar ファイルを実行します。

java -cp target/my-app-1.0-SNAPSHOT.jar com.example.App

[testuser@home my-app]$ java -cp target/my-app-1.0-SNAPSHOT.jar com.example.App
Hello World!

やっと、「Hello World!」が表示できました。

4. なぜこの構造にするのか?(SEの視点)

「なぜわざわざこんなに深い階層にするのか?」と最初は感じるかもしれません。しかし、これには明確なメリットがあります。

依存関係の自動解決: pom.xml にライブラリ名を書くだけで、Mavenがインターネットから自動でダウンロードしてくれます。

リソースの分離: プログラム本体(.java)と、設定ファイル(.properties や .xml)を分けて管理できるため、保守性が高まります。

テストの自動化: src/test/java にテストコードを置いておけば、ビルドのたびに自動でバグがないかチェックしてくれます。

≪プロンプト03≫

my-project はどこに築くべきでしょうか?

≪Geminiの回答03≫

卓越したプログラマやSEは、技術的な正解だけでなく「運用のしやすさ」と「セキュリティ」を考慮して場所を決めます。
結論から言うと、個人開発であれば ホームディレクトリ直下 または 専用の作業ディレクトリ が最適です。

1. 推奨される設置場所

Fedora(Linux)において、Javaプロジェクトを置くべき標準的な候補は以下の3つです。

案A:ホームディレクトリ直下(最も一般的)
初心者からプロまで、個人の開発環境ではこれが一番無難です。

パス: /home/あなたのユーザー名/dev/

理由: 自分のユーザー権限(sudoなし)で自由にファイルを読み書きでき、設定ミスでシステムを壊すリスクが低いため。

案B:共有ディレクトリ(複数人で開発する場合)
もし将来的に他のユーザーとコードを共有するなら、ここを使います。

パス: /opt/projects/ または /usr/local/src/

注意: フォルダ作成に sudo(管理者権限)が必要になり、パーミッション(権限)の管理が少し複雑になります。

2. SEが実践する「ディレクトリ設計」の例

「どこに置くか」が決まったら、次はその中をどう整理するかです。プロジェクトが増えても迷わない構造にしましょう。

Plaintext
/home/user/
└── dev/ <– 全開発プロジェクトの親
├── java/ <– 言語ごとに分ける
│ ├── my-app/ <– 今回のMavenプロジェクト
│ └── practice/ <– ちょっとした実験用
└── scripts/ <– 自動化シェルスクリプトなど

3. なぜ /tmp や /var に置いてはいけないのか?

/tmp: 再起動すると消えてしまう可能性があります。せっかく書いたコードが水の泡です。
/var: 主にログやデータベースなど、システムが動的に書き換えるデータを置く場所です。ソースコードを置くのは作法として美しくありません。
/root: 管理者専用です。普段使いのユーザーでアクセスできないため、トラブルの元になります。

4. プロの「最初の手順」

Fedoraのターミナルを開いたら、以下のコマンドで環境を整えてみてください。

# 1. 開発用の親ディレクトリを作る
mkdir -p ~/dev/java

# 2. そこへ移動する
cd ~/dev/java

# 3. 前述の Maven コマンドでプロジェクトを生成する
mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

≪プロンプト04≫

サーバーにJDKやDBをインストールする必要はないのでしょうか?

≪Geminiの回答04≫

結論から言うと、「JDKは必須」ですが、「DBはステップに合わせて導入する」のが最も効率的な戦略です。
家を建てる(システムを作る)ことに例えると、JDKは「大工道具」、DBは「倉庫」のようなものです。道具がないと家は建ちませんが、倉庫は荷物が増えてから作っても間に合います。

1. JDK(Java Development Kit)は「必須」です

Fedoraサーバー上でプログラムをコンパイル(翻訳)し、実行するためには、JDKがインストールされている必要があります。

JRE (Java Runtime Environment): 実行するだけならこれで十分。
JDK (Java Development Kit): 開発者ならこちらが必要。 コンパイラ(javac)やデバッガが含まれています。

前述のコマンド sudo dnf install java-17-openjdk-devel でインストールされるのが、この「開発キット」です。これが無いと、Mavenも動きません。

2. DB(データベース)はいつ入れるべきか?

最初からDBをインストールして設定(ユーザー作成、権限、ポート開放…)にハマると、Javaの学習が止まってしまいます。

推奨するステップ

Level 1: まずは「メモリ上」でデータを扱う(ListやMapなどの変数に保存)。
欠点: プログラムを終了するとデータが消える。

Level 2: H2 Database(組み込みDB)を使う。
利点: Javaのライブラリとして動くので、サーバーへのインストール作業がいりません。ファイルに保存されるので、再起動してもデータが残ります。初心者はここから始めるのがプロの推奨です。

Level 3: PostgreSQL や MySQL/MariaDB をインストール。
利点: 本格的なWebシステムになります。Fedoraなら dnf install mariadb-server 等で簡単に入りますが、設定が必要です。

3. SEが考える「開発環境」の全体像

サーバー1台の中に、以下のようなパーツが揃って初めて「システム」として機能し始めます。

コンポーネント 役割 Fedoraでの主な選択肢
言語・実行基盤 Javaを動かす OpenJDK 17
ビルドツール 組み立て・整理 Maven / Gradle
データベース データの永続化 MariaDB / PostgreSQL / H2
Webサーバー 外部との窓口 Spring Boot (内蔵Tomcat)

4. 今後のロードマップ案

まずはJDKが入っていることを確認しましょう。

java -version
javac -version

両方のコマンドでバージョンが表示されれば、開発の準備は完了です。

≪プロンプト05≫

「最初は VS Code(Remote Development拡張機能を使用)でサーバーに接続するのが一番楽です。」ということで、拡張機能を入れたのですが、どう使ったら良いのですか?

≪Geminiの回答05≫

1. 接続の準備(Fedora側)

①Fedoraサーバー側で、SSH接続が許可されている必要があります。ターミナルで確認してください。

sudo systemctl enable –now sshd

②Fedora実機(または直接のコンソール)で設定ファイルを開きます。
sudo vi /etc/ssh/sshd_config

以下の行を探し、no になっていたら yes に書き換えます。

PasswordAuthentication yes

(行の先頭に # が付いていたら消してください)

保存してSSHを再起動します。

sudo systemctl restart sshd

③VS Code側の「既知のホスト」情報をクリアする
一度接続に失敗すると、VS Code(SSHクライアント)側に古い情報が残ってしまい、拒絶されることがあります。

Windows側の コマンドプロンプト を開きます。

以下のコマンドを打って、サーバーの情報を一度消去します(IPはサーバーのものに書き換えてください)。

ssh-keygen -R 192.168.1.25
その後、VS Codeから接続を試みてください。

2. VS Codeから接続する手順

① リモートウィンドウを開く
VS Codeの左下隅にある 青いアイコン(>< のようなマーク) をクリックします。

② コマンドを選択
画面中央上にメニューが出るので、「Connect to Host… (ホストに接続)」 を選択します。

③ 接続情報の入力
「+ Add New SSH Host…」 を選び、以下の形式で入力してエンターを押します。

ssh あなたのユーザー名@サーバーのIPアドレス
(例: ssh testuser@192.168.1.25)

④ 接続を開始
保存先を聞かれたら一番上の設定ファイルを選び、右下に出る「Connect」ボタンを押します。

初回は「Linux」を選択し、パスワードを求められたら入力してください。

SSH鍵認証

プロのSEはVS Codeでリモート接続する際、パスワードを毎回打ちません。
「SSH鍵」というペア(秘密鍵と公開鍵)を作ることで、パスワードなしで、かつ安全に接続できます。これが一番の解決策になることが多いです。

○設定のやり方(WindowsからFedoraへ)
1. Windowsのコマンドプロンプトで鍵を作ります。

ssh-keygen -t ed25519
(すべてエンター連打でOK)

2. 生成された公開鍵(C:\Users\あなたのユーザー\.ssh\id_ed25519.pub)の中身をコピーします。

3. Fedora側の /home/ユーザー名/.ssh/authorized_keys というファイルに、コピーした内容を貼り付けて保存します。

Views: 32