Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Annotation Processingを 駆使したコード生成で ボイラープレートコードを駆逐しよう!

kazakago
February 07, 2018

Annotation Processingを 駆使したコード生成で ボイラープレートコードを駆逐しよう!

DroidKaigi 2018発表資料
2018/02/08 16:50~17:20 Room5

スライド内のリンク・補足はこちらから
http://kazakago.hatenablog.jp/entry/2018/02/07/152011

kazakago

February 07, 2018
Tweet

More Decks by kazakago

Other Decks in Programming

Transcript

  1. Annotation ProcessingΛ
    ۦ࢖ͨ͠ίʔυੜ੒Ͱ
    ϘΠϥʔϓϨʔτίʔυΛۦஞ͠Α͏ʂ
    @KazaKago
    DroidKaigi 2018
    2018/02/08 Thu. (Day 1) 16:50-17:20 Room5

    View Slide

  2. Self-Introduction
    • ాଜ ݠհʢ@KazaKagoʣ
    • גࣜձࣾΠάχεॴଐ
    • ࿀Ѫ࿀׆ΞϓϦʮwithʯ։ൃϝϯόʔ
    • AndroidΞϓϦ։ൃྺ͸6~7೥͘Β͍

    View Slide

  3. Self-Introduction
    • ాଜ ݠհʢ@KazaKagoʣ
    • גࣜձࣾΠάχεॴଐ
    • ࿀Ѫ࿀׆ΞϓϦʮwithʯ։ൃϝϯόʔ
    • AndroidΞϓϦ։ൃྺ͸6~7೥͘Β͍

    View Slide

  4. Self-Introduction
    ϝϯλϦετDaiGo؂म

    ࿀Ѫɾ࿀׆ϚονϯάαʔϏεʮwithʯ

    View Slide

  5. 0. લஔ͖
    طଘίʔυΛோΊΔɺ͘͝ҰൠతͳΤϯδχΞͷྫ

    View Slide

  6. 0. લஔ͖
    ಉ͡ίʔυ͕2ճॻ͔Ε͍ͯͨ࣌

    View Slide

  7. 0. લஔ͖
    ಉ͡ίʔυ͕2ճॻ͔Ε͍ͯͨ࣌

    View Slide

  8. 0. લஔ͖
    ಉ͡ίʔυ͕3ճॻ͔Ε͍ͯͨ࣌

    View Slide

  9. 0. લஔ͖
    ಉ͡ίʔυ͕3ճॻ͔Ε͍ͯͨ࣌

    View Slide

  10. 0. લஔ͖
    ಉ͡ίʔυ͕4ճҎ্ॻ͔Ε͍ͯͨ࣌

    View Slide

  11. 0. લஔ͖
    ಉ͡ίʔυ͕4ճҎ্ॻ͔Ε͍ͯͨ࣌

    View Slide

  12. ಉ͡ίʔυΛԿ౓΋
    ॻ͘ͷ͸ͭΒ͍
    0. લஔ͖

    View Slide

  13. ॲཧΛ·ͱΊͯ

    ڞ௨Խ͠Α͏ʂ
    0. લஔ͖

    View Slide

  14. 0. લஔ͖
    ॲཧ͸ಉ͚ͩ͡Ͳ

    ౉͢ύϥϝʔλ͕ҟͳͬͯͯ

    ͏·͘ڞ௨ԽͰ͖ͳ͍ɾɾɾ
    ͳΜͯ͜ͱ΋

    View Slide

  15. Annotation Processing
    ʹΑΔίʔυੜ੒Ͱ

    ͰղܾͰ͖Δ͔΋ʁ
    0. લஔ͖

    View Slide

  16. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  17. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  18. 1. Annotation Processingͬͯʁ
    Processing
    Annotation

    View Slide

  19. 1. Annotation Processingͬͯʁ
    Processing
    Annotation

    View Slide

  20. 1. Annotation Processingͬͯʁ
    • Java5 SE͔Βొ৔
    • @͔Β࢝·Δɺίʔ
    υʹରͯ͠஫ऍΛೖ
    ΕΔػೳ
    • @Override΍
    @Deprecated͸Ұ౓
    ͸ݟͨ͜ͱ͋Δ͸ͣ
    ←ίϨʂ
    ࣗ࡞Annotationͷྫ
    Α͘ݟΔAnnotationͷྫ

    View Slide

  21. 1. Annotation Processingͬͯʁ
    Processing
    Annotation

    View Slide

  22. 1. Annotation Processingͬͯʁ
    Processing
    Annotation

    View Slide

  23. 1. Annotation Processingͬͯʁ
    • ਖ਼֬ʹ͸Pluggable
    Annotation
    Processing API
    • Java6 SE͔Βొ৔
    • Ϗϧυ࣌ʹ
    Annotationʹରͯ͠
    ಛఆͷॲཧΛߦ͏࢓
    ૊Έ
    Ϗϧυ։࢝
    ίϯύΠϧ࣮ߦ
    Annotation Processing࣮ߦ
    ͳΜ΍͔Μ΍ͷޙϏϧυऴྃ
    ※͍Ζ͍Ζ୺ંͬͯ·͢

    View Slide

  24. 1. Annotation Processingͬͯʁ
    ༗໊Ͳ͜ΖͷϥΠϒϥϦʹ΋Α͘׆༻͞Ε͍ͯ·͢ɻ

    View Slide

  25. 1. Annotation Processingͬͯʁ
    ༗໊Ͳ͜ΖͷϥΠϒϥϦʹ΋Α͘׆༻͞Ε͍ͯ·͢ɻ

    View Slide

  26. ࣮ࡍԿ΍ͬͯΔͷ͔

    ݟͨ͜ͱ͋Δʁ
    1. Annotation Processingͬͯʁ

    View Slide

  27. 1. Annotation Processingͬͯʁ
    • JakeWharton / Butterknife
    http://jakewharton.github.io/butterknife/

    View Slide

  28. 1. Annotation Processingͬͯʁ
    • Butterknifeͷ৔߹

    View Slide

  29. 1. Annotation Processingͬͯʁ
    3ͭͷ

    Annotationɹ

    View Slide

  30. 1. Annotation Processingͬͯʁ
    3ͭͷ

    Annotationɹ
    42ߦͷΫϥε͕

    ੜ੒͞ΕͯΔʂ

    View Slide

  31. 1. Annotation Processingͬͯʁ
    • maskarade / Android-Orma
    https://github.com/maskarade/Android-Orma

    View Slide

  32. 1. Annotation Processingͬͯʁ
    • Android-Ormaͷ৔߹

    View Slide

  33. 1. Annotation Processingͬͯʁ
    4ΧϥϜͷ

    1ςʔϒϧʢΫϥεʣ

    View Slide

  34. 1. Annotation Processingͬͯʁ
    4ΧϥϜͷ

    1ςʔϒϧʢΫϥεʣ

    ܭ1175ߦʢʂʁʣ

    ͷίʔυੜ੒

    View Slide

  35. 1. Annotation Processingͬͯʁ
    ͜Ε͚ͩͷίʔυΛ
    ॻ͘ख͕ؒল͚Δʂ

    View Slide

  36. ͭ·Γ…
    1. Annotation Processingͬͯʁ

    View Slide

  37. ͦͷ෼ͷ࣌ؒΛ

    ༗ҙٛʹ࢖͑Δʂ
    1. Annotation Processingͬͯʁ

    View Slide

  38. 1. Annotation Processingͬͯʁ
    ੜ੒͞Εͨιʔείʔυ͸ҎԼ΁഑ஔ͞Εͯ·͢

    {MODULE}/build/generated/source/apt/

    View Slide

  39. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  40. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  41. Annotation Processing
    Λ࢖ͬͯίʔυੜ੒

    ͢Δʹ͸ʁ
    2. Annotationͱίʔυੜ੒

    View Slide

  42. 2. Annotationͱίʔυੜ੒
    ProcessingΛߦ͏ʹ͸ɺAbstractProcessorΛܧঝͨ͠
    ProcessorΫϥεΛ࡞Γ·͢
    processϝιου΁AnnotationΛ͚ͭͨର৅͕Πϕϯτͱ
    ͯ͠ίϯύΠϧલʹྲྀΕ͖ͯ·͢

    View Slide

  43. 2. Annotationͱίʔυੜ੒
    ͜ͷAbstractProcessorΫϥεɺAndroid Application΍
    Android LibraryͩͱΫϥεࣗମ͕ଘࡏ͠ͳ͍ͷͰ

    Java LibraryͰಋೖͯ͠Լ͍͞

    View Slide

  44. 2. Annotationͱίʔυੜ੒
    ͜ͷAbstractProcessorΫϥεɺAndroid Application΍
    Android LibraryͩͱΫϥεࣗମ͕ଘࡏ͠ͳ͍ͷͰ

    Java LibraryͰಋೖͯ͠Լ͍͞

    View Slide

  45. Google / AutoService
    2. Annotationͱίʔυੜ੒
    https://github.com/google/auto/tree/master/service

    View Slide

  46. ProcessorΫϥεʹରͯ͠@AutoServiceΞϊςʔγϣϯ
    Λ෇༩͢Δ͜ͱͰϏϧυ࣌ʹࣗಈతʹProcessingͤ͞
    Δ͜ͱ͕ՄೳͰ͢
    2. Annotationͱίʔυੜ੒

    View Slide

  47. ίʔυੜ੒Λߦ͏ʹ͸ɺProcessorΫϥεͰऔಘͰ͖Δ
    processingEnvม਺͔ΒwriterΫϥεΛऔಘͯ͠ιʔε
    ίʔυͷ಺༰Λྲྀ͠ࠐΈ·͢
    2. Annotationͱίʔυੜ੒

    View Slide

  48. 2. Annotationͱίʔυੜ੒
    process()ϝιουͰ౉͞ΕΔRoundEnvironmentҾ਺Λ
    ࢖͏ͱɺAnnotationΛ෇༩͞Εͨର৅ΛElementͱ͍͏
    ୯ҐͰऔಘ͢Δ͜ͱ͕ग़དྷ·͢ɻ

    ElementΫϥε͔Β͸ܕ΍ύοέʔδ໊ɺΫϥε໊ͳͲ
    ιʔείʔυʹؔΘΔ΋ͷ͸͍͍ͩͨऔಘͰ͖·͢
    MyAnnotation͕෇༩͞ΕͨҰཡͷऔಘྫ

    View Slide

  49. 2. Annotationͱίʔυੜ੒
    Q. Ͳ͏΍ͬͯίʔυॻ͘ͷʁ

    View Slide

  50. 2. Annotationͱίʔυੜ੒
    A. JavaPoetΛ࢖͏ͷ͕
    ͓͢͢Ίʂ

    View Slide

  51. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  52. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  53. Square / JavaPoet
    3. JavaPoetͱKotlinPoet
    https://github.com/square/javapoet

    View Slide

  54. Square / KotlinPoet
    3. JavaPoetͱKotlinPoet
    https://github.com/square/kotlinpoet

    View Slide

  55. 3. JavaPoetͱKotlinPoet
    ͲͪΒ΋Javaݴޠ࢓༷Ͱ͸αϙʔτ͞Ε͍ͯͳ͍
    Java(Kotlin)ιʔείʔυΛಈతʹੜ੒͢ΔͨΊͷϥΠϒ
    ϥϦɻ
    • JavaPoet
    • Javaίʔυੜ੒ → Java&Kotlin݉༻
    • KotlinPoet
    • Kotlinίʔυੜ੒ → Kotlinʢ͕ϏϧυͰ͖Δ؀ڥʣ
    ઐ༻

    View Slide

  56. 3. JavaPoetͱKotlinPoet
    ࡞੒͍ͨ͠Ϋϥε໊΍ύοέʔδΛTypeSpecΫϥε΁
    ࢦఆ͢Δ͜ͱͰιʔείʔυΛੜ੒Ͱ͖·͢
    ·ͨɺwriteToϝιου΁processingEnv.getFiler()ΛҾ
    ਺ͱͯ͠ࢦఆ͢Δ͜ͱͰίϯύΠϧର৅ͱؚͯ͠ΊΔ
    ͜ͱ͕ՄೳͰ͢

    View Slide

  57. 3. JavaPoetͱKotlinPoet
    TypeSpecʹ͸ιʔείʔυΛಈతʹ

    هड़͢ΔͨΊʹ༷ʑͳ৘ใΛࢦఆͰ͖·͢

    View Slide

  58. 3. JavaPoetͱKotlinPoet
    • جఈͱͳΔSuperΫϥεͷࢦఆ
    • ίϯετϥΫλͷఆٛ
    • private΍publicͳͲͷम০ࢠͷ෇༩
    • ϝιουͷఆٛ
    • ϑΟʔϧυม਺ɺϩʔΧϧม਺ͷఆٛ
    • ͦͷଞ೚ҙͷίʔυͷૠೖ
    TypeSpecʹ͸ιʔείʔυΛಈతʹ

    هड़͢ΔͨΊʹ༷ʑͳ৘ใΛࢦఆͰ͖·͢

    View Slide

  59. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  60. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  61. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    • Android Frameworkͷݹ͍API͸ಛʹࣗಈԽͷ༨஍͕
    ͋Δͱࢥ͍·͢
    • ଞʹ΋ۀ຿্ɺಛ༗ͷ͓·͡ͳ͍తͳίʔυΛॻ͔ͳ
    ͚Ε͹ͳΒͳ͍৔߹ʹ΋ޮՌΛൃش͢ΔͱࢥΘΕ·͢

    View Slide

  62. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    • Android Frameworkͷݹ͍API͸ಛʹࣗಈԽͷ༨஍͕
    ͋Δͱࢥ͍·͢
    • ଞʹ΋ۀ຿্ɺಛ༗ͷ͓·͡ͳ͍తͳίʔυΛॻ͔ͳ
    ͚Ε͹ͳΒͳ͍৔߹ʹ΋ޮՌΛൃش͢ΔͱࢥΘΕ·͢
    Orma
    Realm
    IcePick
    Permissions
    Dispatcher
    Android
    Annotations
    Dagger
    ButterKnife

    View Slide

  63. ၟӽͳ͕Β

    ࢲ͕ࣗ࡞ͨ͠ϥΠϒϥϦΛ

    ྫʹͯ͠Έ·͢
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  64. ྫ1
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  65. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    SharedPreferences͸Key-ValueͰอଘ͢ΔͨΊɺΞϓϦ
    ͝ͱʹ࢖͍΍͘͢ϥοϓͨ͠ΫϥεΛॻ͘͜ͱ͕Α͋͘
    Δͱࢥ͍·͢ɻ

    View Slide

  66. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  67. อଘ͍ͨ͠ର৅͑͞

    Θ͔Ε͹ࣗಈతʹ૊Ίͦ͏
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  68. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    KazaKago / Preferhythm
    https://github.com/KazaKago/Preferhythm

    View Slide

  69. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    ϥούʔΫϥεΛҎԼͷίʔυ͔Βੜ੒Ͱ͖ΔΑ͏ʹʂ

    View Slide

  70. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  71. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    7ߦˠ65ߦ
    Key໊΍

    ϝιου໊ͳͲ

    typo͠΍͍͢

    ෦෼Λࣗಈੜ੒

    View Slide

  72. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  73. ྫ2
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  74. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    AndroidͰը໘ؒͰ஋Λ౉͢৔߹ɺKey-ValueͰ౉͢ͷͰ
    ؅ཧ͕൥ࡶ͔ͭtypoͷཁҼʹͳΓ΍͍͢෦෼Ͱ͢

    View Slide

  75. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  76. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    ܕͱϑΟʔϧυ໊͑͞

    Θ͔Ε͹Bundleʹ٧ΊΔͷ͸

    ػցతʹ૊ΊΔΑͶ

    View Slide

  77. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    KazaKago / Factolize
    https://github.com/KazaKago/Factolize

    View Slide

  78. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    ౉͞ΕΔଆͷActivityͱม਺ʹAnnotationΛ͚͓ͭͯ͘
    ͜ͱͰProcessor͕൑அͰ͖ΔΑ͏ʹ͠·͢

    View Slide

  79. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    AnnotationΛݩʹϑΝΫτϦʔϝιουΛࣗಈੜ੒ͯ͠ɺ

    ద੾ʹBundle΁٧ΊͯऔΓग़͢࢓૊ΈΛ࣮ݱ͍ͯ͠·͢
    ࣗಈੜ੒Ϋϥε

    View Slide

  80. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    Activity΁෇༩ͨ͠

    2ՕॴͷAnnotation

    View Slide

  81. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    Activity΁෇༩ͨ͠

    2ՕॴͷAnnotation
    → 38ߦͷΫϥε

    View Slide

  82. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔

    View Slide

  83. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    AndroidϓϩδΣΫτ্Ͱ

    ࣮૷͢Δʹ͋ͨͬͯ

    View Slide

  84. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    AbstractProcessor͸Java Libraryʹ͔͠ଘࡏ͠ͳ͍ͷ
    ͰɺAndroidϓϩδΣΫτͰAnnotation ProcessingΛ࢖
    ͏৔߹ɺϞδϡʔϧΛ͋Δఔ౓ࡉ͔͘෼͚ͨ΄͏͕औΓ
    ճ͠΍͍͢Ͱ͢

    View Slide

  85. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    Android LibraryϞδϡʔϧɺProcessor࣮૷Ϟδϡʔ
    ϧɺAnnotationఆٛϞδϡʔϧͷ3૚ߏ੒ΛΑ͘ݟ·͢

    View Slide

  86. 4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    Application Module
    Processor Module Library Module
    Annotation Module
    ΞϓϦ
    ϥΠϒϥϦ
    Java Library Android Library
    Java Library
    annotationProcessor (kapt) implementation
    implementation api
    Android Application

    View Slide

  87. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  88. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  89. 5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    Kotlin Java
    ϓϩύςΟ ϑΟʔϧυ
    GetterΛ࢖ͬͯऔಘ ϑΟʔϧυʹ௚઀ΞΫηε
    AnnotationΛ෇༩͢Δର৅͕Java͔Kotlin͔ʹΑͬͯɺ

    ΞΫηοαʔͷํ๏͕ҟͳΔ৔߹͕͋Δ͜ͱʹ஫ҙͰ͢

    View Slide

  90. 5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    Processor܅
    Javaιʔείʔυ
    Kotlinιʔείʔυ
    ʁ
    JavaͱKotlinͷΞΫηοαʔͷҧ͍ʹΑͬͯɺϑΟʔϧ
    υͷ஋ΛऔಘͰ͖ͳ͍͜ͱ͕͋ΔͷͰProcessorΫϥε
    ͰKotlinΛߟྀ͢Δඞཁ͕͋Γ·͢

    View Slide

  91. 5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    • ରࡦ1. ϦϑϨΫγϣϯͰΞΫηε͢ΔίʔυΛੜ੒͢
    Δ
    • ϝϦοτɿJava͔Kotlin͔Λ΄΅ҙࣝͤͣ࢖͏͜ͱ͕
    Ͱ͖Δ
    • σϝϦοτɿ࣮ߦ଎౓͕஗͘ɺProguard౳Λ༻͍ͨ
    ೉ಡԽΛߦ͏ͱ৔߹ʹΑͬͯ͸আ֎ઃఆ͕ඞཁʹͳ
    Δ

    View Slide

  92. 5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    • ରࡦ2. ʢඞཁʹԠͯ͡ʣGetterΛܦ༝͢Δ
    • ϝϦοτɿϦϑϨΫγϣϯͷσϝϦοτ͕ൃੜ͠ͳ
    ͍
    • σϝϦοτɿΞΫηε͢ΔϑΟʔϧυม਺΍ϝιο
    υΛprivateʹͰ͖ͳ͍ɻΧελϚΠζ͞Εͨ
    GetterɺSetter͕ࣗ࡞͞Ε͍ͯͨ৔߹ͦΕΛࢀর͠
    ͯ͠·͏

    View Slide

  93. 5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    • ଞʹ΋Kotlinಛ༗ͷڍಈ͕Өڹ͢Δ͜ͱ΋͋ΔͨΊඞͣ
    JavaͱKotlinͰಈ࡞͢Δ͔֬ೝ͢Δ͜ͱΛ͓͢͢Ί͠·
    ͢
    • Java΍KotlinͷݴޠόʔδϣϯʹΑͬͯ΋ɺαϙʔτ͠
    ͍ͯͳ͍ίʔυΛੜ੒ͯ͠΋౰વಈ࡞ͤ͞Δ͜ͱ͕ग़
    དྷͳ͍ͷͰ஫ҙͯ͠ωˑ

    View Slide

  94. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺

    View Slide

  95. ໨࣍
    1. Annotation Processingͬͯʁ
    2. Annotationͱίʔυੜ੒
    3. JavaPoetͱKotlinPoet
    4. Android։ൃʹ͓͍ͯͲͷΑ͏ʹ׆༻Ͱ͖Δͷ͔
    5. Kotlin͔Β࢖͏৔߹ͷ஫ҙ఺
    ·ͱΊ

    View Slide

  96. ·ͱΊ
    Don't Repeat Yourself,
    Generate Your Code!

    View Slide

  97. αϯϓϧίʔυ
    https://github.com/KazaKago/AnnotationProcessingSample
    Annotation ProcessingΛ༻͍ͯ

    τʔετΛදࣔ͢ΔαϯϓϧͰ͢

    View Slide

  98. ࠷ޙʹ
    גࣜձࣾIGNISͰ͸ΤϯδχΞΛେืू͍ͯ͠·͢ʂ
    https://recruit.1923.co.jp/

    View Slide

  99. ࠷ޙʹ
    גࣜձࣾIGNISͰ͸ΤϯδχΞΛେืू͍ͯ͠·͢ʂ
    https://recruit.1923.co.jp/

    View Slide

  100. ࠷ޙʹ
    ͋Γ͕ͱ͏͍͟͝·ͨ͠
    https://github.com/KazaKago/AnnotationProcessingSample
    αϯϓϧίʔυ
    https://github.com/KazaKago/Preferhythm
    Preferhythm
    Factolize
    https://github.com/KazaKago/Factolize

    View Slide