知識ゼロから独学3ヵ月でAndroidアプリをリリースしよう

##はじめに
はじめまして。
今回ひょんなことからアプリを開発したくなったので(理由は本筋と離れるので割愛)、全く知識のない人間がどんなことから取り組んだか、どういう進め方をしたか、どういう点で躓いたかを記したいと思います。

◆対象読者
・アプリ開発どころかコードも書いたことが無い人
・何から手をつければいいか分からない人
・初めてAndroidアプリを開発したいと思っている人
・初心者の開発プロセスに興味がある人

上記のような人にとって、少しでも参考になったら幸いです。

作ったアプリ↓
<a href="https://play.google.com/store/apps/details?id=angie.debbie">Angie＆Debbie</a>
![スクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668515/daf05b2b-7f8c-1283-f8b5-84ac9405e65e.png)

女の子を着せ替えるミニゲームアプリです。
よかったら触ってみてくれるととても嬉しいです。

##①Androidアプリしか開発できないことを知る
使っているスマホがiPhoneなので、iOSアプリをつくりたいな～と漠然と考えていたのですがMacでしかiOSアプリは開発できないことを知り驚愕しました。
Windouwsしか持っていない私は、自動的にAndroidアプリ開発の道しか残されていなかったわけです。

スタートはこういったレベルです。
(ちなみに後々実機テストの為にAndroid端末を購入しました。出費……)

##②アプリ開発の前に プログラミングとは
急にアプリ開発って出来るものじゃなくない？と、そもそもコードすら書いたことが無い私は不安に思いました。
「初心者　プログラミング」「アプリ開発　初めて」とかでググりまくります。

そして参考にした記事がこちら
<a href="https://qiita.com/tomy0610/items/659dcd95f6a063fed180">【初心者向け】ド素人が29歳からプログラミングを覚えた方法</a>
こちらの記事に
>ガチの ITド素人 は HTML, CSS からやってください。ある程度ショボい画面が作れるレベルになったら、もう Java や Python などのバックエンドに行っちゃいましょう。（１つに拘ったり、極め過ぎないことがポイント）

と書いてあったのを参考に、まずはHTMLとCSSから始めてみることに。

##③ドットインストールでHTML、CSSの勉強
あらゆるサイトや記事でおススメされていた<a href="https://dotinstall.com/">ドットインスト－ル</a>でHTMLとCSSを勉強することにしました。

ドットインスト－ルは初学者に非常に親切で、コードとはこういう風に書きます、というのを動画で手取り足取り教えてくれます。
VSCode(コードエディターの1つです)を開いて
「よくエンジニアが使ってる黒い画面だ!!!」
と感動したのを覚えています。
新しいものに触れることの連続で、毎日非常に楽しく勉強出来ました。

そして何より嬉しかったのが自分が書いた通りに画面が表示されたり、ときには動いたりすること。
プログラミングなんて一生縁のないものだと思っていたので、この感動を味わえて良かったと強く思っています。

HTML、CSSの勉強には3週間費やしました。
ドットインストールの講座を一通り見る→学んだことを応用して自分でHPを作って公開してみる
で計3週間です。

##④JavaとJavaScriptを間違える
HTML、CSSを一通り勉強したので、次にとうとうアプリ開発に移ろうとしました。
AndroidアプリはどうやらJavaという言語で開発するらしいので、これもドットインストールで勉強しようと講座を見ていました。

講座一覧から「Java」の文字を探し、何か後ろに変なのついてるけどこれだろ～と思い、何と私はJavaScriptの講座を見始めてしまったのでした。

間違いに気づいたのは翌日でした。(早く気づいてよかった)
Javaのいい参考書などないかとググっていたところ、サジェストに「Java JavaScript 違い」と表示されたため、この2つはどうやら違う言語らしいということに気付けました。あぶねー！
そうして私は無事「Java8入門」の講座に転換することが出来ました。

##⑤Kotlinとの出会い
ドットインストールでJavaを勉強しつつ、アプリ制作についてのいい参考書が無いかと図書館で探していました。
ただ、図書館にある本は発行されたのが数年前と、少し古いものばかり。
アプリ開発が日々進歩していくことは知っていたので、なるべく新しい本を参考にすべきだと私は考えました。
そこで見つけたのがこの本です。
<a href="https://www.sbcr.jp/product/4815607968/">はじめてのAndroidプログラミング　第5版</a>
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668515/9069c419-87ff-ee3e-5907-fd7e1287f4d7.png)
発行されたのは2020/12/19。つい最近(現在2021年5月)じゃないですか！
中身はどうやらお手本のアプリを作りながらアプリ制作を勉強していくというものらしい。
しかもアマゾンレビューの点数も高いし、この本を参考にしようと思いました。

しかし、この本はKotlin対応=Javaではないという点が気になりました。
KotlinというJavaをシンプルにしたような言語があり、その存在自体も、GoogleがこのKotlinを推していることも知っていました。
シンプルにした分書きやすい(のか？)言語であるものの、Javaと比べるとネット上に情報が少なく、アプリ開発の途中で何かを調べるとJavaでの情報しか出てこないのではということを危惧しました。
しかし、何も分からないのであればネット上の情報よりも書籍を信頼すべきと考えたため、この本を購入、Kotlinでアプリ開発をすることにしたのでした。

とりあえずJavaの知識はある方が良さげだったので、本に手を出す前にJavaの講座は一通り終えました。
これにかかった時間が約2週間ほどです。

