SlideShare a Scribd company logo
1 of 59
Download to read offline
なるべくコードを書かないAndroid開発
株式会社ミクシィ・株式会社Diverse
@kikuchy
Who?
 @kikuchy
菊池 紘
株式会社ミクシィ ‑‑(出向)‑‑> 株式会社Diverse
Androidの前はWebのフロントでJavaScriptとか書いてました
Shibuya.apk, Roppongi.aar, Kotlin勉強会など
おわび
Kotlinの話が20分枠に収まりきりませんでした
許可いただければお話しします
資料を後ほど公開します & 懇親会でお声掛けください
想定リスナー
二人以上で開発していて
製品のコードの保守が大変だと感じている人
「私のことかも!?」
と思った方は挙手
( ´ ▽ ̀ )ノ
コードの保守は大変!!
保守のコスト
と聞いてどんなコストを想像しますか?
人件費
保守にかける時間
気持ち的な問題
たくさん書くとそれだけ負債が増える
(›´ὼ‹ )
書かなければ良い!!!!!
人間が保守するコードを減らせば管理コ
ストは減らせる
どうするか
コンパイル時にコードを自動生成すれば、生成したコードは
管理の必要がない
ジェネレーターだけ管理していれば良い
( ´・ω・̀ )「でも新規開発じゃないと、
フレームワーク変えるとか言語変えると
か無理じゃね」
大丈夫!\ ٩( 'ω' )‫ﻭ‬ //
aptだったら一部分から使い始められる!
チームに「コードを少なくする」ことに対して前
向きになってもらおう!
apt
1. aptとは
2. 使い所
3. できること
4. 作ろう!
apt
1. aptとは
2. 使い所
3. できること
4. 作ろう!
1. aptとは
JSR269 =
Pluggable Annotation Processing API
Android界隈ではaptと呼ばれることが多いようなので 
今スライドではaptと呼びます。
コンパイル時にアノテーションを見て何かしらの処理をする仕組
み。 
ソースコードを生成することもできる。
apt
1. aptとは
2. 使い所
3. できること
4. 作ろう!
2. 使い所
マッピングの手間を減らす
何かしらの変換・対応作業
例) ButterKnife
 R.id.*  のViewをクラスのフィールドに対応させ
