$30 off During Our Annual Pro Sale. View Details »

Source Editor Extensionと SwiftSyntaxでコード自動生成ツール を作る

kazuhiro4949
September 18, 2021

Source Editor Extensionと SwiftSyntaxでコード自動生成ツール を作る

kazuhiro4949

September 18, 2021
Tweet

More Decks by kazuhiro4949

Other Decks in Technology

Transcript

  1. ྛ࿨߂ !LB[VIJSP

    4PVSDF&EJUPS&YUFOTJPOͱ
    4XJGU4ZOUBYͰίʔυࣗಈੜ੒πʔϧ
    Λ࡞Δ
    J04%$+BQBO

    View Slide

  2. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  3. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  4. ֓ཁ
    w ίʔυࣗಈੜ੒ख๏ͱͯ͠4PVSDF&EJUPS&YUFOTJPO4XJGU4ZOUBYΛఏҊ
    w ࣮ࡍʹ։ൃͰ׆༻͍ͯ͠Δ
    w ϝϦοτɾσϝϦοτ͕͋ΔͷͰଞͷํ๏ͱซ༻͢Δͷ͕ྑ͍

    View Slide

  5. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  6. എܠͱͳΔ՝୊
    w ػೳ࣮૷ͨ͠ޙͰϦϑΝΫλϦϯά
    ͠ͳ͕ΒςετΛॻ͖͍ͨ
    w %*ͷͨΊʹϓϩτίϧ࡞੒ɾϞοΫ
    ࡞੒͢Δͷ͕໘౗
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  7. എܠͱͳΔ՝୊
    w ػೳ࣮૷ͨ͠ޙͰϦϑΝΫλϦϯά
    ͠ͳ͕ΒςετΛॻ͖͍ͨ
    w %*ͷͨΊʹϓϩτίϧ࡞੒ɾϞοΫ
    ࡞੒͢Δͷ͕໘౗
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  8. എܠͱͳΔ՝୊
    w ػೳ࣮૷ͨ͠ޙͰϦϑΝΫλϦϯά
    ͠ͳ͕ΒςετΛॻ͖͍ͨ
    w %*ͷͨΊʹϓϩτίϧ࡞੒ɾϞοΫ
    ࡞੒͢Δͷ͕໘౗
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  9. %*)FMQFSGPS4XJGU
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w Ϋϥε͔Βϓϩτίϧͷநग़
    w ϓϩτίϧ͔ΒϞοΫͷੜ੒
    IUUQTBQQTBQQMFDPNKQBQQEJIFMQFSGPSTXJGUJE

    View Slide

  10. %*)FMQFSGPS4XJGU
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w Ϋϥε͔Βϓϩτίϧͷநग़
    w ϓϩτίϧ͔ΒϞοΫͷੜ੒
    IUUQTBQQTBQQMFDPNKQBQQEJIFMQFSGPSTXJGUJE

    View Slide

  11. %*)FMQFSGPS4XJGU
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w Ϋϥε͔Βϓϩτίϧͷநग़
    w ϓϩτίϧ͔ΒϞοΫͷੜ੒
    Ϋϥε ϓϩτίϧ

    View Slide

  12. %*)FMQFSGPS4XJGU
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w Ϋϥε͔Βϓϩτίϧͷநग़
    w ϓϩτίϧ͔ΒϞοΫͷੜ੒
    Ϋϥε ϓϩτίϧ ϞοΫ

    View Slide

  13. σϞ

    View Slide

  14. %*)FMQFSGPS4XJGUͷಛ௃
    w 9DPEF্Ͱ࣮૷தίʔυʹର͠
    ͯϦϑΝΫλϦϯάՄೳ
    w ϦϑΝΫλϦϯάͷεςοϓΛ
    Ұ෦লུͰ͖Δ
    w લड़ͷϦζϜΛ่ͣ͞ʹίʔυ
    ੜ੒͢Δ
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  15. %*)FMQFSGPS4XJGUͷಛ௃
    w ϦϑΝΫλϦϯάͷεςοϓΛ
    Ұ෦লུͰ͖Δ
    w લड़ͷϦζϜΛ่ͣ͞ʹίʔυ
    ੜ੒͢Δ
    w 9DPEF্Ͱ࣮૷தίʔυʹର͠
    ͯϦϑΝΫλϦϯάՄೳ
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  16. %*)FMQFSGPS4XJGUͷಛ௃
    w ϦϑΝΫλϦϯάͷεςοϓΛ
    Ұ෦লུͰ͖Δ
    w લड़ͷϦζϜΛ่ͣ͞ʹίʔυ
    ੜ੒͢Δ
    w 9DPEF্Ͱ࣮૷தίʔυʹର͠
    ͯϦϑΝΫλϦϯάՄೳ
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  17. %*)FMQFSGPS4XJGUͷಛ௃
    w ϦϑΝΫλϦϯάͷεςοϓΛ
    Ұ෦লུͰ͖Δ
    w લड़ͷϦζϜΛ่ͣ͞ʹίʔυ
    ੜ੒͢Δ
    w 9DPEF্Ͱ࣮૷தίʔυʹର͠
    ͯϦϑΝΫλϦϯάՄೳ
    ᶃػೳ࣮૷
    ᶅґଘΫϥεΛϓϩτίϧԽ
    ᶄςετ࣮૷
    ᶆϞοΫ࡞੒
    ᶇ%*Ͱ͖ΔΑ͏ʹͯ͠ςετΛ௨͢

    View Slide

  18. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  19. എܠͱͳΔ՝୊
    w طଘίʔυΛ'8Խ͢Δ࣌ʹ*'ެ։
    ͢Δͷ͕໘౗
    w ͦ͏͍͏͜ͱ͕͍ͨ͠ϓϩδΣΫτ
    ͸େମΫϥεͷίʔυྔ͕Ͱ͔͍

    View Slide

  20. എܠͱͳΔ՝୊
    w طଘίʔυΛ'8Խ͢Δ࣌ʹ*'ެ։
    ͢Δඞཁ͕͋Δ
    w ඞཁʹͳΔ࣌ʹ͸େମϓϩδΣΫτ
    ͷίʔυྔ͕Ͱ͔͍
    ϞϊϦγοΫͳ
    ϓϩδΣΫτ
    ϓϩδΣΫτ
    ϑϨʔϜ
    ϫʔΫ ϑϨʔϜ
    ϫʔΫ
    ϑϨʔϜ
    ϫʔΫ
    ϑϨʔϜ
    ϫʔΫ ϑϨʔϜ
    ϫʔΫ

    View Slide

  21. എܠͱͳΔ՝୊
    w طଘίʔυΛ'8Խ͢Δ࣌ʹ*'ެ։
    ͢Δඞཁ͕͋Δ
    w ඞཁʹͳΔ࣌ʹ͸େମϓϩδΣΫτ
    ͷίʔυྔ͕Ͱ͔͘ͳ͍ͬͯͯᶅͷ
    ࡞ۀ͕େม
    ᶃϑϨʔϜϫʔΫͷശΛ࡞੒
    ᶅඞཁͳ*'Λެ։
    ᶄ4XJGUϑΝΠϧͷλʔήοτมߋ
    ᶆϏϧυΛ௨͢

    View Slide

  22. "DDFTT-FWFM$IBOHFSGPS9DPEF
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w JOUFSOBMΛҰׅͰQVCMJDʹม׵Ͱ
    ͖Δ
    IUUQTBQQTBQQMFDPNKQBQQBDDFTTMFWFMDIBOHFSGPSYDPEFJE

    View Slide

  23. "DDFTT-FWFM$IBOHFSGPS9DPEF
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w JOUFSOBMΛҰׅͰQVCMJDʹม׵Ͱ
    ͖Δ
    IUUQTBQQTBQQMFDPNKQBQQBDDFTTMFWFMDIBOHFSGPSYDPEFJE

    View Slide

  24. "DDFTT-FWFM$IBOHFSGPS9DPEF
    w 4XJGUͷϦϑΝΫλϦϯάπʔϧ
    w JOUFSOBMΛҰׅͰQVCMJDʹม׵Ͱ
    ͖Δ
    IUUQTBQQTBQQMFDPNKQBQQBDDFTTMFWFMDIBOHFSGPSYDPEFJE

    View Slide

  25. 9DPEFͷ&EJUPSϝχϡʔ͔ΒJOUFSOBMΛQVCMJD΁Ұׅมߋ

    View Slide

  26. 9DPEFͷ&EJUPSϝχϡʔ͔ΒJOUFSOBMΛQVCMJD΁Ұׅมߋ

    View Slide

  27. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  28. ߏ੒
    w NBD04BQQ
    w 9DPEF4PVSDF&EJUPS&YUFOTJPO
    w 4XJGU4ZOUBY
    NBD04"QQ
    MJC@*OUFSOBM4XJGU4ZOUBY1BSTFSEZMJC
    4XJGU4ZOUBY
    4PVSDF&EJUPS
    &YUFOTJPO
    8SBQQFS$MBTT

    View Slide

  29. ߏ੒
    NBD04BQQ
    NBD04"QQ
    MJC@*OUFSOBM4XJGU4ZOUBY1BSTFSEZMJC
    4XJGU4ZOUBY
    4PVSDF&EJUPS
    &YUFOTJPO
    8SBQQFS$MBTT
    w ͍ΘΏΔҰൠతͳNBD04ΞϓϦ
    w "QQ,JUPS4XJGU6*
    w "QQ4UPSFʹެ։Մೳ

    View Slide

  30. ߏ੒
    4PVSDF&EJUPS&YUFOTJPO
    w NBD04ΞϓϦͷ"QQ&YUFOTJPOͷ
    Ұͭ
    w 9DPEF಺ͷϑΝΠϧΛೖྗͱͯ͠ɺ
    ॻ͖׵͑Λߦ͑Δ
    NBD04"QQ
    MJC@*OUFSOBM4XJGU4ZOUBY1BSTFSEZMJC
    4XJGU4ZOUBY
    4PVSDF&EJUPS
    &YUFOTJPO
    8SBQQFS$MBTT

    View Slide

  31. ߏ੒
    4XJGU4ZOUBY
    w 4XJGUͷ4XJGUʹΑΔύʔαʔ
    w IUUQTHJUIVCDPNBQQMF
    TXJGUTZOUBY
    w NBD04"QQͱ&YUFOTJPOͰڞ༗͢
    ΔϥούʔΛ࡞Δ
    w NBD಺ͷEZMJCΛΞϓϦʹ૊ΈࠐΉ
    ඞཁ͕͋Δ
    NBD04"QQ
    MJC@*OUFSOBM4XJGU4ZOUBY1BSTFSEZMJC
    4XJGU4ZOUBY
    4PVSDF&EJUPS
    &YUFOTJPO
    8SBQQFS$MBTT

    View Slide

  32. σϞ

    View Slide

  33. %*)FMQFSGPS4XJGUͷॲཧͷྲྀΕ
    9DPEF
    NBD04BQQ 8SBQQFS
    'SBNFXPSL
    4PVSDF&EJUPS
    &YUFOTJPO 4XJGU4ZOUBY
    ᶃTXJGUϑΝΠϧΛ
    &YUFOTJPOʹ౉͢
    ᶄΧʔιϧબ୒ൣғΛ4USJOHͱͯͭ͠ͳ͍Ͱ
    4XJGU4ZOUBYͷܕͱͯ͠ॲཧ
    ᶅύʔε݁Ռ͔ΒϓϩτίϧΛੜ੒ͯ͠
    4USJOHʹͯ͠ฦ͢
    ᶆಉ͡TXJGUϑΝΠϧΛ্ॻ͖

    View Slide

  34. 9DPEF্Ͱͷ࢖͍ํ

    View Slide

  35. ࡞ͬͨNBD04ΞϓϦʹؔͯ͠
    w MJC@*OUFSOBM4XJGU4ZOUBY1BSTFS
    Λ૊ΈࠐΜͩঢ়ଶͰ"QQ4UPSF΁
    ެ։Մೳ
    w &YUFOTJPOΛ࢖͍ͬͯΔͱ৹ࠪͰ
    αϯϓϧϓϩδΣΫτ΋ཁٻ͞Ε
    ͨ
    IUUQTBQQTBQQMFDPNKQBQQEJIFMQFSGPSTXJGUJE

    View Slide

  36. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  37. ίʔυࣗಈੜ੒ͷ୅දతͳख๏ͱͷൺֱ
    ํ๏ ಛ௕ σϝϦοτ
    4PVSDF&EJUPS&YUFOTJPO
    w ίʔυฤू͠ͳ͕Β࣮ߦՄೳ
    w NBD04BQQͱͯ͠഑෍
    w 4XJGUϑΝΠϧ୯ମͷΈೖྗͰ͖Δ
    9DPEF5FNQMBUF
    w ੩తϑΝΠϧΛ༻ҙ͢Δ͚ͩͰखܰ
    w ϑΝΠϧ࡞੒࣌ʹ࢖͑Δ
    w ίʔυʹΑΔෳࡶͳग़͠෼͚͕೉͍͠
    3VO4DSJQUFUD
    w Ϗϧυ࣌ʹࣗಈੜ੒
    w ԿͰ΋ΠϯϓοτɾΞ΢τϓοτͰ͖Δ
    w ౎౓ϏϧυΛ௨͢ඞཁ͕͋Δ

    View Slide

  38. w ֓ཁ
    w ࣄྫ%*)FMQFSGPS4XJGU
    w ࣄྫ"DDFTT-FWFM$IBOHFSGPS9DPEF
    w ٕज़ղઆ
    w ଞͷख๏ͱͷൺֱ
    w ·ͱΊ

    View Slide

  39. ࠓ೔ͷ࿩
    w ίʔυࣗಈੜ੒ख๏ͱͯ͠4PVSDF&EJUPS&YUFOTJPO4XJGU4ZOUBYΛఏҊ
    w ͜ͷख๏ʹΑΔͭͷϢʔεέʔεΛ঺հ
    w ଞͷख๏ͱൺֱͯ͠ఏҊ಺༰ͷϝϦοτɾσϝϦοτΛղઆ

    View Slide

  40. 4PVSDF&EJUPS&YUFOTJPO4XJGU4ZOUBY
    w ίʔυΛॻ͍͍ͯΔ࠷தʹɺͦΕΛ࢖ͬͯίʔυࣗಈੜ੒͕Ͱ͖Δ
    w ύʔαʔ΋༻ҙ͞Ε͍ͯΔͷͰɺࣗ෼ͷཁ݅ͷͨΊʹखܰʹಋೖͰ͖Δ
    w ίʔυࣗಈੜ੒ͷखஈͷҰͭͱͯ͠৭ʑ࢖͑ͦ͏

    View Slide

  41. ϦϑΝϨϯε
    w$SFBUJOHB4PVSDF&EJUPS&YUFOTJPO
    w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOYDPEFLJUDSFBUJOH@B@TPVSDF@FEJUPS@FYUFOTJPO
    wBQQMFTXJGUTZOUBY
    w IUUQTHJUIVCDPNBQQMFTXJGUTZOUBY
    wLB[VIJSP%*)FMQFS'PS4XJGU
    w IUUQTHJUIVCDPNLB[VIJSP%*)FMQFS'PS4XJGU
    wLB[VIJSP"DDFTT-FWFM$IBOHFS
    w IUUQTHJUIVCDPNLB[VIJSP"DDFTT-FWFM$IBOHFS

    View Slide