##⑥Android Studioが使えない‼
さて、ここから本格的に”モノ”を作っていくフェーズに入っていきます。

ここから自分のアプリを作るまでの流れは、基本的に先ほどの参考書を進めていくかたちになりますが、その中で躓いたところを書きたいと思います。

AndroidアプリはGoogleが提供してくれている<a href="https://developer.android.com/studio">AndroidSudio</a>という開発環境を使って開発します。
AndroidStudio起動後、SDKの保存先を指定しインストールすることになるのですが、この<strong>保存先に日本語が含まれているとエラー</strong>になってしまいます。
この場合、ローカルディスク（C:）のユーザーフォルダに適当な半角英数字のみのフォルダを作り、そこを保存先として指定することで解決しました。

##⑦本の中身を一周する
Androidsudioの使い方も先ほどの本に書いてくれているので、それを見ながら使い方を学んでいきました。

この本は初めに基礎的な知識が書いてあり、その後サンプルアプリをいくつも作っていく流れになっています。
そのサンプルアプリを作る中でいろいろな動作(画面遷移したり、SEをつけたり)を実現するためのコードを学んでいく感じです。

この本を一周すれば私が今回作ったようなシンプルなアプリなら作れるようになるのではないかと思います。
アニメーションを多用したりとか、シンプルなアプリでは満足できない方はこの本だけでは難しそうなので別のものを参考にするのが良いかと思います。

##⑧自分のアプリを作る
本の中身を一周したらとうとう自分の作りたいアプリを作るフェーズに入りました。
初めから着せ替えゲームを作りたいと思っていたので、なんとなくのイメージは出来ていました。

機能に関しても本に書いていあったことを応用+書いてなくてもネットでググればそこそこスムーズに実装出来る範囲のものだったのでそこまで苦労はしなかったのですが、ここでも躓いた点を描こうと思います。

###画面キャプチャを撮る
着せ替えゲームなので、着せ替えた結果を画像で保存したいなぁと考えていました。
ただ、これに関しては参考にした本には一切記述が無かったのでイチから自分で調べることになりました。

AndroidSudioをいじるようになれば分かるのですが、アプリの要素には「View」というものがあります。
その名の通り、画面に何かを表示する器みたいなものだと思ってください。
このViewのキャプチャを撮る方法なら沢山出てくるのですが
　（例：<a href="https://qiita.com/ijichi_y/items/8c7872665b0219405dc7">特定のViewのスクリーンショットを撮る</a>
　　　　<a href="https://developers.wonderpla.net/entry/2015/01/27/112312">AndroidでViewのキャプチャを撮る</a>
私が撮りたいものは少し違いました。

私が作成していたものは着せ替えアプリなので、素体画像の上にトップスやボトムス等のパーツごとのレイヤーを表示する仕組みになっています。
なので一つのViewのキャプチャでは着せ替え結果が撮れず……

いろいろ試した結果、キャプチャを撮りたい要素を全てFramelayoutという、Viewを格納出来る更に大きな器のような要素に入れ、それのキャプチャを撮ることで解決しました。
Framelayoutのキャプチャが撮れること自体知らずにダメ元でやってみたら出来たので万々歳でした。

###パーミッションまわり
アプリを使っているとこういったダイアログが表示されるのを見たことがあると思います。
![Screenshot_20210508-165901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668515/e2aa201e-91f2-daab-f1cc-14438d486f57.png)
アプリが何かをするために権限が必要だから許可してくださいね～っていうダイアログですね。
この実装方法も本に書いてあったのですがその通りにコードを書くとアプリが落ちてしまい（どうして…）、ネットの情報を頼りに実装しました。
この辺りはググると鬼のように出てくるのでリンクは割愛します。

（ちなみに、このパーミッションダイアログではなく「画像を保存するには端末の設定から権限を許可して下さい」的な内容のポップアップを出しているアプリを見たことがありますが、正直使ってる側からすると至極面倒だと思うのでやめた方がいいと思いました。）


小さいものも含めると躓いたところは数えきれないほどあるのですが、大きなものはこの2つでした。

##⑨やってみたかったこと
<a href="https://techno-monkey.com/android-gif-saisei-appdevelop/">AndroidアプリでGif再生する方法 -Androidアプリ開発</a>
こちらの記事を見て「キャラクターをまばたきさせたい！」と考えていたのですが、肝心のまばたきgifアニメが酷いクオリティとなってしまい今回は見送りました。
ただ、アプリは一回リリースして終わりではなくアップデートを重ねていけるものですので、いずれちゃんとしたGifを作って表示させたいと思います。挫けない。

#おわりに
想定よりも長々と書いてしまいました。
もしここまで読んでくださった方がいたら心からお礼を言いたいです。
ありがとうございました。

これからアプリを初めて作ろうとしている人へ。
どんなものが出来たとしても、「何かを完成させる」というのはとても自信に繋がります。

そしてトライ＆エラーの連続は思っていたより凄く凄く楽しいです。
悩んでいたところでアプリが想定通りの動きをしたとき、ピザとってしまうくらい嬉しいです。

初心者がアプリを作るうえで必要なものは知識よりもガッツだと私は感じました。
分からないことがあっても投げ出さないことと継続して開発を進めるガッツ。もうこれさえあればどうにかなります。


今後Qiitaに投稿するか分かりませんが、またご縁があったらそのときはよろしくお願いします。それでは。