【個人開発】シンプルな単語帳アプリを作ってみた【Android】

# はじめに
少し前から開発を進めていた単語帳アプリの審査が通り、めでたくGoogle Play Storeで公開されました。
https://play.google.com/store/apps/details?id=com.warpstudio.android.simplevocabulary

せっかくなので簡単に開発を振り返ってみたいと思います。
![フィーチャーグラフィック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/477b7643-088f-6a5f-6ed1-c744ae62498f.jpeg)

# 作ったもの
「**SimpleVocabulary**」というその名の通りハチャメチャにシンプルな単語帳アプリです。
会員登録やログイン等は一切不要です。
**ストアの紹介文に書くことが無さ過ぎて困ったくらい**にはシンプルです。

↓は簡単なデモです（gifなんで見づらかったらゴメンナサイ）。
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/cfedaf98-1d73-fb13-55ea-f9f2091d8a73.gif)

デモだと既存の単語帳をcsvからインポートしていますがもちろんアプリ上で単語帳を作成したり管理したり、単語の登録もできます。

一応想定している使い方はリストに表示されている単語の訳を暗唱して、忘れてるやつがあったら詳細画面を開いて確認とお気に入り登録、後でお気に入りでフィルターかけて復習……って感じでしょうか。

# キックオフ

## 開発のきっかけ

英語の勉強ちょいちょいしてて、どうも自分にとって使いやすい単語帳アプリが見つからなかったんですよね。
ただでさえ鳥並の記憶力しかないのでこれはマズイ、あ、そう言えば最近家でちゃんと開発とかしてなかったなー、**よっしゃなら自分で作るか！**　ってくらいの非常に軽いノリで始めました。

## アプリのターゲット
ってわけで最大のターゲットは**おれ**に決まりました。

## プラットフォームの選定
今回はAndroidStudioで開発するのが前提だったので必然的にAndroidでのみの提供となりました。
なんでFlutterとかReactじゃないの？　って言われれば**ウチのMacがぶっ壊れてるから**ってだけです。
近いうちMacBookPro買ってiOS版もリリースします。

## 学習
むかし少しAndroidStudioを触った経験はあるのですが、散逸的な知識しかなかったので入門書一冊（「[Androidアプリ開発の教科書（第2版）](https://www.shoeisha.co.jp/book/detail/9784798152028)」はとても良かったです）と公式のトレーニング（[Android Kotlin の基礎](https://developer.android.com/courses/kotlin-android-fundamentals/overview?hl=ja)）を消化しました。
それぞれ過去の記事でも触れているのでよろしければ。

https://qiita.com/kame_yang/items/106f0d929254187f9f90

https://qiita.com/kame_yang/items/65433d697607662f2497

# 開発について

## 開発環境

* Windows 10 Home
* AndroidStudio 4.2.1
* Kotlin 1.5.0

基本的にJetpackの機能を使って実装しています。

## 開発期間
画面設計、デザイン、製造、テスト、全て含めてだいたい2週間くらいでしょうか。
今回は開発に着手する前に技術的なリスクを事前調査である程度消化していたのでスムーズに開発が進んだというのはあります。
その準備期間がだいたい10日くらいでしょうか。
ロゴやアイコンはIllustratorで作りました（~~なんとか試用期間内に仕上げられた~~）。

## リリース
11月8日申請をしたんですが審査に1週間くらいかかりました。
思ったより審査に時間がかかってやきもきしましたが、コロナの影響が続いているんでしょうか。
あとGoogle Play Storeでは段階的にすべてのアプリにプライバシーポリシーの適用を求めている最中とのことですが、自分の場合プライバシーポリシーのURLが必須項目になっていて焦りました（慌ててGitHub Pages立ち上げた）。

> [Google Play Storeの全アプリ、2022年4月からプライバシーポリシーが必須に](https://www.gizmodo.jp/2021/08/google-play-store-will-require-privacy-policy-presentation.html)

# 開発を通して

## 良かったこと
#### とりあえずリリースできた
やっぱりこれが一番大きいですね。
仕事でもサービスやアプリケーションはリリースしていますが、年次が上がってくると自分でコーディングする時間は減ってきます（SIer勤務なもので）。
そんな中で自分で手を動かして作り上げたアプリが日の目を見るってもは、こう、嬉しいもんですね。
特に自分にとっても未知のプラットフォームでもあったので、学ぶことは非常に多かったです。

#### 勉強が捗る
ターゲットが自分なんでそうでなくちゃ困るんですが。
完全に私事ですが、これまで英単語はSpreadSheetに自作の単語帳を作って、Sheetのアプリで見返して復習して……なんて無茶してたんですが、流石に3,000語とか4,000語とかになってくると効率ガタ落ちです。
それと比べたらずいぶん気軽に、空き時間使って単語の復習に手を出すようになりました。
**結構オススメですよ！　このアプリ！**（ダイマ）

## 反省したいこと
#### 実装優先が多い
今回の開発はリリース日を明確に決めて開発していました（じゃないとダラダラ先延ばしにしそうだったから）。
期日を守れたこと自体は良かったんですが、自分の理解が足りていない個所もあり、実装を優先したがためにMVVMパターンを守りきれなかった箇所がいくつか出てしまいました。
さすがに「**なんか知らんけど動いてる！　ヨシ！**」なんてことはないんですが、自動テストでカバーしきれていないのも気持ち悪いんで、早々にリファクタリングしたいと思います。

#### 収益化の仕組みを入れなかった
前述の通りこれは自分のためのアプリなんで、当初は広告や課金を入れるつもりはありませんでした。
ただ今になって思うと、これも勉強がてら収益化の仕組みだけでも実装しても良かったなぁ（後から入れるのは面倒なので）。

# 今後について
とりあえず自分的に欲しい機能もまだまだありますし、「**リリースして満足！　ハイ次！**」みたいなつもりはないです。
そのためにもまずはリファクタリングですか。
あとは機能増強と合わせてマネタイズも検討したいですね（せめてGoogleへのお布施をペイするくらいには）。
あとはiOSにも早く対応したいし、マーケティング一切やってないもんな、ASO対策も考えなきゃ……。

# おわりに
なんて具合にリリースしてからの方がやるべきこと、やりたいことは積みあがっていくもんですね。
これはどのシステム開発でも一緒ですか。
ただこの辺も自分でアプリ作ってリリースして初めて具体化されるロードマップでもあるので、（ぶっちゃけ他にも作りたいアプリのネタはあるんですが）しばらくはこのアプリと一緒に自分も成長していければと思いいます。

以上！
長文お付き合いありがとうございました。