SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
DroidKaigi 2015/04/25 @cattaka_net
開発を効率的に
進めるられるまでの道程
Takao Sumitomo
@cattaka_net
DroidKaigi 2015/04/25 @cattaka_net
自己紹介
●
住友 孝郎(Takao Sumitomo)
●
Androidアプリ開発者
●
開発経歴
●
Androidアプリ
●
iOSアプリ(ちょっとだけ)
●
業務系Webアプリケーション
●
業務系Windowsアプリ
●
その他
●
電子工作
●
OpenCV
●
ウォンテッドリー株式会社所属
2014年12月〜
DroidKaigi 2015/04/25 @cattaka_net
Androidアプリ開発の経歴
●
HT-03Aの頃(2009年くらい)からAndroidアプリ
作ってます。
●
当時は受託と派遣を主にやってました。
●
手に負えなくなったアプリの改修をよくやってました
DroidKaigi 2015/04/25 @cattaka_net
プロの力が身につく
Androidプログラミングの教科書
DroidKaigi 2015/04/25 @cattaka_net
駄目コードについて、C87で書きました
技術サークル
TechBooster
DroidKaigi 2015/04/25 @cattaka_net
トピック
●
アプリ開発の効率化について
●
テストを書くに至った経緯
●
開発途中からテストを導入する話
DroidKaigi 2015/04/25 @cattaka_net
アプリ開発の効率化について
DroidKaigi 2015/04/25 @cattaka_net
ボトルネックの潜む場所
●
開発で行うこと
●
プログラムを書く
●
ソースコード管理
●
テスト
●
テスト版アプリの配布
●
これらをどこまで自動化するか?
DroidKaigi 2015/04/25 @cattaka_net
ボトルネックの対策
●
開発で行うこと
●
プログラムを書く
– 諦めて書く。良いライブラリを使う。良いIDEを使う。
●
ソースコード管理
– GitやSVNを使う。Git FlowやGitHub Flowを使う。
●
テスト
– JUnitを使う。
– JenkinsやTravisCIやCircleCIで自動化する。
●
テスト版アプリの配布
– DeployGate等を使う。
ここが一番ネックになる
DroidKaigi 2015/04/25 @cattaka_net
なのでテストの話をします
DroidKaigi 2015/04/25 @cattaka_net
テストを書くに至った経緯
DroidKaigi 2015/04/25 @cattaka_net
開発してるとよくある話
●
「バグゼロで」
●
「品質は100%で」
DroidKaigi 2015/04/25 @cattaka_net
どうしてたか?
●
エクセルのテストシート(山盛り)
●
エビデンス(という名のスクリーンショット)を取る
●
全機種で実機テスト
●
仕様変更があったとき
→全部再テストしてくださいね^^
ツライ!(゚Д゚)ツライ!(゚Д゚)
DroidKaigi 2015/04/25 @cattaka_net
よくある問題
●
小さなリファクタリング
●
意識してないところで壊れる、、orz
●
リファクタリングしないようにする
●
ハウルの動く城みたいになる
●
書きたいように書けなくなるので更にストレスが貯まる
ツライ!(゚Д゚)
DroidKaigi 2015/04/25 @cattaka_net
テストを書き始める
●
最初はロジックのテストから書く
●
要件一覧表の1項目1テストを書くこともやった
●
実は個人的に一番効果があった(効率悪いけど)
●
「壊す恐怖」から解放された
●
以降、設計レベルからテストを書くようにした
DroidKaigi 2015/04/25 @cattaka_net
開発途中からテストを導入する話
DroidKaigi 2015/04/25 @cattaka_net
普通のテスト
要求分析
基本設計
機能設計
詳細設計
コーディング
受け入れテスト
システムテスト
結合テスト
単体テスト
DroidKaigi 2015/04/25 @cattaka_net
普通のテスト
要求分析
基本設計
機能設計
詳細設計
コーディング
受け入れテスト
システムテスト
結合テスト
単体テスト
通常はテストも順番に作る。
後から作るのは大変。
DroidKaigi 2015/04/25 @cattaka_net
アプローチ
●
外部依存する箇所にDI(オレオレ可)を入れる
●
通信処理
●
データベース
●
プリファレンス
●
グローバル変数を取る(static変数)
●
シングルトンという名のグローバル変数も取る
●
投げっぱなしのスレッドを止める
●
最小限のリファクタリング
●
ひたすらテストを書く
DroidKaigi 2015/04/25 @cattaka_net
ひたすらテストを書く
DroidKaigi 2015/04/25 @cattaka_net
具体的な修正1
●
修正前
アプリケーション
通信処理データベース
SharedPreferences
DroidKaigi 2015/04/25 @cattaka_net
具体的な修正2
●
修正後
アプリケーション
通信処理データベース
SharedPreferences
DroidKaigi 2015/04/25 @cattaka_net
具体的な修正3
●
テスト時の構成
アプリケーション
通信処理のモックデータベースのモック
SharedPreferencesのモック
DroidKaigi 2015/04/25 @cattaka_net
具体的な修正3
●
テスト時の構成
アプリケーション
通信処理のモックデータベースのモック
SharedPreferencesのモック
要はこれらをモックに
差し替えられれば
テストが書ける
DroidKaigi 2015/04/25 @cattaka_net
どうやって差し替えるか
●
DaggerなどのDIライブラリを使う
●
オレオレDIを使う
オレオレDIでも無いより良い
DroidKaigi 2015/04/25 @cattaka_net
SharedPreferencesの差し替え
●
Context#getSharedPreferencesを付ける
●
呼ぶときの引数にPrefix等を付ける
●
直接↑を呼ぶのではなく、Factoryクラスを作る
DroidKaigi 2015/04/25 @cattaka_net
SharedPreferencesの差し替え
プロダクションコード
public class SharedPreferencesFactory {
static SharedPreferencesFactory INSTANCE = new SharedPreferencesFactory();
public static SharedPreferencesFactory getInstance() {
return INSTANCE;
}
public SharedPreferences newInstance(Context context, String name) {
return context.getSharedPreferences(name, Context.MODE_PRIVATE);
}
}
テスト用のダミー
public class DummySharedPreferencesFactory extends SharedPreferencesFactory {
public SharedPreferences newInstance(Context context, String name) {
SharedPreferences pref = context.getSharedPreferences(
"test_" + name, Context.MODE_PRIVATE);
pref.clear();
return pref;
}
}
テストのときは
ここをダミーに差し替える
DroidKaigi 2015/04/25 @cattaka_net
SQLiteOpenHelperの差し替え
●
RenamingDelegatingContextを使えば
一時的に別のDBファイルにできる
●
SQLiteOpenHelperにname=nullを渡すと
オンメモリのデータベースが作れる
どっちでもテストは書ける
DroidKaigi 2015/04/25 @cattaka_net
SqlteOpenHelperの差し替え
プロダクションコード
public class OpenHelperFactory {
static OpenHelperFactory INSTANCE = new OpenHelperFactory();
public static OpenHelperFactory getInstance() {
return INSTANCE;
}
@Override
public OpenHelper createOpenHelper(Context context) {
return new OpenHelper(context);
}
}
テスト用のダミー
public class DummyOpenHelperFactory extends OpenHelperFactory {
public OpenHelper createOpenHelper(Context context) {
Context c = new RenamingDelegatingContext(context, "test_");
return new OpenHelper(c);
}
}
テストのときは
ここをダミーに差し替える
DroidKaigi 2015/04/25 @cattaka_net
通信処理の差し替え
●
予め通信処理は1つにまとめておく
●
オレオレDIで通信処理を差し替える
●
偽の通信データを返すようにする
●
偽の通信データは
androidTest下のassetsに入れる
DroidKaigi 2015/04/25 @cattaka_net
ひたすらテストを書く
●
ブラックボックステスト
●
ウォークスルー
●
コンバージョンに繋がるところは重点的に書く
●
ログイン周り
●
応募
●
ユーザーのプロフィール入力
●
テストの粒度はマチマチ
DroidKaigi 2015/04/25 @cattaka_net
ひたすらテストを書く
DroidKaigi 2015/04/25 @cattaka_net
悲しいこともあるけど、、
DroidKaigi 2015/04/25 @cattaka_net
具体的な例
DroidKaigi 2015/04/25 @cattaka_net
たとえばリスト画面
●
この画面に関連する部品
●
Activity
●
Adapter
●
ListView
●
Database
●
どのテストを書く?
Activity
ListView
Database
Adapter
DroidKaigi 2015/04/25 @cattaka_net
Adapterのテスト
●
Adapter単独で考える
●
Contextとダミーのデータを与える
●
getViewで生成されたViewを確認する
●
InstrumentationTestCaseが使える
Activity
ListView
Database
Adapter
Context
Adapter
DummyData
生成されたView
getViewメソッド
これらが対応しているかのテストを書く
テストのときは切り離して考える
DroidKaigi 2015/04/25 @cattaka_net
Adapterのテスト
public void testGetView() {
List<CheckListItem> dummys = new ArrayList<>();
{ // ダミーデータを作る
dummys.add(new CheckListItem(1L, 1L, 1L, "Label1"));
dummys.add(new CheckListItem(2L, 2L, 2L, "Label2"));
}
Context context = getInstrumentation().getTargetContext();
MyAdapter sup = new MyAdapter(context, dummys);
{ // 1つめのViewの表示内容を確認する
View view = sup.getView(0, null, null);
assertThat(view, is(Matchers.instanceOf(CheckedTextView.class)));
assertThat(((CheckedTextView)view).getText().toString(), is("Label1"));
}
{ // 2つめのViewの表示内容を確認する
View view = sup.getView(1, null, null);
assertThat(view, is(Matchers.instanceOf(CheckedTextView.class)));
assertThat(((CheckedTextView)view).getText().toString(), is("Label2"));
}
}
DroidKaigi 2015/04/25 @cattaka_net
Databaseのテスト
●
CRUD系はテストを書く
●
RenamingDelegateContextが便利
●
InstrumentationTestCaseが使える
Activity
ListView
Database
Adapter
テストのときは切り離して考える
Database
DummyData1
DummyData2
insert
select
これらが対応しているかのテストを書く
DroidKaigi 2015/04/25 @cattaka_net
Databaseのテスト
@Override
protected void setUp() throws Exception {
super.setUp();
Context context = new RenamingDelegatingContext(
getInstrumentation().getTargetContext(), "test_");
mOpenHelper = new OpenHelper(context);
}
public void testInsertSelect() {
CheckListEntry orig = new CheckListEntry();
orig.setTitle("hoge");
{ // INSERTする
mOpenHelper.registerEntry(orig);
}
CheckListEntry dest;
{ // SELECTする
Long id = orig.getId();
dest = mOpenHelper.findEntry(id, false);
}
{ // 確認する
assertThat(dest.getTitle(), is("hoge"));
}
}
DroidKaigi 2015/04/25 @cattaka_net
Activity
●
外部依存やストレージのみダミーに置き換える
●
ActivityInstrumentationTestCase2が使える
●
それぞれの部品の疎通確認程度に留める
Activity
ListView
Database
Adapter
Activity
ListView
DummyDatabase
Adapter
Databaseのみダミーに置き換えて考える
これらが対応しているかのテストを書く
DroidKaigi 2015/04/25 @cattaka_net
ツールやライブラリ
●
基本的に一般的なものを使用
●
JUnit4
●
./gradlew connectedAndroidTest
●
./gradlew createCoverageReport
●
Espresso (android-test-kit)
●
UI周りのテストが簡潔に書ける
●
Mockito
●
モックが簡単に作れる
●
Crashlytics
./gradlew create(Debug/Release)CoverageReport
DroidKaigi 2015/04/25 @cattaka_net
connectedAndroidTestのレポート
DroidKaigi 2015/04/25 @cattaka_net
createCoverageReportのレポート
DroidKaigi 2015/04/25 @cattaka_net
標準でも十分強力
DroidKaigi 2015/04/25 @cattaka_net
まとめ
DroidKaigi 2015/04/25 @cattaka_net
いきなり効率化は無理
DroidKaigi 2015/04/25 @cattaka_net
少しずつ自動化しよう
DroidKaigi 2015/04/25 @cattaka_net
まずはテストを書くところから始めよう
DroidKaigi 2015/04/25 @cattaka_net
ボトルネックの対策
●
開発で行うこと
●
プログラムを書く
– 諦めて書く
●
ソースコード管理
– GitやSVNを使う。GitFlowやGitHubFlowを使う。
●
テスト
– JUnitを使う
– JenkinsやTravisCIやCircleCIを使う
●
テスト版アプリの配布
– DeployGateやFabricを使う
ここが解決すれば
後の自動化もできる
DroidKaigi 2015/04/25 @cattaka_net
サンプルアプリ
●
FastCheckList
●
テストが直ぐに実行できるようになっています
DroidKaigi 2015/04/25 @cattaka_net
貴方がテストを書けば
効率は上げられる
DroidKaigi 2015/04/25 @cattaka_net
ご清聴ありがとうございました
Takao Sumitomo
@cattaka_net

