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

