SlideShare a Scribd company logo
ぼくのかんがえた
ふつうのあんどろいどかいはつ
  ウォーターセル株式会社 中川 幸哉

       2012.11.3
  新潟オープンソースセミナー2012
自己紹介
• 中川幸哉                 • 経歴
 – @Nkzn / なかざん         – 〜2010年
                          • 会津大学
 – 0x19歳
                          • 株式会社GClue
 – 上越市出身                – 2010年〜
 – 新潟市在住                  • JCCソフト株式会社 PG
 – 日本Androidの会            • コミュニティ活動開始
   新潟支部 支部長             – 2011年秋〜
 – ウォーターセル株式会社            • ウォーターセル株式会社
   取り締まられ役                • アグリノート

 – アグリノートforAndroid開
   発担当
Android Bazaar&Conference
2012 東北 (2012.10.20)




           動員300名超の懇親会を
           仕切らせていただきました
OSC2012Aizu
開催おめでとうございます!




    って@Nkznが言ってるって
    #osc12az タグ付けて
    つぶやいておいてください
その他
• ここ1年でお邪魔してる界隈
 – 長岡IT開発者勉強会(NDS)
   • http://nagaoka.techtalk.jp/
   • 11/17にMSの中の人がAzureのセミナーしにくるっ
     てよ
 – Niigata.pm
   • http://niigata.pm.org/
 – ギークハウス新潟
   • http://www.geek-niigata.com/
   • 住んでます
おしながき
• 自己紹介 ←イマココ!
• 前置き
• アグリノートにおけるAndroid
• Androidとは
• いろんな「ふつう」を見てみよう
  – プログラミングの「ふつう」
                    「凄い人にしかできないこ
  – デザインの「ふつう」        と」は話さないよ
  – セキュリティの「ふつう」
  – 収益化の「ふつう」
• おまけ:アプリをトコトン簡単に作る普通じゃない方法
Prelude

前置き
前置き

※「ふつう」の話をしたいだけで、
 基礎や基本の話��少なめです
※あくまで中川の独断と偏見による
    「ふつう」であり
   業界標準と必ずしも
 一致するものではありません
Introduction: What’s Android?

Androidとは
聞いたことある人
端末持ってる人
端末何台か持ってる人
アプリ書いてる人
説明不要ですかね
     ( ゚Д゚)y─┛~~
Androidとは
• 米Google社が中心となって作ったOpen
  Handset Alliance (OHA)という組織が管理してい
  るモバイルデバイス向けプラットフォーム。
• Webフレームワークっぽい開発環境で、Javaで
  携帯電話向けアプリが作れる
• OSSな組み込みプラットフォームなのでいろん
  なところに入れられる→電子レンジとか
• OS扱いされることが多いけど、厳密にはOS
  じゃないよ!
自作アプリ




           アプリケーションフレームワーク:
       アプリケーションへ様々な機能を提供するクラス群

         NDK                     SDK


                            ランタイム環境:
                               DalvikVMと
C++ライブラリ群:高速動作や、ハードウェア
                         各種JavaSE6準拠ライブラリ
    操作を求められる機能のライブラリ




   Linuxカーネル:↑のスタックとハードウェアの仲立ちをする
日本のAndroid端末




  の、前に
日本のスマートフォン(2009年秋)




2009.Oct Aizu.LT SPより
日本のAndroid端末(2010年10月)




2010.Oct OSC2010Niigataより
日本のAndroid端末(2011年4月)




2011.Apr 長岡IT開発者勉強会#21より
この辺で
数えるのやめました
ちゃんとまとめるとこうなるらしい




 出典:Androidにおけるテストに関して〜デバイスをどう選択するか〜
Introduction: Agri-Note for Android

アグリノートにおけるAndroid
アグリノートforAndroidのミッション

Webアプリケーションとしての
アグリノートに
「現場で即座に入力」
「写真を手軽に記録」
「現在地と圃場の照らし合わせ」
などの付加価値を与えること
実際大事。
• 一日中農作業をして疲れて帰ってきた農
  家さんの中には、パソコンの電源を入れ
  ること自体がストレスになる(≒だんだん
  と記録をつけなくなる)人が普通にいる
