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
小鳥さんとアイドルのパーソナルカラーを検索できるWebアプリを100%Kotlinで作る
Search
subroh_0508
September 26, 2020
Programming
1
570
小鳥さんとアイドルのパーソナルカラーを検索できるWebアプリを100%Kotlinで作る
IM@S ENGINEERS ON@IR!!!! 2020のトーク資料です
https://imas.connpass.com/event/186165/
subroh_0508
September 26, 2020
Tweet
Share
More Decks by subroh_0508
See All by subroh_0508
Compose MultiplatformでもHot Reloadが動くらしい
subroh0508
0
23
Compose for Webでポートフォリオサイトを作る
subroh0508
1
94
あらゆるアプリをCompose Multiplatformで書きたい! -ネイティブアプリの「あの機能」を私たちはどう作るか-
subroh0508
1
2.3k
登壇の心理的ハードルをコントロールする技術
subroh0508
2
510
テストコードを書きながらCompose Multiplatformを乗りこなす
subroh0508
0
750
自己効力感を二次元アイドル作品から得ながら社会人としての成長を超加速させる
subroh0508
2
660
担当アイドルを応援する傘を作ろう! (として失敗した話)
subroh0508
0
590
buildSrc/Composite Buildで必要なバージョン情報も Version Catalogから参照したい!
subroh0508
0
1.5k
フロントエンドもJetpack Composeで書きたい! -Compose for WebはモダンWebアプリケーションの夢を見るか?-
subroh0508
0
900
Other Decks in Programming
See All in Programming
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
2
460
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
330
Haze - Real time background blurring
chrisbanes
1
510
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
120
創造的活動から切り拓く新たなキャリア 好きから始めてみる夜勤オペレーターからSREへの転身
yjszk
1
130
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
1
110
ソフトウェアの振る舞いに着目し 複雑な要件の開発に立ち向かう
rickyban
0
890
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
3
1.1k
Go の GC の不得意な部分を克服したい
taiyow
2
770
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
We Have a Design System, Now What?
morganepeng
51
7.3k
Code Review Best Practice
trishagee
65
17k
Gamification - CAS2011
davidbonilla
80
5.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.5k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Building Applications with DynamoDB
mza
91
6.1k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Transcript
খௗ͞ΜͱΞΠυϧͷύʔιφϧΧϥʔΛ ݕࡧͰ͖Δ8FCΞϓϦΛ ,PUMJOͰ࡞Δ *.!4&/(*/&&340/!*3 ʹ͜͠Γ͞ͿΖʙ!TVCSPI@
"CPVU.F 2 ʹ͜͠Γ͞ͿΖʙ ✦גࣜձࣾ#FBS5BJM "OESPJE8FC ܦඅਫ਼ࢉ4BB4αʔϏεͷ։ൃ ✦୲ ŧŽŕ
"CPVU.F 3 ʹ͜͠Γ͞ͿΖʙ ✦גࣜձࣾ#FBS5BJM "OESPJE8FC ܦඅਫ਼ࢉ4BB4αʔϏεͷ։ൃ ✦୲ ŧŽŕ
ܦඅਫ਼ࢉ͕ۤखͳ࿀Λ ٹ͏ϓϩμΫτΛ࡞ͬͯ·͢
"CPVU.F ˒,PUMJO͕େ͖ʂ ,POUSJCVUPSʹͳͬͨ 4 ˞,PUMJOͷ$POUSJCVUPSͷ͜ͱ γϟχOEʹʜߦͣͩͬͨ͘ʜ
"CPVU.F ˒,PUMJO͕େ͖ʂ ,POUSJCVUPSʹͳͬͨ 5 ˞,PUMJOͷ$POUSJCVUPSͷ͜ͱ γϟχOEʹʜߦͣͩͬͨ͘ʜ ͱ͞ΜಉҰͷଘࡏ ࣗ໌
ˣ Λߏ͢ΔߦΛॻ͍ͨ ˣ ͞ΜΛߏ͢Δߦ͕ॻ͍ͨʂʂʂ
࣍ 㾎,PUMJO8FCΞϓϦʮ$0-03.!45&3ʯͷհ 㾎࣮ղઆ ,PUMJO+4ͷྑ͍ͱ͜ΖɾͭΒ͍ͱ͜Ζ 㾎,PUMJO+4ͷࠓޙͷల 6
࣍ 㾎,PUMJO8FCΞϓϦʮ$0-03.!45&3ʯͷհ 㾎࣮ղઆ ,PUMJO+4ͷྑ͍ͱ͜ΖɾͭΒ͍ͱ͜Ζ 㾎,PUMJO+4ͷࠓޙͷల 7 ,PUMJO+4Ͱͷ8FCΞϓϦ࣮ গ͠ͰڵຯΛ࣋ͬͯ͘ΕΕʜ
࣍ 㾎,PUMJO8FCΞϓϦʮ$0-03.!45&3ʯͷհ 㾎࣮ղઆ ,PUMJO+4ͷྑ͍ͱ͜ΖɾͭΒ͍ͱ͜Ζ 㾎,PUMJO+4ͷࠓޙͷల 8
$0-03.!45&3 ֓ཁ ΞΠυϧΛݕࡧ ΠϝʔδΧϥʔΛϓϨϏϡʔͰ͖ΔΞϓϦ 8FCΞϓϦ൛͕طʹϦϦʔεࡁʂ "OESPJEJ04൛։ൃத
ϨϙδτϦͷ,PUMJO 9 63-JNBTDPMPSNBTUFSXFCBQQ (JU)VCTVCSPIDPMPSNBTUFS ˞΄΅খௗ͞ΜͱಉҰͷଘࡏ
$0-03.!45&3 ػೳ ϓϨϏϡʔϞʔυ ݕࡧͨ͠ΞΠυϧͷΠϝʔδΧϥʔͷҰཡදࣔ ோΊΔʂʂʂָ͍͠ʂʂʂ ϖϯϥΠτɾέϛΧϧϥΠτͷ৭֬ೝ
8FCαΠτɾΞϓϦͷΧϥʔςʔϚݕ౼ 10
$0-03.!45&3 ػೳ ϓϨϏϡʔϞʔυ ݕࡧͨ͠ΞΠυϧͷΠϝʔδΧϥʔͷҰཡදࣔ ோΊΔʂʂʂָ͍͠ʂʂʂ ϖϯϥΠτɾέϛΧϧϥΠτͷ৭֬ೝ
8FCαΠτɾΞϓϦͷΧϥʔςʔϚݕ౼ 11
$0-03.!45&3 ػೳ ϓϨϏϡʔϞʔυ ݕࡧͨ͠ΞΠυϧͷΠϝʔδΧϥʔͷҰཡදࣔ ோΊΔʂʂʂָ͍͠ʂʂʂ ϖϯϥΠτɾέϛΧϧϥΠτͷ৭֬ೝ
8FCαΠτɾΞϓϦͷΧϥʔςʔϚݕ౼ 12 എܠ৭౮৫ ΞΫηϯτΧϥʔ ਅ೫ ''#"% ΞΫηϯτΧϥʔ Ί͙Δ ''& 㱤͜ͷεϥΠυ࣮࣭Πϧϛωʔγϣϯελʔζ
$0-03.!45&3 ػೳ ϖϯϥΠτϞʔυ બͨ͠ΞΠυϧͷΠϝʔδΧϥʔΛશը໘දࣔ 13 બ λοϓ
$0-03.!45&3 ػೳ ϖϯϥΠτϞʔυ બͨ͠ΞΠυϧͷΠϝʔδΧϥʔΛશը໘දࣔ 14 બ λοϓ ͋ͳͨͷεϚϗ͕
ͦͷͰϖϯϥΠτʹૣมΘΓʂ ΞχΫϥɾ%+όʔͰʮϖϯϥΕͨʯ ͜Μͳ൵ܶͱ͏͓͞Βʂ
$0-03.!45&3 ػೳ ͦͷଞ ͔ͳΓਅ໘ʹ ϨεϙϯγϒରԠ μʔΫςʔϚରԠ
ଟݴޠରԠ ຊޠPSӳޠ 15 μʔΫςʔϚ μʔΫςʔϚ ӳޠදࣔ ͜͜·Ͱਅ໘ʹ࣮ͨ͠,PUMJO+4ΞϓϦ ଞʹଘࡏ͠ͳ͍ͷͰʜ ˞ଞʹଘࡏͨ͠Βࢀߟʹ͍ͨ͠ͷͰڭ͑ͯཉ͍͠ ࣮
࣍ 㾎,PUMJO8FCΞϓϦʮ$0-03.!45&3ʯͷհ 㾎࣮ղઆ ,PUMJO+4ͷྑ͍ͱ͜ΖɾͭΒ͍ͱ͜Ζ 㾎,PUMJO+4ͷࠓޙͷల 16
࣮ղઆ,PUMJO+4ͱʜʁ ,PUMJO.VMUJQMBUGPSN .11 ,PUMJOͷ91MBUϑϨʔϜϫʔΫ ʮϩδοΫͷڞ௨ԽʯͷϑΥʔΧε͕ಛ +7./BUJWF+4ίʔυͷग़ྗ͕Մೳ
17 +4ίʔυͷग़ྗˠ,PUMJO+4 ϥΠϒϥϦ,PUMJO +4ͷϞϊ͕ར༻Մʂ ˞,PUMJOϥΠϒϥϦཁ.11ରԠ 3FGFSFODFLPUMJOMBOHPSHEPDTSFGFSFODFNVMUJQMBUGPSNIUNM
࣮ղઆ$0-03.!45&3 ར༻ϥΠϒϥϦ,PUMJO ,UPS)UUQΫϥΠΞϯτ LPUMJOYTFSJBMJ[FS+40/γϦΞϥΠβσγϦΞϥΠβ ,PUMJO$PSPVUJOFTඇಉظॲཧ ,PJO%FQFOEFODZ*OKFDUJPOϥΠϒϥϦ
LPUMJOXSBQQFST3FBDUɾTUZMFEDPNQPOFOUͷ,PUMJOϥούʔ ,PUMJO.BUFSJBM6*.BUFSJBM6*ͷ,PUMJOϥούʔ 18 (JU)VCTVCSPILPUMJONBUFSJBMVJ 4UBSΛ͘ΕΔͱتͼ·͢ʜ
࣮ղઆ$0-03.!45&3 ར༻ϥΠϒϥϦ+4 3FBDUϝΠϯϑϨʔϜϫʔΫ .BUFSJBM6*6*ϑϨʔϜϫʔΫ TUZMFEDPNQPOFOUT$44JO+4ϥΠϒϥϦ 3FBDU3PVUFSϧʔςΟϯάϥΠϒϥϦ
SFBDUJOFYUݴޠϦιʔεΓସ͑ XFCQBDLDEOQMVHJOIUNMXFCQBDLQMVHJOόϯυϧαΠζݮ 19
࣮ղઆ$0-03.!45&3 ,PUMJO+48FCΞϓϦΛϦϦʔε͢Δ·Ͱ ֤छϥΠϒϥϦΛ͍ɺΠΠײ͡ʹ6* ϩδοΫΛ࣮͢Δ ,PUMJOίʔυΛ+BWBTDSJQUίʔυʹม͢Δ (SBEMFͷ୲Օॴɺ,PUMJOϥΠϒϥϦͷґଘੑղܾ
+BWBTDSJQUͷίʔυΛͭͷόϯυϧϑΝΠϧʹ·ͱΊΔ 8FCQBDLͷ୲Օॴɺ+4Ϟδϡʔϧͷґଘੑղܾ NJOJGZ 20 ϦϦʔε ˞$0-03.!45&3 ɹ'JSFCBTF)PTUJOHΛར༻
࣮ղઆ$0-03.!45&3 ϩδοΫ෦ TIBSFEϞδϡʔϧʹ.11ରԠͷܗࣜͰ࣮ 8FC"OESPJEJ04Ͱ͍ճͤΔΑ͏ʹ 21 㾎DPNQPOFOUTˠ%*ؔ࿈ͷϝιουɾΫϥε 㾎JOGSBBQJˠ"1*ͷΤϯυϙΠϯτఆٛ 㾎JOGSBRVFSZˠJN!TQBSRMͷΫΤϦఆٛ
㾎JOGSBSFQPTJUPSZˠϏδωεϩδοΫͷهड़ $36%ͱର 㾎NPEFMˠΤϯςΟςΟɾΦϒδΣΫτͷఆٛ 㾎VUJMJUJFTˠศརؔͷஔ͖ॴ JN!TQBSRMͬͯ·͢ʂ ͋Γ͕αϯΩϡʔʂ
࣮ղઆ$0-03.!45&3 ίϯϙʔωϯτ࣮ "UPNJD%FTJHOͬΆ͍σΟϨΫτϦߏ ঢ়ଶཧDPOUBJOFSTʹू 22
࣮ղઆ$0-03.!45&3 ίϯϙʔωϯτ࣮ "UPNJD%FTJHOͬΆ͍σΟϨΫτϦߏ ঢ়ଶཧDPOUBJOFSTʹू 23
࣮ղઆ$0-03.!45&3 ίϯϙʔωϯτ࣮ "UPNJD%FTJHOͬΆ͍σΟϨΫτϦߏ ঢ়ଶཧDPOUBJOFSTʹू 24
࣮ղઆ$0-03.!45&3 ίϯϙʔωϯτ࣮ ͭͭͷίϯϙʔωϯτ'VODUJPOBM$PNQPOFOUͱͯ͠ఆٛ 25 val chipComponent = functionalComponent<ChipProps> {
props -> val classes = useStyles() chip { attrs { classes(classes.root) label { +props.label } color = ChipColor.primary variant = if (props.isChecked) ChipVariant.default else ChipVariant.outlined onClickFunction = { props.onClick?.invoke(it) } } } } const ChipComponent = props => { const classes = useStyles(); return ( <Chip classes={ classes.root } label={ props.label } color='primary' variant={ props.isChecked ? 'default' : 'outlined' } onClick={ e => props.onClick(e) } /> ); } ྫ$IJQίϯϙʔωϯτ +49ͬΆ͞Λͨ͠จ๏Ͱ ίϯϙʔωϯτఆ͕ٛͰ͖Δʂ ˞͜͜ͷ3FBDUͰओྲྀͷίϯϙʔωϯτఆٛ
࣮ղઆ$0-03.!45&3 ঢ়ଶཧ 26 private val IdolSearchContainerImpl = functionalComponent<RProps> { val
controller = useContext(IdolSearchControllerContext) val (uiModel, dispatch) = useReducer(reducer, UiModel.Search.INITIALIZED) fun onChangeIdolName(filters: Filters, name: String?) = dispatch(actions(...)) fun onSuccess(items: List<IdolColor>) = dispatch(actions(...)) fun onFailure(e: Throwable) = dispatch(actions(...)) fun IdolSearchController.search(filters: Filters = Filters.Empty) = launch { runCatching { fetchItems(filters) } .onSuccess(::onSuccess) .onFailure(::onFailure) } useEffectDidMount { controller.search() } useDebounceEffect(uiModel.filters, 500) { controller.search(it) } ... } ྫΞΠυϧݕࡧը໘ͷ$POUBJOFS$PNQPOFOU
࣮ղઆ$0-03.!45&3 ঢ়ଶཧ 27 private val IdolSearchContainerImpl = functionalComponent<RProps> { val
controller = useContext(IdolSearchControllerContext) val (uiModel, dispatch) = useReducer(reducer, UiModel.Search.INITIALIZED) fun onChangeIdolName(filters: Filters, name: String?) = dispatch(actions(...)) fun onSuccess(items: List<IdolColor>) = dispatch(actions(...)) fun onFailure(e: Throwable) = dispatch(actions(...)) fun IdolSearchController.search(filters: Filters = Filters.Empty) = launch { runCatching { fetchItems(filters) } .onSuccess(::onSuccess) .onFailure(::onFailure) } useEffectDidMount { controller.search() } useDebounceEffect(uiModel.filters, 500) { controller.search(it) } ... } ྫΞΠυϧݕࡧը໘ͷ$POUBJOFS$PNQPOFOU 3FBDU)PPLTʹΑΔ 'MVYΞʔΩςΫνϟͰঢ়ଶཧΛ࣮
࣮ղઆ$0-03.!45&3 ঢ়ଶཧ 28 private val IdolSearchContainerImpl = functionalComponent<RProps> { val
controller = useContext(IdolSearchControllerContext) val (uiModel, dispatch) = useReducer(reducer, UiModel.Search.INITIALIZED) fun onChangeIdolName(filters: Filters, name: String?) = dispatch(actions(...)) fun onSuccess(items: List<IdolColor>) = dispatch(actions(...)) fun onFailure(e: Throwable) = dispatch(actions(...)) fun IdolSearchController.search(filters: Filters = Filters.Empty) = launch { runCatching { fetchItems(filters) } .onSuccess(::onSuccess) .onFailure(::onFailure) } useEffectDidMount { controller.search() } useDebounceEffect(uiModel.filters, 500) { controller.search(it) } ... } ྫΞΠυϧݕࡧը໘ͷ$POUBJOFS$PNQPOFOU EJTQBUDIͰ ετΞͷߋ৽ΠϕϯτΛൃՐ
࣮ղઆ$0-03.!45&3 ঢ়ଶཧ 29 private val IdolSearchContainerImpl = functionalComponent<RProps> { val
controller = useContext(IdolSearchControllerContext) val (uiModel, dispatch) = useReducer(reducer, UiModel.Search.INITIALIZED) fun onChangeIdolName(filters: Filters, name: String?) = dispatch(actions(...)) fun onSuccess(items: List<IdolColor>) = dispatch(actions(...)) fun onFailure(e: Throwable) = dispatch(actions(...)) fun IdolSearchController.search(filters: Filters = Filters.Empty) = launch { runCatching { fetchItems(filters) } .onSuccess(::onSuccess) .onFailure(::onFailure) } useEffectDidMount { controller.search() } useDebounceEffect(uiModel.filters, 500) { controller.search(it) } ... } ྫΞΠυϧݕࡧը໘ͷ$POUBJOFS$PNQPOFOU ,PUMJO$PSPVUJOFTΛར༻ͨ͠ඇಉظॲཧ JN!TQBSRMͷϦΫΤετૹ৴
,PUMJO+4ͷྑ͍ͱ͜Ζ 㾎ϩδοΫ෦Λ"OESPJEJ04ͱڞ௨ԽͰ͖Δʂ ʮ8FCͰϓϩμΫταΠΫϧΛճͨ͠ޙͷΞϓϦ࣮ʯΛૉૣ࣮͘ݱ 㾎+4ͷϥΠϒϥϦࢿ࢈Λྲྀ༻Ͱ͖Δʂ +4ͰͰ͖Δ͜ͱେମͰ͖Δ μʔΫςʔϚɺଟݴޠԽɺ'$ɺ3FBDU)PPLTFUD 㾎+49ʹ͍ۙίʔυͷݟͨ
,PUMJOͷ๛ͳදݱྗͷཱ྆ʂ ʮ+7.ͷܕγεςϜʯͷੈք؍ͰϑϩϯτΤϯυ࣮͕Ͱ͖Δ 30 5ZQF4DSJQUͷܕγεςϜɺಠಛ͡Όͳ͍͔ͬ͢ʜʁ +7.ͷຽͳͷͰ+7.ͬΆ͍ܕγεςϜ͕͍͍ͳʜ
,PUMJO+4ͷͭΒ͍ͱ͜Ζ 㾎όϯυϧϑΝΠϧ͕େ͖͘ͳΓ͕ͪ &4ඇ४ڌͷ+4ίʔυ͕ੜ͞ΕΔ ͭ·Γ8FCQBDLͷ5SFF4IBLJOH͕ޮ͔ͳ͍ 㾎7VFɾ"OHVMBSͷެࣜϥούʔ͕ͳ͍ +FU#SBJOT͕༻ҙ͍ͯ͠Δͷ3FBDUͷϥούʔͷΈ 㾎,PUMJO+4ରԠϥΠϒϥϦ͕গͳ͍
+4Ϟδϡʔϧͷར༻ʹͻͱखؒ +4ϞδϡʔϧΛ͏߹ɺϒϦοδͷίʔυ͕ඞਢ 31 ˞ຊ൪Ϗϧυ࣌ʹະ༻ϝιουίʔυͷ࠷దԽΛࣗಈͰߦ͏ػೳ ࠷ऴతʹެ։͢ΔϑΝΠϧ͕େ͖͍ ύϑΥʔϚϯεɾॳճϩʔυʹӨڹ ˞+4ͷඪ४ن֨ɺੜ+4ͱগ͠จ๏͕ҟͳΔ
࣍ 㾎,PUMJO8FCΞϓϦʮ$0-03.!45&3ʯͷհ 㾎࣮ղઆ ,PUMJO+4ͷྑ͍ͱ͜ΖɾͭΒ͍ͱ͜Ζ 㾎,PUMJO+4ͷࠓޙͷల 32
+FU#SBJOTɺׂͱຊؾʜʂ ˒݄ϦϦʔεɺ,PUMJOͷ৽ػೳ /FX*3#BDLFOE,PUMJO+4ίϯύΠϧ࣌ͷதؒදݱ͕৽͘͠ͳͬͨ όϯυϧαΠζ͕ʹʂ ˒&4ରԠ &4ίʔυΛੜ͢ΔػೳΛ࣮༧ఆ
8FCQBDLͷ5SFF4IBLJOH͕ޮ͘Α͏ʹʂ ͳΔ͔ 33 ࠷େͷऑΛ࠷༏ઌͰ௵ͦ͏ͱ͍ͯ͠Δʂະདྷͷر͕Έ͑Δʂ
+FU#SBJOTɺׂͱຊؾʜʂ ˒ਐԽ͢Δ,PUMJO.VMUJQMBUGPSN ,PUMJO/BUJWFͰͷTVTQFOEؔͷαϙʔτ ,PUMJO.VMUJQMBUGPSN.PCJMFͷBMQIB൛ϦϦʔε ͷ*%&ͰϞόΠϧ͚.11։ൃΛαϙʔτ͢ΔϓϥάΠϯ 34 ˞,PUMJO$PSPVUJOFT͕͍͘͢ͳͬͨ
,PUMJO+4.11ͷҰһʂ .11͕Γ্͕Ε,PUMJO+4ͷվળεϐʔυ্͕Δʂ ͣ
,PUMJO+4ɺࢼͯ͠Έͨ͘ͳͬͨΒʜʁ ˒ެࣜͷνϡʔτϦΞϧ͕͋Δͧʂʂʂ #VJMEJOH8FC"QQMJDBUJPOTXJUI3FBDUBOE,PUMJO+4 #VJMEJOHB'VMM4UBDL8FC"QQXJUI,PUMJO.VMUJQMBUGPSN 35 63-QMBZLPUMJOMBOHPSHIBOETPO 'VMM4UBDL8FC"QQXJUI,PUMJO.VMUJQMBUGPSN@*OUSPEVDUJPO 63-QMBZLPUMJOMBOHPSHIBOETPO
#VJMEJOH8FC"QQMJDBUJPOTXJUI3FBDUBOE,PUMJO+4@*OUSPEVDUJPO ڈݸͳ͔ͬͨ ಥવݸՃ͞ΕͯϚδͰ͏Ε͍͠
㾎,PUMJOʹ͍ۙɺύʔιφϧΧϥʔݕࡧ8FCΞϓϦΛϦϦʔεͨ͠ ࠓޙػೳՃ༧ఆ "OESPJEJ04൛ؤுͬͯ࡞Γ·͢ 㾎,PUMJO+4ɺ࣮༻ஈ֊ʹٸʹ͍͍ۙͮͯΔʂ ·ͩ·ͩ͠ΜͲ͍Օॴ͋ΕͲɺਐԽͷૣ͞ʹر͕࣋ͯΔ +7.ͱ8FCϑϩϯτɺ྆ํߦ͖དྷͰ͖ͯͱָ͍ͯ͠
ར༻ऀগͳׂ͍ʹɺใ͕උ͞Εͭͭ͋Δˠ$POUSJCVUFνϟϯεʂ ·ͱΊ 36 "OESPJEɾαʔόʔαΠυ͚ͩ͡Όͳ͍,PUMJOͷ࣮ྗ Έͳ͞Μମݧͯ͠Έͯʜʂ
37 )BWFBOJDF,PUMJO XJUI,PUPSJ