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

カート刷新プロジェクトにおけるOpenAPIを活用したコード自動生成の今と明日 / AStudy20190419

カート刷新プロジェクトにおけるOpenAPIを活用したコード自動生成の今と明日 / AStudy20190419

アスクル社内勉強会で発表した資料です!

Db5e4eb410acdc06c5cee181bbd07d8a?s=128

ASKUL Engineer

April 19, 2019
Tweet

Transcript

  1. த໺ڿਓΞεΫϧגࣜձࣾ "4UVEZ ΞεΫϧࣾ಺ษڧձ Χʔτ࡮৽ϓϩδΣΫτʹ͓͚Δ 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ੒ͷ ࠓͱ໌೔ ͋͢

  2. 8FCΞϓϦέʔγϣϯΤϯδχΞ த໺ڿਓ!/","/0@"LJIJUP IUUQTBDLJOUPTIHJUIVCJPBCPVU

  3. 044׆ಈ w0QFO"1*(FOFSBUPS wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPS w(BOFTIB Ψωʔγϟ  wIUUQTHJUIVCDPNBDLJOUPTIHBOFTIB w4OJEFM εφΠσϧ 

    wIUUQTHJUIVCDPNBDLJOUPTITOJEFM
  4. 8&# %#13&447PM ಛू <ޮ཰ٸ্ঢ>εΩʔϚۦಈ8FC"1*։ൃ ষޙ൒ʙষΛࣥච͍͖ͤͯͨͩ͞·͠ ͨ!ײँ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM

  5. None
  6. ΞεΫϧࣾ಺ษڧձ ฏ੒࠷ޙͷAStudy

  7. ໨࣍ wͳͥίʔυΛࣗಈੜ੒͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτ΍पลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ࡮৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ੒

    w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷௿ݶͷςετ͕ࣗಈతʹ૸Δੈք ίʔυࣗಈੜ੒ͷ׆༻ঢ়گΛ੔ཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ΋ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ௚ ۙͰ΍Γ͍ͨ͜ͱΛ͓࿩͠·͢ʂ
  8. ͳͥਓྨ͸ ίʔυΛࣗಈੜ੒͢ΔͷͩΖ͏͔

  9. ࢈ۀֵ໋ʹΈΔਐԽͷྺ࢙ ୈҰ࣍࢈ۀֵ໋ ୈೋ࣍࢈ۀֵ໋ ୈࡾ࣍࢈ۀֵ໋ ୈ࢛࣍࢈ۀֵ໋

  10. ࢈ۀֵ໋ʹΈΔਐԽͷྺ࢙ ୈҰ࣍࢈ۀֵ໋ ୈೋ࣍࢈ۀֵ໋ ୈࡾ࣍࢈ۀֵ໋ ୈ࢛࣍࢈ۀֵ໋ ػց΍ιϑτ΢ΣΞͰஔ͖׵͑ͯ ޮ཰Խ͍ͯ͘͠ਐԽͷྺ࢙

  11. ίʔυΛॻ͘ͱ͍͏ӦΈʹ͓͚ΔਐԽ wίʔυͷࣗಈੜ੒ʹΑͬͯ։ൃΛࢧԉ͢Δπʔϧͨͪ wఆܕతͳίʔυ͸πʔϧʹ೚ͤΔ͜ͱͰ։ൃऀ͸ੜ࢈ੑΛߴΊɺۀ຿ϩδοΫ ʹूதͰ͖Δ ϘΠϥʔϓϨʔτίʔυͷੜ੒ पลπʔϧʹΑΔίʔυੜ੒ͷαϙʔτ ίʔυੜ੒Λ಺แͨ͠ύϥμΠϜ IUUQTQSPKFDUMPNCPLPSH IUUQTXXXKFUCSBJOTDPNJEFB IUUQTPQFOBQJHFOFSBUPSUFDI

    IUUQTXXXKIJQTUFSUFDI IUUQTHSBQIRMDPEFHFOFSBUPSDPN IUUQTHSQDJP
  12. ͭ·ΓɺਐԽͷͨΊ

  13. None
  14. ໨࣍ wͳͥίʔυΛࣗಈੜ੒͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτ΍पลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ࡮৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ੒

    w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷௿ݶͷςετ͕ࣗಈతʹ૸Δੈք ίʔυࣗಈੜ੒ͷ׆༻ঢ়گΛ੔ཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ΋ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ௚ ۙͰ΍Γ͍ͨ͜ͱΛ͓࿩͠·͢ʂ
  15. OpenAPI

  16. 0QFO"1*֓ཁ IUUQTHJUIVCDPN0"*0QFO"1*4QFDJpDBUJPO The OpenAPI Specification w0QFO"1* 0QFO"1*TQFDJpDBUJPO  wچ4XBHHFSTQFDJpDBUJPO w3&45"1*ͷ࢓༷Λهड़͢ΔϑΥʔϚοτ

    w0QFO"1**OJUJBUJWF w0QFO"1*ͷϑΥʔϚοτΛਪਐ͢Δஂମ w.JDSPTPGUɺ(PPHMFɺ*#.ɺ4NBSU#FBSͳͲ͕ ࢀՃ
  17. w೥݄0QFO"1**OJUJBUJWF݁੒ w೥݄4XBHHFSTQFDJpDBUJPO͕0QFO"1**OJUJBUJWFʹدଃ͞ΕΔ w4XBHHFSTQFDJpDBUJPO͕0QFO"1*TQFDJpDBUJPOʹϦωʔϜ͞ ΕΔ w೥݄0QFO"1*TQFDJpDBUJPOϦϦʔε w೥݄ݱࡏͷόʔδϣϯ͸0QFO"1*TQFDJpDBUJPO 0QFO"1*ྺ࢙ 4XBHHFSϓϩδΣΫτ 0QFO"1**OJUJBUJWF 0QFO"1*TQFD

    4XBHHFSTQFD 4XBHHFSUPPMT
  18. 0QFO"1*ϑΥʔϚοτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

  19. 0QFO"1*ϑΥʔϚοτ ϝλ৘ใ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

  20. 0QFO"1*ϑΥʔϚοτ ΤϯυϙΠϯτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

  21. 0QFO"1*ϑΥʔϚοτ ίϯϙʔωϯτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS

  22. पลπʔϧ

  23. 0QFO"1*पลπʔϧ w 4XBHHFS&EJUPS w 0QFO"1*υΩϡϝϯτ εΩʔϚ ͷهड़Λࢧԉ w IUUQTFEJUPSTXBHHFSJP w

    4XBHHFS6* w "1*࢓༷Λࢹ֮ԽɺΠϯλϥΫςΟϒͳ"1*ૢ࡞ w IUUQTQFUTUPSFTXBHHFSJP w 0QFO"1*(FOFSBUPS w 0QFO"1*υΩϡϝϯτ͔ΒιʔείʔυΛࣗಈੜ੒ w IUUQTPQFOBQJHFOFSBUPSUFDI IUUQTPQFOBQJUPPMT
  24. εΩʔϚۦಈ։ൃ

  25. εΩʔϚۦಈ։ൃ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM ͸͡ΊʹΈΜͳͰ8FC"1*ͷ࢓༷Λ૬ஊܾͯ͠Ίͯ 0QFO"1*υΩϡϝϯτΛهड़ͯ͠ पลπʔϧΛ׆༻ͯ͠։ൃΛޮ཰Խ͢Δ ։ൃνʔϜશମͷϫʔΫϑϩʔ εΩʔϚͰ։ൃΛۦಈ͢Δ͜ͱ

  26. εΩʔϚۦಈ։ൃͱपลπʔϧ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք 0QFO"1*υΩϡϝϯτͷهड़ ࢓༷ͷڞ༗ɾ֬ೝ ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ ςετίʔυͷࣗಈੜ੒

    Swagger Editor Swagger UI OpenAPI Generator
  27. 0QFO"1*υΩϡϝϯτͷهड़ ࢓༷ͷڞ༗ɾ֬ೝ Swagger Editor Swagger UI ίʔυࣗಈੜ੒ͷԸܙ͸େ͖͍ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք

    ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ςετίʔυͷࣗಈੜ੒ OpenAPI Generator ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ
  28. ໨࣍ wͳͥίʔυΛࣗಈੜ੒͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτ΍पลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ࡮৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ੒

    w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷௿ݶͷςετ͕ࣗಈతʹ૸Δੈք ίʔυࣗಈੜ੒ͷ׆༻ঢ়گΛ੔ཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ΋ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ௚ ۙͰ΍Γ͍ͨ͜ͱΛ͓࿩͠·͢ʂ
  29. Χʔτ࡮৽ϓϩδΣΫτ

  30. Χʔτ࡮৽ϓϩδΣΫτ w-0)"$0ͷچ0SEFSγεςϜΛ৽"1*ج൫γεςϜʹҠߦ͢Δ wϓϩδΣΫτ໊UJBNBU ςΟΞϚτ  wϨΨγʔΛ୤٫͠ɺ։ൃޮ཰΍αʔϏεͷ඼࣭Λ޲্͢Δ wΧʔτɾϨδը໘Λര଎Խ͢Δ շదͳ͓ങ͍෺ମݧͷఏڙ

  31. Χʔτ࡮৽ϓϩδΣΫτͷͬ͘͟Γͨ͠ਤ #'' ഑ૹ ঎඼ Ϣʔβʔ ஫จ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY

    ,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1* 1SPUPDPM#V⒎FST "1*࢓༷ɾεΩʔϚఆٛ
  32. "1*࢓༷ɾεΩʔϚఆٛ ഑ૹ ঎඼ Ϣʔβʔ ஫จ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY ,PUMJO+BWB 4QSJOH#PPU

    "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1*Λ΋ͱʹͨ͠ίʔυੜ੒ͷ׆༻ঢ়گ "1*ج൫ 0QFO"1* 1SPUPDPM#V⒎FST #'' #''ͰͷϞσϧΫϥεੜ੒ͷΈ
  33. 0QFO"1*υΩϡϝϯτͷهड़ ࢓༷ͷڞ༗ɾ֬ೝ Swagger Editor Swagger UI ίʔυࣗಈੜ੒׆༻ͷ༨஍͸͋Δ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք

    ελϒੜ੒ػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ςετίʔυͷࣗಈੜ੒ OpenAPI Generator ੜ੒ͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜ੒ͨ͠ΫϥΠΞϯτΛར༻ͨ͠޻਺࡟ݮ
  34. "1*࢓༷ɾεΩʔϚఆٛ ഑ૹ ঎඼ Ϣʔβʔ ஫จ ,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ

    ׆༻ͷ༨஍͸͋Δ"1*ΫϥΠΞϯτ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY 0QFO"1* 1SPUPDPM#V⒎FST #'' ίϧʔνϯͰ࢖͍΍͍͢Α͏ʹ 8FC$MJFOUΛಠࣗʹϥοϓͨ͠Ϋϥε Λ࢖͍ͬͯΔͷͰɺ ࣗಈੜ੒ͷ׆༻͸೉͍͔͠΋ "1*ΫϥΠΞϯτͷࣗಈੜ੒
  35. "1*࢓༷ɾεΩʔϚఆٛ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY 5ZQF4DSJQU +2VFSZ ׆༻ͷ༨஍͸͋Δ"1*αʔόʔ #'' ,PUMJO+BWB 4QSJOH#PPU

    "QBDIF$BNFM ഑ૹ ঎඼ Ϣʔβʔ ஫จ "1*ج൫ 0QFO"1* 1SPUPDPM#V⒎FST ελϒੜ੒Λར༻ͨ͠εΩϟϑΥʔϧσΟϯά ࠾༻͍ͯ͠Δٕज़͕ɺ 0QFO"1*(FOFSBUPS͕ੜ੒͢Δ ελϒͷίʔυͱҧ͏ͷͰ࢖͑ͳ͍͔΋
  36. ׆༻ͷ༨஍͸͋Δ΋ͷͷ #'' ഑ૹ ঎඼ Ϣʔβʔ ஫จ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY

    ,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1* 1SPUPDPM#V⒎FST "1*࢓༷ɾεΩʔϚఆٛ ಋೖͷखؒʹݟ߹͏͚ͩͷޮՌ͕ಘΒΕΔ͔Ͳ͏͔ ඍົͳ͜ͱ͕ଟ͔ͬͨ ໨త͸ɺίʔυࣗಈੜ੒ͷ׆༻Ͱ͸ͳ͘։ൃͷੜ࢈ੑΛ্͛Δ͜ͱ ͦ͜Ͱ
  37. APIͷE2Eςετ(ͷҰ෦)Λ ࣗಈੜ੒͍ͨ͠

  38. εΩʔϚۦಈ։ൃ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM ୈষ0QFO"1*ʹΑΔεΩʔϚۦಈ։ൃ ʮεΩʔϚΛ༻͍ͯ࢓༷ͱ࣮૷ͷҰகΛࣗಈςετ͢Δʯ 3VCZPO3BJMTͰ࣮૷ͨ͠"1*αʔόͷϨεϙϯε ͕ɺ0QFO"1*υΩϡϝϯτͱဃ཭͍ͯ͠ͳ͍͔ࣗ ಈతʹνΣοΫ͢Δ࣮૷Λ঺հ͍ͯ͠Δɻ 34QFD PBT@QBSTFS KTPO@TDIFNB

    $PNNJUUFF
  39. IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM εΩʔϚۦಈ։ൃ ୈষ0QFO"1*ʹΑΔεΩʔϚۦಈ։ൃ ʮεΩʔϚΛ༻͍ͯ࢓༷ͱ࣮૷ͷҰகΛࣗಈςετ͢Δʯ 3VCZPO3BJMTͰ࣮૷ͨ͠"1*αʔόͷϨεϙϯε ͕ɺ0QFO"1*υΩϡϝϯτͱဃ཭͍ͯ͠ͳ͍͔ࣗ ಈతʹνΣοΫ͢Δ࣮૷Λ঺հ͍ͯ͠Δɻ 34QFD PBT@QBSTFS KTPO@TDIFNB

    $PNNJUUFF Χʔτ࡮৽ϓϩδΣΫτ͕࠾༻͍ͯ͠Δٕज़Ͱ Ͳ͏࣮ݱ͢Δ͔
  40. Spring Cloud Contract (SCC)

  41. 4QSJOH$MPVE$POUSBDU 4$$ w$POTVNFS%SJWFO$POUSBDUT $%$ EFWFMPQNFOU w IUUQXXXTFSWJDFEFTJHOQBUUFSOTDPN8FC4FSWJDF&WPMVUJPO$POTVNFS%SJWFO$POUSBDUT w"1*ར༻ऀ͕ظ଴͢ΔڍಈΛυΩϡϝϯτԽ͢Δ $POUSBDU 

    w"1*ར༻ऀఏڙऀͷ૒ํ͕$POUSBDUΛ΋ͱʹςετΛߦ͏͜ͱͰ඼࣭Λอ ͪͳ͕ΒχʔζΛຬͨ͢։ൃΛߦ͏ w4QSJOH$MPVE$POUSBDU͸$%$ͷ࣮ફΛαϙʔτ͢Δπʔϧ w$POUSBDUͷهड़͸(SPPWZͱ:".-͕࢖͑Δ w$POUSBDU͔Βελϒαʔό΍ςετΛࣗಈੜ੒Ͱ͖Δ IUUQTHJUIVCDPNTQSJOHDMPVETQSJOHDMPVEDPOUSBDU
  42. 4QSJOH$MPVE$POUSBDU 4$$ $POUSBDU (SPPWZ%4- ࣗಈੜ੒͞ΕΔςετίʔυ

  43. 4$$ͷ$POUSBDUͱ0QFO"1*υΩϡϝϯτͷҧ͍ w4$$ͷ$POUSBDU wϦΫΤετ˓˓˓Λૹ৴ͨ͠ΒɺϨεϙϯº͕ฦͬͯ͘Δ
 ˠʮετʔϦʔʯ w0QFO"1*υΩϡϝϯτ wड෇͚ΔϦΫΤετύϥϝʔλ໊͸9ɺܕ͸99
 ฦ͢Ϩεϙϯεͷߏ଄͸:ɺܕ͸::
 ˠʮ࢓༷ʯ ߏ଄΍ܕΛఆٛ͢Δ͚ͩ

  44. $POUSBDUΛ0QFO"1*υΩϡϝϯτʹຒΊࠐΉͱ͍͏ൃ૝ w0QFO"1*υΩϡϝϯτͷ֦ுྖҬʹ$POUSBDU :".-%4- ΛຒΊࠐΉ͜ͱͰɺఆٛ಺༰ͷॏෳΛഉআ͠ɺ୯ҰͷυΩϡ ϝϯτͰ࢓༷ͱετʔϦʔΛ؅ཧՄೳʹͳΔ w0QFO"1* $POUSBDUͷυΩϡϝϯτΛίϯόʔλʹ௨͢͜ͱ ͰɺετʔϦʔ෦෼Λݕূ͢ΔςετίʔυΛੜ੒͢Δ IUUQTHJUIVCDPNTQSJOHGSBNFXPSLHVSVTQSJOHDMPVEDPOUSBDUPB 4QSJOH$MPVE$POUSBDU0QFO"1*$POUSBDU$POWFSUFS

    +PIO5IPNQTPO !TQSJOHGSBNFXPSLHVSV IUUQTTQSJOHGSBNFXPSLHVSVEFpOJOHTQSJOHDMPVEDPOUSBDUTJOPQFOBQJ
  45. $POUSBDUΛ0QFO"1*υΩϡϝϯτʹຒΊࠐΉͱ͍͏ൃ૝ ϦΫΤετ Ϩεϙϯε

  46. ΍Γ͍ͨࣄͱͪΐͬͱҧ͏ ͜Ε͸͜ΕͰૉఢ͚ͩͲ

  47. 0QFO"1*υΩϡϝϯτ͔ΒςετίʔυΛੜ੒͍ͨ͠ w"1*αʔό͕ฦ͢Ϩεϙϯεͷߏ଄͕0QFO"1*υΩϡϝϯτͷͦΕͱဃ཭ͯ͠ ͍ͳ͍͔ςετ͍ͨ͠ w $POUSBDUͳͲ͸ॻ͔ͣʹૉͷ 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱɺ࠷௿ݶ ͷςετ ˞ ͕ࣗಈతʹ૸Δੈք w

    ˞ 0QFO"1*͸ʮ࢓༷ʯͷهड़͚ͩͳͷͰɺςετͰ͖Δ͜ͱ͸ݶΒΕΔ w͕ɺϨεϙϯεͷߏ଄͸ςετͰ͖Δ
  48. 4QSJOH$MPVE$POUSBDU0QFO"1* w0QFO"1*υΩϡϝϯτͷఆٛΛ4$$ͷ$POUSBDUʹ ม׵͢Δ(SBEMF.BWFOϓϥάΠϯ wϨεϙϯεͷߏ଄Λςετ͢Δ$POUSBDUʹม׵ͯ͠ ςετίʔυΛੜ੒͢Δ IUUQTHJUIVCDPNBDLJOUPTITQSJOHDMPVEDPOUSBDUPQFOBQJ ແ͍ͳΒ࡞Ε͹͍͍

  49. 4QSJOH$MPVE$POUSBDU0QFO"1* ಈ࡞Πϝʔδ 0QFO"1*υΩϡϝϯτ 4QSJOH$MPVE$POUSBDU0QFO"1* 4$$Λར༻ͯ͠$POUSBDU͔Β ςετίʔυΛੜ੒ 0QFO"1*υΩϡϝϯτʹఆٛ͞Ε͍ͯΔ Ϩεϙϯεͷߏ଄Λ$POUSBDUΦϒδΣΫτʹม׵

  50. 4QSJOH$MPVE$POUSBDU0QFO"1* w·ͩ࡞Γ࢝Ίͨ͹͔Γ wͱΓ͋͑ͣςετ͕ੜ੒͞ΕΔ ಈ࡞͢Δ͔ෆ໌ ͷϨϕϧ w࣮༻Ϩϕϧʹ࢓্࣮͛ͯࡍʹ׆༻͍͖͍ͯͨ͠ wΞεΫϧͷ044ͱͯ͠ҭ͍͖͍ͯͯͨ

  51. ίʔυࣗಈੜ੒Λ׆༻ͯ͠ ໌೔དྷΔΤϯδχΞϦϯάΛʂ ΞεΫϧ