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

どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門

H.Saki
June 02, 2023

 どうしてもcgoから逃げられなくなったあなたに知ってほしいcgoの使い方入門

23/6/2 Go Conference 2023にて発表
https://gocon.jp/2023/sessions/B7-L/

H.Saki

June 02, 2023
Tweet

More Decks by H.Saki

Other Decks in Technology

Transcript

  1. どうしてもcgoから逃げられなくなったあなたに知ってほしい
    cgoの使い方入門
    さき(H.Saki)
    @saki_engineer
    Go Conference 2023, JUN 2 2023

    View Slide

  2. 自己紹介
    About Me
    l ͖͞ )4BLJ

    ○ ຊۀͰ͸"84Λओઓ৔ʹͨ͠
    Ϋϥ΢υΠϯϑϥ԰͞ΜΛ͍ͯ͠·͢
    ○ 5XJUUFS!TBLJ@FOHJOFFS
    l աڈͷ੒Ռ෺
    FUDʜ
    ;FOO
    ٕज़ॻయ ݄߸ʙ
    ࿈ࡌதʂʂʂ

    View Slide

  3. 本日のテーマ
    Today’s Theme
    DHP

    View Slide

  4. 本日のテーマ
    Today’s Theme

    HPͷίʔυ͔Βݺͼग़͢

    View Slide

  5. 本日のテーマ
    Today’s Theme

    HPͷίʔυ͔Βݺͼग़͢
    ࠓͲ͖ͦΜͳ
    Ϣʔεέʔεຊ౰
    ʹ͋Δͷʁʁʁ ௿ϨΠϠΛѻ͏ͱ
    ͖͔ؔ͠܎ͳ͍Ͱ
    ͠ΐʁ
    (P͕Ͱ͖ͯؒ΋ͳ͍ͱ
    ͖ʹ࢖͍ͬͯͨʹ͑͠ͷ
    Ҩ࢈͡Όͳ͍ͷʁ

    View Slide

  6. 本日のテーマ
    Today’s Theme
    ͦΜͳ;͏ʹࢥ͍ͬͯͨ࣌ظ͕
    ࢲʹ΋͋Γ·ͨ͠ʜʜ

    View Slide

  7. ある日のこと
    Recollection
    ͋ͷαʔϏε (P੡

    ʹ৽ػೳΛ௥Ճ͍ͨ͠
    ΜͰ͢Α

    ্࢘

    View Slide

  8. ある日のこと
    Recollection
    (PͰͲ͏΍ͬͯ
    ࣮૷͢ΔΜͩ
    ʜʜʁ

    ʓʓͰ˚˚͢Δػ
    ೳͳΜͰ͚͢Ͳ

    ্࢘

    View Slide

  9. ある日のこと
    Recollection
    · ͡ Ͱ ͢ ͔
    ʓʓͷ෦ॺ͕$Ͱ࣮૷
    ͯ͘͠ΕͨͷͰͦΕΛ
    ૊ΈࠐΜͰ͍ͩ͘͞

    ্࢘

    View Slide

  10. ある日のこと
    Recollection
    ී௨ͷॲཧͩͬͨΒ(PͰ
    ࣮૷͠௚ͨ͠ΔΘ

    View Slide

  11. ある日のこと
    Recollection
    ઌ΄Ͳ͓఻͑ͨ͠$ϥ
    ΠϒϥϦ͓ૹΓ͠·͢

    ্࢘

    View Slide

  12. ある日のこと
    Recollection

    VO[JQ

    View Slide

  13. ある日のこと
    Recollection

    l MJC
    ○ GVOD-JCSBSZB
    l JODMVEF
    ○ GVOD-JCSBSZI
    ○ FSSPSTI
    l EPDUYU

    View Slide

  14. ある日のこと
    Recollection

    l MJC
    ○ GVOD-JCSBSZB
    l JODMVEF
    ○ GVOD-JCSBSZI
    ○ FSSPSTI
    l EPDUYU
    ˡ ੩తϥΠϒϥϦ͚ͩͳͷͰ
    தͷ࣮૷͕Θ͔Βͳ͍

    View Slide

  15. ある日のこと
    Recollection

    PS[

    View Slide

  16. おことわり
    Notion
    ͜͜·Ͱͷલஔ͖͸ϑΟΫγϣϯͰ͢ɻ

    View Slide

  17. アジェンダ
    Agenda
    DHPWTQVSF(P
    DHP%PDVNFOUT
    $BTF4UVEZ

    View Slide

  18. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ

    View Slide

  19. cgo is not Go
    1. cgo v.s. pure Go
    3PC1JLFࢯͷ֨ݴूz(P1SPWFSCTzʹ͸zDHPJTOPU(Pzͱ͍͏ݴ༿͕͋Γ·͢ɻ
    ௒ҙ༁

    ॳظͷࠒ͸ɺDHP࢖ͬͯ؆୯ʹ$ࢿ࢈Λ࢖͑Δ͜ͱΛশࢍ͍ͯ͠Δਓ͸ଟ͔ͬͨΑɻ
    Ͱ΋ࢲ͸ͦΕ͸ͱΜͰ΋ͳ͍᠘ͩͱࢥ͏ɻ
    ·͔͋֬ʹผݴޠʹϦϥΠτ͢ΔΑΓͦͷ··׆༻ͨ͠ํ͕͍͍$ࢿ࢈΋͋ΔΑʁ
    ͦΕͰ΋ࢲ͸DHPΛ࢖͍͍ͨͱ͸ࢥΘͳ͍͠ςετҎ֎Ͱ࢖ͬͨ͜ͱ΋ͳ͍Ͷɻ
    (Pʹ͸ϝϞϦ҆શੑ͕͋ͬͨΓ(PͷΨϕʔδίϨΫλʔ͕͋ͬͨΓͯ͠
    ಛ༗ͷ͍͍ΤίγεςϜ͕͋ΔͷʹɺͦΕΛࠩ͠ஔ͍ͯDHPΛ࢖͓͏ͱ͸ࢥΘͳ͍ɻ
    (PQIFSGFTUc(P1SPWFSCTXJUI3PC1JLFΑΓ

    View Slide

  20. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  21. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  22. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  23. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  24. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  25. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  26. cgoはGoの持つ良さを半減させてしまう
    1. cgo v.s. pure Go
    3PC1JLFࢯͷݴ༿ʹ΋͋Δ௨ΓɺDHPΛར༻͢Δͱ͍͏͜ͱ͸(P͕༷࣋ͭʑͳ
    ͍͍ੑ࣭Λࡴͯ͠͠·͏͜ͱʹ΋ͳΓ·͢ɻ
    DHPͰࣦΘΕΔ΋ͷ
    ࢀߟzDHPJTOPUHPzr %BWF$IFOFZ
    Ϗϧυ͕஗͘ͳΔ
    σόοά͕೉͍͠
    ΫϩείϯύΠϧʹ೉͋Γ
    ύϑΥʔϚϯεଌఆ͕೉͍͠
    ੒Ռ෺͕୯ҰόΠφϦͰͳ͍
    Φʔόʔϔουͷൃੜ
    (PͷϓϩϑΝΠϥ͸
    (P෦෼͔͠෼ੳͰ͖ͳ͍
    $ࢿ࢈ͷίϯύΠϧɾϦϯΫΛ
    ௥ՃͰߦ͏ඞཁ͕͋Δ
    (P͕αϙʔτ͢Δ
    શΞʔΩςΫνϟʹ
    $ࢿ࢈΋ରԠͤ͞ଓ͚Δඞཁ
    (PͰͷϥούʔ෦෼ͱ
    $ࢿ࢈Λ
    ೋॏ؅ཧ͠ͳ͍ͱ͍͚ͳ͍
    (Pͱ$ݴޠͱ͍͏
    ͭͷݴޠΛ·͙ͨ෼ͷ
    Φʔόʔϔου
    $ࢿ࢈෦෼ͰΫϥογϡͯ͠΋
    (PͰ͸SFDPWFSͰ͖ͳ͍

    View Slide

  27. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ

    View Slide

  28. cgoに関するドキュメントは少ない
    2. cgo Documents
    1VSF(PΛ࢖͏ͷ͕ϝΠϯͷைྲྀͰ͋ΔݱࡏɺDHPʹؔ͢ΔυΩϡϝϯτ͸ඇৗ
    ʹগͳ͍Ͱ͢ɻ
    DHPͷυΩϡϝϯτ
    • 5IF(P#MPH $ (P $HP
    • QLHHPEFW DHP
    • (Pެࣜ8JLJ DHP

    View Slide

  29. cgoに関するドキュメントは少ない
    2. cgo Documents
    1VSF(PΛ࢖͏ͷ͕ϝΠϯͷைྲྀͰ͋ΔݱࡏɺDHPʹؔ͢ΔυΩϡϝϯτ͸ඇৗ
    ʹগͳ͍Ͱ͢ɻ
    DHPͷυΩϡϝϯτ
    • 5IF(P#MPH $ (P $HP
    • QLHHPEFW DHP
    • (Pެࣜ8JLJ DHP
    • ؆୯ͳ)FMMP8PSME ӈਤ

    • จࣈྻͷѻ͍ํ
    • $ͰΞϩέʔτͨ͠ϝϞϦ͸(P
    Ͱ͸ؔ஌͠ͳ͍͔Β͖ͪΜͱ
    GSFFͯ͠Ͷ

    View Slide

  30. cgoに関するドキュメントは少ない
    2. cgo Documents
    1VSF(PΛ࢖͏ͷ͕ϝΠϯͷைྲྀͰ͋ΔݱࡏɺDHPʹؔ͢ΔυΩϡϝϯτ͸ඇৗ
    ʹগͳ͍Ͱ͢ɻ
    DHPͷυΩϡϝϯτ
    • 5IF(P#MPH $ (P $HP
    • QLHHPEFW DHP
    • (Pެࣜ8JLJ DHP
    • DHPσΟϨΫςΟϒʹ෇͚ΒΕΔΦϓγϣϯৄࡉ
    • (P͔Β$Λݺͼग़͢؆୯ͳྫ
    • $͔Β(PΛݺͼग़͢؆୯ͳྫ
    • HPUPPMDHPίϚϯυͷΦϓγϣϯ
    ˡ͜͏͍͏ͷ

    View Slide

  31. cgoに関するドキュメントは少ない
    2. cgo Documents
    1VSF(PΛ࢖͏ͷ͕ϝΠϯͷைྲྀͰ͋ΔݱࡏɺDHPʹؔ͢ΔυΩϡϝϯτ͸ඇৗ
    ʹগͳ͍Ͱ͢ɻ
    DHPͷυΩϡϝϯτ
    • 5IF(P#MPH $ (P $HP
    • QLHHPEFW DHP
    • (Pެࣜ8JLJ DHP
    • ؆୯ͳ)FMMP8PSME
    • $͔Β(PͷίʔυΛݺͼग़͢ํ๏
    • (Pͷจࣈྻͱ$ͷจࣈྻͷҧ͍Λ౿·͑ͨѻ͍ํ

    View Slide

  32. cgoに関するドキュメントは少ない
    2. cgo Documents
    1VSF(PΛ࢖͏ͷ͕ϝΠϯͷைྲྀͰ͋ΔݱࡏɺDHPʹؔ͢ΔυΩϡϝϯτ͸ඇৗ
    ʹগͳ͍Ͱ͢ɻ
    DHPͷυΩϡϝϯτ
    • 5IF(P#MPH $ (P $HP
    • QLHHPEFW DHP
    • (Pެࣜ8JLJ DHP
    େن໛ͳطଘ$ࢿ࢈ϥΠϒϥϦΛ
    ࢖͑ΔΑ͏ʹ͢Δͱ͍͏৘ใͰ͸ͳ͍ ͜ΕͰͲ͏΍ͬͯઓ͑͹͍͍Μͩʜʜ

    View Slide

  33. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ

    View Slide

  34. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    B ঢ়گઆ໌

    View Slide

  35. 状況説明
    3. Case Study - Situation
    Ϣʔεέʔεͱͯ͠͸ɺʮ(Pͷαʔόʔίʔυͷத͔Βɺ$ݴޠ੡ͷϥΠϒϥ
    ϦΛݺͼग़͢ʯͱ͍͏΋ͷͰͨ͠ɻ

    l MJC
    ○ GVOD-JCSBSZB
    l JODMVEF
    ○ GVOD-JCSBSZI
    ○ FSSPSTI
    l EPDUYU
    $ݴޠϥΠϒϥϦ (Pͷαʔόʔίʔυ
    DBMM

    View Slide

  36. 状況説明
    3. Case Study - Situation
    ͜ͷঢ়گͰ೉͔ͬͨ͠ͷ͸ҎԼͷ఺Ͱ͢ɻ
    l ੩తϥΠϒϥϦ BϑΝΠϧ
    ͷΈख౉͞Εɺதͷ࣮૷͕ෆ໌
    ○ (PͰ࠶࣮૷ͯ͠DHPͷ࢖༻ճආ͸ෆՄೳ
    l ϔομϑΝΠϧ಺ͷϓϩτλΠϓએݴͷྔ͕ଟ͍
    ○ ͭͭ(PͰϥούʔΛ࡞͍ͬͯ͘ͷ͸ඇݱ࣮త
    l ໌Β͔ʹ$ͱࢥΘΕ͠Ϋϥεએݴ͕ϔομϑΝΠϧ಺ʹ͋ͬͨ
    ○ ެࣜυΩϡϝϯτʹ͸QVSF$Ͱͷ৘ใ͸͋Δ͕ɺ$ʹؔ͢Δهࡌ͸ͳ͠
    ○ චऀɺ$ͷܦݧ͸͋ΕͲ$͸΍ͬͨ͜ͱͳ͍ śƂŦ ʘ ?P?
    ʗ

    View Slide

  37. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    B ঢ়گઆ໌
    C ٹੈओ 48*(

    View Slide

  38. 救世主 - SWIG
    3. Case Study - SWIG
    48*(͸$$Ͱॻ͔ΕͨϓϩάϥϜΛଞݴޠͷιʔείʔυ͔Βݺͼग़ͨ͢Ί
    ͷϥούʔΠϯλʔϑΣʔείʔυΛੜ੒ͤ͞ΔπʔϧͰ͢ɻ
    $ϥούʔ
    48*(
    ΠϯλʔϑΣʔε
    ϑΝΠϧ
    TXJHrHP
    TXJHίϚϯυΛ࣮ߦ
    ॲཧର৅ͷ
    $ϥΠϒϥϦϔομʔ৘ใ
    FUDʜ
    (Pίʔυ
    ࢀߟIUUQTXXXTXJHPSH

    View Slide

  39. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͔͜͜Β͸ྫͱͯ͠ʮ͓Έ͘͡ΛҾ͘ʯ$ϥΠϒϥϦΛ(P͔Βݺͼग़ͤΔΑ
    ͏ʹ͍ͯ͘͠աఔΛऔΓ্͍͛ͨͱࢥ͍·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ͓Έ͘͡ػೳΛ࣮૷ͨ͠੩తϥΠϒϥϦ

    View Slide

  40. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    $ϥΠϒϥϦʹରԠ͢ΔϔομʔϑΝΠϧͷத਎͸ҎԼͷ௨ΓͰ͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ͓Έ͘͡Λ
    ͍ΖΜͳܗͰҾ͘
    ϝιουͨͪ
    ͓Έ͘͡ߏ଄ମͱ

    View Slide

  41. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    $ϥΠϒϥϦʹରԠ͢ΔϔομʔϑΝΠϧͷத਎͸ҎԼͷ௨ΓͰ͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ͨ·ʹ͓Έ͘͡ശʹ
    ෆ۩߹͕ى͖ͯ
    ࣦഊ͠·͢

    View Slide

  42. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͜ͷ͓Έ͘͡ϥΠϒϥϦΛ(P͔Βݺͼग़͢ϥούʔΛੜ੒͢ΔͨΊʹɺ৽ͨʹ
    ΠϯλʔϑΣʔεϑΝΠϧ YYYYJ
    Λ࡞੒͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    View Slide

  43. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͜ͷ͓Έ͘͡ϥΠϒϥϦΛ(P͔Βݺͼग़͢ϥούʔΛੜ੒͢ΔͨΊʹɺ৽ͨʹ
    ΠϯλʔϑΣʔεϑΝΠϧ YYYYJ
    Λ࡞੒͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ
    ࣗಈੜ੒͞Εͨ(Pίʔυͷ
    ύοέʔδ໊Λࢦఆ

    View Slide

  44. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͜ͷ͓Έ͘͡ϥΠϒϥϦΛ(P͔Βݺͼग़͢ϥούʔΛੜ੒͢ΔͨΊʹɺ৽ͨʹ
    ΠϯλʔϑΣʔεϑΝΠϧ YYYYJ
    Λ࡞੒͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ
    ϥούʔͷର৅ͱͳΔ
    $$ͷϔομʔΛࢦఆ

    View Slide

  45. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͜ͷ͓Έ͘͡ϥΠϒϥϦΛ(P͔Βݺͼग़͢ϥούʔΛੜ੒͢ΔͨΊʹɺ৽ͨʹ
    ΠϯλʔϑΣʔεϑΝΠϧ YYYYJ
    Λ࡞੒͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ
    Ϗϧυͷࡍʹ$$ίϯύ
    Πϥʹ౉ΔϑϥάΛࢦఆ
    • $11'-"(4*Φϓγϣ
    ϯͰ࢖༻ϔομϑΝΠϧ
    Λࢦఆ
    • -%'-"(4-Φϓγϣ
    ϯͰ࢖༻੩తϥΠϒϥϦ
    Λࢦఆ

    View Slide

  46. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͜ͷ͓Έ͘͡ϥΠϒϥϦΛ(P͔Βݺͼग़͢ϥούʔΛੜ੒͢ΔͨΊʹɺ৽ͨʹ
    ΠϯλʔϑΣʔεϑΝΠϧ YYYYJ
    Λ࡞੒͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ
    ͜͜͸ޙड़

    View Slide

  47. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJHHPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ

    View Slide

  48. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJH HPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ
    PNJLVKJJͷ಺༰͔Β
    (PͷίʔυΛੜ੒

    View Slide

  49. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJHHPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ
    $ͷίʔυΛ
    ॲཧର৅ʹ͢Δ

    View Slide

  50. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJHHPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ
    ੒Ռ෺ͰDHPΛར༻ͯ͠0,

    View Slide

  51. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJHHPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ
    ར༻͢ΔϔομϑΝΠϧͷ
    ઃఆ

    View Slide

  52. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    48*(ΠϯλʔϑΣʔεϑΝΠϧ͕Ͱ͖ͨΒɺTXJHίϚϯυΛ࣮ߦ͠·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ

    DEPNJLVKJ
    TXJHHPD
    DHP JODMVEFBMM *JODMVEFJOUHPTJ[F PNJLVKJJ
    $ͰͷJOUΛ(PͰͷJOUʹ
    ରԠ͚ͮ

    View Slide

  53. SWIGでのラッパーインターフェース生成の様子
    3. Case Study - SWIG
    ͢Δͱɺ$ͱ(PͷϥούʔΠϯλʔϑΣʔεϑΝΠϧ͕ͦΕͧΕݸੜ੒͞
    Ε·͢ɻ
    l PNJLVKJ
    ○ MJC
    ■ MJCPNJLVKJB
    ○ JODMVEF
    ■ PNJLVKJI
    ■ FSSPS$PEFI
    ○ PNJLVKJJ
    ○ PNJLVKJ@XSBQDYY
    ○ JOUFSOBMHP
    DHPͰݺͼग़͠΍͍͢ܗʹ੔ܗͨ͠$ϥούʔ
    ͦΕΛDHPͰݺͼग़͢(Pίʔυ

    View Slide

  54. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    B ঢ়گઆ໌
    C ٹੈओ r 48*(
    D 48*(Ͱྑ͔ͬͨ͜ͱ ؾΛ͚ͭΔ͜ͱ

    View Slide

  55. SWIGで良かったこと
    3. Case Study – Pros & Cons of SWIG
    48*(Λ࢖ͬͯྑ͔ͬͨ͜ͱ͸ҎԼͰ͢ɻ
    l ϔομϑΝΠϧʹେྔʹఆٛ͞ΕͨϓϩτλΠϓએݴ͔ΒίʔυΛࣗಈੜ੒Ͱ͖Δ
    ○ ؾΛݣ͏$$(Pؒͷ஋ͷड͚౉͠Λ48*(ʹ೚ͤΒΕΔͨΊָ
    l $͕෼͔Βͳͯ͘΋ͳΜͱ͔ͳͬͨ
    ○ $ಛ༗ͷهड़ΛDHPެࣜʹ৘ใ͕͋ͬͨQVSF$ͷ΍Γํʹ߹ΘͤΔ࡞ۀΛ
    48*(ʹ೚ͤΒΕͨ
    l ඇϓϦϛςΟϒܕΛֶशίετ௿͘ѻ͏͜ͱ͕Ͱ͖ͨ
    ○ ޙड़

    View Slide

  56. SWIGで良かったこと
    3. Case Study – Pros & Cons of SWIG
    (P$ݴޠؒͰ஋ͷ΍ΓͱΓ͸ɺϓϦϛςΟϒܕͳΒൺֱత༰қʹͰ͖ΔͷͰ
    ͕͢ɺͦ͏Ͱͳ͍ͱਖ਼֬ʹͦΕΛ࣮૷͢Δͷ͸େมͰ͢ɻ
    Ϋϥε
    (P$ݴޠؒͷ஋ͷड͚౉͠ํ๏
    $VJOU΍$MPOHʹ
    Ωϟετ͢Δ
    ഑ྻܕ ϙΠϯλܕ
    $$4USJOHؔ਺΍
    $(P4USJOHؔ਺Λ࢖ͬͯ͏·͘΍Δ
    ʮઌ಄ཁૉͷϙΠϯλΛ౉ͯ͠Ͷʯ
    ͱQLHHPEFWʹॻ͍ͯ͋Δ͚ͩ
    ਺஋ܕ จࣈྻܕ DIBS

    View Slide

  57. SWIGで良かったこと
    3. Case Study – Pros & Cons of SWIG
    (P$ݴޠؒͰ஋ͷ΍ΓͱΓ͸ɺϓϦϛςΟϒܕͳΒൺֱత༰қʹͰ͖ΔͷͰ
    ͕͢ɺͦ͏Ͱͳ͍ͱਖ਼֬ʹͦΕΛ࣮૷͢Δͷ͸େมͰ͢ɻ
    Ϋϥε
    (P$ݴޠؒͷ஋ͷड͚౉͠ํ๏
    $VJOU΍$MPOHʹ
    Ωϟετ͢Δ
    ഑ྻܕ ϙΠϯλܕ
    $$4USJOHؔ਺΍
    $(P4USJOHؔ਺Λ࢖ͬͯ͏·͘΍Δ
    ʮઌ಄ཁૉͷϙΠϯλΛ౉ͯ͠Ͷʯ
    ͱQLHHPEFWʹॻ͍ͯ͋Δ͚ͩ
    ਺஋ܕ จࣈྻܕ DIBS

    View Slide

  58. SWIGで良かったこと
    3. Case Study – Pros & Cons of SWIG
    (P$ݴޠؒͰ஋ͷ΍ΓͱΓ͸ɺϓϦϛςΟϒܕͳΒൺֱత༰қʹͰ͖ΔͷͰ
    ͕͢ɺͦ͏Ͱͳ͍ͱਖ਼֬ʹͦΕΛ࣮૷͢Δͷ͸େมͰ͢ɻ
    Ϋϥε
    (P$ݴޠؒͷ஋ͷड͚౉͠ํ๏
    $VJOU΍$MPOHʹ
    Ωϟετ͢Δ
    ഑ྻܕ ϙΠϯλܕ
    $$4USJOHؔ਺΍
    $(P4USJOHؔ਺Λ࢖ͬͯ͏·͘΍Δ
    ʮઌ಄ཁૉͷϙΠϯλΛ౉ͯ͠Ͷʯ
    ͱQLHHPEFWʹॻ͍ͯ͋Δ͚ͩ
    ਺஋ܕ จࣈྻܕ DIBS

    View Slide

  59. SWIGで良かったこと
    3. Case Study – Pros & Cons of SWIG
    (P$ݴޠؒͰ஋ͷ΍ΓͱΓ͸ɺϓϦϛςΟϒܕͳΒൺֱత༰қʹͰ͖ΔͷͰ
    ͕͢ɺͦ͏Ͱͳ͍ͱਖ਼֬ʹͦΕΛ࣮૷͢Δͷ͸େมͰ͢ɻ
    Ϋϥε
    (P$ݴޠؒͷ஋ͷड͚౉͠ํ๏
    $VJOU΍$MPOHʹ
    Ωϟετ͢Δ
    ഑ྻܕ ϙΠϯλܕ
    $$4USJOHؔ਺΍
    $(P4USJOHؔ਺Λ࢖ͬͯ͏·͘΍Δ
    ʮઌ಄ཁૉͷϙΠϯλΛ౉ͯ͠Ͷʯ
    ͱQLHHPEFWʹॻ͍ͯ͋Δ͚ͩ
    ਺஋ܕ จࣈྻܕ DIBS

    View Slide

  60. Cのクラス変数との値の受け渡し
    3. Case Study – Pros & Cons of SWIG
    $ͷΫϥεม਺ʹؔͯ͠͸ɺ48*(ʹΑͬͯҎԼͷΑ͏ʹ؆୯ʹ஋ͷੜ੒ɾड͚
    ౉͕͠Ͱ͖ΔΑ͏ͳؔ਺܈͕ੜ੒͞Ε·͢ɻ
    $ϔομʔϑΝΠϧ 48*(͕ੜ੒ͨ͠(Pϥούʔ
    $Ͱఆٛ͞Εͨ
    1BQFSΫϥε
    4FUUFS(FUUFS෇͖ͷ
    (PΠϯλʔϑΣʔε
    ίϯετϥΫλ
    σετϥΫλ
    1BQFSΫϥεΛҾ਺ʹ΋ͭ
    ϝιου ରԠ͢Δ(Pͷϝιου΋ɺ48*(ੜ੒ͷ1BQFSΠϯ
    λʔϑΣʔεΛҾ਺ʹ࣋ͭΑ͏ʹઃܭ͞Ε͍ͯΔ

    View Slide

  61. SWIGのインターフェースライブラリの利用
    3. Case Study – Pros & Cons of SWIG
    48*(ʹ͸DQPJOUFSJ΍DBSSBZJͱ͍ͬͨΠϯλϑΣʔεϥΠϒϥϦ͕༻ҙ͞Εͯ
    ͓ΓɺͦΕΛར༻͢Δ͜ͱͰศརͳϔϧύʔؔ਺Λੜ੒ͤ͞Δ͜ͱ͕Ͱ͖·͢ɻ
    ഑ྻܕͷ৔߹ ϙΠϯλܕͷ৔߹
    1BQFSܕͷ഑ྻʹ૬౰͢Δม਺Λੜ੒
    ഑ྻͷϝϞϦղ์
    ഑ྻͷO൪໨ͷཁૉͷऔಘ
    ഑ྻͷO൪໨ͷཁૉͷ஋ηοτ
    DIBSʹ૬౰͢Δม਺Λੜ੒
    ϝϞϦղ์
    ϙΠϯλ͕ࢦ͢஋ͷऔಘ
    σϦϑΝϨϯε
    ϙΠϯλ͕ࢦ͢஋Λߋ৽

    View Slide

  62. (余談)文字列のポインタをどう扱おう?
    3. Case Study – Pros & Cons of SWIG
    ʮจࣈྻͷϙΠϯλΛҾ਺ͱͯ͠౉͠ɺͦͷதʹ࣮ߦ݁ՌΛ֨ೲͯ͠΋Β͏ʯͱ
    ͍͏$ͷؔ਺͕͋Γ·ͨ͠ɻ
    ໭Γ஋͸Τϥʔൃੜ༗
    ແͷ఻ൖʹ࢖͏
    ຊ౰ͷॲཧ݁Ռ จࣈྻ
    ͸Ҿ਺
    Ͱ౉ͨ͠ϙΠϯλͰड͚औΔ
    $ϔομʔϑΝΠϧ
    TXJHίϚϯυΛ࣮ߦ
    ࣗಈੜ੒͞Εͨ(Pϥούʔ

    View Slide

  63. (余談)文字列のポインタをどう扱おう?
    3. Case Study – Pros & Cons of SWIG
    $$ͷDIBSܕ(PͷจࣈྻܕͰͷ஋ͷड͚౉͠ʹ͸DHPͰ༻ҙ͞Εͨઐ໳
    ͷ૊ΈࠐΈؔ਺Λ࢖͏ͷΛ૝ఆ͞Ε͍ͯ·͕͢ɺ48*(͸ͦΕʹະରԠͰ͢ɻ
    ͦͷ͍͔ͤɺࣗಈੜ੒͞ΕͨίʔυҾ਺ʹૉ௚ʹTUSJOHΛ౉ͯ͠΋͏·͘ಈ͍
    ͯ͘Εͣɺ͜͜Ͱ΋DQPJOUFSJΠϯλʔϑΣʔεϥΠϒϥϦΛ࢖༻͠·ͨ͠ɻ
    ࣗಈੜ੒͞Εͨ(Pϥούʔ
    ˠ$(P4USJOHؔ਺΍$$4USJOHؔ਺Λ಺෦Ͱར༻͍ͯ͠ͳ͍
    %SBX4UBUVTͷҾ਺BSHʹ
    ͨͩͷWBS TTUSJOHΛ౉ͯ͠΋͏·͍͔͘ͳ͍ʂ
    DQPJOUFSJͰੜ੒͞Εͨϔϧύʔؔ਺Λ࢖ͬͯ
    ʮDIBSʹ૬౰͢ΔTUSJOHม਺ʯΛ࡞ͬͯ౉͞ͳ͍ͱ͍͚ͳ͍
    ੜ੒͞Εͨ%SBX4UBUVTϝιουͷར༻ྫ

    View Slide

  64. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    B ঢ়گઆ໌
    C ٹੈओ r 48*(
    D 48*(Ͱྑ͔ͬͨ͜ͱ ؾΛ͚ͭΔ͜ͱ
    E (PMJLFʹ͢ΔͨΊʹվ଄

    View Slide

  65. (問題)自動生成コードがGo-likeじゃない
    3. Case Study – Customize
    48*(ʹΑͬͯࣗಈੜ੒͞Εͨίʔυ͸$$ͷؔ਺γάωνϟʹԊͬͨܗʹͳ
    ͓ͬͯΓɺ(PMJLFͱ͸ݴ͑ͳ͍෦෼͕͋Γ·͢ɻ
    $$ϔομʔϑΝΠϧʹهࡌ͞Ε͍ͯΔ಺༰


    48*(Ͱੜ੒͞Εͨ(Pͷϥούʔ
    ΤϥʔΛJOUͰ͸ͳ͘
    FSSPSܕʹ͍ͨ͠
    Ҿ਺ͷ1BQFS͸࣮ߦ݁ՌΛड͚औΔͨΊͷ΋ͷͳͷͰ
    ໭Γ஋ʹೖΕͯ 1BQFS FSSPS
    ͱ͍͏ܗʹ͍ͨ͠

    View Slide

  66. (解決策)Goらしくなるようにさらにラッパーを作ろう
    3. Case Study – Customize
    ͦͷͨΊɺ48*(ͷࣗಈੜ੒ίʔυΛ͞Βʹϥοϓ͢ΔΑ͏ͳܗͰύοέʔδΛ
    ࡞੒͠·ͨ͠ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ MJC
    ● MJCPNJLVKJB
    ■ JODMVEF
    ● PNJLVKJI
    ● FSSPS$PEFI
    ■ PNJLVKJJ
    ■ PNJLVKJ@XSBQDYY
    ■ JOUFSOBMHP
    ○ PNJLVKJHP
    48*(ʹΑΔίʔυࣗಈੜ੒ʹؔΘΔ΋ͷ
    • 48*(ΠϯλʔϑΣʔε
    • $$ϔομʔϑΝΠϧ
    • ੩తϥΠϒϥϦ BϑΝΠϧ

    • ࣗಈੜ੒͞Εͨ(Pϥούʔ
    ΛશͯJOUFSOBMσΟϨΫτϦ௚ԼʹೖΕΔ
    JOUFSOBMύοέʔδΛJNQPSUͰ͖Δͷ͸
    ͦͷ্͙͢ͷPNJLVKJύοέʔδͷΈͱͳΔͨΊɺ
    (PMJLFͰ͸ͳ͍VOTBGFͳ48*(ੜ੒ίʔυΛӅณͰ͖Δʂ

    View Slide

  67. (解決策)Goらしくなるようにさらにラッパーを作ろう
    3. Case Study – Customize
    ͦͷͨΊɺ48*(ͷࣗಈੜ੒ίʔυΛ͞Βʹϥοϓ͢ΔΑ͏ͳܗͰύοέʔδΛ
    ࡞੒͠·ͨ͠ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ MJC
    ● MJCPNJLVKJB
    ■ JODMVEF
    ● PNJLVKJI
    ● FSSPS$PEFI
    ■ PNJLVKJJ
    ■ PNJLVKJ@XSBQDYY
    ■ JOUFSOBMHP
    ○ PNJLVKJHP
    (PMJLFͳϝιουγάωνϟʹ͢Δ

    View Slide

  68. (解決策)Goらしくなるようにさらにラッパーを作ろう
    3. Case Study – Customize
    ͦͷͨΊɺ48*(ͷࣗಈੜ੒ίʔυΛ͞Βʹϥοϓ͢ΔΑ͏ͳܗͰύοέʔδΛ
    ࡞੒͠·ͨ͠ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ MJC
    ● MJCPNJLVKJB
    ■ JODMVEF
    ● PNJLVKJI
    ● FSSPS$PEFI
    ■ PNJLVKJJ
    ■ PNJLVKJ@XSBQDYY
    ■ JOUFSOBMHP
    ○ PNJLVKJHP
    48*(ͷϥούʔίʔυΛݺͼग़͢

    View Slide

  69. (解決策)Goらしくなるようにさらにラッパーを作ろう
    3. Case Study – Customize
    ͦͷͨΊɺ48*(ͷࣗಈੜ੒ίʔυΛ͞Βʹϥοϓ͢ΔΑ͏ͳܗͰύοέʔδΛ
    ࡞੒͠·ͨ͠ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ MJC
    ● MJCPNJLVKJB
    ■ JODMVEF
    ● PNJLVKJI
    ● FSSPS$PEFI
    ■ PNJLVKJJ
    ■ PNJLVKJ@XSBQDYY
    ■ JOUFSOBMHP
    ○ PNJLVKJHP
    48*(ίʔυ͔ΒͷJOU໭Γ஋͔Β
    ΤϥʔछผΛ൑ผ͢Δ
    ΋͠ΤϥʔͳΒFSSPSܕʹ௚ͯ͠
    ໭Γ஋ʹ͢Δ
    ΤϥʔछผΛTXJUDIͰ
    ൑ผ͢Δؔ਺

    View Slide

  70. (解決策)Goらしくなるようにさらにラッパーを作ろう
    3. Case Study – Customize
    ͦͷͨΊɺ48*(ͷࣗಈੜ੒ίʔυΛ͞Βʹϥοϓ͢ΔΑ͏ͳܗͰύοέʔδΛ
    ࡞੒͠·ͨ͠ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ MJC
    ● MJCPNJLVKJB
    ■ JODMVEF
    ● PNJLVKJI
    ● FSSPS$PEFI
    ■ PNJLVKJJ
    ■ PNJLVKJ@XSBQDYY
    ■ JOUFSOBMHP
    ○ PNJLVKJHP
    48*(ίʔυ͔Βड͚औΔ1BQFSܕ͸ࣗಈੜ੒͞Εͨ
    JOUFSOBMύοέʔδͷ΋ͷͳͷͰɺͦΕΛVOTBGFͷ৺഑
    ͕ͳ͍ࣗલͷߏ଄ମʹΩϟετ
    ࣗલͷ1BQFSܕʹ
    Ωϟετ͢Δؔ਺

    View Slide

  71. やっとGoからC/C++資産を呼び出すことに成功
    3. Case Study – Customize
    ͜͏ͯ͠48*(੒Ռ෺Λ͞Βʹϥοϓͨࣗ͠લͷPNJLVKJύοέʔδΛར༻͢Δ
    ͜ͱͰɺ$$ࢿ࢈Λ(PMJLFʹ࢖͑ΔΑ͏ʹͳΓ·ͨ͠ɻ
    ᶃ$$ϔομʔϑΝΠϧ ᶄ48*(͕ίʔυΛࣗಈੜ੒
    ᶅ48*(ͷίʔυΛ(PMJLFʹϥοϓ ᶆϥούʔϥΠϒϥϦΛར༻

    View Slide

  72. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    B ঢ়گઆ໌
    C ٹੈओ r 48*(
    D 48*(Ͱྑ͔ͬͨ͜ͱ ؾΛ͚ͭΔ͜ͱ
    E (PMJLFʹ͢ΔͨΊʹվ଄
    F ϥΠϒϥϦͷల։

    View Slide

  73. ラッパーライブラリの展開
    3. Case Study – Publication
    ੜ੒ͨ͠48*(ࢿ࢈Λਖ਼ৗʹಈ͔ͨ͢Ίʹ͸ɺϔομʔϑΝΠϧɾ੩తϥΠϒϥ
    Ϧͱ(P੡ϥούʔίʔυͷ഑ஔ͕ద੾ͳؔ܎ʹͳ͍ͬͯΔඞཁ͕͋Γ·͢ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ PNJLVKJJ
    ■ JOUFSOBMHP
    ■ PNJLVKJ@XSBQDYY
    ■ MJC
    ● ੩తϥΠϒϥϦ BϑΝΠϧ

    ■ JODMVEF
    ● ϔομʔϑΝΠϧ܈
    ○ PNJLVKJHP
    48*(ΠϯλʔϑΣʔεϑΝΠϧʹهࡌͨ͠
    $11'-"(4-%'-"(4ͷ಺༰
    ࣗಈੜ੒͞ΕͨίʔυͷDHPσΟϨΫςΟϒʹ൓ө
    TXJHHPD ৄࡉGMHུ

    View Slide

  74. ラッパーライブラリの展開
    3. Case Study – Publication
    ੜ੒ͨ͠48*(ࢿ࢈Λਖ਼ৗʹಈ͔ͨ͢Ίʹ͸ɺϔομʔϑΝΠϧɾ੩తϥΠϒϥ
    Ϧͱ(P੡ϥούʔίʔυͷ഑ஔ͕ద੾ͳؔ܎ʹͳ͍ͬͯΔඞཁ͕͋Γ·͢ɻ
    l PNJLVKJ
    ○ JOUFSOBM
    ■ PNJLVKJJ
    ■ JOUFSOBMHP
    ■ PNJLVKJ@XSBQDYY
    ■ MJC
    ● ੩తϥΠϒϥϦ BϑΝΠϧ

    ■ JODMVEF
    ● ϔομʔϑΝΠϧ܈
    ○ PNJLVKJHP
    ࣗಈੜ੒͞ΕͨίʔυͷDHPσΟϨΫςΟϒʹ൓ө
    • (Pϥούʔίʔυ͕JOUFSOBMσΟϨΫτϦ಺
    • ϔομʔϑΝΠϧ͕JOUFSOBMJODMVEFσΟϨΫτϦ಺
    • ϥΠϒϥϦ͕JOUFSOBMMJCPNJLVKJJͱ͍͏໊લͰ഑ஔ
    ͱ͍͏഑ஔؔ܎ʹͳ͍ͬͯͳ͍ͱಈ͔ͳ͍ʂ

    View Slide

  75. ラッパーライブラリの展開
    3. Case Study – Publication
    ͜ͷʮϥούʔϥΠϒϥϦ͕ಈ͘Α͏ͳσΟϨΫτϦߏ଄ʯΛอͭͨΊͷোน͕ɺ
    චऀͷঢ়گͰ͸ͭ͋Γ·ͨ͠ɻ
    ωοΫʹͳͬͨ͜ͱ
    HPHFUͷڍಈ
    HPNPEVMFϞʔυ (0.0%6-&PO
    Ͱ͸ɺHPHFU
    ͨ͠QLH͸؀ڥม਺(0.0%$"$)&ʹ഑ஔ͞Ε·͢ɻ
    ͕ɺιʔεμ΢ϯϩʔυˠ (0.0%$"$)&௚Լ΁ͷ഑
    ஔ͕୯७ͳHJUDMPOFͰ͸ͳ͍ٙ࿭͕͋Γ·ͨ͠ɻ
    ༰ྔ࡟ݮͷͨΊʹɺਖ਼௚ʹDMPOF͢ΔͷͰ͸ͳ͘Կ͔޻
    ෉͕ೖͬͨͱ͍͏࿩Λฉ͍ͨΑ͏ͳʜʜɻ
    ιʔε͕ݟ͔ͭΒͳ͍ͷͰΨηͷՄೳੑ΋͋Γ·͢ɻٻ
    Ή৘ใɻ

    ίϯςφ্Ͱಈ͔͢ΞϓϦͩͬͨ
    $$ࢿ࢈Λಈ͔ͨ͢Ίʹ͸ɺ੩తϥΠϒϥϦ B
    ͕ϫ
    ʔΫϩʔυ্ʹΠϯετʔϧ͞Ε͍ͯΔඞཁ͕͋Γ·͢ɻ
    ࠓճ͸ίϯςφ্Ͱಈ͔͢૝ఆͩͬͨͨΊɺ
    %PDLFSGJMFʹ
    $01:<ϩʔΧϧͷPNJLVKJB><ίϯςφ಺Ͱͷ഑ஔύε>
    ͱهड़͢Δ͜ͱʹͳΓ·͢ɻ
    ͦͷͨΊʹɺ (0.0%$"$)&௚ԼͰ͸ͳ͘ΞϓϦϨϙ
    δτϦ௚ԼʹPNJLVKJBΛ഑ஔ͔ͨͬͨ͠ͷͰ͢ɻ

    View Slide

  76. 苦肉の策
    3. Case Study – Publication
    ͦͷͨΊɺࠓճ͸HPHFUͰґଘؔ܎Λએݴ ࣮ଶ͸HJUTVCNPEVMFͰऔಘͯ͠
    HPNPESFQMBDFͯ͠ࢀরͱ͍͏ೋॏ؅ཧΛٽ͘ٽ͘͢Δ͜ͱʹͳΓ·ͨ͠ɻ
    l NBJOHP
    l HPNPE
    l %PDLFSGJMF
    l TVCNPEVMFT
    ○ PNJLVKJHP
    ■ PNJLVKJHP
    ■ JOUFSOBM
    ● 48*(ࢿ࢈

    ࣮ߦίϚϯυ
    HPHFUͯ͠ύοέʔδΛHPNPEʹهࡌ
    HPHFUrVHJUIVCDPNTBLJFOHJOFFSJOHPNJLVKJHP
    TVCNPEVMFऔಘ
    HJUTVCNPEVMFBEEHJU!HJUIVCDPNTBLJ
    FOHJOFFSJOHPNJLVKJHPHJU TVCNPEVMFTPNJLVKJHP
    ύοέʔδͷࢀরઌΛ(0.0%$"$)&௚Լ͔Β
    TVCNPEVMFT௚Լʹ੾Γସ͑
    HPNPEFEJUSFQMBDFHJUIVCDPNTBLJ
    FOHJOFFSJOHPNJLVKJHPTVCNPEVMFTPNJLVKJHP

    View Slide

  77. 苦肉の策
    3. Case Study – Publication
    ͦͷͨΊɺࠓճ͸HPHFUͰґଘؔ܎Λએݴ ࣮ଶ͸HJUTVCNPEVMFͰऔಘͯ͠
    HPNPESFQMBDFͯ͠ࢀরͱ͍͏ೋॏ؅ཧΛٽ͘ٽ͘͢Δ͜ͱʹͳΓ·ͨ͠ɻ
    l NBJOHP
    l HPNPE
    l %PDLFSGJMF
    l TVCNPEVMFT
    ○ PNJLVKJHP
    ■ PNJLVKJHP
    ■ JOUFSOBM
    ● 48*(ࢿ࢈

    SFQMBDFσΟϨΫςΟϒʹΑΓ
    TVCNPEVMFT௚ԼͷίʔυΛ΋ͱʹಈ࡞͢Δ
    $01:TVCNPEVMFTPNJLVKJ
    HPJOUFSOBMMJCMJCPNJLVKJB <ίϯςφ಺ύε>
    ͱهड़ͯ͠ϏϧυͰ͖Δ

    View Slide

  78. 注釈
    3. Case Study – Publication
    HPNPESFQMBDF΍TVCNPEVMFΛ࢖ͬͨ͜ͷ΍Γํ͕ϕεϓϥͩͱ͸શ͘ࢥͬ
    ͍ͯͳ͍ͷͰɺΑΓྑ͍ํ๏Λ͓࣋ͪͷํ͸ͥͻ஌ݟΛγΣΞ͍ͯͩ͘͠͞ɻ

    View Slide

  79. アジェンダ
    Agenda
    DHP WTQVSF(P
    DHP %PDVNFOUT
    $BTF4UVEZ
    4VNNBSZ

    View Slide

  80. まとめ
    Summary
    l Ҏ্͕ʮ$ະܦݧ DHPΛ࢖͍׳Ε͍ͯͳ͍ʯͱ͍͏CBDLHSPVOEͷචऀ
    ͕ߦͬͨࢼߦࡨޡͷه࿥Ͱ͢ɻ
    l $ଆͷϝϞϦ؅ཧ΍ɺෳࡶͳσʔλܕΛDHPͰͲ͏ѻ͑͹͍͍ͷ͔ͱ͍͏஌ࣝ
    ͕ͳͯ͘΋ɺ48*(ʹΑΔϥούʔίʔυͷࣗಈੜ੒Ͱ͋Δఔ౓ઓ͏͜ͱ͕Ͱ
    ͖·ͨ͠ɻ
    l ͨͩʮͱΓ͋͑ͣಈ͘ʯͷͰ͸ͳ͘ɺ(PMJLFͳίʔυʹ͍ͨ͠ ίϯςφ
    ʹ৐ͤ΍͍͢ܗʹ͍ͨ͠ͱͳΔͱɺ48*(ͷ੒Ռ෺Λͦͷ··ྲྀ༻Ͱ͸ͳ͘૑
    ҙ޻෉ΛՃ͑Δඞཁ͕͋Γ·͢ɻ

    View Slide

  81. まとめ
    Summary
    l ຊηογϣϯͷ಺༰͕ϕετϓϥΫςΟε͔Ͳ͏͔͸Θ͔Γ·ͤΜɻ
    l ʮ)FMMP8PSMEʯҎ্ͷൃలతͳ಺༰ʹؔͯ͠ɺެࣜͷDHPͷจݙʹΘ͔Γ΍
    ͍͢هड़͕ͳ͍ͱ͍͏ݱঢ়Ͱ͕͢ɺຊηογϣϯͷࣄྫΛਅࣅ͠΍͍͢αϯ
    ϓϧͱ͢Δ͜ͱͰଟ͘ͷDHPॳ৺ऀ͕ٹΘΕΔ͜ͱΛئ͍ͬͯ·͢ɻ
    l ͜ͷ಺༰͔Βൃలͤͨ݁͞Ռɺ΋ͬͱ͍͍։ൃɾӡ༻ϑϩʔ͕Ͱ͖ͨʂͱ͍
    ͏৔߹ʹ͸ͥͻ஌ݟΛγΣΞ͍ͯͩ͘͠͞ʂʂ

    View Slide

  82. 5IBOLZPVGPSMJTUFOJOH
    ຊηογϣϯͰ࢖༻ͨ͠αϯϓϧίʔυ͸ͪ͜Β
    • IUUQTHJUIVCDPNTBLJFOHJOFFSJOHPNJLVKJMJC
    • IUUQTHJUIVCDPNTBLJFOHJOFFSJOHPNJLVKJHP
    • IUUQTHJUIVCDPNTBLJFOHJOFFSJOHPNJLVKJTBNQMF

    View Slide