る
例) orma
DBの行をPOJOに、カラムをフィールドに対応さ
せる
「ライブラリにとって未知のフィールドやメソッド」へ
アクセスできる
2. 使い所
クラッシュ(ランタイムエラー)の発生をコンパイル時に前
倒しする
例)  R.java 
文字列でlayoutファイル名やIDを指定しているとtypo
の危険性が
クラッシュはユーザー体験にとって大きなマイナス
コンパイルエラーとして前倒しできればすぐミスに
気付ける
apt
1. aptとは
2. 使い所
3. できること
4. 作ろう!
3. できること
作例
POJOを HashMap<String,String> に移し替える
POJOにアノテーションをつけるだけでOK
コンパイル時に生成されるコード
POJOの各フィールドを
指定のコンバーターでStringにコンバートし
指定のkey名でHashMapにputする
@ToQueryMap
publicclassBbsCreateRequestBody{
@QueryParam(name="message",
adapter=StringTypeAdapter.class)
publicStringmessage;
@QueryParam(name="category_code",
adapter=EnumToStringTypeAdapter.class)
publicBbsCategorycategoryCode;
@QueryParam(name="title",
adapter=StringTypeAdapter.class)
publicStringtitle;
}
Serializer<BbsCreateRequestBody>serialzer=
newBbsCreateRequestBodySerializer()
Map<String,String>serialized=serialzer.serialize(request);
あなたのコーディングにどう応用できそ
うでしょうか?
apt
1. aptとは
2. 使い所
3. できること
4. 作ろう!
4. 作ろう!
rejasupotaroさんの『Androidでaptのライブラリを作る時の高速道
路』が詳しい
http://qiita.com/rejasupotaro/items/b9b89f88348222b46708
ここに書かれていない、覚えておくと便利なTipsをご紹介
(以降の話の前提)
Java Libraryの module を2つ追加
アプリから使うモジュールに、使いたいアノテーションを定義し
ておく
//RetentionをSOURCEにすると
//コンパイル後はこのアノテーションが消えてくれる
@Retention(RetentionPolicy.SOURCE)
//Targetを指定するとアノテーションできる場所を限定できる
@Target(ElementType.TYPE)
public@interfaceExampleAnnotation{
//値を持たせたかったらvalueなどを宣言する
publicintvalue();
}
コンパイル時に走るプロセッサを定義する
ソースコード以外も生成できますが、今回はソースコードを生成
//Googleの AutoServiceを使うとメタデータの生成が楽
@AutoService(Processor.class)
publicclassExampleProcessorextendsAbstractProcessor{
Filerfiler;
TypestypeUtils;
ElementselementUtils;
Messagermessager;
//プロセッサ初期化時に呼ばれる
//便利なインスタンスが渡されるので取得しておく
@Override
publicsynchronizedvoidinit(
ProcessingEnvironmentprocessingEnv){
super.init(processingEnv);
//Filer#createSourceFileにJavaソースコードをStringで渡すと
//javaファイルを作ってくれる
filer=processingEnv.getFiler();
//TypeMirrorを取得したり 具体的なTypeを取得したりできる
typeUtils=processingEnv.getTypeUtils();
//Java構文の要素から子要素を取得したりできる
elementUtils=processingEnv.getElementUtils();
//警告やエラーメッセージの出力に便利
messager=processingEnv.getMessager();
}
//このプロセッサでサポートするアノテーションを決める
@Override
publicSet<String>getSupportedAnnotationTypes(){
Set<String>types=newHashSet<>();
//アノテーションの名前はFQCNでないといけない
types.add(ExampleAnnotation.class.getCanonicalName());
returntypes;
}
Overriveしない場合、このプロセッサにつけた
 SupportedAnnotationTypes  アノテーションに書かれた型がサポート
される
@SupportedAnnotationTypes("net.kikuchy.aptsample.ExampleAnnotation")
@AutoService(Processor.class)
publicclassExampleProcessorextendsAbstractProcessor{
ソースコードの生成と書き出しには square/javapoet を使うと楽 
https://github.com/square/javapoet
//ソースコードを生成して Filterで書き出す処理を書く
@Override
publicbooleanprocess(
//今処理を要求されているアノテーション
Set<?extendsTypeElement>annotations,
//ラウンドの情報
RoundEnvironmentroundEnv){
//RoundEnvironment#getElementsAnnotatedWithを使うと
//アノテーションがついた構文要素を取得できる
for(Elementelem:
roundEnv.
getElementsAnnotatedWith(ExampleAnnotation.class)){
//ソースコードの生成と書き出し
...
}
//後続のプロセッサにアノテーションの処理を渡すか否か
returnfalse;
}
注釈処理のラウンド
 process  が何度も呼ばれる(ラウンド)
生成したソースコードに対しても注釈処理が必要なため、何
度も呼ばれる
通常は2回
 JavaFileObject#openWriter  に2回書き込もうとすると2回目は例
外が出る
Pluggable Annotation Processing API 使い方メモ 
http://qiita.com/opengl‑8080/items/beda51fe4f23750c33e9
ラウンド対策
try‑catch
2回目に出る例外を握りつぶす
プロセッサのメンバに処理済みかどうか記録しておく
ButterKnifeなどがこれ
生成したコードを使う
一度コンパイルをかければ生成される
aptプラグインを使っていれば、生成後はAndroidStudioの補
完機能でも呼び出せる
ButterKnifeのように生成コードを隠蔽する方法もある
クラスの動的ロードが必要なのでProguard設定が必要
//生成されたViewBinderクラス類は動的ロードされている
ButterKnife.bind(this);
aptの補足
aptを使ったAndroid向けライブラリ
Butter Knife
Dagger2
DeepLink Dispatcher
PermissionsDispatcher
Orma
IntentBuilder
FragmentArgs
AndroidAnnotations
kvs‑scheme
Flender
etc
Kotlin
保守コードの減量とKotlinの関係
そもそものコード行数が少なければ、保守コストも少なくて
済む
Javaは冗長になりがち、短く書ける言語を使おう
Kotlinもプロダクトの一部分から使い始められる
Java Compatible!!
もうみなさんKotlinはご存知だと思いますので 
少しだけマイナー気味で、コード短縮に効果のあることだけ紹介
します。
スコープ関数
 apply  と  let  を使うと便利なことが多いです
valintent=Intent(context,NextActivity::class.java).apply{
//このスコープのthisは☝のIntent
putExtra("hoge","hogehoge")
putExtra("fuga","fugafuga")
}
nullableVal?.let{
//nullableValがnullだとこのスコープは実行されない
//it(=nallableVal)がnonnullであることが保証される
it.doSomething()
}
業務でKotlinを書いている僕がKotlinを書く際に個人的に注意して
いること
http://qiita.com/magie‑pooh/items/b1179af28f5e0d50b62a
Class Delegation
Effective Javaなどで言われている「継承より合成」を圧倒的簡単
さで実現
classCustomList<E>(privatevalbase:ArrayList):List<E>bybase{
overridefunadd(elem:E){
print("${elem}isadded!")
base.add(elem)
}
}
KotlinのClass Delegationおさらい 
http://sssslide.com/speakerdeck.com/ntaro/kotlinfalseclass‑
delegationosarai‑number‑kotlin‑sansan
Property Delegation
Androidでは頻発する遅延評価が簡単に
//inActivity
privatevalhogebylazy{intent.getStringExtra("hoge")}
//KotterKnife使用
privatevaluserName:EditTextbybindView(R.id.user_name)
Delegated Properties で遊ぼう(スライド版) 
http://qiita.com/kikuchy/items/55ea0748a5850925349a
こういう話をした理由
むかーしむかし、あるところに、Activity1ファイルで4000行を超
えるソースコードがありました。
4000行超え
つらい。
その他のActivityも2000行クラス
新しい機能を入れようとしたらまず調査から
長すぎて読めない ‑> 既存ロジックを回避するようにコードを
足す ‑> さらに長くなる
やばいコードの上にコードを足そうとすると、やばいコード
がどんどん増えて行く
割れ窓理論
アプリのリニューアルをする過程で、aptとKotlinを導入
Activityの平均行数が
Javaで300行くらい
kotlinで140行くらい
調査時間とかほとんどいらない
短く書く方法がある ‑> コードを短くしよう、という動機につ
ながる
割れ窓理論の解決法
短く綺麗なコードを保っている環境があれば良い
すべてのヤバいコードを生まれる前に消し去りたい
楽しく開発ができますように!
まとめ
保守するコードが少ないと楽です
コード減量のため導入しやすい方策がaptとKotlin
これをきっかけに、チーム全員がコードを少なくすることに
積極的になったら良いですね
Thank you!

More Related Content

What's hot

かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうかわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうgyro_s
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめKouhei Sutou
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyNobuhiro Sue
 
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるSwiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるTakuya Kitamura
 
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめSEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめKouhei Sutou
 
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 BotのプチレシピKazumi IWANAGA
 
このすこし短い時間にLTを!
このすこし短い時間にLTを!このすこし短い時間にLTを!
このすこし短い時間にLTを!Ryo Iinuma
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
Perlを書くときに意識していること
Perlを書くときに意識していることPerlを書くときに意識していること
Perlを書くときに意識していること良太 増子
 
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3Shinobu Okano
 
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Shinobu Okano
 
まったりAndroid framework code reading #2
まったりAndroid framework code reading #2まったりAndroid framework code reading #2
まったりAndroid framework code reading #2Shinobu Okano
 
新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割Yoshifumi Murakami
 
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
 Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」 Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」Yoshifumi Murakami
 
技術的負債との戦い方
技術的負債との戦い方技術的負債との戦い方
技術的負債との戦い方Iosif Takakura
 
プロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがしプロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがしthatblue
 
TypeScriptは明日から使うべき
TypeScriptは明日から使うべきTypeScriptは明日から使うべき
TypeScriptは明日から使うべきMasahiro Wakame
 

What's hot (20)

かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろうかわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
 
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: GroovyDevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
 
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考えるSwiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考える
 
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめSEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめ
 
Ruby with My Life
Ruby with My LifeRuby with My Life
Ruby with My Life
 
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
 
Androidの開発概要
Androidの開発概要Androidの開発概要
Androidの開発概要
 
このすこし短い時間にLTを!
このすこし短い時間にLTを!このすこし短い時間にLTを!
このすこし短い時間にLTを!
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonad
 
Perlを書くときに意識していること
Perlを書くときに意識していることPerlを書くときに意識していること
Perlを書くときに意識していること
 
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
 
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
 
まったりAndroid framework code reading #2
まったりAndroid framework code reading #2まったりAndroid framework code reading #2
まったりAndroid framework code reading #2
 
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScriptjQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
 
新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割
 
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
 Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」 Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
 
技術的負債との戦い方
技術的負債との戦い方技術的負債との戦い方
技術的負債との戦い方
 
プロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがしプロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがし
 
TypeScriptは明日から使うべき
TypeScriptは明日から使うべきTypeScriptは明日から使うべき
TypeScriptは明日から使うべき
 

Viewers also liked

3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な APIHiroshi Kikuchi
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmYuki Anzai
 
はじめようlocalization
はじめようlocalizationはじめようlocalization
はじめようlocalizationJoão Orui
 
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_techはじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_techTomohiro Kumagai
 
Minimal Cake Pattern in Swift
Minimal Cake Pattern in SwiftMinimal Cake Pattern in Swift
Minimal Cake Pattern in SwiftHikaru Yoshimura
 
Android thingsやってみた
Android thingsやってみたAndroid thingsやってみた
Android thingsやってみたHiroshi Kikuchi
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitectureTomoaki Imai
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々ScalaプログラミングTomoharu ASAMI
 
画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみた画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみたtomowata
 
Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごいAndroidで部 第7回 APTすごい
Androidで部 第7回 APTすごいMasahiro Wakame
 
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜Mariko Takatori
 
Titaniumから脱却している話
Titaniumから脱却している話Titaniumから脱却している話
Titaniumから脱却している話Fujita Yuta
 
これからの設計の話をしよう
これからの設計の話をしようこれからの設計の話をしよう
これからの設計の話をしようshinnosuke kugimiya
 
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリGradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリHideyuki Kikuma
 
どうしてコードはレガシーになるのか
どうしてコードはレガシーになるのかどうしてコードはレガシーになるのか
どうしてコードはレガシーになるのかHiroshi Kikuchi
 
Patient forms we welcome you to mattison podiatry group as our patient drs ma...
Patient forms we welcome you to mattison podiatry group as our patient drs ma...Patient forms we welcome you to mattison podiatry group as our patient drs ma...
Patient forms we welcome you to mattison podiatry group as our patient drs ma...Mattison Podiatry Group
 
SOFT Ideation - To make great business ideas, then make it SOFT
SOFT Ideation - To make great business ideas, then make it SOFTSOFT Ideation - To make great business ideas, then make it SOFT
SOFT Ideation - To make great business ideas, then make it SOFTThe Innovation Lab
 
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...Sherry Jones
 

Viewers also liked (20)

3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API
 
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzmAndroidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
 
はじめようlocalization
はじめようlocalizationはじめようlocalization
はじめようlocalization
 
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_techはじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
 
Minimal Cake Pattern in Swift
Minimal Cake Pattern in SwiftMinimal Cake Pattern in Swift
Minimal Cake Pattern in Swift
 
Android thingsやってみた
Android thingsやってみたAndroid thingsやってみた
Android thingsやってみた
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
 
画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみた画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみた
 
Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごいAndroidで部 第7回 APTすごい
Androidで部 第7回 APTすごい
 
Kotlinにお触り
Kotlinにお触りKotlinにお触り
Kotlinにお触り
 
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
 
Titaniumから脱却している話
Titaniumから脱却している話Titaniumから脱却している話
Titaniumから脱却している話
 
これからの設計の話をしよう
これからの設計の話をしようこれからの設計の話をしよう
これからの設計の話をしよう
 
Gradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリGradleでビルドするandroid NDKアプリ
Gradleでビルドするandroid NDKアプリ
 
どうしてコードはレガシーになるのか
どうしてコードはレガシーになるのかどうしてコードはレガシーになるのか
どうしてコードはレガシーになるのか
 
Patient forms we welcome you to mattison podiatry group as our patient drs ma...
Patient forms we welcome you to mattison podiatry group as our patient drs ma...Patient forms we welcome you to mattison podiatry group as our patient drs ma...
Patient forms we welcome you to mattison podiatry group as our patient drs ma...
 
SOFT Ideation - To make great business ideas, then make it SOFT
SOFT Ideation - To make great business ideas, then make it SOFTSOFT Ideation - To make great business ideas, then make it SOFT
SOFT Ideation - To make great business ideas, then make it SOFT
 
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
 

Similar to なるべくコードを書かないAndroid開発

プログラミングLT 2019 Summer
プログラミングLT 2019 SummerプログラミングLT 2019 Summer
プログラミングLT 2019 SummerYusuke Mori
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -Kishi Shundo
 
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~Tatsuya Ishikawa
 
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築するCognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築するHiroyoshi Miyazaki
 
konashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピングkonashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピングShogo Ochiai
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Yasuhito Yabe
 
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしいPHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしいIppei Sumida
 
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4Shinobu Okano
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前Yutaka Kinjyo
 
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハントHiroyuki Ishikawa
 
クリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear codeクリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear codeKouhei Sutou
 
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術KeitoTakeda
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Wataru Terada
 
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料Takuma Kudo
 
Rubocopとの付き合い方
Rubocopとの付き合い方Rubocopとの付き合い方
Rubocopとの付き合い方Yasutomo Uemori
 
HTML5時代のWebデザイン
HTML5時代のWebデザインHTML5時代のWebデザイン
HTML5時代のWebデザインmasaaki komori
 
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)ShogoOkazaki
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBMToshiki Tsuboi
 

Similar to なるべくコードを書かないAndroid開発 (20)

プログラミングLT 2019 Summer
プログラミングLT 2019 SummerプログラミングLT 2019 Summer
プログラミングLT 2019 Summer
 
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
 
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~
 
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築するCognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
 
konashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピングkonashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピング
 
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
 
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしいPHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
 
Lt40
Lt40Lt40
Lt40
 
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
 
Mobile Openid
Mobile OpenidMobile Openid
Mobile Openid
 
コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前
 
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
 
クリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear codeクリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear code
 
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
 
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
 
Rubocopとの付き合い方
Rubocopとの付き合い方Rubocopとの付き合い方
Rubocopとの付き合い方
 
HTML5時代のWebデザイン
HTML5時代のWebデザインHTML5時代のWebデザイン
HTML5時代のWebデザイン
 
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
 
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
 

More from Hiroshi Kikuchi

Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話Hiroshi Kikuchi
 
今更聞けない? Androidのテストのいろは
今更聞けない? Androidのテストのいろは今更聞けない? Androidのテストのいろは
今更聞けない? AndroidのテストのいろはHiroshi Kikuchi
 
新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なこと新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なことHiroshi Kikuchi
 
JUnit5とAndroidのテスト
JUnit5とAndroidのテストJUnit5とAndroidのテスト
JUnit5とAndroidのテストHiroshi Kikuchi
 
画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろう画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろうHiroshi Kikuchi
 
テストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたいテストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたいHiroshi Kikuchi
 
Designing Auto Generated Codes
Designing Auto Generated CodesDesigning Auto Generated Codes
Designing Auto Generated CodesHiroshi Kikuchi
 
C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!Hiroshi Kikuchi
 
Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料Hiroshi Kikuchi
 

More from Hiroshi Kikuchi (9)

Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話
 
今更聞けない? Androidのテストのいろは
今更聞けない? Androidのテストのいろは今更聞けない? Androidのテストのいろは
今更聞けない? Androidのテストのいろは
 
新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なこと新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なこと
 
JUnit5とAndroidのテスト
JUnit5とAndroidのテストJUnit5とAndroidのテスト
JUnit5とAndroidのテスト
 
画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろう画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろう
 
テストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたいテストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたい
 
Designing Auto Generated Codes
Designing Auto Generated CodesDesigning Auto Generated Codes
Designing Auto Generated Codes
 
C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!
 
Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料
 

なるべくコードを書かないAndroid開発