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

VimmerのWebエンジニアがTypeScriptでNeovimプラグインを作った話 / 2023-06-21

VimmerのWebエンジニアがTypeScriptでNeovimプラグインを作った話 / 2023-06-21

Takuma Yamamoto

June 21, 2023
Tweet

More Decks by Takuma Yamamoto

Other Decks in Programming

Transcript

  1. Vimmer ͷ Web ΤϯδχΞ͕
    TypeScript Ͱ Neovim ϓϥάΠϯΛ࡞ͬͨ࿩
    Takuma Yamamoto

    View full-size slide

  2. BIOGRAPHY
    ͋ͳͨ͸୭Ͱ͔͢ʁ
    5BLVNB:BNBNPUP
    8PSLBUTOBQNF
    'SPN.JZB[BLJ
    ٕज़ελοΫ
    4/4
    झຯ
    ɾόοΫΤϯυ3VCZPO3BJMT
    ɾϑϩϯτΤϯυ3FBDU
    ɾΞϓϦ3FBDU/BUJWF
    ɾɹɹIUUQTHJUIVCDPNUBNBHPLFSBO
    ɾɹɹIUUQTUXJUUFSDPNZBNBUBLV
    ɾɹɹIUUQTRJJUBDPNUBNBHPLFSBO
    ɾɹɹIUUQT[FOOEFWUBNBHPLFSBO
    ɾ͓΍ͭ
    ɾα΢φ
    ɾΞχϝ

    View full-size slide

  3. INTRODUCTION
    ͓΍ͭͱɺੈքΛ໘ന͘ɻ
    ͓΍ͭͷఆظศ ௚Ӧళ ਗ਼੅നՏ

    TOBQNF͸ɺϫΫϫΫ͢ΔΑ͏ͳ͓΍ͭࣄۀΛల։͍ͯ͠·͢ɻ

    View full-size slide

  4. INTRODUCTION
    ੈք؍ᷓΕΔϚΠϖʔδ͸ TypeScript Ͱ࡞ΒΕ͍ͯ·͢
    Ϣʔβʔͱͷ઀఺Ͱ͋ΔϚΠϖʔδͰ͸ɺϫΫϫΫ͢ΔΑ͏ͳσβΠϯΛ৺͕͚͍ͯ·͢ɻ

    ͜ΕΒ͸શͯ5ZQF4DSJQU͕ϕʔεͱͳͬͨ3FBDUͰ։ൃ͞Ε͍ͯ·͢ɻ

    View full-size slide

  5. TODAY’s TOPIC
    TypeScript Ͱ Neovim ϓϥάΠϯΛ࡞ͬͨܦݧΛ঺հ
    /FPWJNΛ࢖͍࢝Ίͯ೥͕ܦͪɺ࠷ۙ%FOPQTͱग़ձ͍·ͨ͠ɻ

    ࢖͍׳ΕͨݴޠͰ͋Δ5ZQF4DSJQUͰɺϓϥάΠϯΛ։ൃ͢Δ͜ͱ͕ՄೳʹͳΓ·ͨ͠ɻ

    View full-size slide

  6. TODAY’s GOAL
    Neovim ϓϥάΠϯ։ൃͷ͖͔͚ͬʹ
    ։ൃࣄྫΛ஌Δ ։ൃ΁ͷ͖͔͚ͬ
    5ZQF4DSJQUΛ࢖ͬͨ/FPWJN
    ϓϥάΠϯͷ։ൃࣄྫʹ͍ͭ
    ͯɺ঺հ͠·͢ɻ
    ࣗ෼޷ΈͷϓϥάΠϯΛ։ൃ
    ͯ͠ΈΑ͏ͱɺߟ͑Δ͖͔ͬ
    ͚ʹͳΕ͹خ͍͠Ͱ͢ɻ

    View full-size slide

  7. What is Deno?
    ͦ΋ͦ΋ Deno ͱ͸ԿͰ͔͢ʁ

    View full-size slide

  8. INTRODUCTION
    JavaScript TypeScript runtime
    %FOPJTB+BWB4DSJQU 5ZQF4DSJQU BOE
    8FC"TTFNCMZSVOUJNFXJUITFDVSFEFGBVMUT
    BOEBHSFBUEFWFMPQFSFYQFSJFODF
    %FOPͱ͸ɺ%FOP-BOE*OD͕։ൃ͍ͯ͠Δϓ
    ϩμΫτͰ͋Γɺ҆શ͔ͭ༏Εͨ։ൃऀମݧΛ
    උ͑ͨ+BWB4DSJQU΍5ZQF4DSJQUϥϯλΠϜϞ
    δϡʔϧͰ͢ɻ
    Ҿ༻ݩIUUQTEFOPDPNSVOUJNF
    EFOPMBOEEFOP
    "NPEFSOSVOUJNFGPS+BWB4DSJQUBOE5ZQF4DSJQU
    3VTU

    View full-size slide

  9. What is Denops?
    ͦ΋ͦ΋ Denops ͱ͸ԿͰ͔͢ʁ

    View full-size slide

  10. INTRODUCTION
    %FOPQTJTBOFDPTZTUFNPG7JN/FPWJN
    XIJDIBMMPXTEFWFMPQFSTUPXSJUFQMVHJOTJO
    %FOP
    %FOPQTͱ͸WJNKQʹΑͬͯ։ൃ͞Ε͍ͯΔϓ
    ϩμΫτͰ͢ɻ7JN/FPWJNͷΤίγεςϜͰ
    ͋Γɺ։ൃऀ͸+BWB4DSJQU΍5ZQF4DSJQUΛ
    ϕʔεʹ7JN/FPWJNϓϥάΠϯΛ࡞Ε·͢ɻ
    Ҿ༻ݩIUUQTHJUIVCDPNWJNEFOPQTEFOPQTWJN
    Ecosystem of Vim/Neovim
    WJNEFOPQTEFOPQTWJN
    "OFDPTZTUFNPG7JN/FPWJNXIJDIBMMPXT
    EFWFMPQFSTUPXSJUFDSPTTQMBUGPSNQMVHJOTJO%FOP
    7JN4DSJQU

    View full-size slide

  11. Why use Denops to develop plugins?
    ͳͥ Denops Λ࢖ͬͯϓϥάΠϯΛ࡞ΔͷͰ͔͢ʁ

    View full-size slide

  12. BACKGROUND
    Vim/Neovim ʹ͓͚Δؔ܎ੑͷม๴ظ
    7JNଆ͸7JNTDSJQUͷܽ఺Λิͬͨ৽͍͠ݴޠͰ͋Δ7JNTDSJQUͷ։ൃΛਐΊ͓ͯΓ/FPWJNଆ
    ͸7JNTDSJQUΛ׬શʹࣺͯͯ-VBʹҠߦ͠Α͏ͱ͍ͯ͠·͢ɻ
    ݱࡏ7JNͱ/FPWJNͷؔ܎͸େ͖ͳม๴ظʹ͍ΔΑ͏Ͱ͢ɻ
    Ҿ༻ݩIUUQT[FOOEFWMBNCEBMJTVFBSUJDMFTCBGCBCDFD
    v9.0

    View full-size slide

  13. BACKGROUND
    Vim/Neovim ͷ྆ํͰಈ࡞͢ΔϓϥάΠϯ։ൃͷ೉͠͞
    ͜ͷΑ͏ʹ7JN/FPWJNͷဃ཭͕େ͖͘޿͕͓ͬͯΓɺ૒ํͰಈ࡞͢ΔϓϥάΠϯΛॻ͘ͷ͕ඇৗʹ
    ೉͘͠ͳ͖͍ͬͯͯΔঢ়ଶͰ͢ɻ
    ͦ͏͍ͬͨഎܠ͔Β7JN/FPWJNͷ྆ํͰಈ࡞͢ΔϓϥάΠϯΛ࡞Δ͜ͱ͕೉͘͠ͳ͍ͬͯ·͢ɻ
    Ҿ༻ݩIUUQT[FOOEFWMBNCEBMJTVFBSUJDMFTCBGCBCDFD
    ϓϥάΠϯ

    View full-size slide

  14. BACKGROUND
    Vim/Neovim ͷ֎ʹಠࣗΤίγεςϜΛల։
    ͦΜͳதDPDOWJN͸ϥϯλΠϜʹ/PEFKTΛ࠾༻͠7JN/FPWJNͷϓϥάΠϯػߏͷ֎Ͱಠࣗͷ
    ΤίγεςϜΛల։͢Δ͜ͱͰ7JN/FPWJN૒ํΛαϙʔτ͢Δ͜ͱΛՄೳʹ͍ͯ͠·͢ɻ
    DPDOWJN͸ϥϯλΠϜͱͯ͠/PEFKTΛ࠾༻͠ɺ7JN/FPWJNͷ֎ʹಠࣗΤίγεςϜΛల։ɻ

    ͦͷ࢓૊ΈΛࢀߟʹ͢Δ͜ͱͰɺ7JN/FPWJNͷ྆ํͰػೳ͢ΔϓϥάΠϯ։ൃΛՄೳͱ͠·ͨ͠ɻ
    Ҿ༻ݩIUUQT[FOOEFWMBNCEBMJTVFBSUJDMFTCBGCBCDFD

    View full-size slide

  15. BACKGROUND
    ։ൃͷ͠΍͢͞Λߟ͑ɺϥϯλΠϜͱͯ͠ Deno Λ࠾༻
    ͦͷͨΊґଘ؅ཧΛ಺แ͠ɺόΠφϦҰ͕ͭ͋Ε͹ಈ࡞͢Δ%FOPΛϕʔεʹ͢Ε͹7JN/FPWJN
    ૒ํͰಈ࡞͠ɺ։ൃ΋؆୯ͳΤίγεςϜ͕Ͱ͖ΔͷͰ͸ͳ͍͔ʁͱࢥ͍։ൃʹ౿Έ੾Γ·ͨ͠ɻ
    /PEFKT͸ɺґଘ؅ཧ͕ෳࡶͰɺϏϧυ΋ඞཁͳͨΊɺΤίγεςϜͱͯ͠࢖͍উख͕ྑ͘ͳͦ͞͏ɻ

    όΠφϦͻͱͭͰಈ͘%FOPΛϕʔεʹ͢Ε͹ɺ։ൃ΋͠΍ͦ͢͏ͱ͍͏ߟ͑Ͱ࠾༻ͨͦ͠͏Ͱ͢ɻ
    Ҿ༻ݩIUUQT[FOOEFWMBNCEBMJTVFBSUJDMFTCBGCBCDFD

    View full-size slide

  16. BACKGROUND
    Web ΤϯδχΞʹ΋ೃછΈͷ͋ΔݴޠͰ։ൃͰ͖Δ
    %FOPΛར༻͢Δ͜ͱͰɺ8FCΤϯδχΞͷࢲʹͱͬͯ΋ೃછΈͷ͋Δ+BWB4DSJQU΍5ZQF4DSJQUΛ
    ࢖༻ͯ͠7JN/FPWJNϓϥάΠϯΛ։ൃ͢Δ͜ͱ͕Ͱ͖Δͷ͸ϝϦοτͩͱײ͍ͯ͡·͢ɻ
    ·ͨ੄໺͕޿͕Δ͜ͱͰɺ7JN/FPWJNϓϥάΠϯͷ։ൃ͕׆ൃʹͳ͍ͬͯ͘͜ͱ΋ɺ7JNNFSͷ
    ΤϯδχΞʹͱͬͯେ͖ͳϝϦοτͩͱײ͍ͯ͡·͢ɻ

    View full-size slide

  17. How to develop plugins with Denops?
    Denops ͰͲͷΑ͏ʹϓϥάΠϯΛ։ൃ͢Δͷ͔ʁ

    View full-size slide

  18. TUTORIAL
    Docker ͷ४උ
    ࢀরݩIUUQTXXXEPDLFSDPNQSPEVDUTEPDLFSEFTLUPQ

    View full-size slide

  19. TUTORIAL
    Neovim ͷΠϯετʔϧ
    Ҿ༻ݩIUUQTHJUIVCDPNUBNBHPLFSBO%PDLFS
    fi
    MFTCMPCNBJOCBTF%PDLFS
    fi
    MF
    ˞"QQMF$IJQ౥ࡌͷ.BD#PPLΛ࢖༻͢Δ͜ͱΛલఏͱ͍ͯ͠·͢

    View full-size slide

  20. TUTORIAL
    Deno ͷΠϯετʔϧ
    Ҿ༻ݩIUUQTHJUIVCDPNUBNBHPLFSBO%PDLFS
    fi
    MFTCMPCNBJOCBTF%PDLFS
    fi
    MF
    ˞"QQMF$IJQ౥ࡌͷ.BD#PPLΛ࢖༻͢Δ͜ͱΛલఏͱ͍ͯ͠·͢

    View full-size slide

  21. TUTORIAL
    Denops ͷΠϯετʔϧ
    Ҿ༻ݩIUUQTHJUIVCDPNUBNBHPLFSBO%PDLFS
    fi
    MFTCMPCNBJOCBTF%PDLFS
    fi
    MF
    Ҿ༻ݩIUUQTHJUIVCDPNUBNBHPLFSBOEPU
    fi
    MFTCMPCCBTFMPDBMTIBSFEFJOUPNMHFOFSBMUPNM
    ˞"QQMF$IJQ౥ࡌͷ.BD#PPLΛ࢖༻͢Δ͜ͱΛલఏͱ͍ͯ͠·͢
    ˞ύοέʔδϚωʔδϟʔͱͯ͠EFJOWJNΛ࢖༻͍ͯ͠·͢

    View full-size slide

  22. TUTORIAL
    runtimepath ͷࢦఆͱσόοάϞʔυͷ༗ޮԽ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO
    WJNSD͋Δ͍͸JOJUWJNʹҎԼͷઃఆΛ௥Ճ͠·͢ɻ

    View full-size slide

  23. TUTORIAL
    ϓϥάΠϯσΟϨΫτϦߏ଄ͷ࡞੒
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO
    ҎԼͷίϚϯυΛ࣮ߦ͠ɺඞཁ࠷௿ݶͷσΟϨΫτϦߏ଄Λ࡞੒͠·͢ɻ

    View full-size slide

  24. TUTORIAL
    main ؔ਺ͷ࡞੒
    NBJOUTʹҎԼͷΑ͏ͳNBJOؔ਺Λ࡞੒͠·͢ɻ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO

    View full-size slide

  25. TUTORIAL
    Neovim Λىಈ͠ main ؔ਺Λ࣮ߦ͢Δ
    ਖ਼࣮͘͠૷Ͱ͖͍ͯΕ͹ɺ)FMMP%FOPQTͱදࣔ͞ΕΔ͸ͣͰ͢ɻ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO

    View full-size slide

  26. TUTORIAL
    API ͷ௥Ճ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO
    NBJOؔ਺ʹಠࣗFDIPͱ͍͏"1*Λ৽نʹ௥Ճ͠·͢ɻ

    View full-size slide

  27. TUTORIAL
    API ͷݺͼग़͠
    /FPWJNΛىಈͨ͠ঢ়ଶͰɺҎԼͷίϚϯυΛ࣮ߦ͠·͢ɻ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO
    ୈҰҾ਺ʹೖΔ஋͸ɺEFOPQTσΟϨΫτϦ௚Լʹ͋ΓɺNBJOUTΛؚΉσΟϨΫτϦ໊Ͱ͢ɻ

    View full-size slide

  28. TUTORIAL
    API ͷ࣮ߦ݁Ռ
    ਖ਼࣮͘͠૷Ͱ͖͍ͯΕ͹ɺ)FMMP%FOPQTͱදࣔ͞ΕΔ͸ͣͰ͢ɻ
    Ҿ༻ݩIUUQTWJNEFOPQTHJUIVCJPEFOPQTEPDVNFOUBUJPO

    View full-size slide

  29. What kind of plugins can be developed?
    ΑΓ۩ମతʹͲ͏͍ͬͨϓϥάΠϯ͕࡞ΕΔͷ͔ʁ

    View full-size slide

  30. INTRODUCTION
    4IPVHPࢯ͸EEVWJNͱ͍͏6*GSBNXPSLΛ։
    ൃ͍ͯ͠·͢ɻ͜ͷϓϥάΠϯʹ͸%FOPQT͕
    ར༻͞Ε͍ͯ·͢ɻ

    ֦ுੑʹ༏Ε͓ͯΓɺ֦ுϓϥάΠϯΛ։ൃ͠
    ΍͍͢ͱ͍͏ಛ௃͕͋Γ·͢ɻ
    ddu.vim: UI framework plugin
    4IPVHPEEVWJN
    %BSLEFOPQPXFSFE6*GSBNFXPSLGPSOFPWJN7JN
    5ZQF4DSJQU

    View full-size slide

  31. INTRODUCTION
    ui, source,
    fi
    lter, kind ͱ͍͏֓೦
    ui source
    fi
    lter kind
    WJFXΛ੍ޚ͢Δ JUFNΛੜ੒͢Δ
    JUFNΛߜΓࠐΈɾιʔτɾՃ޻͢Δ JUFNʹର࣮͠ߦ͢ΔΞΫγϣϯ
    ֦ுϓϥάΠϯྫ
    EEVVJ
    f
    ֦ுϓϥάΠϯྫ
    EEVTPVSDF
    fi
    MF@SFD
    ֦ுϓϥάΠϯྫ
    EEV
    fi
    MUFSNBUDIFS@TVCTUSJOH ֦ுϓϥάΠϯྫ
    EEVLJOE
    fi
    MF

    View full-size slide

  32. INTRODUCTION
    4ͭͷ֓೦Λ૊Έ߹ΘͤɺFuzzy Finder Λ࣮ݱͰ͖Δ

    View full-size slide

  33. INTRODUCTION
    ddu.vim ʹΑΔ Fuzzy Finder ͷߏ੒ཁૉΛՄࢹԽ
    EEVVJ
    ff
    WJFXͷ੍ޚ

    ˞
    fl
    PBUJOHΛࢦఆ
    EEVTPVSDF
    fi
    MF@SFD
    ࠶ؼతʹϑΝΠϧΛऔಘ

    EEV
    fi
    MUFSNBUDIFS@TVCTUSJOH
    ೖྗͨ͠஋ͰߜΓࠐΈ

    EEVLJOE
    fi
    MF બ୒࣌ʹ։͘

    ˞PQFOΛࢦఆ
    ˞େ·͔ͳઆ໌ͳͷͰɺৄ͘͠͸;FOO΍ιʔείʔυΛ͓ಡΈ͍ͩ͘͞ɻ

    View full-size slide

  34. INTRODUCTION
    ૊Έ߹ΘͤΛม͑Δ͜ͱͰ Filer ΋࣮ݱͰ͖Δ

    View full-size slide

  35. INTRODUCTION
    ddu.vim ʹΑΔ Filer ͷߏ੒ཁૉΛՄࢹԽ
    ˞େ·͔ͳઆ໌ͳͷͰɺৄ͘͠͸;FOO΍ιʔείʔυΛ͓ಡΈ͍ͩ͘͞ɻ
    EEVVJ
    fi
    MFS WJFXͷ੍ޚ

    EEVTPVSDF
    fi
    MF ಛఆQBUI಺ͷϑΝΠϧɾσΟϨΫτϦΛऔಘ

    EEVLJOE
    fi
    MF બ୒࣌ʹ։͘

    ˞PQFOΛࢦఆ
    EEVDPMVNO
    fi
    MFOBNF JUFNͷݟͤํΛ੍ޚ

    ˞ϑΝΠϧͱσΟϨΫτϦͷݟͤํΛม͑ͨΓ
    ˞σΟϨΫτϦͷ։ดͰݟͤํΛม͑ͨΓ

    View full-size slide

  36. MOTIVATION
    Filer ͰΞΠίϯͱҰॹʹϑΝΠϧ໊Λද͍ࣔͨ͠
    'JMFSͰදࣔ͞ΕΔϑΝΠϧɾσΟϨΫτϦʹɺΞΠίϯ΋ఴ͑ͯ΋ͬͱ՚΍͔ʹ͍ͨ͠ɻ

    ͦ͏͍ͬͨϞνϕʔγϣϯ͔Β֦ுϓϥάΠϯͷ։ൃΛߦ͍·ͨ͠ɻ
    ΞΠίϯ΋ද͍ࣔͨ͠ʂ

    View full-size slide

  37. How did develop my plugins?
    ͲͷΑ͏ʹ֦ுϓϥάΠϯΛ࡞͔ͬͨʁ

    View full-size slide

  38. EXAMPLE
    4IPVHPࢯ͸EEVVJ
    fi
    MFS޲͚ʹΧϥϜ༻ͷ֦ு
    ϓϥάΠϯʮEEVDPMVNO
    fi
    MFOBNFʯΛఏڙ͠
    ͍ͯ·͢ɻ

    ͜ͷϓϥάΠϯΛࢀߟʹͯ͠ɺΞΠίϯͳͲ΋
    ҰॹʹදࣔͰ͖ΔΑ͏վม͠·ͨ͠ɻ
    طଘϓϥάΠϯΛࢀߟʹ
    4IPVHPEEVDPMVNO
    fi
    MFOBNF
    'JMFOBNFDPMVNOGPSEEVWJN
    5ZQF4DSJQU

    View full-size slide

  39. σΟϨΫτϦͷσϑΥϧτΞΠίϯΛมߋ
    EXAMPLE
    EEVDPMVNO
    fi
    MFOBNF EEVDPMVNOEFWJDPO@
    fi
    MFOBNF
    #BTF$PMVNOΫϥεΛܧঝ͢Δ$PMVNOΫϥε಺ʹQBSBNT
    ΛPWFSSJEF͍ͯ͠ΔՕॴ͕͋Γ·͢ɻ

    ͦ͜Ͱ஋Λࢦఆ͢Δ͜ͱͰɺσϑΥϧτ஋Λઃఆ͢Δ͜ͱ͕Ͱ͖·͢ɻ

    View full-size slide

  40. -/+ Ͱ͸ͳ͘ɺ։ดσΟϨΫτϦͷΞΠίϯ͕දࣔ͞ΕΔ
    EXAMPLE
    ࢦఆͨ͠ʮ։ดσΟϨΫτϦʯͷΞΠίϯͰදࣔ͞ΕΔ͜ͱ͕Ͱ͖·ͨ͠ɻ

    View full-size slide

  41. ϑΝΠϧλΠϓʹରԠ͢ΔΞΠίϯΛද͍ࣔͨ͠
    EXAMPLE
    ϑΝΠϧλΠϓʹରԠ͢ΔΞΠίϯΛฦؔ͢਺Λ࡞੒͠·ͨ͠ɻ

    ͦͷΞΠίϯΛ࠷ऴతʹදࣔ͢ΔςΩετʹ࿈݁͢ΔΑ͏ͳ࣮૷ʹ͍ͯ͠·͢ɻ
    ࠷ऴతʹ͜͜ͷ஋͕දࣔ͞ΕΔ

    View full-size slide

  42. EXAMPLE
    ࣗ෼͕࢖༻͍ͯ͠ΔଞͷϓϥάΠϯͰɺOWJN
    XFCEFWJDPOTΛ࢖༻͍ͯ͠·ͨ͠ɻ

    ࢖༻͢ΔΞΠίϯΛ౷Ұ͔ͨͬͨ͠ͷͰɺΞΠ
    ίϯσʔλ͸OWJNXFCEFWJDPOTΛࢀߟʹ͠·
    ͨ͠ɻ
    nvim-web-devicons Λࢀߟʹ
    OWJNUSFFOWJNXFCEFWJDPOT
    MVBAGPSLAPGWJNXFCEFWJDPOTGPSOFPWJN
    -VB
    ˞͜ͷϓϥάΠϯ͸WJNEFWJDPOTΛGPSLͯ͠࡞ΒΕ͍ͯΔΑ͏Ͱ͢

    View full-size slide

  43. ϑΝΠϧλΠϓ͝ͱʹΞΠίϯ͕දࣔ͞ΕΔ
    EXAMPLE
    ϑΝΠϧλΠϓ͝ͱʹΞΠίϯ͕දࣔ͞ΕΔΑ͏ʹͳΓ·ͨ͠ɻ

    View full-size slide

  44. Πϯσϯτ͕ڱ͘ײͯ͡ݟͮΒ͔ͬͨͷͰ޿͍ͨ͘͠
    EXAMPLE
    SFQFBUؔ਺ͷҾ਺ΛࢦఆͰ͖ΔͱΑͦ͞͏
    ओ؍తͳ͜ͱͳͷͰ͕͢ɺࣗ෼ʹ͸Πϯσϯτ͕ڱ͘ײ͡ɺݟͮΒ͍ͳͱࢥ͍ͬͯ·ͨ͠ɻ

    ਓʹΑͬͯݟ΍͢͞͸ҟͳΔͷͰɺϢʔβʔ͕ࢦఆͰ͖ΔΑ͏ʹ͠Α͏ͱߟ͑·ͨ͠ɻ
    EEVDPMVNO
    fi
    MFOBNF
    ϑΝΠϧͷ֊૚෼͚ۭͩനΛ࿈͍݁ͯ͠Δ

    View full-size slide

  45. Ϣʔβʔࢦఆͷ஋͸ Params ͔ΒऔಘͰ͖Δ
    EXAMPLE
    EEVʹઃఆͨ͠DPMVNO1BSBNTͷ஋͸ɺ$PMVNOΫϥεͷ1BSBNTʹ౉͞Ε·͢ɻ

    ͜ͷ࢓૊ΈΛར༻ͯ͠ɺΠϯσϯτͻͱͭ෼ͷαΠζΛϢʔβʔ͕ࢦఆͰ͖ΔΑ͏ʹ͠·ͨ͠ɻ
    TFUUJOHT
    EEVDPMVNOEFWJDPO@
    fi
    MFOBNF

    View full-size slide

  46. ΠϯσϯτͷαΠζΛϢʔβʔ͕ௐ੔Ͱ͖Δ
    EXAMPLE
    JOEFOUBUJPO8JEUI σϑΥϧτ
    JOEFOUBUJPO8JEUI
    ϢʔβʔࢦఆͷJOEFOUBUJPO8JEUI஋ͰɺϑΝΠϧ໊ͷલʹ͋ΔۭനΛௐ੔Ͱ͖ΔΑ͏ʹ͠·ͨ͠ɻ

    View full-size slide

  47. ϑΝΠϧͷΞΠίϯͷ৭ΛҰׅͰࢦఆ͍ͨ͠ਓ͍Δ͔΋
    EXAMPLE
    ͜Ε΋ઌ΄ͲͷDPMVNO1BSBNTͰϢʔβʔ͕஋ΛࢦఆͰ͖Δ࢓૊ΈΛར༻͠·ͨ͠ɻ

    ΞΠίϯʢσΟϨΫτϦΛআ͘ʣͷ৭Λࢦఆͨ͠৔߹ɺҰׅͰมߋͰ͖ΔΑ͏ʹ͠·ͨ͠ɻ
    TFUUJOHT
    EEVDPMVNOEFWJDPO@
    fi
    MFOBNF

    View full-size slide

  48. ϑΝΠϧͷΞΠίϯͷ৭ΛҰׅͰมߋͰ͖Δ
    EXAMPLE
    fi
    MF*DPO$PMPSOVMM σϑΥϧτ

    Ϣʔβʔࢦఆͷ
    fi
    MF*DPO$PMPS஋ͰɺϑΝΠϧΞΠίϯͷ৭ΛҰׅͰมߋͰ͖ΔΑ͏ʹ͠·ͨ͠ɻ
    fi
    MF*DPO$PMPSl%""%z

    View full-size slide

  49. Summary
    Denops Λ׆༻ͨ͠ϓϥάΠϯ։ൃΛ·ͱΊΔͱ…

    View full-size slide

  50. SUMMARY
    Denops ͰϓϥάΠϯΛ։ൃͯ͠Έͯ…
    ɾ7JN/FPWJN྆ํͰಈ࡞͢ΔϓϥάΠϯΛ։ൃ͢Δ͜ͱ͕Ͱ͖Δɻ

    ɾ8FCΤϯδχΞͰ΋࢖͍׳Εͨ5ZQF4DSJQUͰϓϥάΠϯ։ൃ͕Ͱ͖Δɻ

    ɾ੄໺͕޿͕Δ͜ͱͰɺ7JN/FPWJNϓϥάΠϯ։ൃ͕׆ൃʹͳΔɻ

    ɾϓϥάΠϯ͕ॆ࣮ͯ͠ɺΑΓΑ͍։ൃऀମݧΛ໨ࢦͤΔྑ͍॥؀͕ੜ·ΕΔɻ

    ɾ࠷ॳ͸ϑϨʔϜϫʔΫΛར༻͢Δ͜ͱͰɺগͳ͍ίετͰ։ൃΠϝʔδ͕༙͘ɻ

    View full-size slide

  51. Recruitment
    ΤϯδχΞืूதͰ͢ʂ

    View full-size slide

  52. RECRUITMENT
    We are Hiring!
    εφοΫϛʔͰ͸ɺʮ͓΍ͭͱɺੈքΛ໘ന
    ͘ʯ͍ͯ͘͠ɺͦΜͳ׆ಈΛ࢓ࣄͱͯ͠औΓ૊
    Έ͍ͨΤϯδχΞΛืू͍ͯ͠·͢ɻ
    IUUQTUFBNTOBRNFDPN
    εφοΫϛʔ࠾༻

    View full-size slide