2023/1/22)はじめにREST-APIを作ってみるシリーズ第四弾。Node.jsとPythonとSpringBootの基礎を勉強したいので、基本的なAPIをJava(SpringBoot)で作ってみる。Eclipseは使わずに、VSCodeで開発できるようJavaの環境構築も行なう。エンジニアを目指す日常ブログSpringから派生して、Javaの設計思想について学ぶことが多そうなので、今回はHTTPサーバを作るところまでで「その1」とする。Serviceクラス/Controllerクラス/Entity/三層構造アーキテクチャ/MVCモデル/Bean/DAO/シングルトン等々はその2として勉強予定。実施内容3:SpringBootでREST-APIを作成する初期プロジェクト作成リソース表現クラスを作成(解説)Javaのrecordクラスとは(解説)コンパクト・コンストラクタとはリソースコントローラを作成メインメソッド作成ビルド・実行おわりに参考資料SpringBootとは:JavaのフレームワークSpringBootとは、Javaのフレームワークの一種である。Frameworkの環境構築を簡単に行うためのフレームワーク。Frameworkはオープンソースのフレームワークで、WEBシステムの開発に向いている。超有名なフレームワーク。Programming:アスペクト指向プログラミング)が特徴となるらしい。Frameworkのことで、以下のような機能を多数含んでいる。Security:認証認可機能DI/AOPを実現する機能ビルドツールビルドツールはMAVEN:ビルドツールGRADLE:ビルドツール(MAVENの改良版)等がある。必要なライブラリのインストール、依存関係のあるライブラリのインストール、コンパイル、自動テスト、jarファイルの作成などを一括で実行してくれる。実施内容1:Javaの環境構築そもそも、Java自体、まともに勉強したのが数年前のため、環境構築からおさらいする。CodeVSCode拡張機能をインストールVSCodeのインストールは完了していたので、拡張機能のインストールから実施。JDKをインストール公式サイトからzipファイルをダウンロード。https://jdk.java.net/19/WindowsのC:\直下に展開した。MAVENのインストール公式サイトからzipファイルをダウンロードし、C:\直下に展開した。https://maven.apache.org/download.cgi環境変数・パスの設定Windowsの環境変数に以下を追加する。JAVA_HOME:C:\jdk-19.0.1PATH:元の変数にC:\jdk-19.0.1\binを追加PATH:元の変数にC:\apache-maven-3.8.7\binを追加JAVA_HOME変数は一見なくてもよさそうだが、MAVENのREADME(C:\apache-maven-3.8.7\README.txt)に記載があるとおり、設定しておかないとmvnコマンド実行時にエラーとなる。インストールできたことを確認する。以下チュートリアルからソースコードを借りています。CodeHello.javaファイルを作成する。Hello.javaを実行する。コンパウイルされてHello.classというファイルが作成されるので、javaコマンドで実行する。HelloHelloJavaの実行を確認できた。実施内容2:SpringBootでプロジェクト開始し、Webサーバを作成HTTPリクエストを受け付けられるWebサーバを作成する。参考資料ここからは以下のチュートリアルに従って実施していく。公式が提供している初期化ツールで、画像のように設定して「GENERATE」によりzipファイルをダウンロードし、解凍する。ProjectはMavenに設定する。デモ用コード作成DemoApplication.javaを書き換える。}}(解説)アノテーションとはアノテーションは、注記・注釈の意味であり、クラスやメソッド、変数に付与することができる。有名なものとしては、@Overrideがある(必ずオーバーライドしなくてはいけないメソッドにをつけることで、オーバーライドしそびれたらエラーになるようにする。)アノテーションを作りたい場合は@interfaceで定義できる。値を保持することもできる。0)のようにアノテーション付与することで値を利用できる。{}}@interfaceクラスには@Targetや@Retention等の「メタアノテーション」をつける必要があるようだが、割愛。アノテーションインターフェースに渡す変数名をvalueにしておくと、付与側で@CreateAnnotation("なまえ")のように変数名なしで渡せる。(解説)インポートされているSpringApplicationクラスSpringApplication:メインメソッドからSpringアプリケーションを起動するクラス。メインメソッドで使われている、runメソッドを持っている。(解説)利用されているアノテーション@SpringBootApplication:このクラスがSpringBootの「アプリケーションクラス」であることを示す。このようにアノテーションを示すことで、必要なコンポーネントをすべて自動で読み込んで使えるようにしてくれる。GETリクエストを特定のハンドラーメソッドにマッピングする。値として、今回は"/hello"が渡されている。ここで入れた値は、パスマッピングに利用される。)@RequestParam:クエリパラメータを設定できる。メソッドの引数をWebリクエストパラメーターにバインド(割り当て)する必要があることを示す。name)にアノテーションをつけることで、クエリパラメータ名とデフォルトの値を設定している。ビルド、実行PowerShellで以下コマンドを実行する。spring-boot:runと書いてある。コマンドプロンプトだとこのままでOKなのだが、PowerShellで実行しようとすると下記のようなメッセージが出てしまうため、.\mvnwコマンドを使うこと。見つかりませんでしたが、現在の場所に存在します。現在の場所からコマンドを読み込みません。入力してヘルプを参照してください。World!」が返却されていることがわかる。ヘッダ実施内容3:SpringBootでREST-APIを作成するJSON形式で返却できるAPIを作成する。初期化ツールでプロジェクトを作るところから始める。リソース表現クラスを作成リソースを表現するクラスを作成する。{}Greetingの型を定義した。getterを持っており、インスタンス作成時にコンストラクタを呼び出して値を設定する。(解説)Javaのrecordクラスとは単純なデータ構造のみを持つクラスをシンプルに記述するためのクラス。Java16から正式実装されている。finalのフィールドを自動生成できる。今回はidとcontentを自動生成できる。自動生成されたフィールドに値を設定するコンストラクタが自動生成される。実装すれば「コンパクト・コンストラクタ」を利用可能。getterが自動生成される。通常は、インスタンスが違えばequalsはfalseとなるが、自動オーバーライドすることにより、同じ値に対してtrueを返すようオーバーライドしてくれる。通常は、インスタンスの情報が返却されるが、クラス名、フィールド名、フィールドの中身を返却できるようオーバーライドしてくれる。プログラミングTIPS!(解説)コンパクト・コンストラクタとはrecordで利用可能なコンストラクトの宣言方法。}}リソースコントローラを作成Springの決まりとして、HTTPリクエストはコントローラによって処理する。コントローラであることを@RestControllerで示すことができる。@RestControllerを付与することによって、GreetingオブジェクトがJSONとしてHTTPレスポンスに書き込まれる。}}メインメソッド作成ひな形から特に変更せず。args);}}ビルド・実行ビルドしてjarファイルを作成する。(greetingapi直下。packagejarファイルが作成された場所がメッセージから確認できた。C:\Users\~~~~~~\greetingapi\target\greetingapi-0.0.1-SNAPSHOT.jar実行する。target/greetingapi-0.0.1-SNAPSHOT.jarPostmanで見るとJSONでデータ返却されていることがわかる。ヘッダ繰り返し呼び出すと、idがインクリメントされていく。Bootを利用して、HTTPリクエストを受け付けることができた。まじめにJavaを勉強しようとすると、知らないことがかなり出てくるが、、アーキテクチャ周りは知っておいて損がないと思うので、なるはやで「その2」を書けるようにしたい。事業会社のシステム部門で働きはじめて5年目の会社員。システム企画/要件定義/システムアーキテクチャ等。Twitter→@bun_sugi過去の記事についてはてなブログに掲載の記事(主にプログラミングメモ)についてはこちらに掲載しております。エンジニアを目指す日常ブログお問い合わせ|プライバシーポリシ。