Successfully reported this slideshow.
Your SlideShare is downloading. ×

ぼくのかんがえたふつうのあんどろいどかいはつ

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 102 Ad

More Related Content

Viewers also liked (14)

Similar to ぼくのかんがえたふつうのあんどろいどかいはつ (20)

Advertisement

More from Yukiya Nakagawa (20)

Recently uploaded (20)

Advertisement

ぼくのかんがえたふつうのあんどろいどかいはつ

  1. 1. ぼくのかんがえた ふつうのあんどろいどかいはつ ウォーターセル株式会社 中川 幸哉 2012.11.3 新潟オープンソースセミナー2012
  2. 2. 自己紹介 • 中川幸哉 • 経歴 – @Nkzn / なかざん – 〜2010年 • 会津大学 – 0x19歳 • 株式会社GClue – 上越市出身 – 2010年〜 – 新潟市在住 • JCCソフト株式会社 PG – 日本Androidの会 • コミュニティ活動開始 新潟支部 支部長 – 2011年秋〜 – ウォーターセル株式会社 • ウォーターセル株式会社 取り締まられ役 • アグリノート – アグリノートforAndroid開 発担当
  3. 3. Android Bazaar&Conference 2012 東北 (2012.10.20) 動員300名超の懇親会を 仕切らせていただきました
  4. 4. OSC2012Aizu 開催おめでとうございます! って@Nkznが言ってるって #osc12az タグ付けて つぶやいておいてください
  5. 5. その他 • ここ1年でお邪魔してる界隈 – 長岡IT開発者勉強会(NDS) • http://nagaoka.techtalk.jp/ • 11/17にMSの中の人がAzureのセミナーしにくるっ てよ – Niigata.pm • http://niigata.pm.org/ – ギークハウス新潟 • http://www.geek-niigata.com/ • 住んでます
  6. 6. おしながき • 自己紹介 ←イマココ! • 前置き • アグリノートにおけるAndroid • Androidとは • いろんな「ふつう」を見てみよう – プログラミングの「ふつう」 「凄い人にしかできないこ – デザインの「ふつう」 と」は話さないよ – セキュリティの「ふつう」 – 収益化の「ふつう」 • おまけ:アプリをトコトン簡単に作る普通じゃない方法
  7. 7. Prelude 前置き
  8. 8. 前置き ※「ふつう」の話をしたいだけで、 基礎や基本の話は少なめです ※あくまで中川の独断と偏見による 「ふつう」であり 業界標準と必ずしも 一致するものではありません
  9. 9. Introduction: What’s Android? Androidとは
  10. 10. 聞いたことある人
  11. 11. 端末持ってる人
  12. 12. 端末何台か持ってる人
  13. 13. アプリ書いてる人
  14. 14. 説明不要ですかね ( ゚Д゚)y─┛~~
  15. 15. Androidとは • 米Google社が中心となって作ったOpen Handset Alliance (OHA)という組織が管理してい るモバイルデバイス向けプラットフォーム。 • Webフレームワークっぽい開発環境で、Javaで 携帯電話向けアプリが作れる • OSSな組み込みプラットフォームなのでいろん なところに入れられる→電子レンジとか • OS扱いされることが多いけど、厳密にはOS じゃないよ!
  16. 16. 自作アプリ アプリケーションフレームワーク: アプリケーションへ様々な機能を提供するクラス群 NDK SDK ランタイム環境: DalvikVMと C++ライブラリ群:高速動作や、ハードウェア 各種JavaSE6準拠ライブラリ 操作を求められる機能のライブラリ Linuxカーネル:↑のスタックとハードウェアの仲立ちをする
  17. 17. 日本のAndroid端末 の、前に
  18. 18. 日本のスマートフォン(2009年秋) 2009.Oct Aizu.LT SPより
  19. 19. 日本のAndroid端末(2010年10月) 2010.Oct OSC2010Niigataより
  20. 20. 日本のAndroid端末(2011年4月) 2011.Apr 長岡IT開発者勉強会#21より
  21. 21. この辺で 数えるのやめました
  22. 22. ちゃんとまとめるとこうなるらしい 出典:Androidにおけるテストに関して〜デバイスをどう選択するか〜
  23. 23. Introduction: Agri-Note for Android アグリノートにおけるAndroid
  24. 24. アグリノートforAndroidのミッション Webアプリケーションとしての アグリノートに 「現場で即座に入力」 「写真を手軽に記録」 「現在地と圃場の照らし合わせ」 などの付加価値を与えること
  25. 25. 実際大事。 • 一日中農作業をして疲れて帰ってきた農 家さんの中には、パソコンの電源を入れ ること自体がストレスになる(≒だんだん と記録をつけなくなる)人が普通にいる • なら現場で作業が終わった時に直接入力 してもらえばいいじゃん?という発想 – 自宅で一気に作業すると大変だけれど、圃場 1つ分の作業を付ける分にはそこまで苦では ない(はず)
  26. 26. 技術の粋を集めたアプリ #ではない • 機能要件だけで言えば、かなり簡単な作 り – サーバーからマスタを引っ張ってきて – 入力欄作って – 入力された情報をサーバーにポイする
  27. 27. 一番大事にしていること • できるだけ色んな端末で動くこと – アグリノートそのものは限りなくBtoCなサー ビス – 農家さんが使う端末をこちらから制限するこ とはできるだけ避けたい – そもそも制限をかけられるほどの検証端末を 用意できる財政ではない • 検証端末を10機種程度に減らす方法はあるらしい Androidにおけるテストに関して〜デバイスをどう選択するか〜
  28. 28. 色んな端末で動かすために • ドキュメントやリファレンスを読んで、 JavaAPIの正しい使い方を守る • ドキュメントを読んで、リソースファイルの 正しい用意の仕方、振り分け方を守る • ドキュメントやサンプルでサポートされてい るカスタムUI作りの仕組みを使う • 充分に効用やリスクが検証されていない黒魔 術は避ける • etc.
  29. 29. _人人人人人_ > ふつう <  ̄^Y^Y^Y^Y ̄
  30. 30. 今日は この1年間の アプリ開発で培った 「ふつう」の話をします
  31. 31. Ordinaries for Android App Development Androidのいろんな「ふつう」
  32. 32. いろんな「ふつう」 • プログラミング • デザイン • セキュリティ • 収益化 • おまけ
  33. 33. Ordinary for Android App Programming プログラミングの「ふつう」
  34. 34. Androidプログラミング • とりあえず今回はJavaの話で。 – 本当はC++でも画面作れる • イベント駆動モデルのフレームワーク – 適切なクラスやインターフェースをextendsし たりimplementsしながら@Overrideメソッド を実装していけばOK • レイアウトや各種リソースは原則XMLで 管理(しなくてもいいけどやったほうが 管理しやすくて楽)
  35. 35. Activity = 画面
  36. 36. Activity = 画面 レイアウトXMLを登録
  37. 37. レイアウトXML
  38. 38. Java⇔XML • XMLに書いた各種オブジェクト (TextViewとかButtonとか)をJavaから 触るには、setContentViewより後で findViewById(int)を呼ぶ
  39. 39. Web出身者に易しい • JavaScriptからDOMを触る感覚 • ほぼ全ての画面要素の一番上の概念であ るViewクラスがView#setOnClickListener を持っているので、どんな画面部品にで もクリックイベントは持たせられたり
  40. 40. さて基本はこのへんに いたしまして
  41. 41. 3つの「ふつう」 1. 非同期処理 2. Intentを使えば自分で作るものが減る 3. Fragmentでスマホ・タブレット両対応
  42. 42. 非同期処理が必要な理由 • AndroidのUIはシングルスレッドモデル – ボタンの場合、「ボタンが凹むエフェクトを描 画」「onClickを呼び出す」「ボタンが戻るエ フェクトを描画」がシステム側の一連の動作とし て呼び出される – onClick内に重い操作(ネットワーク接続とか) を書くと、ボタンが数瞬戻ってこないなどの問題 が起こり、ユーザーが気持ちの悪い思いをする – かといって別のThreadを立ててそこからUIオブ ジェクトを触るとエラーになる • UIの操作をロックせず、かつ処理を行う仕組 みが必要
  43. 43. 非同期処理の仕組み • 大きく分けて2種類 – UIスレッドの処理キューに処理を依頼だけし て、UIが暇な時に処理してもらう • Handlerクラス • 結局UIスレッドが処理するのであまりオススメし ない – タイミングはAndroid側に完全に任せる形で別 スレッドを作成する • AsyncTaskクラス:途中経過を通知してくれる • AsyncTaskLoaderクラス:データロード中心
  44. 44. 3つの「ふつう」 1. 非同期処理 2. Intentを使えば自分で作るものが減る 3. Fragmentでスマホ・タブレット両対応
  45. 45. Intent • インテントとは – アプリの各画面及びバックグラウンドプロセ スの間を取り持つメッセージング機能
  46. 46. Intentの例 • 明示的インテント – 「Activity1からActivity2へ遷移したい」とい うメッセージをAndroid側に渡すと画面遷移が 発生する(アプリを跨いでもOK) – 「写真を撮影してほしい」というメッセージ をカメラアプリに渡すと、写真を撮影した上 で撮影済みの画像のパスを返してくれる • 暗黙的インテント – 「誰か画像を扱えるアプリいませんか」
  47. 47. 3つの「ふつう」 1. 非同期処理 2. Intentを使えば自分で作るものが減る 3. Fragmentでスマホ・タブレット両対応
  48. 48. Fragment • Android 3.0から追加された、(主に)画 面の分割と再利用を目的としたコンポー ネント • 画面を持ち、Activityに配置されるが、特 定のActivityに依存しない(下手な作り方 をすると密結合する) • Activityとほぼ同じイベントハンドラを持 つため、各種ボタン類などの初期化など もFragment内だけで行うことができる
  49. 49. スマホ版 MenuFragment BrowserFragment 遷移 MenuActivity BrowserActiviity 2012/11/2
  50. 50. タブレット版 MenuFragment BrowserFragment BrowserActiviity 2012/11/2
  51. 51. アグリノートもそんな感じ タブレット版 スマホ版 サイドメニューとタブの共通化は 自前で頑張りました
  52. 52. 参考書籍 • http://amzn.to/SlO7Ph • 「入門」と銘打って ますが、実際にはAPI の使い方解説書みた いな本 • 仕事で使うレベルで Androidを学ぶなら必 携 • 初心者が一番最初に 買うとちょっとグ ロッキーになる本
  53. 53. 番外編 • ActionBarSherlock – http://actionbarsherlock.com/ – Android 2.xな端末でActionBarが使えるように なるライブラリ – Google I/O 2012公式アプリに採用されている ので、デファクトスタンダード化 – アグリノート、ラーメンバトル両方に採用 • android-menudrawer – https://github.com/SimonVT/android-menudrawer – ラーメンバトルアプリに試験採用
  54. 54. Ordinary for Android App Design デザインの「ふつう」
  55. 55. アプリを残念にしないために http://www.ladybeetle-design.com/androidappdesigns/
  56. 56. デザイナーがコードから読み解く、 Androidアプリのデザインの幅を広げるコツとTips • Androidのデザインを実装する部分 – XML – 9-patch Format Image (hoge.9.png) – カスタムUI エンジニアの領分になってしまっている が、デザイナーが「何ができるか」を 知っていれば、互いに幸せになれる
  57. 57. スライドが公開されてます • XMLがわからなくても聞ける編(入門):全4回 – 第1回:導入と9-patch編 • http://www.slideshare.net/toooommmmmmmmy/1androidtips – 第2回:より凝ったグラフィック編 • http://www.slideshare.net/toooommmmmmmmy/2androidtips – 第3回:全力でカスタムUI • http://www.slideshare.net/toooommmmmmmmy/2androidtips-14596126 – 第4回:レイアウト編 • http://www.slideshare.net/toooommmmmmmmy/4androidtips-14883482 デザインを気にしたいアプリ開発者は必読!
  58. 58. リソース振り分けは自動に任せる • drawable:画像など – ピクセルの大きさ次第 • layout:レイアウト – サイズ, 縦横 – dp/dip →Density Independent Pixel →現実の大きさを優先する単位 – values • 文字列とか 言語コード入れると 多言語対応が自動 • style(CSS的な)
  59. 59. 参考書籍 • http://amzn.to/TA6H9x • これからの時代のUI の組み合わせ方とか • カスタムUIの作り方 とか
  60. 60. Ordinary for Android App Security セキュリティの「ふつう」
  61. 61. 結論から言うと
  62. 62. これ読んでください • http://amzn.to/QbAhmq • 数少ないセキュリティ本 • どんなセキュリティホールを 作ってしまいやすいか • どんなリスクがあって、どん な回避をすればよいか(もし くは回避できないことを考慮 しなければならないか) • みたいなことが書いてありま す。
  63. 63. セキュリティの話題にも色々 • 端末機能へのアクセス権限(パーミッ ション) • 各アプリが持つデータベースへのアクセ ス権限 – Skypeアプリが平文でパスワードを保存して いた上にデータベース設定をミスっていて凄 いことになってた • アプリの逆コンパイルによる情報流出
  64. 64. パーミッション:アグリノートアプリの場合 • 完全なインターネッ トアクセス – クライアントですし • ストレージ – 写真機能 • 現在地 – 現在地機能 _人人人人_ > 健全 <  ̄^Y^Y^Y^ ̄
  65. 65. パーミッション:某音楽アプリの場合 • Gmailの読み取り • 完全なインターネットアク セス • 機密ログデータの読み取り • 端末のステータスとIDの読 み取り • USB ストレージのコンテン ツの変更/削除、SD カード のコンテンツの変更/削除 • 実行中のアプリの取得 • システム全般設定の変更 • etc.
  66. 66. / //////////////////////////ヽ //////////////////////////////ヘ 有 ///////////////////// ̄ ̄⌒ヽ//ヘ //,─────---ー''''⌒ /⌒ヽ ゝ//| / ─―- 、 / /三三\//| ギ l /⌒ヽ、'ー 、__/三/⌒ヽノ//| ル ヽ/ ヘ三ニ`'''--| ヽ三三三i|====ゝミミ テ /| ./〈 ̄ ヽ `ー──= / │ \三三/ o ̄ヽ≡. / \{. o __ノ. ヽ ̄ ̄´ | ⌒. -.、 .| .\ .| | | | 罪 ィ ・ ミヘ / / ヽ、_| ` .| ',ミヘ. / i/ヽ. ,ノ二 | . ',ミヘ / / ソ',ミヘ _..^ミ^――ヽ、 ./ ・ \.',ミ.| (ニニ ̄ ̄ ̄ ̄ / | | ´\ /,⌒ヽ / / .リ \、 ./ ゝ ` / /./ /| `'=、 ──- / /圭 ・ iフ./.l、 `''────゛ /圭圭 圭圭ヽ_________/圭圭圭 圭圭圭圭圭/:::::: \圭圭圭圭圭圭ミ/ 圭圭圭圭/::::::::::::::::::.\圭圭圭圭ミ/ ! 圭圭圭/:::::::::::::::::::::::::::/'ヽ、.圭圭/ 圭圭/ニヽ:::::::::::::::::: /圭圭\/ 圭/`─/:::::::::::::::::::::|,圭圭圭 /圭圭/::::::::::::::::::::::::|圭圭/ 圭圭ミ/:::::::::::::::::::::::::::|圭/ / 圭圭/:::::::::::::::::::::::::::::|/ /
  67. 67. パーミッション問題の焦点 • ユーザー情報を不正に入手しようとする ような輩はそもそもこの場にいないと信 じていますが • それはそうとして、ユーザーを不安がら せるようなパーミッションをうっかり付 けてしまうことは避けましょう • ひろみちゅ先生に目をつけられたら(ry
  68. 68. アプリの逆コンパイル問題 大前提: Androidアプリ(.apk)の展 開・逆コンパイル手法は、 随分と前から完全に確立さ れています。 srcフォルダの中身もresフォルダの中身も復元可能です
  69. 69. 獲られたら困るものをアプリに入 れない。 もちろんユーザビリティとのト レードオフが発生するので、何を 諦めるか判断する必要は出てくる。 秘密鍵の類を持たせるのは 論外です。
  70. 70. いちおうアグリノートアプリの中には 読まれても困らないものしか入ってま せん (※ただし僕の汚い設計を除く)
  71. 71. Ordinary for Android App Monetization 収益化の「ふつう」
  72. 72. ああ・・・ それにしても 金がほしい・・・! コインが好きで!ーフジタク談話室: 金の基礎知識と雑学 Ⅰ
  73. 73. 誰でも一度は考える 有料アプリで一攫千金
  74. 74. ヘ (^o^)ヘ いいぜ |∧ / / (^o^)/ てめえ が有料アプリで /( ) 儲け られるってなら (^o^) 三 / /> \ (\\ 三 (/o^) < \三 (/ / く まずはそのふざけた
  75. 75. 有料アプリのダウンロード実態 そもそもみんな 有料アプリなんて ダウンロードすらしない スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社 (2011年3月)
  76. 76. 無料アプリのダウンロード実態 無料ならDLしてもらえる 可能性が微粒子レベルで 存在する・・・? スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社 (2011年3月)
  77. 77. よしんば売れたとしても • 例えば2人月(140万くらい?)かけて作っ た100円のアプリがあったとして – 1本あたりの実入りは70円 – 1,000本売れて70,000円 – 10,000本売れて700,000円 _人人人人人人人人人_ > ようやく1人月 <  ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
  78. 78. 競争率とか最大数とか • Google「Playストアのアプリ数が70万 本に到達しました」 – http://www.businessweek.com/news/2012-10-29/google-says- 700-000-applications-available-for-android-devices • 2011年5月時点で日本で最も売れたアプリ の本数 5000〜10000本×600円 – マーケットの現状 - 日本Androidの会 2011年5月定例会 – よくて420万円 – ちなみに5万本以上売れた有料アプリは世界で73本(2011年当時)
  79. 79. 有料アプリは諦めよう • 無料アプリで広告収入狙い – ぐんまのやぼう, なめこみたいな定期的に何 度も見るアプリがオススメ • 受託 – アプリ自体は売れなくても問題ない • メーカーやキャリアに近づいてプリイン – 単価×出荷端末数とかでもらえるらしい • 儲かるWebサービスのクライアント作る – アグリノート ← イマココ!
  80. 80. Extraordinaries for Android App Development アプリをトコトン簡単に作る ふつうじゃない方法
  81. 81. アプリで儲けるのは難しい • 売り上げが上がらない→開発工数分の人 件費をペイできる可能性が少ない 工数の方を減らすことはできないか? 対象の市場を増やせば売上も少しは上が らないか?
  82. 82. クロスプラットフォーム • 1セットのソースから複数プラット フォーム(主にiOSとAndroid)向けのア プリをビルドできる系ツール • 本来の開発環境では複数の手順を踏まな いといけないはずの機能を1メソッドで 実現するなど、簡略化が図られている
  83. 83. Titanium Mobile Unity Corona SDK Adobe AIR
  84. 84. Adobe AIR This is the Flash.
  85. 85. Adobe AIR • HTML, JS, Action Script • iOS, Android, Blackberry – PC上でも動作する • AIRランタイム上で動作 • まだちょっと重いらしい • CS5でも作れちゃう
  86. 86. Unity For 3D Games.
  87. 87. Unity • JS, C#, Lua, などなど • iOS, Android, Xbox 360, PS3, PC – ペケ箱で動く =Windows Phoneでも動く • Flashばりの至れり尽くせり環境
  88. 88. Titanium Mobile JS & Native UI
  89. 89. Titanium Mobile • JavaScriptオンリー • オープンソース • CSSならぬ「JSS」 • iOS, Android • 各プラットフォームの本来のUIをそのま ま使用 →ユーザーが使い慣れたUI
  90. 90. Native UI
  91. 91. Corona SDK Code Less, Play More.
  92. 92. Corona SDK • Lua • iOS, Android • OpenGLベース • ビルドはサーバーで。 • APIはActionScript2ライク – 一昔前のFlashからの移植性がすごい
  93. 93. どのくらい 「Code Less」?
  94. 94. このくらい。
  95. 95. 仕組み
  96. 96. 昨年 本出しました • 電子書籍 • Corona SDKの入門本 • 達人出版会のサイト からPayPalで購入で きます • http://bit.ly/CoronaNkz n01
  97. 97. 使い分け案
  98. 98. • サクッと2Dゲーム→Corona • ユーティリティツール→Titanium • 3Dゲーム→Unity • ガチのクロスプラットフォーム→AIR
  99. 99. まとめ • 公私混同しながらAndroid技術の勉強とアグリ ノートアプリ製作を進めているのは、このスラ イドのカオスっぷりを見ての通り(;´Д`) • だんだんとAndroid界隈が広がりすぎて自分では 追いきれなくなってきてるので、誰か僕らの団 体にJOINして一緒にAndroid関連技術を追いか けませんか。 – メーリングリストへの加入お待ちしております – http://bit.ly/jagniigata
  100. 100. ご清聴 ありがとうございました

×