kotlinでSpring開発 Azure SQL 生成、接続

# 入る前に



１．Azureとは
Qiitaを利用する皆さんは既にご存知だと思いますが
Azureはマイクロソフト(MS)が提供する**クラウドサービス**で仮想マシンやデータベースを企業や個人が作り、利用できるようにしたサービスです．
データベース面ではSQL、MySQLなどが使えます．
使ったリソースの分だけお金を払えばいいし、一定時間使わないと止まったりするので予算を管理する面でいいと思います．
初回の方は無料クレジットをもらえるので経験してみるのもいいと思います

２．なぜAzure SQL DataBaseを選んだのか

特に理由はないです．昔、何も知らずにAzureのMySQLサーバーを利用した経験があったんですが、作るまでちょっと手間はかかるけど色んな設定を触りながら勉強になると思います．

:::note info
今までSupabase,MongoDB,SQL DataBaseを使ってみましたが、個人的には
おすすめはSupaBaseです．
勉強として開発してる段階ではサーバーを作る必要はないんですが、
自分でサーバーを作る必要なく、ややこしい設定をする必要もないんで一番使いやすいと感じました．
:::

# データベース生成
まずはAzureにログインしたらこのようなホーム画面が見られます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/206282ab-a591-407d-a683-59264084f7e8.png)
ここでリソースの作成を押します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/54b31d47-b965-4cb4-97f9-d2e3d64d1ed9.png)
この画面で左のデータベースを選択したら色んなデータベースが見えます．
SQLデータベースの作成を押します．

まず重要なのは32GB,100,000秒まで無料のサーバーレスデータベースのオファーを受け取ることでApply offerを押します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/d6c79d5d-f385-4db2-ae69-378c0dbd64e6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/e74529d0-57d3-4a44-a840-92aa36323f90.png)
こんな風にコストが０になってるのを確認してから進みます．

その後リソースグループを作ったらデータベースの名前を書いてサーバーを選択します．サーバーが存在しない場合は新規作成します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/c2e6b343-6733-4781-9721-50e5c32b9858.png)

サーバーを作る時は下の認証方法で私はSQL認証を使用、ログインするIDとパスワードを入力します．後でSpringと接続の時にも使われるので覚えときます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/fac79254-42b8-4261-a4c4-d09973d72669.png)

:::note info
サーバーの地域を選ぶ際に基本的にEast USになってると思います．地域によって無料オファーが消える場合もあるのでオファーが出てくるのか確認しながら選び直す必要があります．
:::

その後、次へとどんどん進んだら、追加設定でデータベースの照合順序のところに
元々はLatin～～になってますが日本語を扱うなら **Japanese_CS_AS_KS_WS**  を入力しとく方がいいです．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/16a9be1d-090f-4a81-84c8-b095f3240e7f.png)

これで設定は終わりで、データベースを作ったら、ホーム画面でSQLサーバーに入ってネットワーク設定で下のように設定すれば準備完了です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/e40a6da9-6f28-4582-b213-9269f90f77db.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/d9abd16d-4dd9-472f-aca0-42288e526367.png)

# Spring設定

### build.gradle.kts
dependenciesに三つのコードを追加します
```
implementation("com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.boot:spring-boot-starter-jdbc")
```
そして同じくrepositoriesのなかにはこのコードを追加します．
```
maven { url = uri("https://maven.microsoft.com")}
```
これが抜けるとdependenciesに追加したJDBC Drvierがちゃんとダウンロードできず、サーバーが稼働できなくなります．

```
repositories {
    mavenCentral()
    maven { url = uri("https://maven.microsoft.com") }
}

dependencies {
        implementation("org.springframework.boot:spring-boot-starter-web")
        implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
        implementation("org.jetbrains.kotlin:kotlin-reflect")
        testImplementation("org.springframework.boot:spring-boot-starter-test")
        testImplementation("org.jetbrains.kotlin:kotlin-test-junit5")
        testRuntimeOnly("org.junit.platform:junit-platform-launcher")
        implementation("com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre8")
        implementation("org.springframework.boot:spring-boot-starter-data-jpa")
        implementation("org.springframework.boot:spring-boot-starter-jdbc")
}
```
まとめてこうなります．

### application.properties

```
spring.datasource.url=jdbc:sqlserver://<サーバーの名前＞.database.windows.net:1433;database=＜データベースの名前＞;
spring.datasource.username=＜サーバーを作る時のID>
spring.datasource.password=<サーバーを作る時のパスワード＞
spring.jpa.hibernate.ddl-auto=update
```
もし情報を忘れた場合はデータベースのページに入ってここを押してJDBCを確認すれば分かります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/e5a547a2-67c4-41ef-bce5-3d37e8a96658.png)

※下の説明はIntellij Ultimateでの接続なんでIDEA版は異なる可能性があります．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/efc75399-e52c-41a3-a93f-96d676ab0b15.png)
application.propertiesに情報を入れたら左に小さいアイコンが出て、これを押したら
画面が出てきますが、HostやID,パスワードは自動的に入力されてるんで
情報を間違いなく入力してるなら下のTest Connectionをタッチ、問題がなかったら
OK-> これで接続完了です．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/ea7cbc81-9a83-4fc5-b905-5329a51ba129.png)

# TEST

これでSpringを稼働してみると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3876472/01ea5e0c-779c-4fe9-8ef3-3aa806a7ed9d.png)

安心のWhitelabelちゃんが出てきてくれます！

| 環境 | バージョン |
|:-:|:-:|
| Windows |  10  |
| Spring  | 3.4.3  |
| Kotlin  | 1.9.25  |
| Intellij  |  Ultimate (学生） |

#  エピローグ
この記事を書きながら新しくSpringプロジェクトを作ってみたんですが
いつもちゃんとdependenciesでSpring Webをチェックしてたんですが、それを忘れてしまい、データベースには問題がないはずなのにできないなーと思って、
GPTにも聞いてみたり他のプロジェクトのbuild.gradleなどと比較して３時間も無駄にした果て
```	
implementation("org.springframework.boot:spring-boot-starter-web")
```
最初の設定を忘れたせいで
ここに**web**が抜けてたというばかばかしい結果でした．．．
皆さんもこんなことありましたか？（多分ないですよね）

記事の中で間違ってる部分があれば教えてください．
ありがとうございます．