SlideShare a Scribd company logo
初学者に嬉しい
Android開発環境
(あとMVCとか)
Hiroyuki Kusu ( @hkusu_ )
株式会社ゆめみ
2015/4/25 DroidKaigi
自己紹介
・元々はサーバサイドエンジニア
・SE職/マネジメント職が長かった
(最近、技術職にもどった)
・Android はそれほど長くない
・ほかには JavaScript などを
やっていきたい(希望)
アウトライン
① 環境・ライブラリ
② アプリケーション構成(MVC)
③ 学習リソース
※ 前提として、ゲームやハードウェア/OS機能を使うもの
ではなく、WEBサービス的 な Android アプリの開発
アウトライン
① 環境・ライブラリ
② アプリケーション構成(MVC)
③ 学習リソース
環境
・いまからやるなら Android Studio 一択
・JetBrains 社製。WebStorm、RubyMine らと
同じ感触でさわれる
・iOS 用は AppCode というのがある
・補完とかリファクタ機能とかもすごい
・Gradle 便利(らしい)
IDE
何も設定しなくても
Android Studio がいろ
いろ教えてくれる
困ったら [shift] キー 2回押し
・Genymotion を使う
・VirtualBox 上で動くので速い
・Android Studio 用のプラグインあわせて
シミュレータ
ライブラリ
・レイアウトXML上のViewとの関連づけ
・Viewのインベント取得
Butter Knife
Android Studio 用のプラグイン
・手間が減るというより、Fragmentクラス
の冒頭に利用するViewが定義されるという
コードスタイルが視覚的に分かりやすい
・リスナーをセットする煩雑なコードが減る
・他には AndroidAnnotations がある
・もっと色々できる
(ただ、できすぎて初学者は混乱するかも)
https://github.com/greenrobot/EventBus から転載
EventBus
・アプリケーション内の任意のインスタンス
に任意の通知を送れる
・データも詰め込め、スレッドも飛び越える
・通知を受け取る側が死んでいてもアプリは
落ちない
・イベントを送る側
・インベントを受け取る側
・WEB-API を叩いて結果を受け取る場合
・画像の読み込みは Picasso を利用する
Retorofit OkHttp Gson
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
・データを保存する必要がある場合
・SQL は直に書かずに Active Android を使う
・ほかには Realm
・SQLiteではなく独自データストア
ORM
アウトライン
① 環境・ライブラリ
② アプリケーション構成(MVC)
③ 学習リソース
MVC構成が分かりやすく、
破綻しないと思う
Model
View Controller
① GUIイベント
③ 描画依頼
④ データ取り出し
② モデル操作・更新
データの保持
&ビジネスロジック
(WEB-APIを発行するのは
Model)
Model
View Controller
① GUIイベント
③ 描画依頼
Fragment
(or Activity)
レイアウトXML
View、ViewGroupクラス
③④は
Controllerを経由する
Androidの場合
② モデル操作・更新
データの保持
&ビジネスロジック
(WEB-APIを発行するのは
Model)
④ データ取り出し
普通のJavaクラス
Model
View Controller
① GUIイベント
② モデル操作・更新
③ 描画依頼
Fragment
(or Activity)
普通のJavaクラス
③④は
Controllerを経由する
Androidの場合
Event Bus
ORM
Retrofit 等
Butter Knife
データの保持
&ビジネスロジック
(WEB-APIを発行するのは
Model)
レイアウトXML
View、ViewGroupクラス
④ データ取り出し
Model (普通のJavaクラス)
・データの保持(変数)とデータの操作メソッド
・Controller からこちらに追い出す
・イベント取得やViewパーツの操作は
しない
Fragment
Fragment
Fragment
Model
長寿
短命
インスタンスの参照
WEB-APIの発行など
複数の画面で使いまわす場合や、時間が
かかる処理をある場合
・長寿の Model はシングルトンに
・インスタンスの参照の取得
・データ構造を表現するクラス(Entity)を
用意しておく
・Modelで扱うListデータの要素とする
・ORM(Active Android、Realm)や Gson を利用する
場合は、それらが提供するものを使う
Model
View Controller
① GUIイベント
② モデル操作・更新
③ 描画依頼
④ データ取り出し
データの保持
&ビジネスロジック
(WEB-APIを発行するのは
Model)
Fragment(or Activity) のコード
・Model側では、データが変更されたら EventBus の
イベントを投げるようにしておく
・Fragment(or Activity)では、Model のデータで view
の表示を洗い替えるようなメソッドを用意
⇒ Model が更新されたら自動的にview が更新される
コールバックしたり Observable を
使ってもよいが..
・コールバックはコールバック先が
落ちている可能性がある
・Fragment(or Activity)なら尚更
・Observable より EventBus 使った方が楽
View レイアウトXML、View、ViewGroup
・クラスを作るときはイベントは処理
させない
・それは Controller の仕事
・レイアウトXMLにもイベントに関するもの
は定義しない(onClick など)
・(できるだけ)コードでViewの生成や設定は
行わない
Controller Fragment (Activity)
Activity
Activity
Activity
Activity
画面遷移的なものは Activity をインテントで
切り替えるのではなくて、
Activity
Fragment
Fragment
Fragment
Fragmentを切り替える(その方が楽)
※ただしアプリケーションによる
コンテナ
・アプリケーションに Activity はひとつ
・画面1つに対して Fragment はひとつ
(ただし パーツの再利用やタブレット向けの場合は
その限りではない)
・Fragment on Fragment はできればやらない
Fragment が肥大化する問題
・目安として500行〜1000行を超えてきたら?
・Fragment を サブ Controller や サブ Model
へ分割する
・Adapter 類はインナークラスから追い出す
Fragment サブ Controller クラス
new して利用
・Java 的に 通常のクラス(not Fragment)
・Fragmentと同名のライフサイクル
メソッドを実装して操作する
・イベント取得やViewパーツの操作
含めて良い
・呼び出し元の Fragment と同じ寿命
サブ Controller への分割
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Fragment サブ Model クラス
new して利用
・データとビジネスロジック
・イベント取得やViewパーツの操作
含めてはダメ
・これも呼び出し元の Fragment と同じ寿命
サブ Model への分割
https://github.com/hkusu/android-mvc-sample
だいたいここまでの
構成でサンプルを作った。
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
アウトライン
① 環境・ライブラリ
② アプリケーション構成(MVC)
③ 学習リソース
書籍
・AndroidエンジニアのためのモダンJava
http://www.amazon.co.jp/dp/477415878X
・Java未経験者向け。とりあえずこれ一冊でも十分
・Java言語で学ぶデザインパターン入門
http://www.amazon.co.jp/dp/4797327030
・EFFECTIVE JAVA
http://www.amazon.co.jp/dp/4621066056
書籍(Java)
書籍(Android)
・AndroidStudioではじめるAndroidプログラミング入門
http://www.amazon.co.jp/dp/4798041025
・Androidプログラミングバイブル
http://www.amazon.co.jp/dp/4883378063
・Android SDK逆引きハンドブック
http://www.amazon.co.jp/dp/486354104X
書籍(Android:UI)
・Android Pattern Cookbook
http://www.amazon.co.jp/dp/4844335650
・Android UI Cookbook for 4.0 ICS
http://www.amazon.co.jp/dp/4844331744
・Android Layout Cookbook
http://www.amazon.co.jp/dp/4844329871
参考になるソース
Android Studio の
プロジェクト作成時の雛形
Android Studio で自動生成
できる Fragment の雛形
GitHub(https://github.com/googlesamples)で公開されているものと同じ
Googleのサンプル
・まずはドットインストール
・mixiさんのトレーニング資料は慣れてきてから見る
(初学者には少し敷居がある)
・ハードウェアやOSまわりの機能は後回し
(必要になったら調べる、ぐらいの感覚で)
・通信、SQLiteまわりはライブラリを使う前提で
(生で書く機会はそんなにない、と思う)
・端末の向きを固定(回転させない)
(Activity や Fragment のライフサイクルや状態の保存がややこしくなる)
・タブレットの2ペインレイアウトやらない
(1画面1Fragmentが最初はやりやすい)
初学者向けの学習方法
おわり
以降、予備スライド
Applicationクラス
・初期化処理やインスタンスの参照の保持に
・ここで参照してるとGCされないので注意
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
・レイアウトに関する固定値は、教科書
どおり res フォルダ配下の XML で管理する
・ロジックに関するものは普通に固定値
クラスを作って public static final で定義する
・その Fragment でのみ利用するものはその Fragment
に書いてもよいと思う
固定値
動的に生成するものは static メソッドを用意する
・便利関数的なものは、それ用のクラスを
作り、static なメソッドを定義する
・手続き型言語の関数的なものなので、この
クラスでは状態は保持しない
Utility系の便利関数
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Activity、Fragment 内では、他の Activity、
Fragment のインスタンスの参照を取得できる
ようになっていてる
参照さえ取得してしまえば、そのインスタン
ス(Activity、Fragment)のメソッドを実行できる
独自のリスナークラスを作成して利用すると、
匿名クラスの定義でコードが煩雑になるのを
防ぎ、また再利用や値の保持(コンストラクタ
で渡す)ができる

More Related Content

【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)

Editor's Notes

  1. ----- 会議メモ (2015/04/24 15:52) ----- ああああああ
  2. ----- 会議メモ (2015/04/24 16:24) ----- 標準のシミュレータが遅い 実機を用意できないなら
  3. ----- 会議メモ (2015/04/24 16:24) ----- 初学者は JSON まわりやってるとしんどい
  4. ----- 会議メモ (2015/04/24 16:24) ----- 生で扱うのはしんどい
  5. ----- 会議メモ (2015/04/24 16:38) ----- 時間がかかる処理でもあとから結果をとりにいったり、 複数画面で同じデータを使うことができる