• なら現場で作業が終わった時に直接入力
  してもらえばいいじゃん?という発想
 – 自宅で一気に作業すると大変だけれど、圃場
   1つ分の作業を付ける分にはそこまで苦では
   ない(はず)
技術の粋を集めたアプリ #ではない

• 機能要件だけで言えば、かなり簡単な作
  り
 – サーバーからマスタを引っ張ってきて
 – 入力欄作って
 – 入力された情報をサーバーにポイする
一番大事にしていること
• できるだけ色んな端末で動くこと
 – アグリノートそのものは限りなくBtoCなサー
   ビス
 – 農家さんが使う端末をこちらから制限するこ
   とはできるだけ避けたい
 – そもそも制限をかけられるほどの検証端末を
   用意できる財政ではない
  • 検証端末を10機種程度に減らす方法はあるらしい
   Androidにおけるテストに関して〜デバイスをどう選択するか〜
色んな端末で動かすために
• ドキュメントやリファレンスを読んで、
  JavaAPIの正しい使い方を守る
• ドキュメントを読んで、リソースファイルの
  正しい用意の仕方、振り分け方を守る
• ドキュメントやサンプルでサポートされてい
  るカスタムUI作りの仕組みを使う
• 充分に効用やリスクが検証されていない黒魔
  術は避ける
• etc.
_人人人人人_
> ふつう <
 ̄^Y^Y^Y^Y ̄
今日は
   この1年間の
 アプリ開発で培った
「ふつう」の話をします
Ordinaries for Android App Development

Androidのいろんな「ふつう」
いろんな「ふつう」

• プログラミング

• デザイン

• セキュリティ

• 収益化

• おまけ
Ordinary for Android App Programming

プログラミングの「ふつう」
Androidプログラミング
• とりあえず今回はJavaの話で。
 – 本当はC++でも画面作れる
• イベント駆動モデルのフレームワーク
 – 適切なクラスやインターフェースをextendsし
   たりimplementsしながら@Overrideメソッド
   を実装していけばOK
• レイアウトや各種リソースは原則XMLで
  管理(しなくてもいいけどやったほうが
  管理しやすくて楽)
Activity = 画面
Activity = 画面




        レイアウトXMLを登録
レイアウトXML
Java⇔XML
• XMLに書いた各種オブジェクト
  (TextViewとかButtonとか)をJavaから
  触るには、setContentViewより後で
  findViewById(int)を呼ぶ
Web出身者に易しい
• JavaScriptからDOMを触る感覚
• ほぼ全ての画面要素の一番上の概念であ
  るViewクラスがView#setOnClickListener
  を持っているので、どんな画面部品にで
  もクリックイベントは持たせられたり
さて基本はこのへんに
  いたしまして
3つの「ふつう」

1. 非同期処理

2. Intentを使えば自分で作るものが減る

3. Fragmentでスマホ・タブレット両対応
非同期処理が必要な理由
• AndroidのUIはシングルスレッドモデル
 – ボタンの場合、「ボタンが凹むエフェクトを描
   画」「onClickを呼び出す」「ボタンが戻るエ
   フェクトを描画」がシステム側の一連の動作とし
   て呼び出される
 – onClick内に重い操作(ネットワーク接続とか)
   を書くと、ボタンが数瞬戻ってこないなどの問題
   が起こり、ユーザーが気持ちの悪い思いをする
 – かといって別のThreadを立ててそこからUIオブ
   ジェクトを触るとエラーになる
• UIの操作をロックせず、かつ処理を行う仕組
  みが必要
非同期処理の仕組み
• 大きく分けて2種類
 – UIスレッドの処理キューに処理を依頼だけし
   て、UIが暇な時に処理してもらう
  • Handlerクラス
  • 結局UIスレッドが処理するのであまりオススメし
    ない
 – タイミングはAndroid側に完全に任せる形で別
   スレッドを作成する
  • AsyncTaskクラス:途中経過を通知してくれる
  • AsyncTaskLoaderクラス:データロード中心
3つの「ふつう」

1. 非同期処理

2. Intentを使えば自分で作るものが減る

