最速のJSONライブラリを求めて

 最速のJSONライブラリを求めて

Dd2fa99b9a9a3aa316986727ce8e134c?s=128

Masaaki Goshima

August 06, 2020
Tweet

Transcript

  1. ࠷଎ͷ+40/ϥΠϒϥϦΛٻΊͯ  NFSQBZ"SDIJUFDU HPDDZ

  2. Personal Company ( 前職 ) goccy/go-yaml knocknote/octillery goccy/go-graphviz knocknote/rapidash goccy/go-json

    knocknote/eevee goccy/go-reflect knocknote/vitess-sqlparser goccy/go-jit HPDDZ !HPDDZ  .FSQBZ "SDIJUFDU d .BTBBLJ(PTIJNB HPDDZ
  3. "HFOEB ߴ଎+40/ϥΠϒϥϦ HPDDZHPKTPOͷ঺հ ߴ଎ॲཧͷཪଆ ·ͱΊ

  4. "HFOEB ߴ଎+40/ϥΠϒϥϦ HPDDZHPKTPOͷ঺հ ߴ଎ॲཧͷཪଆ ·ͱΊ

  5. HPDDZHPKTPO • IUUQTHJUIVCDPNHPDDZHPKTPO • FODPEJOHKTPOͱίϯύν͔ͭ࠷଎ Λ໨ࢦͯ͠։ൃ • 'FBUVSFT • JNQPSUจΛ

    FODPEJOHKTPO͔Βࠩ͠ସ͑Δ͚ͩͰ࢖͑Δ • &ODPEF͸؍ଌ͍ͯ͠ΔൣғͰ࠷଎ • %FDPEF͸ಉ͡ίϯηϓτͷ KTPOJUFSBUPSHPΑΓ͔ͳΓ଎͍
  6. .PUJWBUJPO • ݁ہ *'͸ FODPEJOHKTPO ඪ४ ͱಉ͡΋ͷ͕޷͖ • JOUFSGBDF\^Ͱड͚Δઃܭʹ͢Δͱɺઐ༻ܕͰ &ODPEF%FDPEF͢Δ

    ϥΠϒϥϦʹൺ΂ͯ଎౓͕མͪΔ • KTPOJUFSBUPSHPWTGSBODPJTQRUHPKBZ • FODPEJOHKTPOͱίϯύν Ͱ HPKBZΑΓ଎͚Ε͹Ұ൪ྑ͍ͷͰ͸ʁ
  7. #FODINBSL &ODPEF 4NBMM4USVDU .FEJVN4USVDU -BSHF4USVDU 'BTUFTU IUUQTHJUIVCDPNHPDDZHPKTPOCMPCNBTUFSCFODINBSLTFODPEF@UFTUHP TPVSDF

  8. #FODINBSL %FDPEF 4NBMM4USVDU .FEJVN4USVDU -BSHF4USVDU 6ONBSTIBM 4USFBN IUUQTHJUIVCDPNHPDDZHPKTPOCMPCNBTUFSCFODINBSLTEFDPEF@UFTUHP TPVSDF

  9. "HFOEB ߴ଎+40/ϥΠϒϥϦ HPDDZHPKTPOͷ঺հ ߴ଎ॲཧͷཪଆ ·ͱΊ

  10. ߴ଎ॲཧͷཪଆ "MMPDBUJPO0QUJNJ[BUJPO 3VOUJNF0QUJNJ[BUJPO

  11. "MMPDBUJPO0QUJNJ[BUJPO • खͬऔΓૣ͘ߴ଎Խ͢Δʹ͸ɺ·ͣΞϩέʔγϣϯճ਺ΛݮΒ͢ͷ͕ྑ͍ • ;FSP"MMPDBUJPOͦ͜ ࢸߴ FH  • HPVCFSPSH[BQ

    • HJUIVCDPNST[FSPMPH
  12. 8IZ;FSP"MMPDBUJPO • ;FSP"MMPDBUJPO;FSP($ • ($ 458 ͷ࣌ؒ͸ແࢹͰ͖ͳ͍ • Ξϩέʔγϣϯճ਺ճͱճͰ͸ɺ($͕ൃੜ͢Δɾ͠ͳ͍ʹؔΘΔॏཁͳ෼͔Ε໨ •

    ;FSP"MMPDBUJPO͕ͳͥՄೳ͔ • (PίϯύΠϥ͕ݡ͘ΦϒδΣΫτͷੜଘظؒΛղੳͯ͠ɺ ώʔϓʹ֬อ͢Δඞཁ͕ͳ͍΋ͷ͸ελοΫ֬อʹͯ͘͠ΕΔ Τεέʔϓղੳ
  13. Ξϩέʔγϣϯ࠷దԽςΫχοΫ • TZOD1PPMʹΑΔΦϒδΣΫτͷ࠶ར༻ • ΋͸΍جຊςΫχοΫԽ͍ͯ͠Δؾ͕͢ΔͷͰࠓճ͸ׂѪ • Τεέʔϓղੳʹ༏͍͠ίʔυΛॻ͘ ࣮ߦ࣌ʹ಺༰͕มΘΔՄೳੑ͕͋Δ ͱίϯύΠϥ͕൑அͦ͠͏ͳ 

    ίʔυΛॻ͔ͳ͍
  14. Τεέʔϓղੳʹ༏͘͠ͳ͍ίʔυྫ • GVODUJPOWBMVFͷҾ਺͸Τεέʔϓ͞ΕΔ • GVODUJPOWBMVF͸࣮ߦ࣌ʹࠩ͠มΘΔՄೳੑ͕͋Δ • DBMMͨ͠ઌͰҾ਺͕Ͳ͔͜ʹอ࣋͞ΕΔՄೳੑ͕͋Δ

  15. Τεέʔϓղੳʹ༏͘͠ͳ͍ίʔυྫ • JOUFSGBDFܕͷϝιουΛݺͿͱΤεέʔϓ͞ΕΔ • JOUFSGBDFܕͷม਺ʹ͸༷ʑͳ࣮૷ͷ΋ͷ͕ೖΔՄೳੑ͕͋Δ

  16. HPKTPOͷΞϩέʔγϣϯํ਑ &ODPEFS • KTPO.BSTIBM࣌ͷΞϩέʔγϣϯճ਺Λ ճ ʹ • Ξϩέʔγϣϯճ਺ͷཧ૝஋͸ .BSTIBM JOUFSGBDF\^

     <>CZUF FSSPS ͳΒճ • ग़ྗ஋ʹඞཁͳ΋ͷ͚ͩΛώʔϓʹ֬อ ՝୊ͱͦͷରࡦ • ड͚औͬͨ JOUFSGBDF\^ܕʹରͯ͠ී௨ʹϦϑϨΫγϣϯ͢Δͱ Ξϩέʔγϣϯ͕ൃੜ͢Δ • ;FSP"MMPDBUJPOͰ ϦϑϨΫγϣϯ ͢Δํ๏ͰରԠ
  17. HPDDZHPSFGMFDU • IUUQTHJUIVCDPNHPDDZHPSFGMFDU • SFGMFDUͱίϯύν • ϦϑϨΫγϣϯૢ࡞Λ ;FSP"MMPDBUJPOͰߦ͑Δ • 'FBUVSFT

    • SFGMFDU5ZQFʹؔ͢Δૢ࡞Λ͢΂ͯ ;FSP"MMPDBUJPOʹ • SFGMFDU7BMVFʹؔ͢Δૢ࡞͸Ξϩέʔγϣϯ͋Γɾͳ͠Λબ΂Δ
  18. #FODINBSL SFGMFDUWTHPDDZHPSFGMFDU SFGMFDU5ZQF0G SFGMFDU7BMVF0G TPVSDFIUUQTHJUIVCDPNHPDDZHPSFGMFDUCMPCNBTUFSCFDINBSL@UFTUHP

  19. )PXJU8PSLTʜͦͷલʹ લఏ஌ࣝ  ͦ΋ͦ΋ͳͥϦϑϨΫγϣϯΛ࢖͏ͱΤεέʔϓ͞ΕΔͷ͔  SFGMFDU5ZQFͷ࣮૷  JOUFSGBDF\^ͷ಺෦ϨΠΞ΢τ  HPMJOLOBNFσΟϨΫςΟϒ

  20. ͦ΋ͦ΋ͳͥΤεέʔϓ͞ΕΔͷ͔ • SFGMFDU5ZQF͸ΠϯλʔϑΣʔεܕͳͷͰɺϝιουΛݺͿͱΤεέʔϓ͞ΕΔ • SFGMFDU7BMVF0G W ͷ಺෦Ͱڧ੍తʹWΛΤεέʔϓ͢ΔΑ͏ʹ࣮૷ͯ͋͠Δ ˞SFGMFDU7BMVF0Gͷ࣮૷ FTDBQFTͷதͰҾ਺Λڧ੍ FTDBQF͍ͯ͠Δ

  21. SFGMFDU5ZQFͷ࣮૷ • SFGMFDU5ZQFΛ࣮૷͍ͯ͠Δͷ͸ SFGMFDUSUZQFߏ଄ମͷΈ • ࣮࣭ SFGMFDU5ZQF SFGMFDUSUZQF

  22. JOUFSGBDF\^ͷ಺෦ϨΠΞ΢τ • JOUFSGBDF\^͸ (PͷதͰ SUZQFͱ VOTBGF1PJOUFSΛ࣋ͭܕͱͯ͠දݱ͞ΕΔ • SUZQFܕ৘ใ • VOTBGF1PJOUFS֨ೲ͍ͯ͠Δ஋΁ͷΞυϨε

    SFGMFDUύοέʔδ಺Ͱͷ JOUFSGBDF\^ͷදݱ
  23. HPMJOLOBNFσΟϨΫςΟϒ • QVCMJDQSJWBUFʹؔ܎ͳ͘ɺҟͳΔύοέʔδͷ ؔ਺΍ϝιουͷΤΠϦΞεΛࣗύοέʔδʹ࡞Δ͜ͱ͕Ͱ͖Δ • ΤΠϦΞεઌͷҾ਺ͷܕͱࣗύοέʔδͷҾ਺ͷܕ͸ಉ͡Ͱ͋Δඞཁ͸ͳ͍ • େࣄͳͷ͸ΞυϨεͱϨΠΞ΢τ • HPOPFTDBQFͱͷซ༻ͰҾ਺ͷΤεέʔϓͳ͠Ͱؔ਺Λݺ΂Δ

    BMJBT
  24. )PXJU8PSLT SFGMFDU5ZQFΛྫʹ SFGMFDU5ZQFΛΠϯλʔϑΣʔε͔Βߏ଄ମʹ JOUFSGBDF\^͔Β SUZQFΛऔಘ HPMJOLOBNFͰ SFGMFDUSUZQFʹ࣮૷͞Ε͍ͯΔϝιουΛݺͼग़͢

  25. QSJWBUFͳॲཧΛࢀর͢Δ͜ͱ΁ͷରࡦ • CVJMEσΟϨΫςΟϒͰ (P಺෦ͷมԽʹ௥ਵ • Ͱ͖Δ͚ͩଟ͘ͷ (PWFSTJPO04Ͱ NBUSJYUFTUΛߦ͏ • JOJU

    ಺Ͱ "1*͕ਖ਼͘͠ಈ͔͘όϦσʔγϣϯ • ৽͍͠ (PWFSTJPOͳͲɺ·ͩ HPSFGMFDUͰݕূ͍ͯ͠ͳ͍Ϗϧυʹର͢Δ Ξϓϩʔν • ࣦഊͨ͠Β QBOJD͢Δ SFGMFDUʹϑΥʔϧόοΫͯ͠΋͍͍͔΋͠Εͳ͍
  26. HPKTPOͷΞϩέʔγϣϯํ਑ %FDPEFS  KTPO6ONBSTIBMͱ KTPO/FX%FDPEFS %FDPEFͰํ਑Λม͑Δ  TZOD1PPMΛ࢖ͬͯ TMJDFΛޮ཰తʹ࡞੒͢Δ 

    GVODUJPOWBMVFͷݺͼग़࣌͠ʹҾ਺͕Τεέʔϓ͞ΕΔͷΛճආ͢Δ
  27. 6ONBSTIBM ͱ 4USFBN%FDPEFͰํ਑Λม͑Δ • KTPO6ONBSTIBM ͸σίʔυର৅ͷ <>CZUFΛશͯ࠷ॳʹड͚औΕΔ • ౉͞Εͨ <>CZUFͷ

    DPQZͿΜ ճ ͱग़ྗର৅ͷ (PͷΦϒδΣΫτߏஙʹ ඞཁͳͿΜ͚ͩΞϩέʔγϣϯ • KTPO/FX%FDPEFS %FDPEF͸ 4USFBNॲཧͳͷͰɺ ಡΈࠐΈαΠζ͸ࣄલʹΘ͔Βͳ͍ • ಡΈࠐΈ༻ͷόοϑΝ ॳظ஋ CZUF Λ࢖͍੾ͬͨΒ࠶Ξϩέʔγϣϯ • HPDDZHPKTPOͰ͸ KTPO6ONBSTIBMͷ଎౓Λམͱ͞ͳ͍ͨΊʹɺ 6ONBSTIBMͱ 4USFBN%FDPEFͰҟͳΔύεΛ௨ͬͯσίʔυ͍ͯ͠Δ
  28. TZOD1PPMΛ࢖ͬͨ TMJDFͷ࡞੒ • TZOD1PPMΛ࢖ͬͯ TMJDFΛ؅ཧ͢Δ • ܕຖʹผͷ QPPMΛ࡞੒ • Ҏલ࡞ͬͨ

    TMJDFΛ࢖͍ճͤΔͷͰɺ $BQBDJUZΛ֦ு͢Δճ਺͕ݮΔ • ग़ྗ݁Ռʹ࢖͍ճ͍ͯ͠Δ TMJDFΛͦͷ··࢖͏͜ͱ͸Ͱ͖ͳ͍ͷͰɺ DPQZ͢Δ • DPQZ͸ SFGMFDUUZQFETMJDFDPQZΛར༻
  29. GVODUJPOWBMVFݺͼग़࣌͠ͷΤεέʔϓճආ • JOUFSGBDF\^ܕͷ஋Λͦͷ··౉͢ͱΤεέʔϓ͞Εͯ͠·͏ͷͰɺ VJOUQUSʹม׵͔ͯ͠Β౉͢ • ม׵ʹ͸ HPDDZHPSFGMFDUͷ 5ZQF"OE1US0G Λར༻ •

    VJOUQUS VOTBGF1PJOUFS W Ͱ΋ࣅͨ͜ͱ͸Ͱ͖Δ
  30. "MMPDBUJPO0QUJNJ[BUJPO·ͱΊ • &ODPEFS • KTPO.BSTIBM͸ ฦΓ஋ͷ <>CZUFͷΈώʔϓʹ֬อ • KTPO/FX&ODPEFS JP8SJUFS

    &ODPEF͸ ;FSP"MMPDBUJPOՄೳ • ϦϑϨΫγϣϯૢ࡞͸ HPDDZHPSFGMFDUͰ ;FSP"MMPDBUJPOԽ • %FDPEFS • 6ONBSTIBMͱ 4USFBN%FDPEFͰॲཧΛ෼͚Δ • TMJDF࡞੒ʹ TZOD1PPMΛར༻͢Δ • GVODUJPOWBMVFͷݺͼग़͠͸ VJOUQUSʹม׵͢Δ͜ͱͰճආ
  31. 3VOUJNF0QUJNJ[BUJPO • Կ౓΋࣮ߦ͞ΕΔಉ͡ॲཧΛ࣮ߦ࣌ͷ৘ใΛར༻ͯ͠࠷దԽ͢Δ • +*5 +VTU*O5JNF $PNQJMFS͕ࢥ͍ු͔Ϳͱࢥ͏͕ɺ࣮ߦ࣌࠷దԽ͸ ผʹίϯύΠϥ͚ͩͷ΋ͷͰ͸ͳ͍ • ͋Δܾ·ͬͨೖྗύλʔϯʹରͯ͠ɺઐ༻ͷߴ଎ॲཧΛݺͼग़ͤΕ͹͍͍

    FH  • ಛఆͷจࣈྻʹରԠͨ͠ߴ଎ॲཧ • ಛఆͷܕʹରԠͨ͠ߴ଎ॲཧ
  32. ܕʹԠ࣮ͨ͡ߦ࣌࠷దԽ • (P͸੩తܕ෇͚ݴޠ • ܕͷ಺෦ϨΠΞ΢τ͕࣮ߦ࣌ʹมԽ͢Δ͜ͱ͸ͳ͍ • ܕʹରԠ͢ΔΞυϨε΋ݻఆ HPDDZHPSFGMFDU5ZQF*% JOUFSGBDF\^ VJOUQUS

    • ࠷ॳʹݺͼग़͞ΕͨࡍʹܕʹԠͨ͡ઐ༻ॲཧΛ࡞ͬͯ̎ճ໨͔ΒͦΕΛ ݺͼग़͢ UZQF*%Λऔಘ͠ɺͦΕΛ NBQͷ LFZʹͯ͠ ઐ༻ॲཧΛΩϟογϡ͢Δྫ
  33. ࣮ߦ࣌࠷దԽॲཧͷ࡞Γํ • ࠷దԽॲཧΛ࡞Δ͜ͱ͸ɺ͋Β͔͡Ί४උͨ͠࠷খߏ੒ͷॲཧάϧʔϓ ͷத͔Βɺඞཁͳ΋ͷΛඞཁͳॱ൪ͰબΜͰͭͳ͛Δ͜ͱ FH • <>GVOD Λ༻ҙͯ͠࠷খߏ੒ͷॲཧ GVOD 

    Λ BQQFOE͍ͯ͘͠ • ॲཧʹϥϕϧΛ͚ͭͯධՁ࣌͸ TXJUDIͰ෼ذͯ͠ॲཧ͢Δ
  34. #FODINBSL TXJUDIWTGVOD

  35. HPKTPOͷ࣮ߦ࣌࠷దԽઓུ &ODPEFS • ࠷దԽίʔυͷධՁʹ7JSUVBM.BDIJOFํࣜΛ࠾༻ • ॳճ࣮ߦ࣌ʹड͚औͬͨܕʹ࠷దԽ͞ΕͨॲཧΛ࡞Δ DPNQJMF • ౓໨͔Β͸࠷దԽ͞ΕͨॲཧΛ࣮ߦ ܕݕࠪͷίετ͕ͳ͍

    • ࠷దԽॲཧͰ͸ SFGMFDU͸࢖Θͳ͍ ͢΂ͯϙΠϯλԋࢉ • GPSTXJUDIͰॲཧ͢Δ TXJUDI͢Δճ਺͕গͳ͍΄Ͳ଎͘ͳΔ UZQF5TUSVDU\ " JOU #TUSJOH ^ DPNQJMF SVO type offset int 0 string 8 SFGMFDU4USVDU'JFME0GGTFUͰܭࢉ <>PQDPEF
  36. HPKTPOͷ࣮ߦ࣌࠷దԽઓུ %FDPEFS • جຊઓུ͸ &ODPEFSͱಉ͡ • ॳճ࣮ߦ࣌ʹܕʹԠͨ͡࠷దԽॲཧΛߏங • ౓໨Ҏ߱͸࠷దԽॲཧΛݺͿ ܕݕࠪͷίετͳ͠

    • ࠷దԽॲཧͰ͸ SFGMFDUΛ࢖Θͳ͍ ͢΂ͯϙΠϯλԋࢉ • ϙΠϯλԋࢉΛগ͠঺հ QVJOUQUS • JOU • JOU VOTBGF1PJOUFS Q  • NBQ • SFGMFDUNBLFNBQͰ VOTBGF1PJOUFSΛ࡞Δ • SFGMFDUNBQBTTJHOͰ LFZ WBMVFΛ௥Ճ͍ͯ͘͠ • VOTBGF1PJOUFS VOTBGF1PJOUFS Q NBLFNBQͷฦΓ஋ • QPJOUFS • ͋ΔܕͷϙΠϯλΛ࡞Δͱ͖͸ SFGMFDUVOTBGF@/FXΛ࢖͏
  37. %FDPEFSͷͦͷଞͷߴ଎ԽςΫχοΫ • /6-Λ࢖ͬͯ৚݅൑ఆճ਺ΛݮΒ͢ • ಡΈਐΊΔ౓ʹ DVSTPSMFOHUIΈ͍ͨͳ൑ఆΛ͢Δͱ஗͘ͳΔ • NBLF <>CZUF 

    MFOHUI  ͱ <>CZUF࡞੒࣌ʹऴ୺จࣈͿΜ༨ܭʹ֬อ͢Δ • จࣈछ൑ఆ༻ͷ TXJUDIDBTFʹ /6-Λ௥Ճ • NBQͰݕࡧ͢Δ৔߹͸ BSSBZͰݕࡧ͢Δํ๏΋ݕ౼͢Δ • GPSΑΓ HPUPͷํ͕ύϑΥʔϚϯε͕ྑ͍έʔε͕͋Δ Լͷ GPSΛ࢖ͬͨॻ͖ํΑΓ΋ ࠨͷ HPUPΛ࢖ͬͨॻ͖ํͷํ͕଎͍
  38. ݕ౼தͷߴ଎Խख๏ • TUSVDUΛσίʔυ͢Δࡍɺ+40/0CKFDUͷ ֤LFZ͕ TUSVDUͷϝϯό ʹؚ·Ε͍ͯΔ͔൑ఆ͢Δॲཧ͕ॏ͍ NBQͷ MPPLVQ • ී௨ʹ΍ΔͳΒ͹

    NFNCFS.BQNBQ<TUSJOH>EFDPEFSΛ࡞͓͍ͬͯͯɺ EFD FYJTUTNFNCFS.BQ<LFZ>ͷΑ͏ʹଘࡏ֬ೝ͢Δ • NBQΑΓ΋ TXJUDIͰςʔϒϧΛ࡞Δํ͕଎͍ • HPKBZ͸ TXJUDIDBTFΛϢʔβʹ࡞ΒͤΔ͔Β଎͍ • KTPOJUFSBUPSHP΋ TUSVDUGJFME͕ ݸ·Ͱͷ΋ͷʹݶΓɺTXJUDIDBTFΛ࢖ͬͨ ςʔϒϧΛ࡞͍ͬͯΔ • HPDDZHPKTPOͰ͸ݱࡏ MPPLVQʹ NBQΛར༻͍ͯ͠Δ • HQFSGΛ࢖ͬͨ׬શϋογϡؔ਺ͷಋೖΛݕ౼ (Pʹ QPSU͍ͯ͠Δͱ͜Ζ • +*5ίϯύΠϥͷಋೖ΋ݕ౼ HPDDZHPKJU
  39. HPDDZHPKJU • IUUQTHJUIVCDPNHPDDZHPKJU • +*5ίϯύΠϧϥΠϒϥϦ • ཪଆ͸ (/6MJCKJU IUUQTXXXHOVPSHTPGUXBSFMJCKJU •

    +*5ίϯύΠϧ͞Εͨػցޠ͔Β (Pͷؔ਺ΛݺͿ͜ͱʹ੒ޭ • DHPͰ $͔Β (Pͷؔ਺ΛݺͿͨΊͷ࢓૊ΈΛԠ༻ • ࠷ऴ໨ඪ͸ KJU&WBM TUSJOH ͷΑ͏ͳ "1*Λ଍͢͜ͱ
  40. ·ͱΊ ࢖͏ଆ͕஌͓͖͍ͬͯͨ͜ͱ • Τϯίʔυɾσίʔυର৅ʹ JOUFSGBDF\^ܕ͕͋Δͱɺ࠷దԽॲཧͷԸܙ Λड͚ʹ͍͘ • ଎͞ΛٻΊΔͳΒɺͪΌΜͱܕ෇͚͠·͠ΐ͏ • KTPO.BSTIBMͱ

    KTPO/FX&ODPEFS &ODPEFͰ͸ &ODPEFͷํ͕଎͘ͳΔ Մೳੑ͕͋Δ • *'తʹ &ODPEF͸ ;FSP"MMPDBUJPOʹ͢Δํ๏͕͋ΔͨΊ • KTPO6ONBSTIBMͱ KTPO/FX%FDPEFS %FDPEF Ͱ͸ 6ONBSTIBM ͷํ͕଎͍ • ڊେͳ +40/Λύʔεͯ͠͠·͏৺഑͕ͳ͍ͳΒɺ 6ONBSTIBMʹ͢Δͱྑ͍
  41. ·ͱΊ ࣮૷ • ύϑΥʔϚϯεΛٻΊΔͳΒΤεέʔϓղੳʹ༏͍͠ίʔυΛॻ͜͏ • JOUFSGBDF\^Ͱड͚Δ *'Ͱ΋ɺ੩తܕ෇͚ͷԸܙΛड͚Δ͜ͱ͸Ͱ͖Δ • ॳճ͸ SFGMFDUͰܕݕࠪͭͭ͠࠷దԽॲཧߏங

    • ճ໨Ҏ߱͸ SFGMFDUͳ͠ͰϙΠϯλԋࢉͰ࠷దԽॲཧΛ࣮ߦ͢Δ • Τϯίʔυॲཧʹ͸ ݴޠॲཧܥͷ7.࣮૷ ͷϊ΢ϋ΢͕࢖͑Δ
  42. 2"