【Javaで実装】ユーザー登録機能はどう作る?クラスで役割分担する考え方
公開日: 2025年10月07日
どんなWebサービスにも必ずと言っていいほど存在する「ユーザー登録機能」。Javaを学び始めたあなたが次に取り組むべき、実践的なテーマの一つです。
しかし、いざ作ろうとすると、「ユーザー名やパスワードは、どうやってプログラムで扱えばいいの?」「登録された情報は、どこに保存しておくの?」といった疑問が次々と湧いてくるはずです。
もしあなたがユーザー登録を「ただデータを保存するだけの簡単な処理」だと思っているなら、それは大きな落とし穴の始まりかもしれません。 優れたユーザー登録機能の裏側には、必ず「責務の分離」という、美しく整理されたクラス設計が存在します。 今日は、ユーザー登録の実装を通して、Javaエンジニアが実践する「役割分担」の考え方を解説します。
ステップ1:ユーザー情報を入れる「器」を設計する (Userクラス)
まず最初にやるべきことは、ユーザーがどのような情報を持つのかを決めることです。 ID、ユーザー名、メールアドレス、パスワード…これらの情報をまとめて管理するための「器」が必要になります。 そこで登場するのが、前回学んだ「クラス」です。
ユーザー情報を専門に扱う User クラスを設計しましょう。これは、ユーザー一人分のデータを入れるための、専用の箱(オブジェクト)の設計図です。
// ユーザー情報を表現するための設計図
public class User {
private long id;
private String username;
private String email;
private String password;
// コンストラクタ:Userオブジェクトを作るときに呼ばれる初期設定
public User(String username, String email, String password) {
this.username = username;
this.email = email;
this.password = password;
}
// 各情報を取り出すためのメソッド(ゲッター)
public String getUsername() {
return this.username;
}
public String getEmail() {
return this.email;
}
// ... 他のゲッターも同様 ...
}
この User クラスは、「ユーザーとは何か」をプログラムの世界で定義したものです。 この設計図さえあれば、何人分のユーザー情報でも、同じ形で整然と扱うことができます。
ステップ2:ユーザー情報を「保管庫」に出し入れする (UserRepositoryクラス)
User クラスという「器」はできましたが、それだけではプログラムが終わると情報は消えてしまいます。 登録されたユーザー情報を永続的に保存しておく「保管庫」の役割を持つクラスが必要です。
この保管庫の役割を担うのが、リポジトリ (Repository) と呼ばれるクラスです。 本来はデータベースと通信を行いますが、今回は話を簡単にするため、Javaの ArrayList を擬似的なデータベース(保管庫)として使ってみましょう。
import java.util.ArrayList;
import java.util.List;
// ユーザー情報の保管庫(データベースの代わり)
public class UserRepository {
// ユーザー情報を保存しておくためのリスト
private List database = new ArrayList<>();
// ユーザーを保管庫に保存する機能
public void save(User user) {
// 簡単なメールアドレス重複チェック
for (User existingUser : database) {
if (existingUser.getEmail().equals(user.getEmail())) {
System.out.println("エラー: このメールアドレスは既に使用されています。");
return; // 登録処理を中断
}
}
database.add(user);
System.out.println(user.getUsername() + "さんを登録しました。");
}
}
UserRepository の仕事は、User オブジェクトを database というリストに追加(保存)することだけです。 このように、「データそのもの(User)」と「データを操作する処理(UserRepository)」をはっきりと分けることが、非常に重要なのです。
ステップ3:実際にユーザー登録を実行してみる (Mainクラス)
設計図(User)と保管庫(UserRepository)が揃いました。 いよいよ、これらを組み合わせて、実際にユーザーを登録する処理を書いてみましょう。
public class Main {
public static void main(String[] args) {
// 1. 保管庫の準備
UserRepository userRepository = new UserRepository();
// 2. 登録したいユーザーの情報を用意
User user1 = new User("田中 太郎", "tanaka@example.com", "password123");
User user2 = new User("鈴木 花子", "suzuki@example.com", "pass456");
User user3 = new User("田中 太郎", "tanaka@example.com", "dummypass"); // 重複データ
// 3. ユーザーを一人ずつ保管庫に保存していく
userRepository.save(user1); // -> 田中 太郎さんを登録しました。
userRepository.save(user2); // -> 鈴木 花子さんを登録しました。
userRepository.save(user3); // -> エラー: このメールアドレスは既に使用されています。
}
}
どうでしょうか。main メソッドの中では、「何をするか」という大きな流れだけが書かれており、User が具体的にどんな情報を持っているかや、UserRepository がどうやって保存しているか、といった細かいことは気にする必要がありません。 これが、クラスで役割分担する最大のメリットです。
【重要】実際の開発では、password123 のようなパスワードをそのまま保存することは絶対にありません。必ず「ハッシュ化」という処理を行い、元のパスワードが分からないように変換してから保存します。これはセキュリティの基本中の基本です。
まとめ
ユーザー登録機能は、単にデータを保存するだけの処理ではありません。
- User`クラスで、扱うデータの「構造」を定義し、
- UserRepositoryクラスで、データの「永続化(保存)」という責務を専門に担当させる。
このように、それぞれのクラスに明確な「役割」を与えること。 これが、Javaをはじめとするオブジェクト指向言語で、変更に強く、読みやすいコードを書くための、非常に重要な第一歩なのです。
プログラミング学習に必須ツール!
記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。
AIコード解説ツールを使ってみる →