0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SpringBoot 学習記録】SpringBootを学習して理解するのにつまづいたこと

Posted at

はじめに

知人の紹介のもと、開発案件(女性同士のマッチングアプリ)に参画して半年ほどがたった。プロジェクトにおいてSpringBootを使うことになりはじめて触ることとなった。
プロジェクト自体はまだ続いているものの開発するにあたり理解するのに苦しんだことを記述したい。

開発する上で参考にした教材

自分が、SpringBootを理解するまで学んだ教材をあげる。基本はUdemyで紹介されている内容を参考に学んで行くのがとてもいいなと思った。

Udemyおすすめ

これを視聴してできること

  • Spring BootでWeb APIを実装できるようになる
  • IntelliJを活用して、コードを記述する開発スタイルがわかるようになる
  • Open API Schemaを活用しWeb APIのエンドポイントを設計できるようになる

Kindle Unlimited 本 おすすめ

これを読んでできること

  • Spring Bootを使ってMVCモデルの仕組みがわかる
  • データベースを活用した事例の体験
  • Dependency InjectionAOPといった少し難しい概念の理解

基本的なことを満遍なく学習できようになるのではないか。

IntelliJでの開発の難しさ

これまでは、Vscodeを使い開発を進めてきたが、今回のプロジェクトではIntelliJ IDEAを活用することになった。

IntelliJで開発をすると、どんなメリットがあるのか?使い慣れたVscodeでSpringBootを動かせないのかをずっと検証していた。

使いこなせるようになってきたら、IntelliJも悪くないなと思った。

  • 自動でコードを補完してくれる
  • リファクタリング機能
  • デバック・ビルドなどをスムーズに実行してくれる

他にも色々なことが実行できて拡張性が高い。ただ自分の場合は理解して使用するのに6ヶ月くらいかかった。

Spring Bootに関する難しさ

整理したいのはSpring BootとSpringは別物であるということである。同じJava言語を用いたものでアプリケーション開発に利用されるフレームワークという点では等しい。

Spring Bootはすぐに開発に着手できたり、自動で依存関係の管理がされたりなどできる。一方で、Springは設定が複雑で手間がかかり、大規模なシステムの開発には適しているということがわかった。

Spring BootもSpringも同じものだろうと決めつけずに学習できたのがポイントかもしれない。

DTOという概念

DTOはデザインパターンの1種。Data Transfer Object(データ転送オブジェクト)の略である。レイヤーとの間で、データをやりとりするためのオブジェクトのことを指す。

要するに、データ専用の入れ物。データを送ったり受け取ったりする。

DTOをなぜ使用するのか?

以下のようにエンティティまるまるレスポンスしてしまうために、問題が発生してしまう。

  • passwordの情報をそのまんま返却してしまう恐れがある
  • 無駄なデータを送り重くなる
  • 仕様の変更に弱い
.java
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String email;
    private String password;
}

@RestController
@RequestMapping("/users")
public class UserController {
    
    private final UserRepository userRepository;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userRepository.findById(id).orElseThrow();
    }
}
.json
{
    "id": 1,
    "username": "testuser",
    "email": "test@example.com",
    "password": "hashed_password123"
}

値をすべて返却してしまうのは、よろしくない。そのためにDTOが必要であるのだなあと感じた。

3層アーキテクチャ

3つの関心ごとにコードをまとめる発想のことを指している。

層の名前 アノテーション 役割
1 プレゼンテーション @Controller 画面からの入出力
2 ビジネスロジック層 @Service 業務ロジック
3 データアクセス層 @Repository データの保存や取得

Laravelを学んでいた自分にとっては、このService層が標準ではなく、新鮮な気持ちで学んだ。

アノテーション

アノテーションとは、コードに特別な指示を与える「ラベル」のようなものです。@マークで始まり、クラスやメソッドの前に記述する。

役割として

  1. コードの簡略化:複雑な設定を簡単に実施できる
  2. 自動化:SpringBootが自動的に必要な設定を実施できる
  3. 意図を明確化する:コードの目的をはっきりさせる

このようなものとして扱われるのである。

代表的なもの

アノテーション名 説明
@RestController RESTfulなWebサービスを提供するコントローラーを示す。@Controller@ResponseBodyを組み合わせたもの
@GetMapping GETリクエストを処理するためのショートカット
@Autowired Springの依存性注入を行うために使用される。自動的にBeanを注入する

初見でアノテーションをみたときは何をさしているのかまったくわからなかったが、意図をつかんできたら一気に理解が進んでいった。

おわりに

Spring Bootを学んでつまずいたことをまとめた。DIやMapperなどのまだ理解し尽くせていないことがあるが、引き続き学習を継続していきたいと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?