OpenAPI(Swagger)によるWebDriverの記述と、この星の上のさまざまな物への実験的なWebDriver実装

 OpenAPI(Swagger)によるWebDriverの記述と、この星の上のさまざまな物への実験的なWebDriver実装

OpenAPI(Swagger)によるWebDriverの記述と、この星の上のさまざまな物への実験的なWebDriver実装 @ SeleniumConf Tokyo 2019 事前勉強会 2019年3月24日

2af87ef1660751fb623d42425bcfa508?s=128

Toda Hiroshi

March 24, 2019
Tweet

Transcript

  1. 0QFO"1* 4XBHHFS ʹΑΔ8FC%SJWFSͷهड़ͱɺ ͜ͷ੕ͷ্ͷ͞·͟·ͳ෺΁ͷ ࣮ݧతͳ8FC%SJWFS࣮૷ ೥݄೔ ށా ޿

  2. ࣗݾ঺հ • ށా ޿ʢͱͩ ͻΖ͠ʣ !IJSPTIJUPEB • ೥ੜ·Ε ࠓ೥Ͱࡀ •

    σΟʔϓϥʔχϯάͱ"QQJVNΛར༻ͨ͠ ςετࣗಈԽ4BB4ʮ.BHJD1PEʯӡӦʹɺ ೥͔Βͪ·ͪ·ɺ೥͔Βͦͦ͜͜ ࢀՃ͍ͯ͠·͢ɻ • ೥ʹʮ4FMFOJVN࣮ફೖ໳ʯ ೥ʹ ʮΤΩεύʔτ͕ڭ͑Δ4FMFOJVN࠷લઢʯ ڞஶ͠·ͨ͠ɻͥͻ͓ങ͍ٻΊ͍ͩ͘͞ʂ
  3. ˞.BHJD1PEͷ͝঺հ˞ • ʮ.BHJD1PEʯ͸ɺಋೖͷෑډ͕ߴ͘ͳΓ͕ͪͳ ωΠςΟϒΞϓϦͷࣗಈςετΛ ͔ΜͨΜʹ࢝ΊΒΕΔςετࢧԉαʔϏεͰ͢ɻ • 8FC%SJWFS"1*ʹ४ڌͨ͠ωΠςΟϒΞϓϦࣗಈૢ࡞πʔϧ ʮ"QQJVNʯΛར༻͍ͯ͠·͢ɻ • σΟʔϓϥʔχϯάΛ׆༻ͨ͠ΞϓϦ6*ͷࣗಈൃݟ΍

    8FC(6*্Ͱͷςετ߲໨࡞੒ػೳ΋૊Έ߹Θͤͯɺ ςετ߲໨දΛ࡞ΔΑ͏ͳ؆୯ͳૢ࡞Ͱ ࣗಈςετͷ͘͠ΈΛ࡞Ε·͢ɻ • IUUQTNBHJDQPEDPN
  4. ࠓ೔࿩͢͜ͱ ೥݄ʹ8$קࠂͱͳͬͨ8FC%SJWFS"1*Λɺ 8FC"1*࢓༷Λهड़Ͱ͖Δ0QFO"1* 4XBHHFS ͱ ߹ମͤͨ͞ΒΑ͛͞Ͱ͸ʁͱ͍͏ఏҊΛ͠·͢ʂ  8FC%SJWFSͬͯͳΜ͚ͩͬʁ  0QFO"1*

    4XBHHFS ͬͯͳΜ͚ͩͬʁ  8FC%SJWFS "1*Λ0QFO"1*ܗࣜͰදݱͯ͠ΈΑ͏  4XBHHFS$PEFHFOͰ8FC%SJWFS"1*ελϒΛ࡞Ζ͏  8FC%SJWFS"1*ελϒΛར༻ͯ͠ ࣗ෼ͳΓͷ %SJWFSΛ࡞ͬͯΈΑ͏
  5. 8FC%SJWFSͬͯ ͳΜ͚ͩͬʁ

  6. 8FC%SJWFSͬͯͳΜ͚ͩͬʁ • ϒϥ΢βʔ͕࣮૷͍ͯ͠ͳ͚Ε͹ͳΒͳ͍ ࣗಈૢ࡞ͷͨΊͷΠϯλʔϑΣΠεͰ͢ɻ • ௨৴ϓϩτίϧ͸)551Ͱɺ3&45ͬΆ͍ΠϯλʔϑΣΠεͰ͢ɻ • ଟ͘ͷ৔߹ɺϒϥ΢βʔࣗମͰ͸ͳ͘ DISPNFESJWFS΍HFDLPESJWFS౳ͷ࿩ͷΘ͔ΔΞΠπ͕ ϒϥ΢βʔͱͷ஥հ໾ͱ࣮ͯ͠૷͍ͯ͠·͢ɻ

  7. 8FC%SJWFSͬͯͳΜ͚ͩͬʁ ΋͏ͪΐͬͱߟ͑ͯΈΑ͏ • ͭ·Γ͜Ε͸ɺࡶʹݴͬͪΌ͍·͢ͱɺ )551ͱϒϥ΢βʔݻ༗ͷࣗಈૢ࡞ϓϩτίϧͱͷ ૬ޓม׵ϓϩΩγʔ͕ɺϒϥ΢βʔଆΛӅณ͢Δ͜ͱͰɺ 8FCϒϥ΢βʔΛ͔͋ͨ΋8FCΞϓϦͷΑ͏ʹͯ͠ ࣗಈૢ࡞͢ΔͨΊͷ͘͠Έɺͱݴ͍׵͑ΒΕ·͢ɻ ϒϥ΢βʔ REST

    API ʢϓϩΩγʣ WebΞϓϦͬΆ͘ݟ͑ΔྖҬ ΫϥΠΞϯτ HTTP
  8. ͱ͍͏͜ͱ͸Ͱ͢Ͷ • զʑ͕8FCΞϓϦ։ൃͰར༻͍ͯ͠Δ ͞·͟·ͳศརπʔϧ͕ɺ ࣮͸8FC%SJWFSͰ΋ྑ͍ײ͡ʹ࢖͑ͪΌ͏৔߹͕ ͚ͬ͜͏͋ΔΜ͡Όͳ͍Ͱ͠ΐ͏͔ʂ ʢΈͳ͞ΜҰ౓͸ߟ͑·͢ΑͶʁ ߟ͑·ͤΜ͔ʁʣ • ࠓճ͸0QFO"1*ͷ࣮૷Ͱ͋Δ4XBHHFS͕

    8FC%SJWFSʹͱͬͯ໾ʹཱͭͷͰ͸ʁ ͱߟ͑ͯ υπϘʹ͸·͍͖ͬͯ·͢ɻ ࠷ޙ·Ͱ͕Μ͹Γ·͠ΐ͏ɻ
  9. 0QFO"1* 4XBHHFS ͬͯ ͳΜ͚ͩͬʁ

  10. 0QFO"1* 4XBHHFS ͬͯͳΜ͚ͩͬʁ • IUUQTXXXPQFOBQJTPSH • 3&45"1*ͷ࢓༷ఆٛΛ :".-+40/Ͱॻ͚ͪΌ͏΍͕ͭ0QFO"1*Ͱ͢ɻ • 4XBHHFS

    IUUQTTXBHHFSJP Λϕʔεʹ࡞ΒΕ͍ͯ·͢ɻ • Ͱ͖͕͋ͬͨ0QFO"1*ܗࣜͷ:".-+40/Λ πʔϧʮ4XBHHFS$PEFHFOʯʹ৯Θͤͯɺ "1*ͷελϒαʔόʔΛ ೚ҙͷݴޠɾϑϨʔϜϫʔΫͰ࡞ΕͪΌͬͨΓ͠·͢ʂ • ελϒαʔόʔͷίʔυʹ࣮૷Λੜ΍ͤ͹ υΩϡϝϯτͱಈ࡞ͷҰகͨ͠3&45"1*Λ࡞ΕΔͱ͍͏Θ͚ɻ
  11. • BTQOFUDPSF • DTIBSQ • DTIBSQEPUOFU • EZOBNJDIUNM • IUNM

    • IUNM • KBWB • KBYSTDYGDMJFOU • KBYSTDYG • JOGMFDUPS • KBYSTDYGDEJ • KBYSTTQFD • KBYSTKFSTFZ • KBYSTEJ • KBYSTSFTUFBTZFBQ • KBYSTSFTUFBTZ • TQSJOH • OPEFKTTFSWFS • PQFOBQJ • PQFOBQJZBNM • LPUMJODMJFOU • LPUMJOTFSWFS • QIQ • QZUIPO • TDBMB • TDBMBBLLBIUUQTFSWFS • TXJGU • TXJGU • UZQFTDSJQUBOHVMBS 4XBHHFS $PEFHFO͕ඪ४ରԠ͍ͯ͠ΔϓϥοτϑΥʔϜͷྫ
  12. 0QFO"1* 4XBHHFS ͬͯͳΜ͚ͩͬʁ • 8FCΤσΟλʔʮ4XBHHFS&EJUPSʯͰ ͙͢ʹࢼͤ·͢ʂ IUUQTFEJUPSTXBHHFSJP

  13. ϯοʢ3&45"1*ʁʣ

  14. 8FC%SJWFS"1*Λ 0QFO"1*ܗࣜͰ දݱͯ͠ΈΑ͏

  15. ͓લ͸ԿΛݴ͍ͬͯΔΜͩ • DISPNFESJWFS΍HFDLPESJWFSͳͲɺ طଘͷ࿩ͷΘ͔ΔΞΠπ͸ ϒϥ΢βʔ͝ͱʹҟͳΔίʔυϕʔε͔Βͳ͍ͬͯ·͢ɻ • ԣʹͦΕ·͕͢HFDLPESJWFS͸3VTUͰॻ͔Ε͍ͯΔɺ͔͍͍ͬ͜ • Կ͔৽͘͠8FC%SJWFSରԠͷΞΠπΛ࡞Ζ͏ͱ͢Δͱ θϩ͔Βελʔτ͠ͳ͚Ε͹ͳΓ·ͤΜɻ

    • ҰԠ ࠓͰ΋TFMFOJVNBUPNTͱ͍͏ +4޲͚ͷڞ௨ίʔυϕʔε͕ҡ࣋͞Ε͍ͯΔΑ͏ͳΜͰ͕͢ɺ Έͳ͞Μ஌Βͳ͍Ͱ͢ΑͶʁ • ҎલͪΐͬͱಡΜͰΈ͚ͨͲ࢖͍ํ͕Α͘Θ͔Μͳ͔ͬͨɻɻɻ
  16. ͓લ͸ԿΛݴ͍ͬͯΔΜͩ • ೥ͷ4FMFOJVN$POG 6,Ͱ͸ "QQJVNϓϩδΣΫτͷ+POBUIBO-JQQT͕ɺ ͍Ζ͍ΖͳϓϥοτϑΥʔϜΛ8FC%SJWFSͰͭͳ͛Δ ʮ4UBS%SJWFS %SJWFS ʯͳΜͯߏ૝ʹ৮Ε͍ͯͯ ΊͬͪΌϫΫϫΫͨ͠΋ͷͰ͢ɻ

    • ͨͩɺݱঢ়ͷ··Ͱ͸ϓϥοτϑΥʔϜ͝ͱʹ θϩ͔ΒυϥΠόʔΛ࡞Δ͜ͱʹͳΔͷͰɺ ͪΐͬͱෑډͷߴ͍࿩ʹͳͬͯΔΜ͡Όͳ͍͔ͳʔ ͱࢥ͍·͢ɻ
  17. ͓લ͸ԿΛݴ͍ͬͯΔΜͩ

  18. ͓લ͸ԿΛݴ͍ͬͯΔΜͩ • Ͱ΋ͿͬͪΌ͚3&45ͬΆ͍"1*ͷ ΤϯυϙΠϯτͷίʔυͳΜͯ ԿͰͲ͏ॻ͍ͯ΋͍͍ͩͨಉ͡͡Όͳ͍Ͱ͔͢ɻ ͦ͏͍͏ͷθϩϕʔεͰॻ͘ੈք؍ͬͯ ͩΔ͘ͳ͍Ͱ͔͢ʁ • Կ͔8FC%SJWFS"1*ͷ4DBGGPMEJOHπʔϧ͕͋Ε͹ ෑډ͕͙ͬͱ௿͘ͳΔΜ͡Όͳ͍ΜͰ͔͢Ͷʔɻ

    • Ξο 4XBHHFSʂʂ
  19. ͱ͍͏Θ͚Ͱ8FC%SJWFS"1*Λ0QFO"1*ܗࣜͰදݱͯ͠ΈΑ͏ • ·ͣ͸ɺ8FC%SJWFS"1*Λ0QFO"1*ͷॻࣜʹ ஍ಓʹམͱ͠ࠐΜͰΈ·͠ΐ͏ɻ • 8FC%SJWFS"1*ͷ࢓༷͸࣍ͷ63-͔ΒࢀরͰ͖·͢ɻ IUUQTXXXXPSH53XFCESJWFS • ༨ஊͰ͕͢ɺ࣍ͷόʔδϣϯʹ޲͚ͨυϥϑτ൛͕ (JU)VC্Ͱܧଓతʹ࡞ΒΕ͍ͯ·͢ɻ

    ΈΜͳ͕Ұ౓͸೰Ή#"4*$ೝূͱ͔΋ٞ࿦͕ਐΜͰ͍·͢ʂ IUUQTXDHJUIVCJPXFCESJWFS
  20. ͜Ε͕ɺ

  21. ͜͏͡Όʂ

  22. Ͷͬɺ͔ΜͨΜͰ͠ΐʁ • ද͔Βࣗಈม׵ͯ͠஍ಓʹॻ͖଍ͨ͠Βɺ ࠷௿ݶͷهड़͚ͩͰ  ߦ͘Β͍ͷ:".-ʹͳͬͨɻɻɻ • SFG ߏจΛ࢖͏ͱɺ෼ׂͨ͠ϑΝΠϧΛࢀরͨ͠Γ ಉ͡هड़Λίϐϖͤͣʹ࠶ར༻ͨ͠ΓͰ͖·͢ɻ

    • ͕Μ͹Γ·͠ΐ͏ɻ
  23. 4XBHHFS$PEFHFOͰ 8FC%SJWFS"1*ελϒΛ࡞Ζ͏

  24. 4XBHHFSͷπʔϧ܈ • 0QFO"1*ܗࣜͷ3&45"1*࢓༷ॻΛ࡞Δ͏͑Ͱͷ Φʔϓϯιʔεͷࢧԉπʔϧͱͯ͠ɺ 4NBSU#FBS͕ࣾ։ൃΛओಋ͍ͯ͠Δ΋ͷ͕ͭ͋Γ·͢ɻ • 4XBHHFS&EJUPS • ϒϥ΢βʔϕʔεͷ0QFO"1*ΤσΟλʔͰ͢ɻ •

    4XBHHFS 6* • 0QFO"1*ܗࣜͷσʔλΛ "1*࢓༷ॻͷ)5.-ʹϨϯμϦϯά͢ΔπʔϧͰ͢ɻ • 4XBHHFS$PEFHFO • 0QFO"1*ܗࣜͷσʔλ͔Βɺ༷ʑͳϓϥοτϑΥʔϜͷ ΫϥΠΞϯτ ·ͨ͸αʔόʔ࣮૷ͷίʔυΛ ࣗಈੜ੒͢ΔπʔϧͰ͢ɻ
  25. 4XBHHFS$PEFHFOΛ࢖ͬͯΈΑ͏ʢ/PEF+4ʣ • 4XBHHFS$PEFHFOΛΠϯετʔϧ͠·͠ΐ͏ɻ • ˞ࠓճ͸NBD04Ͱͷ࿩͔͠͠·ͤΜɻ͝ΊΜͳ͍͞ɻ • ࣍ʹɺ࡞੒ࡁΈͷ0QFO"1*ܗࣜͷϑΝΠϧ͔Β αʔόʔελϒΛࣗಈੜ੒͠·͠ΐ͏ɻ ࠓճ͸/PEF+4Ͱੜ੒͠·͢ɻ $

    brew install swagger-codegen $ swagger-codegen generate -i [࡞੒ͨ͠0QFO"1*ܗࣜͷϑΝΠϧ] -l nodejs-server -o [ࣗಈੜ੒ίʔυͷग़ྗઌσΟϨΫτϦʔ]
  26. 4XBHHFS$PEFHFOΛ࢖ͬͯΈΑ͏ʢ/PEF+4ʣ • Կ͔ग़͖ͯͨʂ • ϑϨʔϜϫʔΫʮ$POOFDUʯ͕ϕʔεͱͳ͍ͬͯ·͢ɻ IUUQTHJUIVCDPNTFODIBMBCTDPOOFDU

  27. 4XBHHFS$PEFHFOΛ࢖ͬͯΈΑ͏ʢ/PEF+4ʣ • ੜ੒͞Εͨ3&"%.&NEͷهड़ʹ͕ͨͬͯ͠ɺ ґଘύοέʔδΛΠϯετʔϧͯ͠ αʔόʔΛಈ͔ͯ͠Έ·͠ΐ͏ɻ • Ϩεϙϯεσʔλͷྫ·Ͱ:".-ʹॻ͍͓ͯ͘ͱ ྫͦͷ··ͷ+40/͕ฦΔͱ͜Ζ·Ͱ͸ੜ੒͞Ε·͢ɻ • ҰԠɺ8$קࠂͷͱ͓Γͷ

    ΤϯυϙΠϯτʹΞΫηεͰ͖ΔΑ͏ʹͳΓ·ͨ͠Αʂ $ npm start $ curl -X POST "http://localhost:8080/session" -H "accept: application/json” -H ”Content-Type: application/json”
  28. 4XBHHFS$PEFHFOΛ࢖ͬͯΈΑ͏ʢ/PEF+4ʣ • αʔόʔͷಈ࡞ςετʹ͸ɺόϯυϧ͞Ε͍ͯΔ 4XBHHFS6*ͷը໘্ͷΫϥΠΞϯτػೳ΋࢖͑·͢ɻ • σϑΥϧτͰ͸ IUUQMPDBMIPTUEPDT ʹ ΞΫηεͯ֬͠ೝͰ͖·͢ɻ

  29. 8FC%SJWFS"1*ελϒΛ࢖ͬͯ ࣗ෼ͳΓͷ %SJWFSΛ ࡞ͬͯΈΑ͏

  30. ࣗ෼ͳΓͷ %SJWFSΛ࡞ͬͯΈΑ͏ • 4FMFOJVNίϛολʔͷ ެࣜαϙʔτൣғʹؚ·Ε͍ͯͳ͍ ϒϥ΢βʔ΍ॲཧܥ͸͍Ζ͍Ζ͋Γ·͢ɻ • ن֨४ڌͷϒϥ΢βʔυϥΠόʔΛ ͱΓ͋͑ͣࣗ࡞Ͱ͖ΔͱͳΕ͹ɺ ެࣜʹ͸αϙʔτ͞Ε͍ͯͳ͍χονͳྖҬʹ΋

    8FC%SJWFSΛద༻͠΍͘͢ͳΓ·͢ΑͶʂ
  31. +4%0.%SJWFSΛ࡞ͬͯΈΑ͏ • ࠓճ͸χονͳ࣮૷ྫͱͯ͠ɺ /PEF+4Ͱ͚ͩ࢖͑Δߴ଎ͳ%0.ύʔαʔ ʮ+4%0.ʯΛ૊ΈࠐΜͩϔουϨευϥΠόʔΛ ઌ΄Ͳੜ੒ͨ͠/PEF+4αʔόʔͷίʔυΛར༻ͯ͠ Ұ෦ ࣮૷ͯ͠Έ·͢ɻ • ͳ͓ɺ+4%0.ʹ8FC%SJWFS"1*Λ͚࣮ͬͭͨ͘૷͸

    طʹʮUBYJSBOLʯͱ͍͏΋ͷ͕͋Γ·͢ɻ IUUQTHJUIVCDPN'PSCFT-JOEFTBZUBYJSBOL
  32. +4%0.%SJWFSΛ࡞ͬͯΈΑ͏ • ࣮૷͢Δ"1*͸࣍ͷͭͱ͠·͢ɻ • 1045TFTTJPO • 8FC%SJWFSͷηογϣϯΛ։࢝͠·͢ɻ • 1045TFTTJPO\4&44*0/@*%^VSM •

    1045σʔλͰࢦఆͨ͠63-ʹભҠ͠·͢ɻ • 1045 TFTTJPO\4&44*0/@*%^FMFNFOU • ը໘ભҠ͢Δ·Ͱ༗ޮͳɺҰ࣌తͳཁૉ*%Λऔಘ͠·͢ɻ • 1045 TFTTJPO\4&44*0/@*%^FMFNFOU\&-&.&/5@*%^DMJDL • ը໘ભҠ͢Δ·Ͱ༗ޮͳ*%ΛऔಘࡁΈͷཁૉΛΫϦοΫ͠·͢ɻ • %&-&5&TFTTJPO\4&44*0/@*%^ • 8FC%SJWFSͷηογϣϯΛऴྃ͠·͢ɻ
  33. /PEF+4ͷ৔߹ɺ͍͡Δίʔυ͸͜Ε͚ͩ • ࠷௿ݶ \130+&$5@3005^TFSWJDF഑Լͷ࣮૷Λ ͍͡Ε͹ܗʹͳΓ·͢ɻ

  34. ࣗಈੜ੒͞Εͨελϒʹ࣮૷Λੜ΍ͦ͏ • ࣗಈੜ੒͞Εͨίʔυ͸ɺͲΕ΋࣍ͷΑ͏ʹ αϯϓϧσʔλΛฦ͚ͩ͢ʹͳ͍ͬͯ·͢ɻ ͜Εʹ͔ΜͨΜʹ࣮૷Λੜ΍͍͖ͯ͠·͢ɻ

  35. 1045TFTTJPO • \130+&$5@3005^TFSWJDF4FTTJPO4FSWJDFKT

  36. 1045TFTTJPO\4&44*0/@*%^VSM • \130+&$5@3005^TFSWJDF/BWJHBUJPO4FSWJDFKT

  37. 1045TFTTJPO\4&44*0/@*%^FMFNFOU • \130+&$5@3005^TFSWJDF&MFNFOU3FUSJFWBM4FSWJDFKT

  38. 1045TFTTJPO\4&44*0/@*%^FMFNFOU\&-&.&/5@*%^DMJDL • \130+&$5@3005^TFSWJDF&MFNFOU*OUFSBDUJPO4FSWJDFKT

  39. %&-&5&TFTTJPO\4&44*0/@*%^ • \130+&$5@3005^TFSWJDF4FTTJPO4FSWJDFKT

  40. Ͷͬɺ͔ΜͨΜͰ͠ΐʁ • Α͘Θ͔͍ͬͯͳ͍ͷͰ͕͢ɺ )PNFCSFXͰೖΔ࠷৽ͷ4XBHHFS$PEFHFO͕ు͘ /PEF+4αʔόʔͷίʔυʹෆ۩߹͕͋Δ͔΋ɻɻɻ • ࠓճͷಈ࡞֬ೝͰ͸ɺ FEJUPSTXBHHFSJP ͔Βग़ྗͰ͖Δ /PEF+4αʔόʔͷίʔυΛར༻͠·ͨ͠ɻ

    • ͜ͷ֬ೝ͚ͩͰมʹ࣌ؒΛ࢖ͬͯ͠·͍·ͨ͠ɻɻɻ • 0QFO"1* WରԠͷग़ྗܗ͕ࣜগͳ͍͜ͱ΋͋Γɺ ௚ۙͰ͸4XBHHFSWܗࣜͰॻ͍ͨํ͕Α͛͞Ͱͨ͠ɻ • ͕ɺ͕Μ͹Γ·͠ΐ͏ʂʂ
  41. ͕࣌ؒ͋Ε͹ ΍Ζ͏ͱࢥͬͯͨ͜ͱ

  42. ͕࣌ؒ͋Ε͹΍Ζ͏ͱࢥ͍ͬͯ·ͨ͠ ϒϥ΢βʔ REST API ʢϓϩΩγʣ WebΞϓϦͬΆ͘ݟ͑ΔྖҬ ΫϥΠΞϯτ HTTP

  43. ͕࣌ؒ͋Ε͹΍Ζ͏ͱࢥ͍ͬͯ·ͨ͠ REST API ʢϓϩΩγʣ WebΞϓϦͬΆ͘ݟ͑ΔྖҬ ΫϥΠΞϯτ HTTP

  44. ΠοψυϥΠόʔ

  45. ΠοψυϥΠόʔ • ࠷ऴతʹελʔΛυϥΠϒ͢Δͱͯ͠ɺ ·ͣ͸ ͳ·΋ͷ ΛυϥΠϒͰ͖ͳ͖ΌͩΊͩΖ͏ɺͱ ͏ͪͷݘʢ;͏ͪΌΜ ࡀʣͷ8FC%SJWFSରԠΛ ·͡Ίʹݕ౼ͯ͠Έ·ͨ͠ɻ •

    ׬શʹͲ͏͔͍ͯ͠Δɻ • 0QFO"1*σʔλ͔Βग़ྗͨ͠ 1ZUIPO༻ͷ3&45"1*ϑϨʔϜϫʔΫʮ'MBTLʯϕʔεͷ αʔόʔελϒΛ3BTQCFSSZ1J;FSP8ʹ৐ͤͯ (1*0ܦ༝ͰαʔϘ౳Λಈ͔͢ͳͲͷ࣮૷Λੜ΍͢͜ͱͰɺ 8FC%SJWFS"1*ܦ༝Ͱݱ࣮ੈքͷ͍͵Λૢ࡞͢Δ͘͠ΈΛ ߟ͍͑ͯ·͕ͨ͠४උظ͕ؒ଍Γ·ͤΜͰͨ͠ɻɻɻ • ͦͷ͏ͪ2JJUBʹॻ͖·͢ɻ
  46. ͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