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

22,535 views

Published on

2015/04/25(Sat)に開催された DroidKaigi(http://droidkaigi.github.io)での発表資料です。

Published in: Technology
0 Comments
107 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
22,535
On SlideShare
0
From Embeds
0
Number of Embeds
6,912
Actions
Shares
0
Downloads
96
Comments
0
Likes
107
Embeds 0
No embeds

No notes for slide

  • ----- 会議メモ (2015/04/24 15:52) -----
    ああああああ


  • ----- 会議メモ (2015/04/24 16:24) -----
    標準のシミュレータが遅い
    実機を用意できないなら

  • ----- 会議メモ (2015/04/24 16:24) -----
    初学者は JSON まわりやってるとしんどい

  • ----- 会議メモ (2015/04/24 16:24) -----
    生で扱うのはしんどい

  • ----- 会議メモ (2015/04/24 16:38) -----
    時間がかかる処理でもあとから結果をとりにいったり、
    複数画面で同じデータを使うことができる
  • 【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)

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

    ×