21
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【Androidひとり開発】~ガラパゴス実装に陥らないための参考資料~

~この記事は、ひとり開発 Advent Calendar 2019の提供でお送りしています~
前回の5日目は @mikkame さんの Githubの日本語で書かれてるっぽいIssueを検索するサイトつくったでした。5日目なのにmikkameさんでした。(絶対これが言いたくて・・・)
OSS活動の入り口に、言語ハードルから下げていくのは全く正しい&なかなか思いきれなかった切り口ですね。ありがたいサービスです。

Androidアプリ、作ってますか

作ってますか。(エコー)
開発手法の進化、ヤバいですよね。
Androidx、ついていけてますか。
findViewById、まだ使ってますか。
根絶する方法、調べましたよね。

「ググったらなんか出来たな」って、なりますよね。
「けどコレでええんか?」とも、なりますよね。

そこからの質問先、困りますよね。
インターネットの記事、古いですよね。

こんなとき、ひとり開発、つらくなりますよね。

僕は ついてゆけるだろうか
質問先のいないJetpackのスピードに

Jetpackの進化、名前の通り加速しすぎやんけってなガハハ!1

この記事でしゃべること

「道に迷ったらGoogle Codelabsを見てくれ」
「特にAndroidビギナー各位はandroid-kotlin-fundamentalsを見てくれ」

以上です。本当に以上です。あとは好き勝手喋ります。いち早く学びたい方はこの記事よりもリンク先を読んでください。
読みすすめる方はこのあたりからどうぞ。それより前は筆が乗りすぎただけの導入です。

Google Codelabs

そういうわけで、Androidをやっている皆々様におかれましては、
「いうてGoogle信じたら問題ないやろ」というアンサーに異論はないものと思います。無いよね?

なのでAndroid Developersを見ます。公式ですからね。大変に妥当。
ですがしかし、我々よわよわ開発者からすると大抵実装例が物足りません。

クラスのリファレンスあたりはメソッド名なんかから意味を察せると問題解決に至ったりしますが、
「組み立て方」のようなものを知りたいとなると白旗です。そうして安易な外部記事を参照してしまいます。

そう、組み立て方。実装例です。サンプルプログラムがほしい。欲を言えばチュートリアル形式でほしい。
その上で重要な部分には解説をつけて教えてほしい。自分で手を動かす要素があると殊更嬉しい。この際有料でもいい。2
そんなものがね。

あるんすよ・・・。(Google Codelabs)

AndroidのCodelabs

さて、早速先のリンクにアクセスされた方は、
大量に並んだ「見覚えのあるアイコンとよくわからん英文」を目にしたかと思います。

そのアイコン群の中にありますね。Androidも。ドロイド君が。コイツらを端からやってきゃあいいんですよ。

・・・というのはちょっとマッチョですが、まあ間違いではありません。
今回はさらに優しくオススメするものがあります。

さて、Google Codelabs内のカテゴリは、先ほど見たドロイド君のアイコンに当たる技術区分3だけではありません。
多くは過去のイベント(Android Dev Summitとか)で発表された内容なので、技術区分と並行して、イベント区分4が存在します。
このイベント区分、よくよく見ると、少し異なるものがあります。なんと学習コースとして組み立てられたものが存在します。
しかもいつもだいたい数ヶ月内に更新されています。

今回はソレについて喋ります。
Google Codelabs Android Kotlin Fundamentals Course

Android Kotlin Fundamentals Course

身につくもの

だいたいAndroid Architecture Componentsを学んでいくものと思ってよいかと思います。
https://developer.android.com/jetpack の「アーキテクチャ」の項目に沿って、紹介していきましょう。

先に言ってしまうと絶対にはじめからから順番にやった方がいいので、
それぞれ項目別にCodelabsのリンクを添えてはいるものの、これは最後の最後まで腰が重い人用みたいなモンです。

Data Binding

Codelabs : Android Kotlin Fundamentals 02.4: Data-binding basics
みんな大好きなやつです。レイアウト定義側に「この場所にはこの値を表示してな」と指定するようなやつです。

Android的には、XMLファイルに変数を記述するような形になります。
テキスト類が一番イメージしやすいですが、「変数の値がTrueの時表示、Falseの時非表示」というような使い方も可能です。
クリックリスナーなんかも指定できます。あと双方向bindingもあります。ユーザー入力がデータにすぐ反映されるやつ。

概念的な構成の概要だけ話しておくと、

  1. XMLファイル内で型とともに変数を宣言
  2. その変数を使ってXMLファイル内の表示内容を指定
  3. 処理側ではXMLファイルに対応したBindingオブジェクトから変数の値を代入

という感じです。
これの味をシメると、レイアウトはとりあえず<layout><data></data></layout>5を書くようになります。なりましょう。
そういえば、冒頭の「findViewByIdの根絶方法」の一つに当たります。Bindingオブジェクトから各View要素にアクセス可能です。

Lifecycle

Codelabs : Android Kotlin Fundamentals 04.1: Lifecycles and logging
これはあまり「このライブラリを使って出来ることがあってな」という話ではないやつです。
(クラスとしては、たぶんテストの時に使うくらい・・・?かと思っています)

