Androidエンジニアになった僕の開発環境と学習法

3,4年ウェッブエンジニアだった僕が, Androidエンジニアにジョブチェンして1週間経った(もちろん今まで通りウェブエンジニアは続けるけど). そんな僕がどういうふうにAndroidについて学習してるか記事にしてみた.

まだAndroidエンジニアになってから間もないので, この記事を見た方で, これは間違ってるよとか, このやり方が良いよって意見がある方は, ぜひコメントとか@yucchiy_までリプライとかしてもらえると嬉しいです.

開発環境

まず学習法とかの前に環境どうしてるかについて. 結論はAndroid Studioをベースとして開発環境を整えるのがしっくりきてる.

Eclipse vs Android Studio

Eclipse vs Android Studioだけど, 普段からWebStormとかPHPStormを使うことが多かったのでInteliJ PlatformなAndroid Studioを開発環境として選択した.

Android Studioのインストール

Android Studioは, Caskからコマンド一つでインストールできる.

brew cask install android-studio

またAndroid SDKは, Android Studioに入ってるものもあるが, スタンドアロンなSDKを用意しておく方が検証が楽そう. Homebrewを使ってる場合は, 以下のコマンドでインストールできる.

brew install android-studio

Android StudioからスタンドアロンなSDKにパスを通すにはProject Structure(多分Cmd + で立ち上がるやつ)から,SDK Location > Android SDK Locationで設定できる. BrewでインストールしたSDKは/user/local/Cellar/android-studioに配置されている.

Android Studioの便利なショートカット

多分Eclipseにもあるんだろうけど便利なショートカットが豊富で, Cmd + bでクラスの定義元に飛んだり, Can't resolve errorが出てて, importするだけで解決するような場合は, 該当行に移動してAlt + Shiftすると勝手にimportを行ってくれたり, クラスとかゲッター・セッターを自動で定義したかったらCmd + nでいい感じにやってくれる. 多分他にもいろんな便利ショートカットが存在すると思うのでどんどん調べていきたい.

動作確認

手元に端末があったら, 特にこだわりがない限りは実機に転送して検証した方が良い. Androidデフォルトの端末は重たいし, 起動に時間がかかってストレスフルだった.

複数端末検証でエミュレータ使うならGenymotion一択だと思う. しかし手元の環境ではまだ動かせてない.

学習法

前提として僕はJavaのコーディング経験が半年弱くらい(?)有り, 主にプログラミングコンテストでJavaを利用していた. なので, Javaの基本的なコーティングとCollectionの使い方はなんとなく分かる. このへんの基本的な文法をしっかり抑えておかないと, Android開発は難しいと思うので, まず先にその辺をおさえておくのが良さそう.

MixiのAndroidTrainingの基礎編を流し読み

何もわからない状態だと簡単な画面遷移さえもままならないので, 軽く参考資料を流し読みした. ウェブの資料では, MixiのAndroidのテキストが情報がまとまっていてよかった. ただし全部理解しようとするのではなく, どんなことをするのにこういうものを使えばいい, くらいを抑えておくので十分そう. ActivityとFragmentがどうなってるとか, Intent使うと画面遷移できるとか, Viewの作り方とかどうするかとか, その辺を抑えるだけでも十分だと思う.

特にAndroidは覚えることが多そうで, それらをちゃんと把握しきるのは大変なので, 作りながら困ったときやリファクタリング時にはじめて詳しく調べるのが効率が良さそう.

作りたいものを決めてGithubを漁る

僕がAndroidアプリで作ろうものは, とあるウェブサービスからOAuth連携して, APIからデータを引っ張ってきてデータを表示するビュワーアプリである. まずやったこととして, 「android oauth」でGithubで調べて, なんとなくスターが多いライブラリを見つけてそのサンプルのソースを写経することをした.

具体的には, wuman/android-oauth-clientというライブラリがあって, そのサンプルがかなり充実していたので, それを写経したり, さらにサンプルをいじって遊んだした.

この時動作検証のサイクルをこまめに行なうということを注意して行った.

というのも, まだ慣れてない状態でまとめて写経して検証を行うと, 写経をミスっていたり, そのサンプルを更にいじったりするときに, 問題の切り分けが難しくなる. そのため, こまめに動作検証を行なったほうが学習効率が良い. 細かく動作検証を行うには, そのサンプルがどの順番で動くかをちゃんと把握しないといけないので, Androidのライフサイクルの理解が深まったりとか一石二鳥だと思う.

このように学習することで, APIの連携にはどういうライブラリを使えばいいとか, APIとクラスのインスタンスの紐付けをどうするとか, AsyncTaskLoaderは独自のローダを定義しておくと何かと便利そうだとか, ListViewへアダプタ渡すときはDecoratorパターン用意してアダプタとローダをセットで渡すとスッキリかけて良いし再利用しやすそうだとか, 様々な知見が得られるし, アプリを作る上で必要な知見を効率よく学習できると思う.

復習として作ったあとに情報整理

作りたいものがある程度作れたら, 使ったクラスを詳しく調べなおしたり, Mixiのテキストで使った箇所を詳しく読んでみたり, 冗長になってしまった箇所をリファクタリングしてみたりすると, やったことを深く理解できると思うし忘れにくい知識が身につくと思う.

まとめ

ざっくり, Androidエンジニアになって1週間の僕の実践している学習法について書いてみた. まとめると, Githubとかで先人の知恵を得ることと, 必要になったクラスとか機能を学ぶことで, 効率的に実践的なコーディングができるんではということを長々と書いた.

冒頭にも書いたけどもっと良いやり方があるとか, これはおかしいと思うことがアレば, コメントとか@yucchiy_へどうぞ.