Contenu connexe

Tendances

僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティスYukiya Nakagawa
 
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)Hiroyuki Kusu
 
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくFumiya Sakai
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐためにFumiya Sakai
 
Angularモダンweb開発セミナー紹介 20170923
Angularモダンweb開発セミナー紹介 20170923Angularモダンweb開発セミナー紹介 20170923
Angularモダンweb開発セミナー紹介 20170923Staffnet_Inc
 
モダンなAndroidアプリ開発勉強会
モダンなAndroidアプリ開発勉強会モダンなAndroidアプリ開発勉強会
モダンなAndroidアプリ開発勉強会Shoichi Kakizaki
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築Hayashi Yuichi
 
[potatotips #18] Android M Developer Preview & Wear 最新トピック
[potatotips #18] Android M Developer Preview & Wear 最新トピック[potatotips #18] Android M Developer Preview & Wear 最新トピック
[potatotips #18] Android M Developer Preview & Wear 最新トピックKenichi Kambara
 
Angular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップAngular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップKazuyoshi Tsuchiya
 
Titaniumって何?
Titaniumって何?Titaniumって何?
Titaniumって何?Toshiro Yagi
 
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)mokelab
 
これからのモバイルWebと最新動向
これからのモバイルWebと最新動向これからのモバイルWebと最新動向
これからのモバイルWebと最新動向yoshikawa_t
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managersHayashi Yuichi
 
いまさら聞けないHTML5概要
いまさら聞けないHTML5概要いまさら聞けないHTML5概要
いまさら聞けないHTML5概要yoshikawa_t
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topicsSyo Ikeda
 

Tendances (20)

僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
 
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
 
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞくReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
ReactNative + Redux + NativeBaseでつくるサンプル実装をのぞく
 
少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために少しずつ手厚くして不具合や仕様漏れを防ぐために
少しずつ手厚くして不具合や仕様漏れを防ぐために
 
Angularモダンweb開発セミナー紹介 20170923
Angularモダンweb開発セミナー紹介 20170923Angularモダンweb開発セミナー紹介 20170923
Angularモダンweb開発セミナー紹介 20170923
 
モダンなAndroidアプリ開発勉強会
モダンなAndroidアプリ開発勉強会モダンなAndroidアプリ開発勉強会
モダンなAndroidアプリ開発勉強会
 
LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築LIGにおけるフロントエンドチーム構築
LIGにおけるフロントエンドチーム構築
 
[potatotips #18] Android M Developer Preview & Wear 最新トピック
[potatotips #18] Android M Developer Preview & Wear 最新トピック[potatotips #18] Android M Developer Preview & Wear 最新トピック
[potatotips #18] Android M Developer Preview & Wear 最新トピック
 
Alternative WebView
Alternative WebViewAlternative WebView
Alternative WebView
 
Angular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップAngular jsの継続的なバージョンアップ
Angular jsの継続的なバージョンアップ
 
Titaniumって何?
Titaniumって何?Titaniumって何?
Titaniumって何?
 
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
 
LIGでのDocker活用
LIGでのDocker活用LIGでのDocker活用
LIGでのDocker活用
 
これからのモバイルWebと最新動向
これからのモバイルWebと最新動向これからのモバイルWebと最新動向
これからのモバイルWebと最新動向
 
Front-end package managers
Front-end package managersFront-end package managers
Front-end package managers
 
いまさら聞けないHTML5概要
いまさら聞けないHTML5概要いまさら聞けないHTML5概要
いまさら聞けないHTML5概要
 
CSS Living StyleGuide
CSS Living StyleGuideCSS Living StyleGuide
CSS Living StyleGuide
 
俺とAngular JS 2
俺とAngular JS 2俺とAngular JS 2
俺とAngular JS 2
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topics
 
HTML5 のお話
HTML5 のお話HTML5 のお話
HTML5 のお話
 

En vedette

JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行Yoshitaka Kawashima
 
Droid kaigiプレゼン
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼンSuguru Oho
 
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syobobenkyon mm
 
データモデルは時空を越える
データモデルは時空を越えるデータモデルは時空を越える
データモデルは時空を越えるterahide
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例sohta
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてShinichi Kozake
 
Java web application testing
Java web application testingJava web application testing
Java web application testingTokuhiro Matsuno
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Yuki Anzai
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]YUKI YAMAGUCHI
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]bitter_fox
 

En vedette (13)

JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
Droid kaigiプレゼン
Droid kaigiプレゼンDroid kaigiプレゼン
Droid kaigiプレゼン
 
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
 
データモデルは時空を越える
データモデルは時空を越えるデータモデルは時空を越える
データモデルは時空を越える
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
 
Java web application testing
Java web application testingJava web application testing
Java web application testing
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
 

Similaire à 開発を効率的に進めるられるまでの道程

AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例Kenichi Kambara
 
Android Wear最新トピック+α
Android Wear最新トピック+αAndroid Wear最新トピック+α
Android Wear最新トピック+αKenichi Kambara
 
「Camelog」Android開発秘話
「Camelog」Android開発秘話「Camelog」Android開発秘話
「Camelog」Android開発秘話Shoya Tsukada
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることTakao Sumitomo
 
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてることTakao Sumitomo
 
iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術vaccho
 
Photon Enterprise Cloud 事例
Photon Enterprise Cloud 事例Photon Enterprise Cloud 事例
Photon Enterprise Cloud 事例Tomotsune Murata
 
Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)Kenichi Kambara
 
[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambara[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambaraKenichi Kambara
 
Android IoTとプログラミング教育
Android IoTとプログラミング教育Android IoTとプログラミング教育
Android IoTとプログラミング教育Kenichi Yoshida
 
Android6.0の機能まとめ 実機でサンプルを動かしてみた
Android6.0の機能まとめ 実機でサンプルを動かしてみたAndroid6.0の機能まとめ 実機でサンプルを動かしてみた
Android6.0の機能まとめ 実機でサンプルを動かしてみたSatoshi Noda
 
IoTで5days学生インターン
IoTで5days学生インターンIoTで5days学生インターン
IoTで5days学生インターンKazuya Fukumoto
 
Androidのつながる秘訣
Androidのつながる秘訣Androidのつながる秘訣
Androidのつながる秘訣高見 知英
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会Rei Matsushita
 
HTML5/JavaScriptで作るAndroidアプリ開発seminar
HTML5/JavaScriptで作るAndroidアプリ開発seminarHTML5/JavaScriptで作るAndroidアプリ開発seminar
HTML5/JavaScriptで作るAndroidアプリ開発seminarkujirahand kujira
 
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩みKenichi Kambara
 
【アド部】第8回定例会 アプリインストール施策のその次は?
【アド部】第8回定例会 アプリインストール施策のその次は?【アド部】第8回定例会 アプリインストール施策のその次は?
【アド部】第8回定例会 アプリインストール施策のその次は?Noriaki UCHIYAMA
 
IoTあるじゃん北海道支部勉強会#1
IoTあるじゃん北海道支部勉強会#1IoTあるじゃん北海道支部勉強会#1
IoTあるじゃん北海道支部勉強会#1Koyo Takenoshita
 
Android Wearアプリ開発経験談
Android Wearアプリ開発経験談Android Wearアプリ開発経験談
Android Wearアプリ開発経験談Kenichi Kambara
 
Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎Kenichi Kambara
 

Similaire à 開発を効率的に進めるられるまでの道程 (20)

AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例AndroidアプリのUI/UX改善例
AndroidアプリのUI/UX改善例
 
Android Wear最新トピック+α
Android Wear最新トピック+αAndroid Wear最新トピック+α
Android Wear最新トピック+α
 
「Camelog」Android開発秘話
「Camelog」Android開発秘話「Camelog」Android開発秘話
「Camelog」Android開発秘話
 
プロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれることプロダクトを育てるのにGoogleのサービスが助けてくれること
プロダクトを育てるのにGoogleのサービスが助けてくれること
 
高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること高速でトライ&エラーを するために気をつけてること
高速でトライ&エラーを するために気をつけてること
 
iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術iPhone/Android アプリをまとめて省エネ開発する技術
iPhone/Android アプリをまとめて省エネ開発する技術
 
Photon Enterprise Cloud 事例
Photon Enterprise Cloud 事例Photon Enterprise Cloud 事例
Photon Enterprise Cloud 事例
 
Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)Realm meetup LT大会(Androidアプリへの適用経験談)
Realm meetup LT大会(Androidアプリへの適用経験談)
 
[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambara[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambara
 
Android IoTとプログラミング教育
Android IoTとプログラミング教育Android IoTとプログラミング教育
Android IoTとプログラミング教育
 
Android6.0の機能まとめ 実機でサンプルを動かしてみた
Android6.0の機能まとめ 実機でサンプルを動かしてみたAndroid6.0の機能まとめ 実機でサンプルを動かしてみた
Android6.0の機能まとめ 実機でサンプルを動かしてみた
 
IoTで5days学生インターン
IoTで5days学生インターンIoTで5days学生インターン
IoTで5days学生インターン
 
Androidのつながる秘訣
Androidのつながる秘訣Androidのつながる秘訣
Androidのつながる秘訣
 
[社内向け]Titanium勉強会
[社内向け]Titanium勉強会[社内向け]Titanium勉強会
[社内向け]Titanium勉強会
 
HTML5/JavaScriptで作るAndroidアプリ開発seminar
HTML5/JavaScriptで作るAndroidアプリ開発seminarHTML5/JavaScriptで作るAndroidアプリ開発seminar
HTML5/JavaScriptで作るAndroidアプリ開発seminar
 
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
 
【アド部】第8回定例会 アプリインストール施策のその次は?
【アド部】第8回定例会 アプリインストール施策のその次は?【アド部】第8回定例会 アプリインストール施策のその次は?
【アド部】第8回定例会 アプリインストール施策のその次は?
 
IoTあるじゃん北海道支部勉強会#1
IoTあるじゃん北海道支部勉強会#1IoTあるじゃん北海道支部勉強会#1
IoTあるじゃん北海道支部勉強会#1
 
Android Wearアプリ開発経験談
Android Wearアプリ開発経験談Android Wearアプリ開発経験談
Android Wearアプリ開発経験談
 
Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎
 

Plus de Takao Sumitomo

僕は上スワイプでBottomSheetを出したかっただけなんだ
僕は上スワイプでBottomSheetを出したかっただけなんだ僕は上スワイプでBottomSheetを出したかっただけなんだ
僕は上スワイプでBottomSheetを出したかっただけなんだTakao Sumitomo
 
sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方Takao Sumitomo
 
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話Takao Sumitomo
 
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドCamera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドTakao Sumitomo
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことTakao Sumitomo
 
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なことTakao Sumitomo
 
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたMaker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたTakao Sumitomo
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチTakao Sumitomo
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするTakao Sumitomo
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことTakao Sumitomo
 
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズムTakao Sumitomo
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要Takao Sumitomo
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいかTakao Sumitomo
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうTakao Sumitomo
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告Takao Sumitomo
 
今更ながらCSS3を試してみた
今更ながらCSS3を試してみた今更ながらCSS3を試してみた
今更ながらCSS3を試してみたTakao Sumitomo
 
Crystalskullを改造してみる
Crystalskullを改造してみるCrystalskullを改造してみる
Crystalskullを改造してみるTakao Sumitomo
 
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらもしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらTakao Sumitomo
 
アンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかアンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかTakao Sumitomo
 

Plus de Takao Sumitomo (20)

僕は上スワイプでBottomSheetを出したかっただけなんだ
僕は上スワイプでBottomSheetを出したかっただけなんだ僕は上スワイプでBottomSheetを出したかっただけなんだ
僕は上スワイプでBottomSheetを出したかっただけなんだ
 
sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方sharedUserIdを使った俺得開発ツールの作り方
sharedUserIdを使った俺得開発ツールの作り方
 
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
 
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンドCamera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
 
アプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なことアプリを成長させるためのログ取りとログ解析に必要なこと
アプリを成長させるためのログ取りとログ解析に必要なこと
 
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
 
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきたMaker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
 
Viewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチViewを動的に変化させるアプローチ
Viewを動的に変化させるアプローチ
 
AdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にするAdapterToolboxでRecyclerViewを楽にする
AdapterToolboxでRecyclerViewを楽にする
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
Uml速習会
Uml速習会Uml速習会
Uml速習会
 
勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム勉強会資料 データ構造とアルゴリズム
勉強会資料 データ構造とアルゴリズム
 
勉強会資料 Uml概要
勉強会資料 Uml概要勉強会資料 Uml概要
勉強会資料 Uml概要
 
Firefox OSの何が嬉しいか
Firefox OSの何が嬉しいかFirefox OSの何が嬉しいか
Firefox OSの何が嬉しいか
 
HTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろうHTML5でFirefox OSアプリを作ろう
HTML5でFirefox OSアプリを作ろう
 
フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告フォクすけロボ開発進捗報告
フォクすけロボ開発進捗報告
 
今更ながらCSS3を試してみた
今更ながらCSS3を試してみた今更ながらCSS3を試してみた
今更ながらCSS3を試してみた
 
Crystalskullを改造してみる
Crystalskullを改造してみるCrystalskullを改造してみる
Crystalskullを改造してみる
 
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったらもしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
もしソフトウェアディベロッパーが3Dプリンターで『フォクすけ』を作ったら
 
アンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうかアンドロイダー的にHTML5でどこまでできそうか
アンドロイダー的にHTML5でどこまでできそうか
 

開発を効率的に進めるられるまでの道程