3. Fragmentでスマホ・タブレット両対応
Intent
• インテントとは
 – アプリの各画面及びバックグラウンドプロセ
   スの間を取り持つメッセージング機能
Intentの例
• 明示的インテント
 – 「Activity1からActivity2へ遷移したい」とい
   うメッセージをAndroid側に渡すと画面遷移が
   発生する(アプリを跨いでもOK)
 – 「写真を撮影してほしい」というメッセージ
   をカメラアプリに渡すと、写真を撮影した上
   で撮影済みの画像のパスを返してくれる
• 暗黙的インテント
 – 「誰か画像を扱えるアプリいませんか」
3つの「ふつう」

1. 非同期処理

2. Intentを使えば自分で作るものが減る

3. Fragmentでスマホ・タブレット両対応
Fragment
• Android 3.0から追加された、(主に)画
  面の分割と再利用を目的としたコンポー
  ネント
• 画面を持ち、Activityに配置されるが、特
  定のActivityに依存しない(下手な作り方
  をすると密結合する)
• Activityとほぼ同じイベントハンドラを持
  つため、各種ボタン類などの初期化など
  もFragment内だけで行うことができる
スマホ版



            MenuFragment         BrowserFragment

                            遷移




            MenuActivity          BrowserActiviity
2012/11/2
タブレット版



        MenuFragment              BrowserFragment




                        BrowserActiviity
2012/11/2
アグリノートもそんな感じ




     タブレット版       スマホ版
サイドメニューとタブの共通化は
自前で頑張りました
参考書籍
  • http://amzn.to/SlO7Ph
  • 「入門」と銘打って
    ますが、実際にはAPI
    の使い方解説書みた
    いな本
  • 仕事で使うレベルで
    Androidを学ぶなら必
    携
  • 初心者が一番最初に
    買うとちょっとグ
    ロッキーになる本
番外編
• ActionBarSherlock
  – http://actionbarsherlock.com/
  – Android 2.xな端末でActionBarが使えるように
    なるライブラリ
  – Google I/O 2012公式アプリに採用されている
    ので、デファクトスタンダード化
  – アグリノート、ラーメンバトル両方に採用
• android-menudrawer
  – https://github.com/SimonVT/android-menudrawer
  – ラーメンバトルアプリに試験採用
Ordinary for Android App Design

デザインの「ふつう」
アプリを残念にしないために




  http://www.ladybeetle-design.com/androidappdesigns/
デザイナーがコードから読み解く、
 Androidアプリのデザインの幅を広げるコツとTips

• Androidのデザインを実装する部分
 – XML
 – 9-patch Format Image (hoge.9.png)
 – カスタムUI

         エンジニアの領分になってしまっている
         が、デザイナーが「何ができるか」を
         知っていれば、互いに幸せになれる
スライドが公開されてます
• 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


                           デザインを気にしたいアプリ開発者は必読!
リソース振り分けは自動に任せる

       • drawable:画像など
         – ピクセルの大きさ次第
       • layout:レイアウト
         – サイズ, 縦横
         – dp/dip
           →Density Independent Pixel
           →現実の大きさを優先する単位
         – values
            • 文字列とか
              言語コード入れると
              多言語対応が自動
            • style(CSS的な)
参考書籍
  • http://amzn.to/TA6H9x
  • これからの時代のUI
    の組み合わせ方とか
  • カスタムUIの作り方
    とか
Ordinary for Android App Security

セキュリティの「ふつう」
結論から言うと
これ読んでください
    • http://amzn.to/QbAhmq
    • 数少ないセキュリティ本
    • どんなセキュリティホールを
      作ってしまいやすいか
    • どんなリスクがあって、どん
      な回避をすればよいか(もし
      くは回避できないことを考慮
      しなければならないか)
    • みたいなことが書いてありま
      す。
セキュリティの話題にも色々
• 端末機能へのアクセス権限(パーミッ
  ション)
• 各アプリが持つデータベースへのアクセ
  ス権限
 – Skypeアプリが平文でパスワードを保存して
   いた上にデータベース設定をミスっていて凄
   いことになってた
