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
500
小鳥さんとアイドルのパーソナルカラーを検索できる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を乗りこなす
subroh0508
0
150
自己効力感を二次元アイドル作品から得ながら社会人としての成長を超加速させる
subroh0508
2
440
担当アイドルを応援する傘を作ろう! (として失敗した話)
subroh0508
0
370
buildSrc/Composite Buildで必要なバージョン情報も Version Catalogから参照したい!
subroh0508
0
1.1k
フロントエンドもJetpack Composeで書きたい! -Compose for WebはモダンWebアプリケーションの夢を見るか?-
subroh0508
0
700
det(A-λE) = 0 〜我々はなぜ三峰結華に惹かれるのか〜
subroh0508
0
130
J( 'ー`)し「Jetpack Composeって、Desktopアプリも作れるのよ」
subroh0508
0
78
E=mc2 〜樋口円香のエンジンが質量を生むまで〜
subroh0508
0
180
StatusBarをできるだけ簡潔にカスタマイズする
subroh0508
1
210
Other Decks in Programming
See All in Programming
Docker_OSS_ホスティング入門
satokoki645
0
140
2024 コーディング研修
ckazu
2
680
Exploring the Implementation of “t.Run”, “t.Parallel”, and “t.Cleanup”
akarin
1
160
Jetpack Composeとデザインシステム
rmakiyama
0
240
Three ways to use AI on Android: The Good, the Bad and the Ugly
marxallski
0
120
Porting mruby/c for the SNES (Super Famicom) - RubyKaigi 2024
gedorinku
0
430
The grand strategy of Ruby Parser
yui_knk
5
420
The Cutting Edge Of Versioning (LambdaConf 2024)
chriskrycho
0
260
TSKaigi 2024 - 新サービス Progate Path の演習で TypeScript を採用して見えた教材観点からの利点と課題
makotoshimazu
1
230
Enjoy Creative Coding with Ruby (RubyKaigi2024)
chobishiba
0
1k
哲学史とモデリング
tanakahisateru
3
440
JavaScript Closure
asoluka
0
2k
Featured
See All Featured
Building Your Own Lightsaber
phodgson
100
5.7k
Into the Great Unknown - MozCon
thekraken
15
1.1k
What's new in Ruby 2.0
geeforr
338
31k
For a Future-Friendly Web
brad_frost
172
9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
22
1.4k
Product Roadmaps are Hard
iamctodd
45
9.8k
Designing the Hi-DPI Web
ddemaree
276
33k
Facilitating Awesome Meetings
lara
43
5.6k
Building Adaptive Systems
keathley
32
1.9k
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