はじめに
昨今AIエージェントやMCP使用で話が持ちきりだと思われるが、今まで既出の復習になる。
JavaのSpringについて特に予定はないが、Java案件に関わるときはよく聞く名前なので見直した。PHPのフレームワークLaravelと比較してみた。
Spring Bootについて
よくSpring Bootというのを聞く。
Spring Boot は Spring の設定を自動化・簡略化したもので、実はカスタマイズも可能です。
例えるとSpring はレゴブロックのように「全部自分で組み立てる」、Spring Boot は「ある程度組み上がったスターターキット」があって、すぐに遊べるようにしてくれている、ようなものです。
Spring と Spring Boot の比較
項目 | Spring(Spring Framework) | Spring Boot |
---|---|---|
定義 | Javaアプリケーションのための汎用フレームワーク | Springをより素早く、簡単に使えるようにした拡張フレームワーク |
設定 | XMLやJava Configなどで多くの設定が必要 | **自動構成(AutoConfiguration)**により、最小限の設定で開始可能 |
起動方法 | Tomcatなどのサーバにデプロイして実行 | 組み込みサーバ(Tomcatなど)で単体起動可能(java -jar ) |
学習曲線 | 柔軟で強力だが、学習コストが高い | 開発がスピーディーで導入しやすい |
カスタマイズ性 | 細かく設定可能で大規模システム向き | デフォルト設定に従えば楽だが、カスタマイズも可能 |
Spring Bootの特徴:
- Webアプリが1コマンドで起動する(
java -jar
で実行可能) -
@RestController
や@SpringBootApplication
などのアノテーションで簡単に設定 - 組み込みのTomcatで起動(Tomcatの設定不要)
-
application.properties
やapplication.yml
で設定管理
📌 よく使うアノテーション
アノテーション | 用途 |
---|---|
@Component , @Service , @Repository
|
DI対象のクラスとして登録 |
@Autowired |
自動的に依存関係を注入 |
@RestController |
REST APIのコントローラ |
@RequestMapping , @GetMapping など |
URLへのマッピング |
@Entity |
JPAでDBテーブルに対応するエンティティ定義 |
@SpringBootApplication |
アプリケーションのエントリーポイント |
開発の流れ
ざっくり以下で簡易に試せる。
- Spring Initializrでプロジェクト作成(https://start.spring.io)
- コントローラ、サービス、リポジトリ層の実装
- エンティティ(@Entity)とDB接続設定
- ビルドして実行(
mvn spring-boot:run
など)
アノテーション
アノテーションを、Laravelの構文と役割の対応関係で考えるとイメージしました。
アノテーション(例:@Controller
, @Autowired
)は、
Laravelで言えば「特定の役割を示すための記述」や「自動処理を司る仕組み」と似ています。
Springのアノテーション vs Laravelの記述方法 対比表
Spring アノテーション | Laravel のイメージ・対応 |
---|---|
@Controller or @RestController
|
Laravelの Route::get() でコントローラを指定する(UserController@index など) |
@Service , @Component , @Repository
|
Laravelの Serviceクラス , Repositoryパターン , Containerへの登録
|
@Autowired |
Laravelの 自動依存注入(コンストラクタインジェクション) 例: __construct(UserService $service)
|
@RequestMapping("/hello") @GetMapping("/hello")
|
Laravelの Route::get('/hello', [Controller::class, 'method'])
|
@Entity + @Table(name="users")
|
Laravelの User.php モデル + $table = 'users';
|
@Column(name="email") |
Laravelの $fillable = ['email']; のようなフィールド指定 |
@SpringBootApplication |
Laravelの AppServiceProvider や bootstrap/app.php (アプリ起動設定) |
🔍 具体例:コントローラ比較
Laravel のコントローラ
class UserController extends Controller {
public function index() {
return view('user.index');
}
}
Route::get('/users', [UserController::class, 'index']);
Spring Boot のコントローラ(アノテーション)
@RestController
public class UserController {
@GetMapping("/users")
public String index() {
return "user index page";
}
}
-
@RestController
:このクラスはREST APIを返す -
@GetMapping("/users")
:URL/users
にマッピング
LaravelとSpringの違いの捉え方
観点 | Laravel | Spring |
---|---|---|
宣言方法 | 関数呼び出しやサービスバインディング | アノテーションでメタデータを付加 |
処理の流れ | フレームワークが自動で依存注入 | フレームワークがアノテーションを解析して自動処理 |
開発スタイル | Laravelらしく明示的な書き方 | Springは宣言的・抽象的な書き方が多い |
Springではアノテーションを付けるだけで多くの処理が自動化されるため、
「フレームワークにどう動かしてほしいかを宣言する」という感覚です。
Laravelは記述的、Springは宣言的というイメージです。
おわりに
JavaとLaravelを比較すると、他色々確認したいことが出てきたので、また確認してみようと思う。