Androidアプリ開発初心者が1ヶ月でアプリをリリースするまでにやった8つのこと

# はじめに
こちらは[DeNA 20 新卒 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dena-20-shinsostu)の18日目の記事です。

はじめまして、[@yayamochi](https://twitter.com/yayamochi)です。
10月末からAndroidアプリの開発の勉強を始めました。
Android端末をほぼ8年ぶりに触るところから始めて、
12月の半ばくらいまでにアプリを2つ開発し、1つはリリースまで行うことができました。

この記事では

- <b>どうやってAndroidアプリ開発の勉強をしたのか</b>
- <b>大学院生の私が修士論文と闘いながら、どのように個人開発を継続していったのか</b>

ということについてそれぞれ4つずつ、合わせて8つのことを紹介していきたいと思います。

# 対象読者📖
- Androidの開発にチャレンジしてみたい人
- 個人開発が続かない人
- ある程度プログラミング経験がある人

# 私の事前知識💡
- 研究でJavaを使っている、Kotlinはほぼ知らない
- iOSアプリの開発経験はあり
- [過去に開発したものたち](https://blog.yayawatanabe.net/portfolio)

# 今回つくったもの💫
## レーダーチャートメーカー

<img width="400" alt="radarchart.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/b0cacfa1-cd71-d5ae-ed8c-ca96058bcd73.gif">

その名の通りレーダーチャートの一覧を簡単にスマホで作れるアプリです。
こちらが今回リリースまで行ったアプリです。
来年度に引っ越しの予定があり、家を決める際に簡単に評価のメモができれば良いと思い作成しました。

[レーダーチャートメーカー(Google Play)](https://play.google.com/store/apps/details?id=net.yayawatanabe.radarchart)

【使用ライブラリ】
<b>公式のもの</b>
- Android Architecture Components(LiveData・Room・ViewModel・Lifecycle)
- Navigation Architecture Component
- RecyclerView
- kotlinx.coroutines
<b>依存性注入</b>
- Koin
<b>ログ解析</b>
- Firebase
<b>グラフ描画</b>
- MPAndroidChart

## 写真メモ帳　フォトメモ

<img width="400" alt="photomemo.gif" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/e218ab79-82e7-d4dc-81b6-505011a6b41d.gif">

こちらはAndroid開発経験者と2人で開発したもので、写真でメモするメモ帳です。
commit量的には3割くらいお手伝いしています。
もともと[iOS版](https://apps.apple.com/jp/app/%E5%86%99%E7%9C%9F%E3%83%A1%E3%83%A2%E5%B8%B3-%E3%83%95%E3%82%A9%E3%83%88%E3%83%A1%E3%83%A2/id1465555338)をリリースしていて、インストール数もぼちぼち増えていたのでAndroid版も作成することになりました。
現状、大体完成しており、細かいところを改善中です。

【使用ライブラリ】
<b>公式のもの</b>
- Android Architecture Components(LiveData・Room・ViewModel・Lifecycle)
- Navigation Architecture Component
- RecyclerView
- kotlinx.coroutines
- ViewPager
- CameraX
<b>依存性注入</b>
- Koin
<b>ログ解析</b>
- Firebase
<b>ロギング</b>
- Timber
<b>画像ライブラリ</b>
- Picasso
<b>パーミッション許可</b>
- PermissionsDispatcher
<b>メモリリークチェッカー</b>
- LeakCanary

# Android開発の勉強法💻
## 1. Kotlin Koans でKotlinならではの書き方に触れる
[Kotlin Koans](https://play.kotlinlang.org/koans/Introduction/Hello,%20world!/Task.kt)

私は普段からJavaを使って研究のコードを書いていたので、簡単にKotlinの文法を確認しました。
[30分で覚えるKotlin文法](https://qiita.com/k5n/items/cc0377b75d8537ef8a85)

その後はこちらのサイトで<b>Kotlinならではの書き方</b>を勉強していました。
Kotlinの問題をWeb上で実行して確かめることができます。

![スクリーンショット 2019-12-14 11.12.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/e7a40f70-f30b-bc0b-c853-0e7e4b409711.png)

## 2. Android Kotlin Fundamentals Course で一通りの開発の流れを学ぶ
<b>[Android Kotlin Fundamentals Course](https://codelabs.developers.google.com/android-kotlin-fundamentals/)</b>
KotlinでのAndroid開発の基礎を教えてくれる無料のコースです。
全10章で、非常でボリューミーな内容です。なぜ無料なの…！

- IDEのインストール方法・便利な使い方
- 基本的なUIの作成方法
- 画面遷移の作成方法
- ライフサイクルの理解
- DB操作

などを学ぶことができます。

内容がアップデートされることもあり、個人的には本を買うよりは新しい内容が書かれているのでやりやすいと思います。

少し大変な点は、すべて英語で書かれているという点です。
しかし、丁寧なソースコードもあるので翻訳しながら読んでいけば読み進められると思います。
本当に本当にオススメのコースです！

ちなみにChromeのブラウザを使っているのであれば、こちらの翻訳ツールが使いやすくて便利です。
カーソルで選択してアイコンをクリックすれば、すぐに翻訳結果をみることができます。
[ImTranslator: Translator, Dictionary, TTS - Chrome Web Store](https://chrome.google.com/webstore/detail/imtranslator-translator-d/noaijdpnepcgjemiklgfkcfbkokogabh?utm_source=chrome-ntp-icon)

![スクリーンショット 2019-12-14 11.08.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/3196d208-cae0-b606-c921-86f9b712b873.png)

私はこのコースを7章までやりました。
あとは<b>作りたいアプリを作る！→バグにぶちあたる→解決してまた作る！</b>のサイクルを繰り返してどんどん足りない知識を補っていきましょう。

## 3. DroidKaigiのYouTubeやスライドをチェックしよう
AndroidのカンファレンスであるDroidKaigiのYouTubeチャンネルがあります。
[DroidKaigi YouTubeチャンネル](https://www.youtube.com/channel/UCgK6L-PKx2OZBuhrQ6mmQZw/videos)
少し難しめの内容も多いかもしれませんが、面白そうな発表がたくさんアップロードされています。

- ぼくのかんがえた最強の Usecase の作り方
- Navigation Architecture Component によるアプリ内遷移の管理
- 今日から始める依存性の注入

などの発表をみました。
今の知識では少し難しい話でも、後々知識がつながることがあるので興味があれば是非聴いてみましょう。

## 4. Twitterやブログを購読して毎日情報収集をする
この1ヶ月の間に修士論文の審査が入っており、開発の時間がとれない日もありました。
しかし毎日技術には触れたい！ということでTwitterで情報収集のためのリストを作成し、それだけは毎日眺めるようにしていました。

リスト表示やキーワード検索の表示には以下のアプリがおすすめです。
- PCなら<b>TweetDeck</b>
- iOSアプリなら<b>Buncho</b>
- Androidアプリなら<b>ツイタマ</b>

<img width="400" alt="IMG_5748.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/b05f15e1-014d-0adf-7e39-163e11415b09.png">


個人的にオススメのタグは「#KotlinTips」です。
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">When debugging, you can modify the variable value directly: <a href="https://twitter.com/hashtag/KotlinTips?src=hash&amp;ref_src=twsrc%5Etfw">#KotlinTips</a> <a href="https://t.co/48itDVZ6zg">pic.twitter.com/48itDVZ6zg</a></p>&mdash; Kotlin (@kotlin) <a href="https://twitter.com/kotlin/status/1204294840789303296?ref_src=twsrc%5Etfw">December 10, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Kotlinの公式アカウントだけではなく、色んな人が日々情報を流してくれているので、初心者にはとても参考になる情報ばかりです。


# 個人開発の継続のコツ🕺
## 5. 最低限つくる機能と、あったらより良い機能をわける

<img width="500" alt="IMG_5664 2.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136289/9859b080-4b1d-8d2c-7004-f2e02c754c39.jpeg">
これはレーダーチャートメーカーを作る際にUIの概要をざっくりメモしたイラストです。(超汚い😅)
<b>黒が最低限の機能、赤が余力があれば追加したい機能</b>です。
最初から機能を盛り盛りにしてしまうと、先が果てしなくなり、どんどんやる気がなくなっていきます。
少し難しそうな機能の実装は最低限の機能の完成後に回しておくことで、挫折せずに開発を進めることができます。

## 6. 開発開始日は時間が取れる日を選ぶ
<b>最初のたたき台を時間のある日に一気に作ってしまいましょう。</b>
私は12月1日(日)にレーダーチャートメーカーの開発を始めましたが、
その日に大まかなアーキテクチャの構成、DBの設定、UIのベース作成、できる範囲で画面遷移の作成をガッツリやってしまいました。
大変な所を先にやっておくことで、時間のない平日にも「このUIだけ作っちゃおうか〜」と思うことができるのでオススメです。

## 7. できる限り毎日コードを書く
とても当たり前のことなのですが、結構難しいですよね…。
5分でもいいので、<b>毎日コードを書くかそれに関わる話に触れましょう。</b>
ベテランの方は知識が染み付いているので良いですが、
初心者の段階だと基礎が身についておらず、忘れるスピードも早くなり、余計やる気がなくなってしまいます。
なお私は一週間近くAndroidアプリの開発ができない期間があり、サッパリわすれてしまいました。

## 8. とりあえずリリースしてみるという考えをもつ
私は今まで3本のiOSアプリを作りました。
自分では「このアプリ絶対イケる…！！！」と思っても、全然インストールされないなんてザラです。
ツラいですが現実です。
私は初めて出したiOSアプリはあんまりインストールされずに、「あんなに大変だったのに…！」とがっかりしてしまった記憶があります。笑
だったら<b>最初に最小限の機能だけ作ってしまってリリースしちゃいましょう。</b>
出してみないと本当にニーズがあるアプリなのかわかりません。
一度リリースしてみて、ユーザーがいることが確認できれば、アップデートするやる気も湧いてきます。

# まとめ
この記事では私のAndroidアプリの開発の勉強方法と、リリースするまでアプリを作り続けるコツについて紹介しました。
あまり時間がとれないない中でも、単純なアプリですが作り切ることができました。
Androidアプリ開発をしたいけど、何からしたら良いかわからない、個人開発しようとしても作り切ることができない…！という方の参考になっていただけたら嬉しいです。