とはいえ単語としては「Android開発の肝」と呼ばれるブツでありまして、
ライフサイクルという概念自体は何よりも重要です。君がクラスを直接使わずともLiveDataはLifecycleを使っている。
他のものを使うために必要な知識、という存在ですね。「初心者です」と言っても基本の図くらいは知っておきましょう。

LiveData

Codelabs : Android Kotlin Fundamentals 05.2: LiveData and LiveData observers
DataBindingがヤバくなるやつです。あとRoom。6
存在としては「持ってる値の変更を監視してるクラス」です。
変更時に走る処理を登録できて、たとえばそこに画面テキストの更新を入れておいたりしたらハッピーになるわけです。
そしてAndroidにおいては、XMLにLiveDataを直接書いておくと画面更新まで自動でやってくれちゃうとかいうヤバいアハ体験ができます。
上のリンクからさっさと使ってみましょう。

    private val _piyo = MutableLiveData<Boolean>()
    val piyo: LiveData<Status>
        get() = _piyo

自分はこの宣言のしかたをメチャクチャ守って開発をしています。

Navigation

Codelabs : Android Kotlin Fundamentals 03.2: Define navigation paths
アプリ内の画面(Fragment)遷移を管理するやつです。
あとAndroid特有の左側にシュっとなるメニューとか画面上についてるボタンとかをメッチャ簡単に実装できます。

編集がほとんどGUI上で出来るのもヤバいところで、遷移の時に固定で行う処理を定義したりも出来ます。
image.png
AndroidStudio君、こんな顔もできるんですよ。僕はもうビビり散らかしましたね。

Paging

Codelabs : Android Paging
(リンク先ページ名のとおり、実はこれだけFundamentals Courseにはありませんでした)

無限スクロールとかを実装するときに、流暢なデータ読み込みを実現するやつです。
loadInitial,loadBefore,loadAfterの窓口を持つDataSourceクラスを使ってデータの読み込み方を定義して、
RecyclerViewにPagedListAdapterというアダプタをアタッチして実装します。

ページの判別方法によってDataSourceに種類があるのと、
よく見つかるサンプルがWebリソース->ローカルキャッシュ->DataSource>の形なことが多いのでそれ以外の実装方法をしようとすると悩むことになりがちですが、
DataSourceだけ定義したらもうゴールが見えているくらいにPagingとしての実装ボリュームは少なくて住むものです。

Room

Codelabs : Android Kotlin Fundamentals 06.1: Create a Room database
アプリ内Database(SQLite)をラップするライブラリです。これまた大変使いやすいです。

自分は普段仕事で素のSQLiteとも戦っていますが(※記事作成当時)、使っている時の安心感から何から段違いですね。

定義するのは

  1. テーブル情報になるEntityデータ
  2. そのテーブルに対するクエリを持つDao(DataAccessObject)
  3. データベースオブジェクト

の3つです。
Entityはデータクラス置いといたらいいし、
Daoは呼びたいクエリごとに関数として窓口を用意する形で超わかりやすいし、
Database本体はDao紐付けたらいいだけです。

ViewModel

Codelabs : Android Kotlin Fundamentals 05.1: ViewModel and ViewModelFactory
画面(Activity,Fragment)が持ってる値を保持してくれるやつです。

要はActivityがライフサイクル的に死んでもこいつは生きててくれるという話なんですが、
これに関しては公式の画像がメチャクチャわかりやすくこのクラスのありがたさを表しているので貼っておきます。
image.png
このシンプルさよ。(図中右)

WorkManager

Codelabs : Android Kotlin Fundamentals 09.2: WorkManager
バックグラウンドの処理を管理するやつです。
バックグラウンドなので当然見た目が嬉しくなるものとかではないですが、メッチャ簡単に定期処理とかを実装できます。
識別子を定義しておいて、タスクの重複なんかもしないようにいい感じにやってくれる他、
そもそものリソースの使われ方なんかも「こいつに任せといたらおk」となるので使い得です。

おまけ情報

リポジトリ

コースで使うコードはすべて単一のGithubリポジトリにまとまっています。親切。

英語のおとも

Mouse Dictionary
みんな大好き魔王物語物語のwtetsuさんによる英単語一瞬で引けるマシーン。

Google 翻訳(Chrome拡張)
Codelabs中の英文は簡単に短めになっているので、文章単位でページ遷移無く翻訳できがち。

Read Aloud(自動読み上げ)
正直Codelabsではあまり使えていないんですが、メッチャいいです。

(ひとり開発AdventCalendarは)「ひとりぼっちで開発しているものを発表していくカレンダーです。」

「すみませんリリース間に合いませんでした・・・」

翌日は

@gayou さんの「mecab-koで簡易的なルールベースの韓日機械翻訳を作っている話」です。よろしくおねがいします!


  1. Android Jetpackが加速するものはそれを使う開発者の生産スピードです 

  2. なんと驚いたことにこれから紹介するものは無料ですが 

  3. そう呼ぶことにしました 

  4. 上に同じ 

  5. DataBindingライブラリによって、要素から始まるXMLファイルはBindingクラスが自動生成されるようになります。 

  6. RoomからLiveData<>返すやつの便利さはマジでヤバいので是非体験して頂きたい。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
21
Help us understand the problem. What are the problem?