ところどころドットインストールにブチ切れながらも4ヶ月かけてAndroidアプリ作って結果11ダウンロードされたクロニクル。

#はじめに
先日、Androidアプリをリリースしました。

テクノロジーが進化したこの現代（イマ）、世の中には割引計算が出来ない大人で溢れています。そんな世界を、Androidアプリの力で良くしたい、その一心で、せっせこせっせこ作ったアプリがこちらになります。

![スクリーンショット 2017-12-04 21.01.55.png](https://qiita-image-store.s3.amazonaws.com/0/32820/37d47c2d-a8fa-a9d4-6119-30897742a8a5.png)
[片手で簡単　割引計算アプリ をダウンロードしよう](https://play.google.com/store/apps/details?id=com.yoichirowatanabe.calculatorapp)

どうか、どうか、アプリをダウンロードしていただき、このネジ曲がった世の中を一緒に良くしていこうぜください！（お願いしますm(_ _)m）

#この記事の狙い
さて、AndroidアプリはJavaというプログラミング言語で書くのですが、今回わたくしは、そのJavaを全く触ったことのない状態から合間合間で勉強を始め、約4ヶ月でリリースまでこぎつけることができました。そこで、この記事は、

* Androidアプリ作ってみたいけどJavaって何？という状態の
* 日常的には非エンジニア業をしているプログラミング初心者の方に向けて
* 平日は普通に働いてるけど実際どんな感じのペースで進めればいいの？という疑問にやんわりこたえつつ
* ゼロからリリースするまでにやること全部がだいたい想像つくようにする

を目的に書きました。

なので、各実装コードや操作の細かいところを丁寧にスクショ付きで解説、というのはGoogle検索の方に託し、大体こういう事をこのくらいのペースでやると、ズブの素人がアプリリリースまで漕ぎ着けますよというのを説明します。

最後までお付き合いくださいませ。

#やったこと
* [JavaとAndroidアプリの基礎（0.5ヶ月）](#java%E3%81%A8android%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AE%E5%9F%BA%E7%A4%8E05%E3%83%B6%E6%9C%88)
* [Androidサンプルアプリでどういう感じで作れるか探る（1ヶ月）](#android%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA%E3%81%A7%E3%81%A9%E3%81%86%E3%81%84%E3%81%86%E6%84%9F%E3%81%98%E3%81%A7%E4%BD%9C%E3%82%8C%E3%82%8B%E3%81%8B%E6%8E%A2%E3%82%8B1%E3%83%B6%E6%9C%88)
* [自分の作りたいアプリをGoogle検索を駆使して実装する（1.5ヶ月）](#%E8%87%AA%E5%88%86%E3%81%AE%E4%BD%9C%E3%82%8A%E3%81%9F%E3%81%84%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92google%E6%A4%9C%E7%B4%A2%E3%82%92%E9%A7%86%E4%BD%BF%E3%81%97%E3%81%A6%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B15%E3%83%B6%E6%9C%88)
* [検証とコードのお掃除作業（0.5ヶ月）](#%E6%A4%9C%E8%A8%BC%E3%81%A8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E3%81%8A%E6%8E%83%E9%99%A4%E4%BD%9C%E6%A5%AD05%E3%83%B6%E6%9C%88)
* [GooglePlayに登録してアプリをリリースする（0.5ヶ月）](#googleplay%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%97%E3%81%A6%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%99%E3%82%8B05%E3%83%B6%E6%9C%88)

※平均して、平日は1~2時間、土日は合わせて8~10時間というペースで期間換算しています。

##JavaとAndroidアプリの基礎（0.5ヶ月）
まず、働いています。デフォルトで働いているので、時間がありません。つまり空いた時間で効率的にやらないと終わらないのです。闇雲に手を動かすのも手かなとは思いましたが、ヘロヘロの状態で帰宅し、残されたカロリーを最大効率化させなければならないという使命にかられ、まずは学習方法をひたすら調べました。（結局これといったものはみつかりませんでしたが。）なかでも境遇が似ていたこちらの方の記事は、学習からリリースまでのイメージがつきやすかったですが、なにせこういう系のやつは、本職で仕事として学ぶ人の時間の使い方、気合の入り具合を全然考慮していなかったりするので、真に受けて「俺もできる！」と思っちゃうととんでもないことになるなと今までの数々の人生経験から薄々感じ取り、かいつまんで参考にする程度にしました。
[文系出身の僕はこうやってAndroidアプリ開発のエンジニアになりました！【後編】](https://staffblog.yumemi.jp/androidengineer20151009/)

ここで早くも書籍読むのだりーと思い、初心者御用達「ドットインストール」に秒で駆け込みました。そこで「Androidアプリを作れるようになろう」という、「もうこれだけやってればアプリだせるやん！」という神講座を見つけたのですが、ページ下部に「前提：Javaの基礎」的なことが書いてあり、そんなかったるいことしてられるかと、無視してAndroidの講座を観たのですが、やはりこれが全くわからない。
[ドットインストール Androidレッスン一覧](https://dotinstall.com/lessons/search#!/filter/Android%E3%82%A2%E3%83%97%E3%83%AA)
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/faadca70-4f80-a554-9f2a-a37dbc0ba7c3.png" width="50%">


いや、やってることはわかるんですが、なんでそうやって書くのかとか、動画の中で「XXって書いておけばいいので」とか言われるたびに「は！？なんで！？ざけんな！」と悪態をつき、女性ボイスに切り替えてもう一度視聴してみるものの苛立ちは変わらず、（1ヶ月限定と思い、プレミアム会員になって観ていたので、もったいなさから、渋々、）手を動かすという感じでした。ですがこの経験がとても良かったです。
![computer_keyboard_yatsuatari_man.png](https://qiita-image-store.s3.amazonaws.com/0/32820/96ce8224-2913-4755-d822-f2d96126c76e.png)


そう。ここでようやくわかったのです。
__「AndroidアプリはJavaがわからないと作れない」__

これが突きつけられて僕はようやくスタート地点に立つことができました。

一旦、全Android入門の動画を観きったものの、やはり一切分かった感がなかったので、ここでぐっと我慢してJavaの書籍を読む決意をしました。なるべく効率よく学習したいので、Amazonのレビューだけをひたすら読み、書評をブログで調べ、たどり着いたのがこちらの一冊でした。

[スッキリわかるJava入門 第2版](https://www.amazon.co.jp/%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%8F%E3%81%8B%E3%82%8BJava%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%82%B9%E3%83%83%E3%82%AD%E3%83%AA%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%B8%AD%E5%B1%B1-%E6%B8%85%E5%96%AC/dp/484433638X)
![スクリーンショット 2017-12-18 20.57.12.png](https://qiita-image-store.s3.amazonaws.com/0/32820/8e9c7957-90e2-4e8b-cf77-efa962562044.png)

もう、My Java Lifeは、この書籍がすべてと言ってしまってもいいくらい、目からウロコが落ちまくりました。Javaがかなりわかった気になれます。というかわかったと思います。多分。実際、冒頭のアプリリリースするまでに、この書籍の知識だけで困ったことがなかったですので、効果は本物です。これこれの章から読むとわかりやすいよというような読み方指南もあり、相当に読みやすかったですし「ドットインストール様、私が悪うございました。（泣）」という気持ちにもなれます。3回くらい読み返しました。

で、再度「ドットインストール」に戻ってくるわけです。悪態をついていた頃とは比べ物にならないほどの吸収力で学習できます。そう。順番大事。

##Androidサンプルアプリでどういう感じで作れるか探る（1ヶ月）
まあここまでくればヨユーでアプリ作れるだろ、と思っていましたが、やりたいことがどうやったら実現できるか、そのキーワードすら分からないという現実に直面して今までの時間はなんだったんだという気分で絶望します。「こういう風にスーッとスクロールできて、いい感じに止まるやつ」＝「RecyclerView の SnapHelper」とかわからないわけです。その場しのぎのググり力でなんとかできるものの、1個1個絞り出すようにググってるうちに「ああ、きっと今回もアプリがリリース出来ないんだ。こうやって勉強だけして終わっていくプログラミング人生なんだ。」という気持ちになり、効率が悪いです。

そこで、取って借りたるは先人の知恵、ということで、サンプルアプリを大量に写経して作り方のベース（パーツ）のようなものを学びました。
![3c505302.png](https://qiita-image-store.s3.amazonaws.com/0/32820/ba159b07-7c70-348e-062d-2f1a81962754.png)


その際に再度活躍してくれたのが「ドットインストール」の「AndroidでXXアプリ作ってみよう」シリーズです。10個くらいあるので片っ端から真似していると、どういう関数の組み合わせでアプリが出来ていくかの雰囲気がつかめます。ただ、またここで悪態を突くことになりました。「XXってするとうまくいきますね」の意味がわからず、「は！？なんで！？ざけんな！」です。
[【再掲】ドットインストール Androidレッスン一覧](https://dotinstall.com/lessons/search#!/filter/Android%E3%82%A2%E3%83%97%E3%83%AA)

Javaの件で学んだわたくしは、例によって、「Androidアプリってそもそもどういう仕組みで立ち上がって、レイアウトはどういう考え方で動いていて」というのを書籍で学習することにしました。ここでもAmazonレビューをしこたま読み漁り、休日はジュンク堂書店に入り浸り、やっとのことで選び出しました。

[Androidアプリを作ろう [Android Studio 2.1対応版]](https://www.amazon.co.jp/Android%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86-Android-Studio-2-1%E5%AF%BE%E5%BF%9C%E7%89%88-Nobuo_CREATE-ebook/dp/B012A2KDHU)
![スクリーンショット 2017-12-18 21.06.49.png](https://qiita-image-store.s3.amazonaws.com/0/32820/707f0a59-be80-cf7e-bb2b-e748d842244c.png)


いわゆる個人出版の電子書籍ですが、プログラムのどこを経路として辿って、Androidアプリが立ち上がるのかや、レイアウトの基本的な考え方といった、Androidアプリがどうやって動いているかを程よい粒度で俯瞰できるので良かったです。3,000円くらいする大抵の分厚いAndroidアプリの本は、前半にJavaの基礎とAndroid Studioの設定、後半にサンプルアプリの写経、という作りだったので、どれもこの段階ではいまいちでした。

これやったあとに、「ドットインストール」の「AndroidでXXアプリ作ってみよう」のコードを読み返して、ちょっと部分的にいじってみたりして、「ははーん、なるほど、こういう仕組みね。Androidアプリの仕組み考えた人、マジ天才じゃん。」ってのをひたすらやるフェーズがとっても楽しかったです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/93eb5d23-add8-b295-33de-4df20a19d4cd.png" width="50%">

##自分の作りたいアプリをGoogle検索を駆使して実装する（1.5ヶ月）
ここまで来ると、かなり自分の作りたいアプリの実装方法とその難易度（めんどくささ）が分かるようになってきます。

作り始め〜実装までの手順はこんな感じでした。
1. 手書きでアプリのイメージを書く。
2. ユーザーの入力とアプリの出力をみて、裏でどういうデータ処理が必要かを考える。
3. レイアウトはシカトして、ユーザー入力を決め打ちしてデータの処理だけをMainActivityで実装。
4. Log.dでなどで出力をコンソール確認。
5. 処理したデータをレイアウトファイルにとりあえず渡して表示。
6. レイアウトファイルを編集して、ユーザー入力部分を用意する。
7. 必要なデータすべてに関して、2~6を繰り返して、一通りやりたいことができるようにする。
8. レイアウトファイルのデザインを整える。

部分部分やたら具体的ですが、なんででしょうね。実装したい機能の、Androidにおけるキーワードを考えて（「こういう風にスーッとスクロールできて、いい感じに止まるやつ」＝「RecyclerView の SnapHelper」という具合のキーワード）、ググって、というのを繰り返しやると完成。と言ってしまうと、それまでなのですが、検索して参考になったものや、いろいろ試した結果たどり着いた進め方が幾つかあるので、記載しておきます。
![computer_search_kensaku.png](https://qiita-image-store.s3.amazonaws.com/0/32820/798bd8c1-6728-cfc7-d4db-f2ee37a09ed1.png)


###デザイン
作っていくうちに、というか作る前から、アプリのデザインセンスが皆無だということが判明し（てい）たので、GooglePlayでアイコンがかっこいい感じのアプリとか、スクショが今っぽいアプリだなと感じたものを触りまくり(といっても10個くらいしかちゃんと触ってない気もするが)ボタンとボタンの隙間の空け方とか、文字の配置だとか、線をどこに引くとか引かないとか、そういうのを蓄積(参考に)しました。かっこいいなとか良いなと思うものをそのまま真似するだけでもサマになるし、そうしているうちに、コツが掴めてきます。

あと、どこかのタイミングで、マテリアルデザインのデザイン指針を読むと、結構なるほど感あっておすすめです。
[MATERIAL DESIGN](https://material.io/guidelines/components/bottom-navigation.html#bottom-navigation-usage)
![スクリーンショット 2017-12-18 21.17.14.png](https://qiita-image-store.s3.amazonaws.com/0/32820/61a6aede-a91c-893e-9e49-859d374aa5ca.png)
こういう感じでOK/NGの例が沢山載ってる。

###画像素材
アプリのアイコンとかサムネイルとか、自分でゼロからPhotoshopで作り出すのは骨が折れるなと思っていたら、AndroidStudioにいい感じの機能がありました。シンプルなものであれば、割りと作れます。最初はこれでいいかなと思います。リリースするのが目的だったので。
[Image Asset Studio を使用したアプリアイコン作成](https://developer.android.com/studio/write/image-asset-studio.html)
<img width="803" alt="ias-mainwindow_2-2_2x.png" src="https://qiita-image-store.s3.amazonaws.com/0/32820/cd70bc2e-5819-43e7-0cd5-540c272bac76.png">


アイコンなどの素材はここで調達しました。かなり豊富で助かりました。
[Material Design Icons](https://materialdesignicons.com/)
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/25236d3c-1179-cbe3-20aa-c92ec9d5a7f5.png" width="40%">


###レイアウトデコレーション
ちょっとしたアニメーションやら、エフェクトやらは、思った通りのものではないかもしれないですが、しっくりくるものが見つかります。普段からこういうところをチェックしていて、アイデアの引き出しが多いと実装も豊かになりそうです。
[Android Arsenal](https://android-arsenal.com/)
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/c0126cb2-d618-4c05-61ec-f2202fc5a21e.png" width="50%">
例えばこういう感じのものがたくさんあります。


###ログ
リリース後のクラッシュ状況や、インストール状況、ログイベントを取得するためにFablicとFirebaseを導入しました。
[AndroidでFirebaseを利用してみた](https://qiita.com/kazuhiro1128/items/8caa80cb3468f2882a4b)
[[Android][Fabric] Crashlytics を使って Android アプリのベータ版を配信する](https://dev.classmethod.jp/smartphone/android/android-fabric-crashlytics-beta-distribution/)

このくらいのタイミングで、アプリリリース用のGoogleアカウントを新設しておくと便利です。AdMob、Fabricの登録もそのメールアドレスでしてしまえば、一括管理もできるので良いです。

###広告
アプリをリリースして世界を変えるからには、儲ける仕組みが欲しいと考え、AdMobを導入しました。導入方法で参考になったリンクを貼っておきます。Firebase経由で出す方法があり、これをしておくと、管理画面から一括でアプリの数字や収益状況が確認できるので、ダウンロードされてチャリンチャリンするたびに意欲が湧いてきておすすめです。
[Android Studio スタートガイド](https://firebase.google.com/docs/admob/android/quick-start?hl=ja)
[Androidアプリ用広告 AdMobの実装方法[2016年8月版]](https://nobuo-create.net/admob-2016/)

###その他
地味に対応しないといけない部分があったので、やったことリストということで貼っておきます。

使用しているオープンソース表記も必要です。
[Including Open Source Notices](https://developers.google.com/android/guides/opensource)

想定シーンから外れるので、画面は縦固定にしました。
[Android縦画面固定](https://qiita.com/yasumodev/items/44f7fd84a58b709a0349)

画面分割にも対応しないようにしました。
[マルチ ウィンドウのサポート](https://developer.android.com/guide/topics/ui/multi-window.html?hl=ja)


##検証とコードのお掃除作業（0.5ヶ月）
自分のスマートフォン端末に入れていじくるだけだと、意外に同じところしか触らないです。自分のいつもの操作だけではなかなか発見できないバグを洗い出すため、adbを使ってモンキーテストをしました。モンキーテストとは、アプリをひっちゃかめっちゃかにいじってくれるテストのことです。スマートフォン端末をPCと接続して、PCのターミナルからコマンドを打つと、スマートフォン端末上でテストが実行されます。大体１万回くらいの操作をしました。５分くらいかかりました。
[adbをMacのターミナルで使えるようにする](https://qiita.com/furusin_oriver/items/f956848788c7a63922bd)
[AndroidのテストツールMonkey](http://www.taosoftware.co.jp/blog/2009/04/android_monkey.html)

行き当たりばったりで書いているコードもキレイにします。AndroidStudioの標準機能で「この辺がお作法とは違うよ」「これ使ってないよ」というのを教えてくれるものがあり、その教えに忠実に一つ一つ潰していきます。
[AndroidStudioで未使用のresourceを検出する](https://qiita.com/konifar/items/aa4bc60c78163c3ec354)

あとは地味にコード整形のショートカットがあることを知らなくて時間をまあまあ無駄にしたので貼っておきます。{}の改行ルールとか、自分で考えて揃えなくていいのとても楽です。
[Eclipse、Android Studio、Xcodeで良く使うショートカット対応表（Mac編）](https://qiita.com/chocomelon/items/03b3786f30466142c311)

![job_souji_seisou_gyousya.png](https://qiita-image-store.s3.amazonaws.com/0/32820/effd321b-7dde-e200-aaba-968608f1be6d.png)
リリース後に何が起きるかわからないので、メンテナンスや修正の手間を考えると、コードはキレイにしておくに越したことはないです。


##GooglePlayに登録してアプリをリリースする（0.5ヶ月）
アプリの実装が終われば、リリースまでに必要なものは、スクショなどの素材と、GooglePlayへのメタ情報登録くらいですが、意外にコツコツとやらなければいけないことが多くて、時間かかりました。Googleデベロッパーコンソールにアカウント登録さえしてしまえば、かなり丁寧にアラートやらチュートリアルを出してくれたりするので、それに忠実に従っていくとリリースまで辿り着けます。
[【最新版】わかりやすく徹底解説！Google Play StoreでAndoridアプリを公開するためにGoogle Play Developer Consoleからアプリを申請する手順](http://unitynightowlgames.hatenablog.com/entry/2016/10/09/201526)

参考にできる記事はそんなになかった印象ですが、やることの雰囲気がつかめれば、デベロッパーコンソールの言うとおりに情報を埋めていけば良いです。（忘れた）

スクリーンショットは実際のアプリスクショで十分と判断して、使用中の画面をキャプチャしたものをそのまま使いました。動画は以下の動画キャプチャアプリを使って、これまたアプリ使用中のスクリーンを動画キャプチャし、Youtubeにアップロードしました。（adbの機能でもスクリーンキャプチャがあるみたいですが、知らなかったので動画キャプチャアプリを使いました。スマホ上で動画のトリミング編集もできるのでおすすめです。）
[DU Recorder – 画面レコーダーおよびビデオエディター](https://play.google.com/store/apps/details?id=com.duapps.recorder&hl=ja)
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/53ea8209-9df0-9ef7-2e3c-613865102f15.png" width="70%">


ヘッダー画像は、フリー素材とこちらのフリーソフトを駆使してそれっぽく作りました。それっぽく。
[Online Photo Editor | Pixlr Editor](https://pixlr.com/editor/)

最後はコツコツと作成した素材やらディスクリプションやらをアップロードして、ボタンをポチればリリース完了！お疲れ様でした。


#終わりに
なんだか、前半は意気揚々とセンテンスが泉のように湧き出ているように見える一方、後半はその泉も枯渇してしまい、メモ用のリンク集みたいな雰囲気になってしまっていますが、実際自分のアプリを作るフェーズに入ると、当然、参考にできるようなものが少なくなってくるので、基本ググって試すの繰り返しになります。そこで得られた知見は自分のアプリだけのもの。そうつまり、リンク集っぽくなってしまうのは必須、己で道を切り開くしか無いのです！！という言い訳。（年末進行）

そして、最後にマジで若干チートっぽい種明かしとなりますが、長きに渡り隣の席であらゆる面で細やかにサポートしてくれたAndroidエンジニアのS島さん、これはもうS島さんと僕の日々を綴った手記といっても過言ではありません！ありがとうございました！

※感謝の意を表して、テレビの上に器用にのる、親戚の猫の画像貼っておきます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/32820/03cff35f-6726-e420-e15f-92d7d89bbd85.jpeg" width="50%">

#宣伝
マンガボックスもといDeNAでは、企画、エンジニア含め、様々な職種を募集中です。そう、次はあなたの番です！（？）
http://dena.com/jp/recruit/career/