Kotlinから始めたAndroid開発 〜0からの2ヶ月体験記〜

Androidアプリ開発を始めて2ヶ月が経過したので0から始めた時に苦労した事などを綴ろうと思います。

# 開発にあたって必要なもの

* **Androidアプリを作りたいという気持ち**
* パソコン(今回はMacを前提にしていますが、WindowsやLinuxでもあらかた同じだと思います。)
* [JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
* [AndroidStudioCanary](https://developer.android.com/studio/preview/index.html) or [AndroidStudio](https://developer.android.com/studio/index.html)

自分は他にも[`adb-peco`](https://qiita.com/pfavill/items/d48c6fa6985b4a007834#android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%A7%E4%BD%BF%E3%81%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)とか入れています。
ターミナル系の設定などは[シンプルにMacでのプログラミング環境構築を考えてみた](https://qiita.com/pfavill/items/d48c6fa6985b4a007834#android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%A7%E4%BD%BF%E3%81%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)に書いたのでそちらで確認してもらえるとありがたいです。

# 開発効率をあげるために必要なもの

## 言語関係

* Javaの基礎知識
* Kotlinの基礎知識

自分はJavaも全く理解していなかったので[スッキリわかるJava](https://qiita.com/pfavill/items/d48c6fa6985b4a007834#android%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA%E3%81%A7%E4%BD%BF%E3%81%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B)をKindleで買って読みました。なかなかページ数の多い本ですがスキマ時間に読むようにして一週間もあれば読める内容です。
他にもJavaSilverの紫本を後から知識の肉付けとして読みました。

ライブラリの中のソースコードはJavaでできていることが多いので自分でカスタムビューなどを作る際などに読めた方が便利です。ネット上のソースコードもまだまだJavaが多いので読めると参考にできます。

Kotlinの本は買いましたが、ほとんど読んではいません。公式とかGithubとかネットで記事を上げてる人のページを見て勉強しています。

### Kotlinから始める注意点

正直にいうとJavaで慣れてからKotlinを書くか、同時に書いていくほうが自分はいいと思います。（上記の理由からJavaの知識は必要）
Kotlinは読みやすく、便利な反面、気をつけていないとnullableの場所なのに値が来る前提のコードを書いていたとか、この辺はこれからAndroidStudioが対応していくのかわかりませんが、気を抜いて書くと気づかない間に予期せぬエラーを出す原因になるので書いていく際はそのあたりに注意を払う必要があると感じます。

## Android関係

* **AndroidStudioの使い方**
* `Activity`
* `Fragment`
* `Adapter`

自分は上記4つを公式を読みながら、Androidアプリ開発をはじめました。
まず書いて慣れたいという方は参考書を買うよりもUdemyなどのオンライン動画サービスなどを使って動画を見て実際にコードを打ちながら、「Activityってのがあるんだ」という感じで覚えていくのも記憶に焼き付くいい勉強だと思います。

自分はAndroidに関しての参考書はほとんど使っていません。既存で出ているアプリを見て自分なりに考えて模倣するように書いています。まだオリジナルのデザインを作れるスキルがないので模倣ばかりしています。

Androidアプリを開発していて思うことはiOSと違い、便利な純正ライブラリが豊富ということです。
なので、一番勉強になることはほとんどのアプリで使われているレイアウトの**パーツ**を作ってみると使いまわせて便利です。

以下はよく使うパーツです。

* `RecyclerView`
* `TabLayout` & `ViewPager`
* `ToolbarLayout`
* `AppBarLayout`

他にも`BottomNavigationView`なども触りましたが、デザインによって入るか入らないかわからないのでまずは上記4つを作ることから始めると後々困った時に見ることができる最低限の情報がそろうと思います。

それぞれの作り方は後々別の記事として追加していこうと思います。

レイアウトパーツに関しては嫌でも覚えると思うのですが、一番いい勉強だと思ったことはただ単純にxmlに記述するのではなく、まず最初はJavaやKotlinで生成する練習をするとAndroid開発の敷居がぐっと低くなるとおもいます。

### AndroidStudioの使い方

使い方と言っても比較的よく使うショートカット操作です。

* `Command`+`クラス名、メソッド名、変数名をクリック`

> 宣言されている場所に移動

* `option`+`Enter`

> インポート忘れなどを修正

他にも[公式](https://material.io/guidelines/)を見ればたくさんのショートカットがあるので暇な時に見ていると作業の効率化につながります。

#### 意外に詰まるAndroidの単語

この動きの名前なんてググればいいんだろう。
このパーツの名前なんて言うんだろうとかその辺。

* ripple effect

> Android端末を使っている人にはお馴染み？のボタンをタップした時に出る波紋効果

* SeekBar

> 音のボリューム操作のときなどに使うやつ。
> うまく表現ができないのでググって見てください。


## デザイン

アプリを作っていて思うのはここどのくらい幅を作ってあげればいいのかとかです。
Android的にこれはあっているのかとか、デザインがあれば別ですが、迷ったときはマテリアルデザインと照らし合わせています。
レイアウト作成に慣れて来たら一度目を通す事をおすすめします。

[マテリアルデザイン](https://material.io/guidelines/)

デザインといえばちょっとしたことなのですが、Androidのデバック機、またはエミュレーターの**開発者向けオプション**で**レイアウト境界**を表示という箇所をONにすると境界線を表示してくれるのでpaddingやmarginを確認する時に便利です。

その他にもAndroidStudioで`Tools`→`Android`→`LayoutInspector`を開き、端末で確認することも重要になります。


# モチベーション

焦って勉強して開発しても知識の定着には時間がかかります。
自分は[Androidアプリ開発を独学で学ぶ人への効果的な勉強法](https://qiita.com/Reyurnible/items/5e57e44baeddd2149833)という記事を習得率の目標として参考にしています。ありがとうございます。
やり方は自分と少し違いますが、何ヶ月目でどのくらいできていればいいのかなど見返しながら勉強していると、次は何をすればいいのかという目標設定にすることができています。

# 最後に

初めてAndroidの記事を書きました。
これから積極的に作ったものの記事をあげていこうと思います。
まだまだ初心者なので、ご指摘などございましたら、コメントの程よろしくお願い致します。