システム概要
本システムは、教育機関や個人向けに構築されたWebベースの学習管理プラットフォームで、Spring Bootをバックエンドフレームワークとして採用し、MySQLによるデータ永続化を実現しています。フロントエンドとバックエンドを明確に分離した3層アーキテクチャにより、保守性と拡張性を両立しています。
主要機能スクリーンショット
(※ 実際のデモ画像や動画は省略)
認証・ユーザー管理の核心コード例
@RestController
@RequestMapping("/auth")
public class AuthController {
@Autowired
private LearnerService learnerService;
@Autowired
private JwtTokenProvider jwtProvider;
@PostMapping("/signin")
public ResponseEntity<AuthResponse> authenticate(@RequestBody LoginRequest req) {
LearnerEntity learner = learnerService.findByAccount(req.getAccount());
if (learner == null || !learner.getPassword().equals(req.getPassword())) {
return ResponseEntity.badRequest().body(new AuthResponse("認証失敗"));
}
if (!learner.getAuthority().equals(req.getRole())) {
return ResponseEntity.status(403).body(new AuthResponse("権限不正"));
}
String accessToken = jwtProvider.createToken(learner.getId(), learner.getAccount(), learner.getAuthority());
return ResponseEntity.ok(new AuthResponse("認証成功", accessToken));
}
@PostMapping("/signup")
public ResponseEntity<ApiResponse> register(@RequestBody LearnerEntity learner) {
if (learnerService.existsByAccount(learner.getAccount())) {
return ResponseEntity.badRequest().body(new ApiResponse(false, "既に登録済みのアカウントです"));
}
learnerService.save(learner);
return ResponseEntity.ok(new ApiResponse(true, "登録完了"));
}
@GetMapping("/signout")
public ResponseEntity<ApiResponse> logout(HttpServletRequest req) {
req.getSession().invalidate();
return ResponseEntity.ok(new ApiResponse(true, "正常にログアウトしました"));
}
@PutMapping("/profile/{id}")
public ResponseEntity<ApiResponse> updateProfile(@PathVariable Long id, @RequestBody LearnerEntity updated) {
learnerService.updateById(id, updated);
return ResponseEntity.ok(new ApiResponse(true, "プロフィールを更新しました"));
}
}
データベーススキーマ定義
CREATE TABLE IF NOT EXISTS `learners` (
`learner_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '学習者ID',
`account` VARCHAR(64) NOT NULL UNIQUE COMMENT 'ログインアカウント',
`credential` VARCHAR(128) NOT NULL COMMENT 'パスワードハッシュ',
`authority` ENUM('STUDENT', 'INSTRUCTOR', 'ADMIN') DEFAULT 'STUDENT' COMMENT '権限レベル',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '登録日時',
INDEX idx_account (`account`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `learners` (`account`, `credential`, `authority`)
VALUES ('admin', 'hashed_admin_pass', 'ADMIN');
技術スタック解説
Javaプラットフォーム
Javaはオブジェクト指向を基盤とした汎用プログラミング言語であり、JVM上で動作することでクロスプラットフォーム性を実現します。特にSpring Frameworkとの親和性が高く、DI(依存性注入)やAOP(アスペクト指向プログラミング)といったエンタープライズ開発に不可欠な機能を自然に統合できます。また、豊富なライブラリ群と成熟したエコシステムにより、大規模アプリケーションの開発・保守が容易です。
MySQLデータベース
MySQLはACID特性をサポートするリレーショナルデータベース管理システム(RDBMS)で、トランザクション処理や複雑なクエリにも対応可能です。InnoDBストレージエンジンを標準採用しており、行レベルロックや外部キー制約、クラッシュリカバリ機能を備えています。さらに、接続プーリングやレプリケーション機能により高可用性システムの構築も可能で、教育系システムから金融系まで幅広い用途に適しています。
この実装の特徴
コードベースはClean Architectureの原則に則っており、ビジネスロジックとインフラストラクチャ層を明確に分離。JWTトークンによるステートレス認証を採用し、セッション管理の負荷を軽減。データアクセス層ではMyBatis-Plusを活用し、冗長なSQL記述を最小限に抑えつつ柔軟なクエリ構築を実現しています。