Submit Search
Upload
なるべくコードを書かないAndroid開発
•
4 likes
•
5,955 views
Hiroshi Kikuchi
Follow
Androidオールスターズ2で発表したスライドです。 aptとkotlinのお話をさせていただきました。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 59
Download now
Download to read offline
Recommended
Androidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみた
Hiroshi Kikuchi
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
KotlinJSって正直どうなん
KotlinJSって正直どうなん
Hiroshi Kikuchi
KotlinでWebアプリ開発
KotlinでWebアプリ開発
Ryo Nakagawa
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Hiroshi Kikuchi
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
関西FXOS勉強会3rdGIG キーボード大好き!
関西FXOS勉強会3rdGIG キーボード大好き!
雅彦 金井
ビジュアルプログラミング言語Scratchで遊ぼう
ビジュアルプログラミング言語Scratchで遊ぼう
Tomoyuki Sugita
Recommended
Androidの世界を離れて異文化留学してみた
Androidの世界を離れて異文化留学してみた
Hiroshi Kikuchi
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話
Hiroshi Kikuchi
KotlinJSって正直どうなん
KotlinJSって正直どうなん
Hiroshi Kikuchi
KotlinでWebアプリ開発
KotlinでWebアプリ開発
Ryo Nakagawa
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
モバイルアプリ開発をグッと楽にするKotlinの便利なところ3選
Hiroshi Kikuchi
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
4 Colors Othello’s Algorithm @仙台 IT 文化祭 2017
Takaaki Suzuki
関西FXOS勉強会3rdGIG キーボード大好き!
関西FXOS勉強会3rdGIG キーボード大好き!
雅彦 金井
ビジュアルプログラミング言語Scratchで遊ぼう
ビジュアルプログラミング言語Scratchで遊ぼう
Tomoyuki Sugita
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
gyro_s
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
Kouhei Sutou
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
Nobuhiro Sue
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考える
Takuya Kitamura
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめ
Kouhei Sutou
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
Kazumi IWANAGA
Androidの開発概要
Androidの開発概要
Hiroyuki Nozaki
このすこし短い時間にLTを!
このすこし短い時間にLTを!
Ryo Iinuma
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
Shinobu Okano
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
Shinobu Okano
まったりAndroid framework code reading #2
まったりAndroid framework code reading #2
Shinobu Okano
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割
Yoshifumi Murakami
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Yoshifumi Murakami
技術的負債との戦い方
技術的負債との戦い方
Iosif Takakura
プロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがし
thatblue
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Masahiro Wakame
3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API
Hiroshi Kikuchi
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
Yuki Anzai
More Related Content
What's hot
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
gyro_s
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
Kouhei Sutou
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
Nobuhiro Sue
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考える
Takuya Kitamura
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめ
Kouhei Sutou
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
Kazumi IWANAGA
Androidの開発概要
Androidの開発概要
Hiroyuki Nozaki
このすこし短い時間にLTを!
このすこし短い時間にLTを!
Ryo Iinuma
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Kouji Matsui
Perlを書くときに意識していること
Perlを書くときに意識していること
良太 増子
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
Shinobu Okano
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
Shinobu Okano
まったりAndroid framework code reading #2
まったりAndroid framework code reading #2
Shinobu Okano
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
インフラジスティックス・ジャパン株式会社
新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割
Yoshifumi Murakami
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Yoshifumi Murakami
技術的負債との戦い方
技術的負債との戦い方
Iosif Takakura
プロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがし
thatblue
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Masahiro Wakame
What's hot
(20)
かわいいKotlinでAndroidアプリをつくろう
かわいいKotlinでAndroidアプリをつくろう
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
DevSummit2011JGGUG OpenJam: Groovy
DevSummit2011JGGUG OpenJam: Groovy
Swiftにおけるclassとstructの使い分けをDDDから考える
Swiftにおけるclassとstructの使い分けをDDDから考える
SEゼミ2015 - リーダブルコード勉強会のまとめ
SEゼミ2015 - リーダブルコード勉強会のまとめ
Ruby with My Life
Ruby with My Life
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
CLR/H #clrh104 あなたのアプリにスパイスを! ~ コグニティブと対話 Botのプチレシピ
Androidの開発概要
Androidの開発概要
このすこし短い時間にLTを!
このすこし短い時間にLTを!
C#でわかる こわくないMonad
C#でわかる こわくないMonad
Perlを書くときに意識していること
Perlを書くときに意識していること
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
まったりAndroid framework code reading #2
まったりAndroid framework code reading #2
jQuery 対応ライブラリと TypeScript
jQuery 対応ライブラリと TypeScript
新世代自律学習者のための教師の役割
新世代自律学習者のための教師の役割
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
Mjot-jfbp日本語教師研修「can-doを目標とした授業設計」
技術的負債との戦い方
技術的負債との戦い方
プロのエンジニアとして幸せに生きるためのなにがし
プロのエンジニアとして幸せに生きるためのなにがし
TypeScriptは明日から使うべき
TypeScriptは明日から使うべき
Viewers also liked
3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API
Hiroshi Kikuchi
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
Yuki Anzai
はじめようlocalization
はじめようlocalization
João Orui
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
Tomohiro Kumagai
Minimal Cake Pattern in Swift
Minimal Cake Pattern in Swift
Hikaru Yoshimura
Android thingsやってみた
Android thingsやってみた
Hiroshi Kikuchi
Dependency injection
Dependency injection
Yuki Matsumura
Android cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
楽々Scalaプログラミング
楽々Scalaプログラミング
Tomoharu ASAMI
画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみた
tomowata
Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごい
Masahiro Wakame
Kotlinにお触り
Kotlinにお触り
Shinobu Okano
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Mariko Takatori
Titaniumから脱却している話
Titaniumから脱却している話
Fujita Yuta
これからの設計の話をしよう
これからの設計の話をしよう
shinnosuke kugimiya
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...
Mattison Podiatry Group
SOFT Ideation - To make great business ideas, then make it SOFT
SOFT Ideation - To make great business ideas, then make it SOFT
The 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...
Sherry Jones
Viewers also liked
(20)
3分で作る Kotlin Friendly な API
3分で作る Kotlin Friendly な API
Androidオールスターズ2016 yanzm
Androidオールスターズ2016 yanzm
はじめようlocalization
はじめようlocalization
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
はじめて Phantom と遭遇して、闇雲に闘いを挑んでみた話 #kbkz_tech
Minimal Cake Pattern in Swift
Minimal Cake Pattern in Swift
Android thingsやってみた
Android thingsやってみた
Dependency injection
Dependency injection
Android cleanarchitecture
Android cleanarchitecture
楽々Scalaプログラミング
楽々Scalaプログラミング
画面遷移図作成ツールを試してみた
画面遷移図作成ツールを試してみた
Androidで部 第7回 APTすごい
Androidで部 第7回 APTすごい
Kotlinにお触り
Kotlinにお触り
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Poiboy for android 〜激短(1ヶ月)制作フローと気づき〜
Titaniumから脱却している話
Titaniumから脱却している話
これからの設計の話をしよう
これからの設計の話をしよう
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...
SOFT 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...
Similar to なるべくコードを書かないAndroid開発
プログラミングLT 2019 Summer
プログラミングLT 2019 Summer
Yusuke Mori
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Kishi Shundo
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~
Tatsuya Ishikawa
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
Hiroyoshi Miyazaki
konashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピング
Shogo Ochiai
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
Yasuhito Yabe
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
Ippei Sumida
Lt40
Lt40
GIG inc.
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
Shinobu Okano
Mobile Openid
Mobile Openid
Toru Yamaguchi
コーディング入門以前
コーディング入門以前
Yutaka Kinjyo
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
Hiroyuki Ishikawa
クリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear code
Kouhei Sutou
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術
KeitoTakeda
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
Wataru Terada
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
Takuma Kudo
Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
HTML5時代のWebデザイン
HTML5時代のWebデザイン
masaaki komori
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
ShogoOkazaki
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
Toshiki Tsuboi
Similar to なるべくコードを書かないAndroid開発
(20)
プログラミングLT 2019 Summer
プログラミングLT 2019 Summer
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
Ride on azure~アイデアソン編~
Ride on azure~アイデアソン編~
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
CognitoとSDKでサーバーレスなマルチデバイスアプリを構築する
konashiとmilkcocoaでわくわくプロトタイピング
konashiとmilkcocoaでわくわくプロトタイピング
Htmlコーディングの効率化 前編
Htmlコーディングの効率化 前編
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
PHPerにもCoderDojoのメンターとしてお手伝いしてほしい
Lt40
Lt40
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
Mobile Openid
Mobile Openid
コーディング入門以前
コーディング入門以前
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
[クリエイティブハント2018]LT 道場破りしたらできちゃった/// #ゴーハント
クリアなコードの作り方 - How to make clear code
クリアなコードの作り方 - How to make clear code
お安く、楽にWEBアプリを支える技術
お安く、楽にWEBアプリを支える技術
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
TechBuzz第5回cocos2d-x勉強会 BrainWars発表資料
Rubocopとの付き合い方
Rubocopとの付き合い方
HTML5時代のWebデザイン
HTML5時代のWebデザイン
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
160531 IoT LT #15 @ 日本IBM
160531 IoT LT #15 @ 日本IBM
More from Hiroshi Kikuchi
Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話
Hiroshi Kikuchi
今更聞けない? Androidのテストのいろは
今更聞けない? Androidのテストのいろは
Hiroshi Kikuchi
新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なこと
Hiroshi Kikuchi
JUnit5とAndroidのテスト
JUnit5とAndroidのテスト
Hiroshi Kikuchi
画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろう
Hiroshi Kikuchi
テストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたい
Hiroshi Kikuchi
Designing Auto Generated Codes
Designing Auto Generated Codes
Hiroshi Kikuchi
C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!
Hiroshi Kikuchi
Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料
Hiroshi Kikuchi
More from Hiroshi Kikuchi
(9)
Android Developer Toolsのバグを見つけて直してもらった話
Android Developer Toolsのバグを見つけて直してもらった話
今更聞けない? Androidのテストのいろは
今更聞けない? Androidのテストのいろは
新規Androidアプリ開発において何より大切なこと
新規Androidアプリ開発において何より大切なこと
JUnit5とAndroidのテスト
JUnit5とAndroidのテスト
画面状態を抽象化してテスタブル設計ライフを送ろう
画面状態を抽象化してテスタブル設計ライフを送ろう
テストコードをアプリケーションコードと同じ階層に置きたい
テストコードをアプリケーションコードと同じ階層に置きたい
Designing Auto Generated Codes
Designing Auto Generated Codes
C#でiPhone & Androidアプリ!
C#でiPhone & Androidアプリ!
Ideatter : Tech-on2011決勝でのプレゼン資料
Ideatter : Tech-on2011決勝でのプレゼン資料
なるべくコードを書かない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 now