LoginSignup
41
41

More than 5 years have passed since last update.

Jetpack を使って、ビューモデルに沿った Android アプリを Kotlin で作成(2時間)

Last updated at Posted at 2018-05-22

TL; DR

Jetpack

  • Jetpack はアーキテクチャやUIその他色々の面倒を見てくれるすごいやつ
    • 自動でビューモデルのアーキテクチャでスケルトンを作ってくれる
  • 公式のページの導入手順に沿うと、ライブラリのインポートに失敗してビルドが正常完了しない(2018/05/22現在)
  • 動くサンプルはこちら 三 ( ◠‿◠ )☛ dogwood008/calc

Jetpack とは?

Google I/O 2018 で新たに発表された、ツールとライブラリ。以下の4つで構成される。

ファウンデーション、アーキテクチャ、ビヘイビア、UI Jetpackで使用できるもの
  • ファウンデーション
    • AppCompat (後方互換性サポート)
    • Multidex (メソッド数上限開放)
    • テストフレームワーク 等
  • アーキテクチャ
    • データバインディング
    • ナビゲーション
    • ビューモデル 等
  • ビヘイビア
    • 通知
    • パーミッション
    • 共有 等
  • UI
    • アニメーション&トランジション
    • 絵文字
    • レイアウト

Android Jetpack | Android Developers

Jetpack があると何が嬉しいの?

「Androidアプリ作りたいけど、アーキテクチャがいっぱいあってよくわからん」という人におすすめ。公式から提示された Jetpack により、これに乗っかっておけばなんとかなるという道が示された。

他にも上に挙げたようなもののうち、欲しいものだけつまんで導入することもできるので、車輪の再発明やボイラープレート(テンプレ)を引っ張り出してくる手間が省ける&(自分で書かなくてすむので)保守しやすくなるといったメリットがある。

Jetpackの導入

まずは Android Studio 3.2 が必要。でもまだ正式版は出ていないので Check for Update では振ってこない。ので直接zipをDLして展開する。

Preview release

プロジェクトをいつも通り新規作成する。

新規作成

いつもの通り進めていくと、見慣れないやつ Activity & Fragment + ViewModel がいる。これを選択して次へ。

Activity & Fragment + ViewModel

そうすると、アクティビティとフラグメントの名前に加え、ビューモデルの名前を決める画面が表示される。特に指定がなければデフォルトのままで完了。

ビューモデルの名前を決める

Jetpack を使った実装

ビューモデルを実装していく。デフォルトのままだと、(Kotlinサポートにチェックを入れていれば) MainViewModel.kt でビューモデルのクラスが定義されている。下記を入力して実装する。

MainViewModel.kt
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.arch.lifecycle.ViewModel

class MainViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String>
        get() = _data

    init {
        _data.value = "Hello, Jetpack!"
    }
}

続いて、実行に必要なライブラリをインポートする。

この手順では下記を変更せず書くことをおすすめします。もし原著の手順に従うとビルドに失敗するので注意!

build.gradle
// LiveData + ViewModel
def archLifecycleVersion = '1.1.1'
implementation "android.arch.lifecycle:extensions:$archLifecycleVersion"

// Navigation
def navigationVersion = '1.0.0-alpha01'
implementation "android.arch.navigation:navigation-fragment:$navigationVersion"
implementation "android.arch.navigation:navigation-ui:$navigationVersion"

最後に MainFragment.kt でビューモデルから取得した値を TextView に代入する。

MainFragment.kt(抜粋)
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)
    viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
    val text = viewModel.data.value
    message.text = text
}

これでおしまい。あとはビルドしたら Hello, Jetpack! が表示される。

Hello, Jetpack!

今回のリポジトリはここに置いておきます。

https://github.com/dogwood008/calc
(電卓を作りたかったけど、2時間で記事書きながらじゃちょっと無理だった)

感想

正直アーキテクチャなんて好き好みあるし、どれが自分に・チームに最適かはわかんないよな~という人向けに、 「Jetpackを使ったら自動的にビューモデルである程度用意してくれる」というのが自分は好き。 Rails と比べるとやや物足りない感もあるが、「ディレクトリに意味があって、名前を勝手に変えると破滅して、……」というよりは初めてでもとっつきやすいので、その点を加味するとこれくらいで良いのかも。

もし記事中に誤りがあれば、 @dogwood008 までご連絡いただけると幸いです 🙇

参考

41
41
3

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
41
41