• アプリの逆コンパイルによる情報流出
パーミッション:アグリノートアプリの場合

          • 完全なインターネッ
            トアクセス
           – クライアントですし
          • ストレージ
           – 写真機能
          • 現在地
           – 現在地機能
                  _人人人人_
                  > 健全 <
                   ̄^Y^Y^Y^ ̄
パーミッション:某音楽アプリの場合

        • Gmailの読み取り
        • 完全なインターネットアク
          セス
        • 機密ログデータの読み取り
        • 端末のステータスとIDの読
          み取り
        • USB ストレージのコンテン
          ツの変更/削除、SD カード
          のコンテンツの変更/削除
        • 実行中のアプリの取得
        • システム全般設定の変更
        • etc.
/ //////////////////////////ヽ
//////////////////////////////ヘ



                                                                  有
///////////////////// ̄ ̄⌒ヽ//ヘ
//,─────---ー''''⌒ /⌒ヽ ゝ//|
/ ─―- 、                               / /三三\//|                       ギ
l        /⌒ヽ、'ー 、__/三/⌒ヽノ//|                                          ル
ヽ/ ヘ三ニ`'''--| ヽ三三三i|====ゝミミ
                                                                      テ
/|
./〈 ̄
ヽ `ー──= /
│
              \三三/
               o ̄ヽ≡.

                        /
                                 \{. o __ノ.
                                       ヽ ̄ ̄´
                                   | ⌒. -.、
                                    .|      .\
                                                  .|
                                                    |

                                                        |
                                                         |

                                                                  罪   ィ


                                                                  ・
ミヘ                /               / ヽ、_|         `         .|
',ミヘ.          /              i/ヽ. ,ノ二                  |
. ',ミヘ /                                                   /
ソ',ミヘ                          _..^ミ^――ヽ、             ./


                                                                  ・
\.',ミ.|                      (ニニ ̄ ̄ ̄ ̄            / |
       | ´\                        /,⌒ヽ         / /
    .リ           \、              ./ ゝ `        / /./
    /|               `'=、           ──- /      /圭


                                                                  ・
iフ./.l、                     `''────゛        /圭圭
圭圭ヽ_________/圭圭圭
圭圭圭圭圭/:::::: \圭圭圭圭圭圭ミ/
圭圭圭圭/::::::::::::::::::.\圭圭圭圭ミ/


                                                                  !
圭圭圭/:::::::::::::::::::::::::::/'ヽ、.圭圭/
圭圭/ニヽ:::::::::::::::::: /圭圭\/
圭/`─/:::::::::::::::::::::|,圭圭圭
/圭圭/::::::::::::::::::::::::|圭圭/
圭圭ミ/:::::::::::::::::::::::::::|圭/                            /
圭圭/:::::::::::::::::::::::::::::|/                         /
パーミッション問題の焦点
• ユーザー情報を不正に入手しようとする
  ような輩はそもそもこの場にいないと信
  じていますが
• それはそうとして、ユーザーを不安がら
  せるようなパーミッションをうっかり付
  けてしまうことは避けましょう
• ひろみちゅ先生に目をつけられたら(ry
アプリの逆コンパイル問題

大前提:
Androidアプリ(.apk)の展
開・逆コンパイル手法は、
随分と前から完全に確立さ
れています。
srcフォルダの中身もresフォルダの中身も復元可能です
獲られたら困るものをアプリに入
  れない。
  もちろんユーザビリティとのト
  レードオフが発生するので、何を
  諦めるか判断する必要は出てくる。

秘密鍵の類を持たせるのは
論外です。
いちおうアグリノートアプリの中には
読まれても困らないものしか入ってま
せん

(※ただし僕の汚い設計を除く)
Ordinary for Android App Monetization

収益化の「ふつう」
ああ・・・
それにしても
金がほしい・・・!
コインが好きで!ーフジタク談話室: 金の基礎知識と雑学   Ⅰ
誰でも一度は考える




有料アプリで一攫千金
ヘ
(^o^)ヘ いいぜ
|∧
                               /
/
                        (^o^)/ てめえ
が有料アプリで
                    /(    )     儲け
られるってなら
         (^o^) 三 / />
 \      (\\ 三
 (/o^) < \三
 (/
 / く まずはそのふざけた
有料アプリのダウンロード実態




                       そもそもみんな
                      有料アプリなんて
                    ダウンロードすらしない




スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社
(2011年3月)
無料アプリのダウンロード実態




                       無料ならDLしてもらえる
                       可能性が微粒子レベルで
                         存在する・・・?




スマートフォンに関する調査 |ソフトバンク・ヒューマンキャピタル株式会社
(2011年3月)
よしんば売れたとしても
• 例えば2人月(140万くらい?)かけて作っ
  た100円のアプリがあったとして
 – 1本あたりの実入りは70円
 – 1,000本売れて70,000円
 – 10,000本売れて700,000円
           _人人人人人人人人人_
           > ようやく1人月 <
            ̄^Y^Y^Y^Y^Y^Y^Y^ ̄
競争率とか最大数とか
• 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年当時)
有料アプリは諦めよう
• 無料アプリで広告収入狙い
 – ぐんまのやぼう, なめこみたいな定期的に何
   度も見るアプリがオススメ
• 受託
 – アプリ自体は売れなくても問題ない
• メーカーやキャリアに近づいてプリイン
 – 単価×出荷端末数とかでもらえるらしい
• 儲かるWebサービスのクライアント作る
 – アグリノート ← イマココ!
Extraordinaries for Android App Development

アプリをトコトン簡単に作る
ふつうじゃない方法
アプリで儲けるのは難しい
• 売り上げが上がらない→開発工数分の人
  件費をペイできる可能性が少ない



    工数の方を減らすことはできないか?
    対象の市場を増やせば売上も少しは上が
    らないか?
クロスプラットフォーム
• 1セットのソースから複数プラット
  フォーム(主にiOSとAndroid)向けのア
  プリをビルドできる系ツール
• 本来の開発環境では複数の手順を踏まな
  いといけないはずの機能を1メソッドで
  実現するなど、簡略化が図られている
Titanium Mobile   Unity




 Corona SDK       Adobe AIR
Adobe AIR
This is the Flash.
Adobe AIR
• HTML, JS, Action Script
• iOS, Android, Blackberry
  – PC上でも動作する
• AIRランタイム上で動作
• まだちょっと重いらしい
• CS5でも作れちゃう
Unity
For 3D Games.
Unity
• JS, C#, Lua, などなど
• iOS, Android, Xbox 360, PS3, PC
 – ペケ箱で動く
   =Windows Phoneでも動く
• Flashばりの至れり尽くせり環境
ぼくのかんがえたふつうのあんどろいどかいはつ
Titanium Mobile
JS & Native UI
Titanium Mobile
• JavaScriptオンリー
• オープンソース
• CSSならぬ「JSS」
• iOS, Android
• 各プラットフォームの本来のUIをそのま
  ま使用
  →ユーザーが使い慣れたUI
Native UI
ぼくのかんがえたふつうのあんどろいどかいはつ
Corona SDK
Code Less, Play More.
Corona SDK
•   Lua
•   iOS, Android
•   OpenGLベース
•   ビルドはサーバーで。
•   APIはActionScript2ライク
    – 一昔前のFlashからの移植性がすごい
どのくらい
「Code Less」?
このくらい。
仕組み
昨年 本出しました
    • 電子書籍
    • Corona SDKの入門本
    • 達人出版会のサイト
      からPayPalで購入で
      きます
    • http://bit.ly/CoronaNkz
      n01
使い分け案
• サクッと2Dゲーム→Corona

• ユーティリティツール→Titanium

• 3Dゲーム→Unity

• ガチのクロスプラットフォーム→AIR
まとめ
• 公私混同しながらAndroid技術の勉強とアグリ
  ノートアプリ製作を進めているのは、このスラ
  イドのカオスっぷりを見ての通り(;´Д`)
• だんだんとAndroid界隈が広がりすぎて自分では
  追いきれなくなってきてるので、誰か僕らの団
  体にJOINして一緒にAndroid関連技術を追いか
  けませんか。
 – メーリングリストへの加入お待ちしております
 – http://bit.ly/jagniigata
ご清聴
ありがとうございました

More Related Content

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