Androidアプリを開発する #4（DBの準備）

# はじめに
今回はDB関連の部分を進めていきます.前回の記事はこちらから

https://qiita.com/sekkenn1102/items/536af9f97edf76694c6e

# DBを触る準備をする
* 今回はroomというライブラリを使用していきます.[公式資料](https://developer.android.com/training/data-storage/room?hl=ja#components)があったので、指示に従い、build.gradleを初期状態からdependenciesに追加して最終的に下記に更新してビルドを走らせます.

```build.gradle(app)
dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    val roomVersion = "2.4.2"

    implementation("androidx.room:room-runtime:$roomVersion")
    annotationProcessor("androidx.room:room-compiler:$roomVersion")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$roomVersion")
    // To use Kotlin Symbolic Processing (KSP)
    ksp("androidx.room:room-compiler:$roomVersion")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$roomVersion")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$roomVersion")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$roomVersion")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$roomVersion")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$roomVersion")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:2.5.0-alpha01")
}

```

* ビルドしたところビルドエラーで止まり、最終的にエラーで３か所修正しました.以下修正内容を記載します.


### 1.val が使えない
* 僕の環境では変数にvalを使えませんでした.対処法として色々調べたところ、valの代わりにdefを使用している記事がいくつか見つかったのでdefを使いました.

```build.gradle(app)
dependencies {
  ~略~
  val roomVersion = "2.4.2"
  ~略~
}
```

↓修正

```build.gradle(app)
dependencies {
  ~略~
  def roomVersion = "2.4.2"
  ~略~
}
```

### 2.kaptが使えない
* 初期状態のbuild.gradleだとkaptが使えないようです.対処法として、pulugins{}のしたにapply文を入れる必要があるようなのでそのあたりを下記のように書き換えました.

```build.gradle(app)
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}
apply plugin: 'kotlin-kapt'                                 //←これを追加
```

### 3.kspが使えない
* こちらも初期状態だとkspが使えないようなので、導入文を追加します.下記を追加しました.
```build.gradle(app)
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id "com.google.devtools.ksp" version "1.5.31-1.0.0"     //←これを追加
}
apply plugin: 'kotlin-kapt'
~略~
dependencies {

    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
    implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    //ksp
    implementation "org.jetbrains.kotlin:kotlin-stdlib"　　　　　　　　　　　　　　//←これを追加
    implementation "com.google.devtools.ksp:symbol-processing-api:1.5.31-1.0.0" //←これを追加

    def roomVersion = "2.4.2"

    ~略~
}

```




* 最終的に上記の修正を加えて再ビルドを行いました.ビルド（というよりライブラリのインストール）に少し時間はかかりましたが、ログに「build successful」と出たので完了です.


# おわりに
* roomの導入のエラー調査に思ったよりも時間と労力がかかったので今回はここまでにします.次回こそは実際にDBの中身を触っていきます…それではまた次回!


# 参考資料まとめ
* 公式のroom資料

https://developer.android.com/training/data-storage/room?hl=ja#components

* kapt関連

https://zenn.dev/shinqp/articles/558ae47b0c1c16

* kspの導入関連

https://zenn.dev/sobya/articles/0b9c9a510697b4