PHP開発からAndroid開発をす
るようになって学んだWebとモバ
イルの違い
GMO Pepabo, Inc.
Masataka Kono
2016-7-3
YAPC::ASIA
HACHIOJI
Kono Masataka
Twitter @mapyo
GitHub @mapyo
GMO Pepabo, Inc.
みんなからは「ぼいらー」と呼ばれています
自己紹介
PHP開発とAndroid開発の経験
カラーミーショップ
PHP開発
3年くらい
minne
Android開発
10ヶ月くらい
どちらのサービスも
人材募集中です!!1
今日お話する事
今日お話する事
● 自分自身の変化
● Webとモバイルの違い
自分自身の変化
● エディタからIDEへ
● アプリの事を中心に考えるようになった
● 開発言語の違い
● ビルドが長い。。。
Web開発とモバイル開発の違い
● リリース方法
● リリースサイクル
● 開発フロー
● 過去のバージョンを気にする必要がある
自分自身の変化
エディタからIDEへ
VimからAndroid Studioへ
VimからAndroid Studioへ
● Android開発ではAndroid Studioを使う
● ショートカットを覚えるまで慣れが必要だった
● IdeaVim最高
● IntelliJ IDEAから作られている
● ちょっとした修正はVimでやってる
アプリの事を中心に考
えるようになった
一般的なWebサービスの構成
DBサーバ APサーバ PCやモバイル
一般的なWebサービスの構成
この時考えていた事は?
● DBサーバ
● APサーバ
● MySQL
● Aapache, Nginx
● PHP
● JavaScript
● ブラウザ
● 開発環境(Vagrant、Puppet)
Web開発していた時に考えていた事
一般的なWebサービスの構成
DBサーバ APサーバ PCやモバイル
一般的なWebサービスの構成
いろいろ考えてた
モバイルの場合
モバイルの場合
一般的なアプリを提供する時の形態
DBサーバ APIサーバ アプリ
一般的なアプリを提供する時の形態
DBサーバ APIサーバ アプリ
一般的なアプリを提供する時の形態
アプリの事を中心に考える
ようになった
● Android SDK
● Java
● Android Studio
● エミュレータ
● APIとのやりとり
考えてる事
※役割分担はチームによっ
て違うと思います。
開発言語の違い
開発言語の違い
PHPからJavaへ
PHP
● Lightweight Language
● 型なし
● 実行して始めてエラーかどうかわかる
Java
● 型あり
● ビルドがある
● シンタックスエラーなどはビルドの段階でわかる
開発言語の違い
リリースサイクルがWebより
長いモバイルには型付き言
語の方が向いてそうな印象
ビルドが長い
Webの場合
1. ソースを変更
2. ブラウザでリロード
数秒で結果がわかる
モバイル(Android)の場合
1. ソースを変更
2. ビルド
3. apkファイルが実機にインストール
4. アプリが起動する
だいたい1分くらいはかかる
(Instant Runという仕組もあるにはある)
Webとモバイルの違い
リリース方法
Webの場合
APPサーバ開発マシン
● APPサーバにDeployしたら反映
● サービス提供者のコントロール下にある
PC
モバイル
モバイルの場合
アプリストア
開発者
● 申請や審査(iOS)がある
● サービス提供者/アプリストア/ユーザ
モバイル
モバイル
モバイルの場合
リリースしたらそのまま最新
のバージョンになるわけで
はない
リリース方法
障害が発生した時
障害が発生した時
● Web
修正して直ぐにDeploy
● モバイル
修正してアプリストアに申請して、ユーザにアプ
リが配布されるのを待つ
リリースサイクル
リリースサイクル
※弊社での事例です
Webの場合
● 機能が出来たらリリース
モバイルの場合
● リリースする日を決めてリリース
(2週間に1回など)
モバイルの場合
なぜか?
リリース日を決める理由
● ユーザは頻繁にアプリが更新されるのを嫌う
● アプリを更新する時に数十M程度の通信量が
発生するため
開発フロー
開発フロー
※弊社での事例です
Webの場合
GitHub Flow
Webの開発フロー
1. masterからブランチを切る
2. そのブランチで開発する
3. レビュー
4. masterにMerge
5. Deploy
機能追加や不具合修正が出来た時点でDeploy
モバイルの場合
Git Flow
モバイルの開発フロー
1. developからブランチを切る
2. そのブランチで開発する
3. レビュー
4. developにMerge
5. ↑をリリース日が近づくまで繰り返す
モバイルの開発フロー
リリース日が近づくと。。。
1. developからrelease用のブランチを切る
2. 検証する
3. Google Playに申請
4. release用のブランチをmasterとdevelopに
Merge
開発フロー
リリースサイクルに合わせた
開発フローを採用
過去のバージョンを気
にする必要がある
Webの場合
特に気にした事はなかった。。。(´・ω・`)
モバイルの場合
DBサーバ APIサーバ アプリ
● APIサーバはDeployしたら反映される
● アプリは直ぐに最新バージョンにはならない
過去のバージョン
API、モバイルでリリースサ
イクルが違う
気にする必要がある事(例)
● APIのレスポンスを変える時
○ 過去のバージョンでは落ちてしまうかも?
○ 逆に落ちないから大丈夫かも?
● 新たなPUSH通知を実装する時
○ PUSH通知を受け取ってこの画面を開きたい
○ 過去のバージョンでは動かないかも?
いかがでしたでしょう
か?
今日お話した事
● 自分自身の変化
● Webとモバイルの違い
自分自身の変化
● エディタからIDEへ
● アプリの事を中心に考えるようになった
● 開発言語の違い
● ビルドが長い。。。
Web開発とモバイル開発の違い
● リリース方法
● リリースサイクル
● 開発フロー
● 過去のバージョンを気にする必要がある
まとめ
モバイル開発おもしろ
いのでやっていきま
しょう!!!!1
付録
お問い合わせに対応
するとき
Webの場合
● ブラウザを調べる
● バージョンを調べる
● DBの内容を見る
● masterブランチのソースを調べる
● サーバのログを見る
モバイルの場合
● アプリのバージョンを調べる
● OSのバージョンを調べる
● 機種を調べる
● 不具合が特定の機種でしか再現出来ない場合
はつらい。。。
Google Playには段
階的公開がある!
アプリのアップデートを段階的に。
弊社の場合
● 20%
● 50%
● 100%
少しずつ公開している。
アプリのアップデートを段階的に。
不具合が見つかると気はだいたい20%の段階で
見つかる。

PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い