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

開発 4 年目のアプリへの Kotlin 導入

開発 4 年目のアプリへの Kotlin 導入

DroidKaigi Prelude #dk_prelude

Ryutaro Miyashita

January 26, 2018
Tweet

More Decks by Ryutaro Miyashita

Other Decks in Technology

Transcript

  1. ։ൃ೥໨ͷΞϓϦ΁ͷ,PUMJOಋೖ
    %SPJE,BJHJ1SFMVEF!%F/"

    View Slide

  2. ٶԼཽେ࿠
    $IBU8PSLגࣜձࣾ
    ΫϥΠΞϯτΞϓϦέʔγϣϯ։ൃ෦
    [email protected]

    View Slide

  3. ,PUMJO

    View Slide

  4. ։ൃ೥໨ͷΞϓϦ΁ͷ,PUMJOಋೖ
    ‣ ೥ͷ(PPHMF*0Ͱެࣜ։ൃݴޠԽͨ͠
    Ҏલ͔Βಋೖ͸ݕ౼͍ͯͨ͠
    ެࣜαϙʔτ͕ಘΒΕͨ͜ͱͰ҆৺Λಘͨ
    ཌ೔͔ΒಋೖΛ։࢝ͨ͠ʜ͔͠͠ʜ
    ‣ طଘͷΞϓϦ΁ͷಋೖ͸Ͳ͏ͨ͠Βྑ͍ͷ͔ʁ
    Ͳ͔͜Βʁ
    શͯॻ͖׵͑Δʁ
    ϋοΩϦ͍ͯ͠ͳ͍͕ɺ΍ͬͯΈΑ͏

    View Slide

  5. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ ಋೖ౰ॳ͸શͯΛ,PUMJOԽ͢Δ༧ఆ͸ແ͔ͬͨ
    ͸͡Ί͸৽ن%JBMPH'SBHNFOU͔Β։࢝
    ࣍ʹطଘͷ"DUJWJUZΛ,PUMJOԽ
    ͦͷޙɺ৽نίʔυΛ,PUMJOͰ௥Ճ
    ‣ +BWBͱͷͭͳ͗ࠐΈ͕ωοΫʹͳ͍ͬͯ͘
    !+WN'JFME!+WN4UBUJD!+WN0WFSMPBET
    SFUVSO6OJU*/45"/$&
    1MBUGPSN5ZQFT

    View Slide

  6. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ !+WN'JFME!+WN4UBUJD!+WN0WFSMPBET
    DPNQBOJPOPCKFDUதʹॻ͘ͱTUBUJDʹల։
    class SomeFragment : Fragment() {
    companion object {
    @JvmField
    val TAG: String =
    SomeFragment::class.java.simpleName
    }
    }

    View Slide

  7. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ !+WN'JFME!+WN4UBUJD!+WN0WFSMPBET
    DPNQBOJPOPCKFDUதʹॻ͘ͱTUBUJDʹల։
    class SomeFragment : Fragment() {
    companion object {
    @JvmStatic
    fun newInstance() = SomeFragment()
    }
    }

    View Slide

  8. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ !+WN'JFME!+WN4UBUJD!+WN0WFSMPBET
    σϑΥϧτҾ਺͕͋Δ਺͚ͩΦʔόʔϩʔυ
    class SomeFragment : Fragment() {
    companion object {
    @JvmStatic
    @JvmOverloads
    fun newInstance(id: Long, name: String = "") =
    SomeFragment()
    }
    }

    View Slide

  9. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ SFUVSO6OJU*/45"/$&
    ؔ਺ΛҾ਺ʹऔΔॲཧΛ+BWB͔Βݺͼग़͢ͱʁ
    class Model {
    fun async(callback: () -> Unit) {
    // Some asynchronous processing
    callback()
    }
    }

    View Slide

  10. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ SFUVSO6OJU*/45"/$&
    lWPJEz͸ͳ͍ͷͰɺl6OJUzΛฦ͢ඞཁ͕͋Δ
    Model model = new Model();
    model.async(() -> {
    // Some callback processing
    return Unit.INSTANCE;
    });

    View Slide

  11. IUUQTEJTDVTTLPUMJOMBOHPSHUKBWBJOUFSPQVOJUDMPTVSFTSFRVJSFEUPSFUVSOLPUMJOVOJU
    !+WN7PJEͷఏҊ
    ೥ʹಉ͡໰୊ఏى

    View Slide

  12. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ 1MBUGPSN5ZQFT
    /PO/VMM·ͨ͸/VMMBCMF͔΋͠Εͳ͍ܕ
    "OESPJE4%,͸جຊతʹ1MBUGPSN5ZQFT
    !/PO/VMM!/VMMBCMF͕෇͍͍ͯΕ͹ϋοϐʔ
    val inflater = LayoutInflater.from(this)
    ˡฦΓ஋ʹlz͕෇͍͍ͯΔ

    View Slide

  13. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ "OESPJE4%,Ͱ͋Ε͹த਎ΛݟΔ
    public static LayoutInflater from(Context context) {
    LayoutInflater LayoutInflater = (LayoutInflater)
    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (LayoutInflater == null) {
    throw new AssertionError("LayoutInflater not found.");
    }
    return LayoutInflater;
    }
    val inflater: LayoutInflater = LayoutInflater.from(this)
    ˡͲ͏΍ΒOVMMʹ͸ͳΒͳ͍Β͍͠
    ˣ/PO/VMMܕͱͯ͠ѻ͏Α͏ʹ͢Δ

    View Slide

  14. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ "OESPJE4%,Ͱ͋Ε͹த਎ΛݟΔ
    lTPVSDFTz͕͋ΔͳΒ͹"OESPJE4UVEJPͰ
    $ISPNFͷ"OESPJE4%,4FBSDI΋Φεεϝ
    ‣ IUUQCJUMZBOESPJETELTFBSDI

    View Slide

  15. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ "OESPJE4%,Ͱ͋Ε͹த਎ΛݟΔ
    lTPVSDFTz͕͋ΔͳΒ͹"OESPJE4UVEJPͰ
    $ISPNFͷ"OESPJE4%,4FBSDI΋Φεεϝ
    ‣ IUUQCJUMZBOESPJETELTFBSDI
    ˡιʔεϑΝΠϧ΁ͷϦϯΫ͕෇͘

    View Slide

  16. ݁࿦શͯ,PUMJOԽͨ͠ํ͕ϝϦοτ͕େ͖͍
    ‣ ࣗ෼ୡ͕ॻ͍ͨίʔυ͸ʁ
    !/PO/VMM!/VMMBCMFΛ෇͚͍ͯ͘ʁ
    ͍ͬͦͷ͜ͱ,PUMJOʹͯ͠͠·ͬͨํ͕ʁ
    ‣ ͭͣͭ,PUMJOԽ͍ͯ͘͠
    ؔ࿈͢Δ+BWBʹ͸Ξ
    ϊςʔγϣϯΛ෇͚Δ
    যΒͣɺΏͬ͘ΓͱͰ΋શͯΛ,PUMJOԽ͢Δ

    View Slide

  17. ݱঢ়

    View Slide

  18. +BWBͷΛ,PUMJOԽ
    ‣ ϲ݄Ͱ೥ؒʹॻ͍ͨ+BWBͷ͕,PUMJOԽ
    ‣ ϑΝΠϧ਺
    ,PUMJO
    +BWB

    View Slide

  19. +BWBͷΛ,PUMJOԽ
    ‣ ϲ݄Ͱ೥ؒʹॻ͍ͨ+BWBͷ͕,PUMJOԽ
    ‣ νʔϜ΁ͷޮՌ
    /PO/VMM/VMMBCMFΛڧ͘ҙࣝ͢ΔΑ͏ʹͳͬͨ
    ‣ !/PO/VMM!/VMMBCMFΞ
    ϊςʔγϣϯͷ෇͚๨Ε͕ͳ͍
    ‣ ݴޠػೳʹ/VMMTBGFUZ͕͋Δํ͕๨Εͳ͍͠ҙࣝ͢Δ
    ‣ ͜Ε·Ͱ΋+BWBͰ0QUJPOBM"1*΋࢖͍ͬͯͨ
    ‣ ͨͩɺ0QUJPOBMΛ࢖͍ͬͯΔͱ,PUMJOଆͰ໘౗ʜʜ

    View Slide

  20. +BWBͷΛ,PUMJOԽ
    ‣ ϲ݄Ͱ೥ؒʹॻ͍ͨ+BWBͷ͕,PUMJOԽ
    ‣ νʔϜ΁ͷޮՌ
    ޿ൣғͷWBSΛආ͚ΔΑ͏ʹͳͬͨ
    ‣ ΠϯελϯεϓϩύςΟ͸Ͱ͖Δ͚ͩWBM
    ‣ ϝιου಺ͳͲڱ͍ൣғͰ͸WBS΋࢖͍ͬͯΔ
    ‣ -JTU.VUBCMF-JTUͳͲ΋ҙࣝతʹ࢖͍෼͚Λ͍ͯ͠Δ

    View Slide

  21. ͓͠·͍
    %SPJE,BJHJ1SFMVEF!%F/"

    View Slide