Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
カート刷新プロジェクトにおけるOpenAPIを活用したコード自動生成の今と明日 / astud...
Search
Akihito Nakano
April 19, 2019
Programming
2
600
カート刷新プロジェクトにおけるOpenAPIを活用したコード自動生成の今と明日 / astudy20190419
アスクル社内勉強会で発表した資料です!
Akihito Nakano
April 19, 2019
Tweet
Share
More Decks by Akihito Nakano
See All by Akihito Nakano
OpenAPI Generator Meetup #1
akihito_nakano
1
1.3k
Libraの現状と技術面をざっくりと / astudy20191114
akihito_nakano
4
1.1k
平静を保ち、コードを生成せよ 〜 OpenAPI Generator誕生の背景と軌跡 〜 / gunmaweb34
akihito_nakano
25
54k
プライベートAPIのクライアントをいい感じにしたい / pepabo_ec_tech_mtg02
akihito_nakano
0
1.7k
サーキットブレーカー 〜 有料契約店舗数 国内 No.1 ECサービスに神を宿す 〜 / pepabo_ec_tech_mtg01
akihito_nakano
1
4k
並行・並列処理のテストは難しい
akihito_nakano
2
4.5k
並列処理で消耗しているかたへ - Snidel のご紹介 -
akihito_nakano
4
3.4k
Other Decks in Programming
See All in Programming
もう僕は OpenAPI を書きたくない
sgash708
5
1.9k
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
170
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
950
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
8
1.3k
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
110
Open source software: how to live long and go far
gaelvaroquaux
0
650
sappoRo.R #12 初心者セッション
kosugitti
0
270
クリーンアーキテクチャから見る依存の向きの大切さ
shimabox
4
920
AIの力でお手軽Chrome拡張機能作り
taiseiue
0
190
Conform を推す - Advocating for Conform
mizoguchicoji
3
710
Pulsar2 を雰囲気で使ってみよう
anoken
0
250
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
260
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
A Tale of Four Properties
chriscoyier
158
23k
A designer walks into a library…
pauljervisheath
205
24k
BBQ
matthewcrist
87
9.5k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Become a Pro
speakerdeck
PRO
26
5.2k
Speed Design
sergeychernyshev
27
800
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
தڿਓΞεΫϧגࣜձࣾ "4UVEZ ΞεΫϧࣾษڧձ Χʔτ৽ϓϩδΣΫτʹ͓͚Δ 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜͷ ࠓͱ໌ ͋͢
8FCΞϓϦέʔγϣϯΤϯδχΞ தڿਓ!/","/0@"LJIJUP IUUQTBDLJOUPTIHJUIVCJPBCPVU
044׆ಈ w0QFO"1*(FOFSBUPS wIUUQTHJUIVCDPN0QFO"1*5PPMTPQFOBQJHFOFSBUPS w(BOFTIB Ψωʔγϟ wIUUQTHJUIVCDPNBDLJOUPTIHBOFTIB w4OJEFM εφΠσϧ
wIUUQTHJUIVCDPNBDLJOUPTITOJEFM
8&# %#13&447PM ಛू <ޮٸ্ঢ>εΩʔϚۦಈ8FC"1*։ൃ ষޙʙষΛࣥච͍͖ͤͯͨͩ͞·͠ ͨ!ײँ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM
None
ΞεΫϧࣾษڧձ ฏ࠷ޙͷAStudy
࣍ wͳͥίʔυΛࣗಈੜ͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτपลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ
w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷ݶͷςετ͕ࣗಈతʹΔੈք ίʔυࣗಈੜͷ׆༻ঢ়گΛཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ ۙͰΓ͍ͨ͜ͱΛ͓͠·͢ʂ
ͳͥਓྨ ίʔυΛࣗಈੜ͢ΔͷͩΖ͏͔
࢈ۀֵ໋ʹΈΔਐԽͷྺ࢙ ୈҰ࣍࢈ۀֵ໋ ୈೋ࣍࢈ۀֵ໋ ୈࡾ࣍࢈ۀֵ໋ ୈ࢛࣍࢈ۀֵ໋
࢈ۀֵ໋ʹΈΔਐԽͷྺ࢙ ୈҰ࣍࢈ۀֵ໋ ୈೋ࣍࢈ۀֵ໋ ୈࡾ࣍࢈ۀֵ໋ ୈ࢛࣍࢈ۀֵ໋ ػցιϑτΣΞͰஔ͖͑ͯ ޮԽ͍ͯ͘͠ਐԽͷྺ࢙
ίʔυΛॻ͘ͱ͍͏ӦΈʹ͓͚ΔਐԽ wίʔυͷࣗಈੜʹΑͬͯ։ൃΛࢧԉ͢Δπʔϧͨͪ wఆܕతͳίʔυπʔϧʹͤΔ͜ͱͰ։ൃऀੜ࢈ੑΛߴΊɺۀϩδοΫ ʹूதͰ͖Δ ϘΠϥʔϓϨʔτίʔυͷੜ पลπʔϧʹΑΔίʔυੜͷαϙʔτ ίʔυੜΛแͨ͠ύϥμΠϜ IUUQTQSPKFDUMPNCPLPSH IUUQTXXXKFUCSBJOTDPNJEFB IUUQTPQFOBQJHFOFSBUPSUFDI
IUUQTXXXKIJQTUFSUFDI IUUQTHSBQIRMDPEFHFOFSBUPSDPN IUUQTHSQDJP
ͭ·ΓɺਐԽͷͨΊ
None
࣍ wͳͥίʔυΛࣗಈੜ͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτपลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ
w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷ݶͷςετ͕ࣗಈతʹΔੈք ίʔυࣗಈੜͷ׆༻ঢ়گΛཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ ۙͰΓ͍ͨ͜ͱΛ͓͠·͢ʂ
OpenAPI
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ͳͲ͕ ࢀՃ
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
0QFO"1*ϑΥʔϚοτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS
0QFO"1*ϑΥʔϚοτ ϝλใ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS
0QFO"1*ϑΥʔϚοτ ΤϯυϙΠϯτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS
0QFO"1*ϑΥʔϚοτ ίϯϙʔωϯτ IUUQTCMPHSFBENFJPBOFYBNQMFpMMFEHVJEFUPTXBHHFS
पลπʔϧ
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
εΩʔϚۦಈ։ൃ
εΩʔϚۦಈ։ൃ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM ͡ΊʹΈΜͳͰ8FC"1*ͷ༷Λ૬ஊܾͯ͠Ίͯ 0QFO"1*υΩϡϝϯτΛهड़ͯ͠ पลπʔϧΛ׆༻ͯ͠։ൃΛޮԽ͢Δ ։ൃνʔϜશମͷϫʔΫϑϩʔ εΩʔϚͰ։ൃΛۦಈ͢Δ͜ͱ
εΩʔϚۦಈ։ൃͱपลπʔϧ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք 0QFO"1*υΩϡϝϯτͷهड़ ༷ͷڞ༗ɾ֬ೝ ελϒੜػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ੜͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜͨ͠ΫϥΠΞϯτΛར༻ͨ͠ݮ ςετίʔυͷࣗಈੜ
Swagger Editor Swagger UI OpenAPI Generator
0QFO"1*υΩϡϝϯτͷهड़ ༷ͷڞ༗ɾ֬ೝ Swagger Editor Swagger UI ίʔυࣗಈੜͷԸܙେ͖͍ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք
ελϒੜػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ςετίʔυͷࣗಈੜ OpenAPI Generator ੜͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜͨ͠ΫϥΠΞϯτΛར༻ͨ͠ݮ
࣍ wͳͥίʔυΛࣗಈੜ͢Δͷ͔ʁ w0QFO"1* w υΩϡϝϯτϑΥʔϚοτपลπʔϧͷ֓ཁ w εΩʔϚۦಈ։ൃ wΧʔτ৽ϓϩδΣΫτ w 0QFO"1*Λ׆༻ͨ͠ίʔυࣗಈੜ
w 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱ࠷ݶͷςετ͕ࣗಈతʹΔੈք ίʔυࣗಈੜͷ׆༻ঢ়گΛཧ ͨ͠͏͑Ͱɺ0QFO"1*Λ׆༻ͯ͠ ͬͱੜ࢈ੑΛߴΊΔͨΊʹɺ ۙͰΓ͍ͨ͜ͱΛ͓͠·͢ʂ
Χʔτ৽ϓϩδΣΫτ
Χʔτ৽ϓϩδΣΫτ w-0)"$0ͷچ0SEFSγεςϜΛ৽"1*ج൫γεςϜʹҠߦ͢Δ wϓϩδΣΫτ໊UJBNBU ςΟΞϚτ wϨΨγʔΛ٫͠ɺ։ൃޮαʔϏεͷ࣭Λ্͢Δ wΧʔτɾϨδը໘ΛരԽ͢Δ շదͳ͓ങ͍ମݧͷఏڙ
Χʔτ৽ϓϩδΣΫτͷͬ͘͟Γͨ͠ਤ #'' ૹ Ϣʔβʔ จ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY
,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1* 1SPUPDPM#V⒎FST "1*༷ɾεΩʔϚఆٛ
"1*༷ɾεΩʔϚఆٛ ૹ Ϣʔβʔ จ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY ,PUMJO+BWB 4QSJOH#PPU
"QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1*Λͱʹͨ͠ίʔυੜͷ׆༻ঢ়گ "1*ج൫ 0QFO"1* 1SPUPDPM#V⒎FST #'' #''ͰͷϞσϧΫϥεੜͷΈ
0QFO"1*υΩϡϝϯτͷهड़ ༷ͷڞ༗ɾ֬ೝ Swagger Editor Swagger UI ίʔυࣗಈੜ׆༻ͷ༨͋Δ IUUQTCMPHPOLOJOKBTDIFNB@pSTU@EFWFMPQNFOU API هड़ݴޠҎޙͷੈք
ελϒੜػೳΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ςετίʔυͷࣗಈੜ OpenAPI Generator ੜͨ͠ελϒΛར༻ͨ͠ฏߦ։ൃ ੜͨ͠ΫϥΠΞϯτΛར༻ͨ͠ݮ
"1*༷ɾεΩʔϚఆٛ ૹ Ϣʔβʔ จ ,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ
׆༻ͷ༨͋Δ"1*ΫϥΠΞϯτ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY 0QFO"1* 1SPUPDPM#V⒎FST #'' ίϧʔνϯͰ͍͍͢Α͏ʹ 8FC$MJFOUΛಠࣗʹϥοϓͨ͠Ϋϥε Λ͍ͬͯΔͷͰɺ ࣗಈੜͷ׆༻͍͔͠ "1*ΫϥΠΞϯτͷࣗಈੜ
"1*༷ɾεΩʔϚఆٛ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY 5ZQF4DSJQU +2VFSZ ׆༻ͷ༨͋Δ"1*αʔόʔ #'' ,PUMJO+BWB 4QSJOH#PPU
"QBDIF$BNFM ૹ Ϣʔβʔ จ "1*ج൫ 0QFO"1* 1SPUPDPM#V⒎FST ελϒੜΛར༻ͨ͠εΩϟϑΥʔϧσΟϯά ࠾༻͍ͯ͠Δٕज़͕ɺ 0QFO"1*(FOFSBUPS͕ੜ͢Δ ελϒͷίʔυͱҧ͏ͷͰ͑ͳ͍͔
׆༻ͷ༨͋Δͷͷ #'' ૹ Ϣʔβʔ จ "1*ج൫ ,PUMJO 4QSJOH#PPU 4QSJOH8FC'MVY
,PUMJO+BWB 4QSJOH#PPU "QBDIF$BNFM 5ZQF4DSJQU +2VFSZ 0QFO"1* 1SPUPDPM#V⒎FST "1*༷ɾεΩʔϚఆٛ ಋೖͷखؒʹݟ߹͏͚ͩͷޮՌ͕ಘΒΕΔ͔Ͳ͏͔ ඍົͳ͜ͱ͕ଟ͔ͬͨ తɺίʔυࣗಈੜͷ׆༻Ͱͳ͘։ൃͷੜ࢈ੑΛ্͛Δ͜ͱ ͦ͜Ͱ
APIͷE2Eςετ(ͷҰ෦)Λ ࣗಈੜ͍ͨ͠
εΩʔϚۦಈ։ൃ IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM ୈষ0QFO"1*ʹΑΔεΩʔϚۦಈ։ൃ ʮεΩʔϚΛ༻͍༷ͯͱ࣮ͷҰகΛࣗಈςετ͢Δʯ 3VCZPO3BJMTͰ࣮ͨ͠"1*αʔόͷϨεϙϯε ͕ɺ0QFO"1*υΩϡϝϯτͱဃ͍ͯ͠ͳ͍͔ࣗ ಈతʹνΣοΫ͢Δ࣮Λհ͍ͯ͠Δɻ 34QFD PBT@QBSTFS KTPO@TDIFNB
$PNNJUUFF
IUUQTHJIZPKQNBHB[JOFXEQSFTTBSDIJWFWPM εΩʔϚۦಈ։ൃ ୈষ0QFO"1*ʹΑΔεΩʔϚۦಈ։ൃ ʮεΩʔϚΛ༻͍༷ͯͱ࣮ͷҰகΛࣗಈςετ͢Δʯ 3VCZPO3BJMTͰ࣮ͨ͠"1*αʔόͷϨεϙϯε ͕ɺ0QFO"1*υΩϡϝϯτͱဃ͍ͯ͠ͳ͍͔ࣗ ಈతʹνΣοΫ͢Δ࣮Λհ͍ͯ͠Δɻ 34QFD PBT@QBSTFS KTPO@TDIFNB
$PNNJUUFF Χʔτ৽ϓϩδΣΫτ͕࠾༻͍ͯ͠Δٕज़Ͱ Ͳ͏࣮ݱ͢Δ͔
Spring Cloud Contract (SCC)
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
4QSJOH$MPVE$POUSBDU 4$$ $POUSBDU (SPPWZ%4- ࣗಈੜ͞ΕΔςετίʔυ
4$$ͷ$POUSBDUͱ0QFO"1*υΩϡϝϯτͷҧ͍ w4$$ͷ$POUSBDU wϦΫΤετ˓˓˓Λૹ৴ͨ͠ΒɺϨεϙϯº͕ฦͬͯ͘Δ ˠʮετʔϦʔʯ w0QFO"1*υΩϡϝϯτ wड͚ΔϦΫΤετύϥϝʔλ໊9ɺܕ99 ฦ͢Ϩεϙϯεͷߏ:ɺܕ:: ˠʮ༷ʯ ߏܕΛఆٛ͢Δ͚ͩ
$POUSBDUΛ0QFO"1*υΩϡϝϯτʹຒΊࠐΉͱ͍͏ൃ w0QFO"1*υΩϡϝϯτͷ֦ுྖҬʹ$POUSBDU :".-%4- ΛຒΊࠐΉ͜ͱͰɺఆٛ༰ͷॏෳΛഉআ͠ɺ୯ҰͷυΩϡ ϝϯτͰ༷ͱετʔϦʔΛཧՄೳʹͳΔ w0QFO"1* $POUSBDUͷυΩϡϝϯτΛίϯόʔλʹ௨͢͜ͱ ͰɺετʔϦʔ෦Λݕূ͢ΔςετίʔυΛੜ͢Δ IUUQTHJUIVCDPNTQSJOHGSBNFXPSLHVSVTQSJOHDMPVEDPOUSBDUPB 4QSJOH$MPVE$POUSBDU0QFO"1*$POUSBDU$POWFSUFS
+PIO5IPNQTPO !TQSJOHGSBNFXPSLHVSV IUUQTTQSJOHGSBNFXPSLHVSVEFpOJOHTQSJOHDMPVEDPOUSBDUTJOPQFOBQJ
$POUSBDUΛ0QFO"1*υΩϡϝϯτʹຒΊࠐΉͱ͍͏ൃ ϦΫΤετ Ϩεϙϯε
Γ͍ͨࣄͱͪΐͬͱҧ͏ ͜Ε͜ΕͰૉఢ͚ͩͲ
0QFO"1*υΩϡϝϯτ͔ΒςετίʔυΛੜ͍ͨ͠ w"1*αʔό͕ฦ͢Ϩεϙϯεͷߏ͕0QFO"1*υΩϡϝϯτͷͦΕͱဃͯ͠ ͍ͳ͍͔ςετ͍ͨ͠ w $POUSBDUͳͲॻ͔ͣʹૉͷ 0QFO"1*υΩϡϝϯτΛॻ͚ͩ͘Ͱɺ࠷ݶ ͷςετ ˞ ͕ࣗಈతʹΔੈք w
˞ 0QFO"1*ʮ༷ʯͷهड़͚ͩͳͷͰɺςετͰ͖Δ͜ͱݶΒΕΔ w͕ɺϨεϙϯεͷߏςετͰ͖Δ
4QSJOH$MPVE$POUSBDU0QFO"1* w0QFO"1*υΩϡϝϯτͷఆٛΛ4$$ͷ$POUSBDUʹ ม͢Δ(SBEMF.BWFOϓϥάΠϯ wϨεϙϯεͷߏΛςετ͢Δ$POUSBDUʹมͯ͠ ςετίʔυΛੜ͢Δ IUUQTHJUIVCDPNBDLJOUPTITQSJOHDMPVEDPOUSBDUPQFOBQJ ແ͍ͳΒ࡞Ε͍͍
4QSJOH$MPVE$POUSBDU0QFO"1* ಈ࡞Πϝʔδ 0QFO"1*υΩϡϝϯτ 4QSJOH$MPVE$POUSBDU0QFO"1* 4$$Λར༻ͯ͠$POUSBDU͔Β ςετίʔυΛੜ 0QFO"1*υΩϡϝϯτʹఆٛ͞Ε͍ͯΔ ϨεϙϯεͷߏΛ$POUSBDUΦϒδΣΫτʹม
4QSJOH$MPVE$POUSBDU0QFO"1* w·ͩ࡞Γ࢝Ί͔ͨΓ wͱΓ͋͑ͣςετ͕ੜ͞ΕΔ ಈ࡞͢Δ͔ෆ໌ ͷϨϕϧ w࣮༻Ϩϕϧʹ্࣮͛ͯࡍʹ׆༻͍͖͍ͯͨ͠ wΞεΫϧͷ044ͱͯ͠ҭ͍͖͍ͯͯͨ
ίʔυࣗಈੜΛ׆༻ͯ͠ ໌དྷΔΤϯδχΞϦϯάΛʂ ΞεΫϧ