Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Hiroshi Kikuchi
PDF, PPTX
5,992 views
なるべくコードを書かないAndroid開発
Androidオールスターズ2で発表したスライドです。 aptとkotlinのお話をさせていただきました。
Engineering
◦
Read more
4
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 59
2
/ 59
3
/ 59
4
/ 59
5
/ 59
6
/ 59
7
/ 59
8
/ 59
9
/ 59
10
/ 59
11
/ 59
12
/ 59
13
/ 59
14
/ 59
15
/ 59
16
/ 59
17
/ 59
18
/ 59
19
/ 59
20
/ 59
21
/ 59
22
/ 59
23
/ 59
24
/ 59
25
/ 59
26
/ 59
27
/ 59
28
/ 59
29
/ 59
30
/ 59
31
/ 59
32
/ 59
33
/ 59
34
/ 59
35
/ 59
36
/ 59
37
/ 59
38
/ 59
39
/ 59
40
/ 59
41
/ 59
42
/ 59
43
/ 59
44
/ 59
45
/ 59
46
/ 59
47
/ 59
48
/ 59
49
/ 59
50
/ 59
51
/ 59
52
/ 59
53
/ 59
54
/ 59
55
/ 59
56
/ 59
57
/ 59
58
/ 59
59
/ 59
More Related Content
PDF
Androidの世界を離れて異文化留学してみた
by
Hiroshi Kikuchi
PPTX
開発チームにKotlinを導入した話
by
Hiroshi Kikuchi
PDF
KotlinJSって正直どうなん
by
Hiroshi Kikuchi
PDF
KotlinでWebアプリ開発
by
Ryo Nakagawa
PDF
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
by
Hiroshi Kikuchi
PDF
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
by
Takaaki Suzuki
PPTX
関西FXOS勉強会3rdGIG キーボード大好き!
by
雅彦 金井
PPTX
ビジュアルプログラミング言語Scratchで遊ぼう
by
Tomoyuki Sugita
Androidの世界を離れて異文化留学してみた
by
Hiroshi Kikuchi
開発チームにKotlinを導入した話
by
Hiroshi Kikuchi
KotlinJSって正直どうなん
by
Hiroshi Kikuchi
KotlinでWebアプリ開発
by
Ryo Nakagawa
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
by
Hiroshi Kikuchi
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
by
Takaaki Suzuki
関西FXOS勉強会3rdGIG キーボード大好き!
by
雅彦 金井
ビジュアルプログラミング言語Scratchで遊ぼう
by
Tomoyuki Sugita
What's hot
PDF
かわいいKotlinでAndroidアプリをつくろう
by
gyro_s
PDF
リーダブルコード勉強会 in 筑波大のまとめ
by
Kouhei Sutou
PPTX
DevSummit2011JGGUG OpenJam: Groovy
by
Nobuhiro Sue
PPTX
Swiftにおけるclassとstructの使い分けをDDDから考える
by
Takuya Kitamura
PDF
SEゼミ2015 - リーダブルコード勉強会のまとめ
by
Kouhei Sutou
PDF
Ruby with My Life
by
Hiroshi SHIBATA
PPTX
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
by
Kazumi OHIRA
PDF
Androidの開発概要
by
Hiroyuki Nozaki
PDF
このすこし短い時間にLTを!
by
Ryo Iinuma
PDF
C#でわかる こわくないMonad
by
Kouji Matsui
PDF
Perlを書くときに意識していること
by
良太 増子
PDF
まったりAndroid Framework Code Reading #3
by
Shinobu Okano
PDF
Android Framework Code Readingのしおり ver 1.1
by
Shinobu Okano
PDF
まったりAndroid framework code reading #2
by
Shinobu Okano
PDF
jQuery 対応ライブラリと TypeScript
by
インフラジスティックス・ジャパン株式会社
PDF
新世代自律学習者のための教師の役割
by
Yoshifumi Murakami
PPTX
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
by
Yoshifumi Murakami
PDF
技術的負債との戦い方
by
Iosif Takakura
PDF
プロのエンジニアとして幸せに生きるためのなにがし
by
thatblue
PDF
TypeScriptは明日から使うべき
by
Masahiro Wakame
かわいいKotlinでAndroidアプリをつくろう
by
gyro_s
リーダブルコード勉強会 in 筑波大のまとめ
by
Kouhei Sutou
DevSummit2011JGGUG OpenJam: Groovy
by
Nobuhiro Sue
Swiftにおけるclassとstructの使い分けをDDDから考える
by
Takuya Kitamura
SEゼミ2015 - リーダブルコード勉強会のまとめ
by
Kouhei Sutou
Ruby with My Life
by
Hiroshi SHIBATA
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
by
Kazumi OHIRA
Androidの開発概要
by
Hiroyuki Nozaki
このすこし短い時間にLTを!
by
Ryo Iinuma
C#でわかる こわくないMonad
by
Kouji Matsui
Perlを書くときに意識していること
by
良太 増子
まったりAndroid Framework Code Reading #3
by
Shinobu Okano
Android Framework Code Readingのしおり ver 1.1
by
Shinobu Okano
まったりAndroid framework code reading #2
by
Shinobu Okano
jQuery 対応ライブラリと TypeScript
by
インフラジスティックス・ジャパン株式会社
新世代自律学習者のための教師の役割
by
Yoshifumi Murakami
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
by
Yoshifumi Murakami
技術的負債との戦い方
by
Iosif Takakura
プロのエンジニアとして幸せに生きるためのなにがし
by
thatblue
TypeScriptは明日から使うべき
by
Masahiro Wakame
Viewers also liked
PDF
3分で作る Kotlin Friendly な API
by
Hiroshi Kikuchi
PDF
Androidオールスターズ2016 yanzm
by
Yuki Anzai
PDF
はじめようlocalization
by
João Orui
PDF
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
by
Tomohiro Kumagai
PDF
Minimal Cake Pattern in Swift
by
Hikaru Yoshimura
PDF
Android thingsやってみた
by
Hiroshi Kikuchi
PDF
Dependency injection
by
Yuki Matsumura
PDF
Android cleanarchitecture
by
Tomoaki Imai
PDF
楽々Scalaプログラミング
by
Tomoharu ASAMI
PPTX
画面遷移図作成ツールを試してみた
by
tomowata
PDF
Androidで部 第7回 APTすごい
by
Masahiro Wakame
PDF
Kotlinにお触り
by
Shinobu Okano
PDF
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
by
Mariko Takatori
PDF
Titaniumから脱却している話
by
Fujita Yuta
PDF
これからの設計の話をしよう
by
shinnosuke kugimiya
PPTX
Gradleでビルドするandroid NDKアプリ
by
Hideyuki Kikuma
PDF
どうしてコードはレガシーになるのか
by
Hiroshi Kikuchi
PDF
Patient forms we welcome you to mattison podiatry group as our patient drs ma...
by
Mattison Podiatry Group
PDF
SOFT Ideation - To make great business ideas, then make it SOFT
by
The Innovation Lab
PDF
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
by
Sherry Jones
3分で作る Kotlin Friendly な API
by
Hiroshi Kikuchi
Androidオールスターズ2016 yanzm
by
Yuki Anzai
はじめようlocalization
by
João Orui
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
by
Tomohiro Kumagai
Minimal Cake Pattern in Swift
by
Hikaru Yoshimura
Android thingsやってみた
by
Hiroshi Kikuchi
Dependency injection
by
Yuki Matsumura
Android cleanarchitecture
by
Tomoaki Imai
楽々Scalaプログラミング
by
Tomoharu ASAMI
画面遷移図作成ツールを試してみた
by
tomowata
Androidで部 第7回 APTすごい
by
Masahiro Wakame
Kotlinにお触り
by
Shinobu Okano
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
by
Mariko Takatori
Titaniumから脱却している話
by
Fujita Yuta
これからの設計の話をしよう
by
shinnosuke kugimiya
Gradleでビルドするandroid NDKアプリ
by
Hideyuki Kikuma
どうしてコードはレガシーになるのか
by
Hiroshi Kikuchi
Patient forms we welcome you to mattison podiatry group as our patient drs ma...
by
Mattison Podiatry Group
SOFT Ideation - To make great business ideas, then make it SOFT
by
The Innovation Lab
Social Media: A Writer's Essentials (A 2016 Toolkit for Creative and Academic...
by
Sherry Jones
More from Hiroshi Kikuchi
PDF
Android Developer Toolsのバグを見つけて直してもらった話
by
Hiroshi Kikuchi
PDF
今更聞けない? Androidのテストのいろは
by
Hiroshi Kikuchi
PDF
新規Androidアプリ開発において何より大切なこと
by
Hiroshi Kikuchi
PDF
JUnit5とAndroidのテスト
by
Hiroshi Kikuchi
PDF
画面状態を抽象化してテスタブル設計ライフを送ろう
by
Hiroshi Kikuchi
PDF
テストコードをアプリケーションコードと同じ階層に置きたい
by
Hiroshi Kikuchi
PDF
Designing Auto Generated Codes
by
Hiroshi Kikuchi
PPTX
C#でiPhone & Androidアプリ!
by
Hiroshi Kikuchi
PPTX
Ideatter : Tech-on2011決勝でのプレゼン資料
by
Hiroshi Kikuchi
Android Developer Toolsのバグを見つけて直してもらった話
by
Hiroshi Kikuchi
今更聞けない? Androidのテストのいろは
by
Hiroshi Kikuchi
新規Androidアプリ開発において何より大切なこと
by
Hiroshi Kikuchi
JUnit5とAndroidのテスト
by
Hiroshi Kikuchi
画面状態を抽象化してテスタブル設計ライフを送ろう
by
Hiroshi Kikuchi
テストコードをアプリケーションコードと同じ階層に置きたい
by
Hiroshi Kikuchi
Designing Auto Generated Codes
by
Hiroshi Kikuchi
C#でiPhone & Androidアプリ!
by
Hiroshi Kikuchi
Ideatter : Tech-on2011決勝でのプレゼン資料
by
Hiroshi Kikuchi
なるべくコードを書かないAndroid開発
1.
なるべくコードを書かないAndroid開発 株式会社ミクシィ・株式会社Diverse @kikuchy
2.
Who? @kikuchy 菊池 紘 株式会社ミクシィ ‑‑(出向)‑‑> 株式会社Diverse Androidの前はWebのフロントでJavaScriptとか書いてました Shibuya.apk, Roppongi.aar, Kotlin勉強会など
3.
おわび Kotlinの話が20分枠に収まりきりませんでした 許可いただければお話しします 資料を後ほど公開します & 懇親会でお声掛けください
4.
想定リスナー 二人以上で開発していて 製品のコードの保守が大変だと感じている人
5.
「私のことかも!?」 と思った方は挙手
6.
( ´ ▽ ̀ )ノ
7.
コードの保守は大変!!
8.
保守のコスト と聞いてどんなコストを想像しますか?
9.
人件費 保守にかける時間 気持ち的な問題
10.
たくさん書くとそれだけ負債が増える (›´ὼ‹ )
11.
書かなければ良い!!!!!
12.
人間が保守するコードを減らせば管理コ ストは減らせる
13.
どうするか コンパイル時にコードを自動生成すれば、生成したコードは 管理の必要がない ジェネレーターだけ管理していれば良い
14.
( ´・ω・̀ )「でも新規開発じゃないと、 フレームワーク変えるとか言語変えると か無理じゃね」
15.
大丈夫!\ ٩( 'ω' )ﻭ //
16.
aptだったら一部分から使い始められる! チームに「コードを少なくする」ことに対して前 向きになってもらおう!
17.
apt 1. aptとは 2. 使い所 3. できること 4. 作ろう!
18.
apt 1. aptとは 2. 使い所 3. できること 4. 作ろう!
19.
1. aptとは
20.
JSR269 = Pluggable Annotation Processing API
21.
Android界隈ではaptと呼ばれることが多いようなので 今スライドではaptと呼びます。
22.
コンパイル時にアノテーションを見て何かしらの処理をする仕組 み。 ソースコードを生成することもできる。
23.
apt 1. aptとは 2. 使い所 3. できること 4. 作ろう!
24.
2. 使い所 マッピングの手間を減らす 何かしらの変換・対応作業 例) ButterKnife R.id.* のViewをクラスのフィールドに対応させ る 例) orma DBの行をPOJOに、カラムをフィールドに対応さ せる 「ライブラリにとって未知のフィールドやメソッド」へ アクセスできる
25.
2. 使い所 クラッシュ(ランタイムエラー)の発生をコンパイル時に前 倒しする 例) R.java 文字列でlayoutファイル名やIDを指定しているとtypo の危険性が クラッシュはユーザー体験にとって大きなマイナス コンパイルエラーとして前倒しできればすぐミスに 気付ける
26.
apt 1. aptとは 2. 使い所 3. できること 4. 作ろう!
27.
3. できること 作例 POJOを HashMap<String,String> に移し替える POJOにアノテーションをつけるだけでOK コンパイル時に生成されるコード POJOの各フィールドを 指定のコンバーターでStringにコンバートし 指定のkey名でHashMapにputする
28.
@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);
29.
あなたのコーディングにどう応用できそ うでしょうか?
30.
apt 1. aptとは 2. 使い所 3. できること 4. 作ろう!
31.
4. 作ろう! rejasupotaroさんの『Androidでaptのライブラリを作る時の高速道 路』が詳しい http://qiita.com/rejasupotaro/items/b9b89f88348222b46708 ここに書かれていない、覚えておくと便利なTipsをご紹介
32.
(以降の話の前提) Java Libraryの module を2つ追加
33.
アプリから使うモジュールに、使いたいアノテーションを定義し ておく //RetentionをSOURCEにすると //コンパイル後はこのアノテーションが消えてくれる @Retention(RetentionPolicy.SOURCE) //Targetを指定するとアノテーションできる場所を限定できる @Target(ElementType.TYPE) public@interfaceExampleAnnotation{ //値を持たせたかったらvalueなどを宣言する publicintvalue(); }
34.
コンパイル時に走るプロセッサを定義する ソースコード以外も生成できますが、今回はソースコードを生成 //Googleの AutoServiceを使うとメタデータの生成が楽 @AutoService(Processor.class) publicclassExampleProcessorextendsAbstractProcessor{ Filerfiler; TypestypeUtils; ElementselementUtils; Messagermessager;
35.
//プロセッサ初期化時に呼ばれる //便利なインスタンスが渡されるので取得しておく @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(); }
36.
//このプロセッサでサポートするアノテーションを決める @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{
37.
ソースコードの生成と書き出しには square/javapoet を使うと楽 https://github.com/square/javapoet //ソースコードを生成して Filterで書き出す処理を書く @Override publicbooleanprocess( //今処理を要求されているアノテーション Set<?extendsTypeElement>annotations, //ラウンドの情報 RoundEnvironmentroundEnv){ //RoundEnvironment#getElementsAnnotatedWithを使うと //アノテーションがついた構文要素を取得できる for(Elementelem: roundEnv. getElementsAnnotatedWith(ExampleAnnotation.class)){ //ソースコードの生成と書き出し ... } //後続のプロセッサにアノテーションの処理を渡すか否か returnfalse; }
38.
注釈処理のラウンド process が何度も呼ばれる(ラウンド) 生成したソースコードに対しても注釈処理が必要なため、何 度も呼ばれる 通常は2回 JavaFileObject#openWriter に2回書き込もうとすると2回目は例 外が出る Pluggable Annotation Processing API 使い方メモ http://qiita.com/opengl‑8080/items/beda51fe4f23750c33e9
39.
ラウンド対策 try‑catch 2回目に出る例外を握りつぶす プロセッサのメンバに処理済みかどうか記録しておく ButterKnifeなどがこれ
40.
生成したコードを使う 一度コンパイルをかければ生成される aptプラグインを使っていれば、生成後はAndroidStudioの補 完機能でも呼び出せる ButterKnifeのように生成コードを隠蔽する方法もある クラスの動的ロードが必要なのでProguard設定が必要 //生成されたViewBinderクラス類は動的ロードされている ButterKnife.bind(this);
41.
aptの補足
42.
aptを使ったAndroid向けライブラリ Butter Knife Dagger2 DeepLink Dispatcher PermissionsDispatcher Orma IntentBuilder FragmentArgs AndroidAnnotations kvs‑scheme Flender etc
43.
Kotlin
44.
保守コードの減量とKotlinの関係 そもそものコード行数が少なければ、保守コストも少なくて 済む Javaは冗長になりがち、短く書ける言語を使おう Kotlinもプロダクトの一部分から使い始められる Java Compatible!!
45.
もうみなさんKotlinはご存知だと思いますので 少しだけマイナー気味で、コード短縮に効果のあることだけ紹介 します。
46.
スコープ関数 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
47.
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
48.
Property Delegation Androidでは頻発する遅延評価が簡単に //inActivity privatevalhogebylazy{intent.getStringExtra("hoge")} //KotterKnife使用 privatevaluserName:EditTextbybindView(R.id.user_name) Delegated Properties で遊ぼう(スライド版) http://qiita.com/kikuchy/items/55ea0748a5850925349a
49.
こういう話をした理由
50.
むかーしむかし、あるところに、Activity1ファイルで4000行を超 えるソースコードがありました。
51.
4000行超え
52.
つらい。
53.
その他のActivityも2000行クラス 新しい機能を入れようとしたらまず調査から 長すぎて読めない ‑> 既存ロジックを回避するようにコードを 足す ‑> さらに長くなる やばいコードの上にコードを足そうとすると、やばいコード がどんどん増えて行く 割れ窓理論
54.
アプリのリニューアルをする過程で、aptとKotlinを導入
55.
Activityの平均行数が Javaで300行くらい kotlinで140行くらい 調査時間とかほとんどいらない 短く書く方法がある ‑> コードを短くしよう、という動機につ ながる 割れ窓理論の解決法 短く綺麗なコードを保っている環境があれば良い
56.
すべてのヤバいコードを生まれる前に消し去りたい
57.
楽しく開発ができますように!
58.
まとめ 保守するコードが少ないと楽です コード減量のため導入しやすい方策がaptとKotlin これをきっかけに、チーム全員がコードを少なくすることに 積極的になったら良いですね
59.
Thank you!
Download