i-Vinci TechBlog
株式会社i-Vinciの技術ブログ

VS CodeでSpringBoot立ち上げ

運動不足軽減のためにインストールしたPikmin Bloomの最終起動日が90日以上経ってしまったakiyoshiです。最初にアバターを決め、鉢植え?をもらったところまでは覚えているのですが・・・ピクミン4が来たら本気出す。

さて、本題
最近、新人の基礎学習としてSpringBootを使って簡単なWEBアプリを作ってもらうことになり、環境を作ったので備忘として残します。アプリを作ってもらうだけなら、Eclipseで完結させた方が楽なのですが、未経験の人にも色々なものに触ってもらいたいという思い(と半分趣味)で、作りました。
私、個人としてはWidows上にEclipseを直置きの経験しかないため、これがSpringBootのWEBアプリとしてベストプラクティスかどうかは分かりません。

環境

  • Windows 10 ※バージョン2004以上(ビルド19041以上)
  • WSL2
  • Ubuntu20.04 LTS
  • VS Code(拡張機能各種)
  • Java17
  • Docker-DeskTop

構築手順

  1. WSL2をインストール

    1. wsl --installで必要なディストリビュートも入るから楽ちん
      WSLインストール画面
    2. のはずが、なぜか事故る
      WSL立ち上がらない
      powerShellでWSL確認
    3. ググると更新パッケージが必要でした
      手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする
      MSサイト
      パッケージインストール画面
    4. 上記インストールでうまくいけたので、Ubuntuのユーザーを作成する
  2. VS CodeからWSLへ接続する

    1. 拡張機能をインストール
    2. 画面左下の><をおすと画面中央で「ディストリビューションを使用して新しいWSLウィンドウ...」で接続先を選ぶ(たぶん既定のままでOK)
      VSCodeでWSL
    3. /etc/wsl.confを作成(デフォルトユーザーをrootに)し、WSLを再起動(powerShellでwsl --shutdown)する
      わざわざrootする理由はDockerのビルド時に権限周りがめんどくさいため。

      [user]
      default = root

      ※注意点
      root状態ではキャプチャ配下のディレクトリ以外は触らないようにしてください。
      Windows側のファイルを触ると権限都合で一部ファイルが実行できなくなる恐れがあります。
      rootユーザー注意点

  3. Java準備

    1. JDKで欲しいバージョンを探して、インストール

      apt list | grep jdk
      # 上記コマンドでほしいバージョンが出ない場合はupdateすること
      # apt update && apt upgrade
      apt install -y openjdk-17-jdk
      java -version

      JDK検索
      JDKインストール
      JDKインストール後確認

    2. Spring用VS Code拡張機能各種インストール
      今回ビルドツールはMavenではなく、Gradleを使います
      Spring用VSCode拡張機能
  4. Springプロジェクト作成

    1. コマンドパレットで「spring initializr gradle-project」を選択すると、設定を聞かれるのでひたすら答えていく
      ※Eclipseだとモーダルで一気に答えるところかな

      1. Springのバージョン
      2. 利用言語(java/Kotlinなど)
      3. パッケージ名(com.example)
      4. プロジェクトディレクトリ名(demo)
      5. ライブラリ形式(jar/war)
      6. 利用言語のバージョン(java8/11/17など)
      7. 利用ライブラリ
        ログイン処理を作るならspring securityを入れるなど適宜
        利用ライブラリ
      8. Springプロジェクトの作成場所
    2. 少し待つと完成
      .gradleディレクトリに色々入ります
      完成
    3. せっかくなので適当なファイルを作って画面表示確認
      立ち上げ2
  5. Docker-Desktopでコンテナ立ち上げ
    ※Docker-Desktopの利用は以下の点にご注意を
    Docker-Desktop注意点

    1. Docker-Desktopインストール(Download Docker Desktop for Windows
      WSL2が起動していれば、基本的に素のまま進んでいけばOK
    2. 設定(setting)をする
      1. General>Use the WSL 2 based engineにチェック
      2. Resources>WSL Integration>Enable integration with my default WSL distroにチェック
      3. ディストリビューションのトグルボタンをON
    3. WSL2ターミナル上(docker -v)でバージョンが表示されればOK
    4. mysqlコンテナ必要ファイル作成
      1. springアプリを作ったディレクトリにdocker-compose.yml作成
      2. mysqlディレクトリにビルド時に実行したいファイルや設定ファイルを作成
        ※databaseやテーブルのcreate文など(なくても動きます)
    5. コンテナ立ち上げ
      コマンドdocker-compose up -d --buildを打つか、Docker-desktop画面でポチポチすればOK
    
      version: "3.9"
      services:
      db:
         image: mysql:5.7
         command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
         environment:
            MYSQL_DATABASE: databaseName
            MYSQL_ROOT_PASSWORD: pass
            TZ: "Asia/Tokyo"
         ports:
            - "3306:3306"
         volumes:
            - ./mysql/data:/var/lib/mysql
            - ./mysql/init:/docker-entrypoint-initdb.d
            - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
  6. Springプロジェクトとmysql接続

    1. 設定ファイルを編集
      demo/src/main/resources/application.properties

      spring.jpa.database=MYSQL
      spring.datasource.url=jdbc:mysql://localhost:3306/databaseName
      spring.datasource.username=root
      spring.datasource.password=pass
      spring.session.jdbc.initialize-schema: always
    2. 動作確認
      「コンテナ立ち上げて設定ファイルも書いたし、DB使えるよね。」ということで確認しましたが、実はライブラリ不足でJdbcTemplateが使えませんでした。。
      慌ててbuild.gradleに以下を追加。

      dependencies {
       implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
      }

      再度ビルドしなおしてコードを追加したら、ちゃんとSQLの結果も返ってきてるのでOK
      DB接続後動作確認

やってみて

Java開発ではEclipseしか触ったことがありませんでしたが、VS Codeでも開発できそうなので、機会があればこっちでやってみようかと考え中です。
なんてことを言っていると、同僚からはIntelliJ IDEAを勧められ、また悩むという。

とはいえ、新人学習にIntelliJという選択肢はないと思うので、今回のことは無駄にならない!・・・ですよね?

参考