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
Listかもしれない
Search
irof
January 30, 2023
Programming
2
470
Listかもしれない
【オンライン】 JJUGナイトセミナー「コレクションフレームワーク特集」1/30(月) 開催
https://jjug.doorkeeper.jp/events/149811
irof
January 30, 2023
Tweet
Share
More Decks by irof
See All by irof
プールにゆこう
irof
2
150
Javaマルチバージョンビルディング
irof
1
270
データ/データベースパターン
irof
0
120
勉強会で話すハードルを下げてみる
irof
0
22
Gatlingによる負荷テスト入門
irof
7
2k
これからのJavaのとっかかりを掴む
irof
0
8k
ドメインモデルのつくり方
irof
2
470
ふつうのプログラマのふつうの設計
irof
16
18k
Javaの冗長な構文を愛でてみる / java-redundant-syntax
irof
3
680
Other Decks in Programming
See All in Programming
Let's learn code review
riofujimon
2
630
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
480
Powerfully Typed TypeScript
euxn23
3
1.1k
Ruby on Fails - effective error handling with Rails conventions
talyssonoc
0
280
Effectで作る堅牢でスケーラブルなAPIゲートウェイ / Robust and Scalable API Gateway Built on Effect
yasaichi
7
1.2k
RailsConf 2024: Riffing on Rails: sketch your way to better designed code
kaspth
0
200
TypeScriptのパフォーマンス改善
yajihum
12
4.9k
An adventure of Happy Eyeballs
coe401_
1
130
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
2
220
Runtime Objects in Rust
mitsuhiko
0
200
TypeScriptで使いやすいOpenAPIの書き方
yukimochi_dwango
0
290
2024 コーディング研修
ckazu
2
620
Featured
See All Featured
Gamification - CAS2011
davidbonilla
77
4.6k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Writing Fast Ruby
sferik
622
60k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Faster Mobile Websites
deanohume
300
30k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Facilitating Awesome Meetings
lara
43
5.6k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.7k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
Transcript
-JTU͔͠Εͳ͍ ++6(φΠτηϛφʔʮίϨΫγϣϯϑϨʔϜϫʔΫಛूʯ 5
ࠓͷ 話 気 ……
ίϨΫγϣϯͱ
ίϨΫγϣϯͱ ίϨΫγϣϯʢࡶʣ ίϨΫγϣϯʢͱΓ͋͑ͣʣ ίϨΫγϣϯʢͪΌΜͱʣ ͦͷଞͷίϨΫγϣϯ ίϨΫγϣϯͱྻ
ίϨΫγϣϯͱ ʢࡶʣ
ࡶͳίϨΫγϣϯ ཁૉΛෳ·ͱΊͯѻ͏ͷ ෳʹO ೖΕɺ͔ͨ·Γɺଋɺίϯς φɺू߹ɺɺɺ
ίϨΫγϣϯͷؒ $PMMFDUJPOT'SBNFXPSLʢࠓճʣ ྻ 0QUJPOBM 4USFBN ଞͷίϨΫγϣϯ 覚
ίϨΫγϣϯ ʢͱΓ͋͑ͣʣ
ͱΓ͋͑ͣ -JTU ͍͍ͩͨ͜ΕͰࣄΓΔ .BQ ΩʔͰҰຊΓ͍ͨ͠ͱ͖ʹ
લఏΠϯλϑΣʔεͱ࣮Ϋϥε ίϨΫγϣϯجຊతʹΠϯλ ϑΣʔεͰѻ͍·͢ɻ ࣮ΫϥεΠϯελϯεੜ ࣌ͳͲಛผͳ߹͚ͩɻ ͰͱΓ͍͍͋͑ͣɻ
-JTUͱΓ͋͑ͣ͑Δ Πϯελϯε͕࡞ΕΔ ཁૉΛՃͰ͖Δ ϧʔϓͰ͖Δ
-JTUͱΓ͋͑ͣ͑Δ List完全
શʹϚελʔͨ͠ ʮͱΓ͋͑ͣ͑Δʯ͜ΕΛ ͪΌΜͱͰ͖Ε͍͍ɻ ͱΓ͋͑ͣ"SSBZ-JTU ͱΓ͋͑ͣδΣωϦΫεॻ͍ͱ͘ BEE GPSFBDIϧʔϓ
ͪΌΜͱ͑ͯͳ͍ྫ
.BQͱΓ͋͑ͣ͑Δ Πϯελϯε͕࡞ΕΔ ཁૉΛՃͰ͖Δ ཁૉΛऔΓग़ͤΔ
.BQͱΓ͋͑ͣ͑Δ
શʹϚελʔͨ͠ ʮͱΓ͋͑ͣ͑Δʯ͜ΕΛ ͪΌΜͱͰ͖Ε͍͍ɻ )BTI.BQ LFZ)BTI.BQͰѻ͑Δͷ ͱΓ͋͑ͣ4USJOHͰ͍͍ɻ͋ͱͰΘ͔Δ
ͱΓ͋͑ͣίϨΫγϣϯ͑Δ ͬͯݴ͍͍ͬͯɻ ͜ΕͰۀॲཧॻ͚ͳ͘ͳ͍ɻ Α͘Θ͔ΒΜͷग़͖ͯͨΒʮͱΓ͋ ͑ͣʯͷ࣍ʹਐΈ·͠ΐ͏ɻ ͍͖ͳΓίϨΫγϣϯશΫϥεͱ͔શϝ ιουͷ͍ํͱ͔֮͑ͳ͍͍ͯ͘Αɺ΄ Μͱʹɻ
ͱΓ͋͑ͣʹ͚ম͖ਕ ଘࡏνΣοΫDPOUBJOT আSFNPWF ͜Ε͘Β͍ͰʮͰ͖ͳ͍ॲཧʯͦ͏ ͳ͍ͱࢥ͏ ޮѱ͍ͱ͔อकੑѱ͍ͱ͔μα͍ͱ ͔͋Δ͚Ͳɺͦ͜Εํͳ͍
ίϨΫγϣϯ ʢͪΌΜͱʣ Java SE 話
$PMMFDUJPOT'SBNFXPSL ίϨΫγϣϯͷϑϨʔϜϫʔΫ +BWBͰಋೖ͞Εͨͷ ʢલʣ ʜʜಋೖͩͱࢥͬͯͨΑɻϓϩ δΣΫτͬͯͨ࣌7FDUPSͱ͔ग़͖ͯ ͔ͨΒɻ
$PMMFDUJPOT'SBNFXPSL ΠϯλϑΣʔεͱ࣮Λ͚Δ ͷ͕ྲྀߦ͍ͬͯͨ࣌ ࠓ͑ͯΔͷ͜Εͷ͓͔͛ײ͋Δ ϚγϯεϖοΫ͕ශऑͳ࣌ Α͘Ͱ͖ͯΔʢਖ਼ʣ
$PMMFDUJPOT'SBNFXPSLͷ ΠϯλϑΣʔεͨͪ 覚
ΫϥεೖΕΔͱΧΦεʹͳΔ 知
ͬ͠ͱ͚ -JTU .BQ $PNQBSBCMF $PNQBSBUPS 4FU 4PSUFE4FU
4PSUFE.BQ ൪֎ $PMMFDUJPO ΄͔ 各層 中 話
ίϨΫγϣϯͪΌΜͱ͑Δ ͬͯͳΜΑʁͱͳΓ·͢ɻ ͳͷͰͪΌΜͱΛϨϕϧʹ͚ ͯΈΔɻ
ͪΌΜͱ ΠϯλϑΣʔεΛબͰ͖Δ ࣮ΛબͰ͖Δ ඇίϨΫγϣϯͱมͰ͖Δ ʢ͜·͝·ͨࣝ͠κʔϯʣ ίϨΫγϣϯΛ࣮Ͱ͖Δ #FUUFSίϨΫγϣϯΛ࡞ΕΔ =====超 壁=====
ଞͷίϨΫγϣϯ
ଞͷίϨΫγϣϯʁ $PMMFDUJPOT'SBNFXPSLҎ֎ʹί ϨΫγϣϯଘࡏ͠·͢ɻ Γͳ͍ྖҬͰಠࣗͷίϨΫ γϣϯ͕ΘΕΔ͜ͱ͋Γ·͢ɻ นΛඈͼӽ͑ͨਓ͕ͨͪͬͯ· ͢ɻ
ίϨΫγϣϯ $PMMFDUJPOT'SBNFXPSL+BWB 4&Ͱఏڙ͞Ε·͕͢ɺݴޠతʹ ಛผѻ͍͞Ε͍ͯΔͷ*UFSBCMF ͘Β͍Ͱ͢ɻ
*UFSBCMFͷಛผѻ͍
ͱ͍͑GPSFBDIϧʔϓ ࠷ۙʢ+BWB݄ɺͭ· ΓલʜʜʣGPS&BDIϝιο υ͕ੜ͑ͯ-BNCEBͤΔΑ͏ʹ ͳͬͨΓͯ͠ΔͷͰɺGPSFBDI ϧʔϓͦ͜·ͰརͰͳ͍ Ͱ͢ɻ
ଞͷίϨΫγϣϯ̎छྨ ίϨΫγϣϯͷΠϯλϑΣʔε Ұ෦ΫϥεΛͬͯɺΑΓతʹ ߹ͬͨίϨΫγϣϯ࣮ ΠϯλϑΣʔε͔Βؙ͝ͱ࠶ઃܭ ͞Εͨ$PMMFDUJPOT'SBNFXPSLͱ ޓੑͷͳ͍#FUUFSίϨΫγϣϯ
ίϨΫγϣϯ࣮ +BWBඪ४ϥΠϒϥϦʹࢄݟ͞ΕΔɻ γʔϜϨεʹସͰ͖ɺతʹ߹͍ͬͯͨ ΒྗΛൃش͢Δɻ ΠϯλϑΣʔε͑͞߹ͬͯΕ͍͍ͷͰɺ 3%#ʹଓ͢ΔίϨΫγϣϯͱ͔࡞ ΕΔɻ ͍ʹͳΔ͔ΒΜɻ
#FUUFSίϨΫγϣϯ $PMMFDUJPOT'SBNFXPSLͷܕ֊ૢ࡞ ʹҟΛএ͑Δಠࣗ࿏ઢɻ ੑೳ"1*ͷ͍উख༏Δͷͷɺඪ ४ͱ֎ΕΔ͕Ώ͑ʹଞͷϥΠϒϥϦͱ ͷΓͱΓͷ෦Ͱଟগటष͘ͳΔɻ ͰศརͰ҆શͰޮ͍͍ɻ
ίϨΫγϣϯͷૢ࡞
Γ͍ͨૢ࡞ Ճ আ ஔ நग़ ׂ ूܭ ҙͷॲཧ ม ଞ͋Δ͔
ίϨΫγϣϯૢ࡞ ҰݸͣͭऔΓग़ͯ͠ΕͱΓ͋ ͑ͣͳΜͱ͔ͳΔ ੑೳ͕ڐͤɻ ࣮ྔ͕ڐͤɻ ίʔυ͕ଟ͍ͱ୯७ʹ໘ͩ͠ɺ ίʔυ͕ଟ͍͚ͩόάΓ͍͢ɻ
࣍Ͱ😉
ίϨΫγϣϯΘ͔Δ
Θ͔Δ͍Ζ͍Ζ ΫϥεϝιουΛ҉ه͍ͯ͠ ͯΘ͔Δͱ͍͑·ͤΜɻ
$PMMFDUJPOT'SBNFXPSLͷ ΠϯλϑΣʔεͨͪ 覚 再掲
ΫϥεೖΕΔͱΧΦεʹͳΔ 知 再掲
KBWBVUJM ͚ͩݟͯ List実装 Map実装
Θ͔Δ͍Ζ͍Ζ ֮ͦͦ͑ΔͷແཧΑͶ
ͳͷͰ͝ͱʹ ʮ͜ΕΘ͔Δʯͱݴ͑ͦ͏ͳΛ͠·͢
-JTU ॱংͷ͋ΔίϨΫγϣϯͰ͢ɻ ॱং͕͋ΔͷͰ ೖΕͨॱ͕ҡ࣋͞ΕΔ ฒͼସ͕͑Ͱ͖Δ ฒͼॱΛѻ͑Δඞཁ͕͋Δ
-JTUͷมߋՄೳੑ -JTUPG"SSBZTBT-JTUͰ࡞ͬͨΓɺ $PMMFDUJPOTVONPEJ fi BCMF-JTUΛ௨ͨ͠-JTUมߋͰ ͖ͳ͍ɻ มߋͰ͖ͳ͍-JTUʹมߋૢ࡞Λߦ͏ͱ 6OTVQQPSUFE0QFSBUJPO&YDFQUJPO͕ൃੜ͢Δɻ࣮ߦ࣌ྫ֎ͭ Β͍ɻ -JTUʹݶΒͳ͍͚ΕͲίϨΫγϣϯશൠ๊͕͑Δɺ
ݹ͔͘ΒΑ͘ΒΕͨڍಈɻ มߋෆՄΛલఏʹ͢Δͷ͕ྑ͍ɻ
-JTUͷ࣮બ KBWBVUJM"SSBZ-JTU -JTUPG & ੜ͢Δͱ͖͜ͷ̎ɻ ଞ͋Δ͚Ͳ͋·Γؾʹ͠ͳ͍͍ͯ͘ Ͱ͢ɻ
"SSBZ-JTUͱ-JOLFE-JTU ΄ͱΜͲ"SSBZ-JTUͰ͍͍ -JOLFE-JTUͷํ͕దΆ͍໘Ͱ "SSBZ-JTUͷํ͕ੑೳͰͨΓ͠ ͯ͠·͏͜ͱ͠͠ "SSBZ-JTU͕͍͞Εͨ݁Ռͱ͔ͳ Μͱ͔
.BQ ΩʔͰѻ͏࣌ʹ͍·͢ɻ ΩʔಉੑʢFRVBMTIBTI$PEFʣ͕ద ʹ࣮͞Ε͍ͯΔඞཁ͕͋Γ·͢ɻ FRVBMTIBTI$PEF.BQͷͨΊʹ͋Δͱ ݴͬͯաݴͰͳ͍ɻ աݴͩͬͨɻͰίϨΫγϣϯͷͨΊʹ͋Δͱ ݴͬͯաݴͰͳ͍ؾ͠ͳ͍Ͱͳ͍ɻ
.BQͷࠪ $PMMFDUJPOͰͳ͍ ͭ·Γ*UFSBCMF͕࣮͞Ε͍ͯͳ͍ FOUSZ4FU Ͱ4FU&OUSZʹͯ͠ ͔ΒͿΜ·Θ͢ɻ LFZ4FU WBMVFT ͋Δ͚Ͳɺѹ తʹFOUSZ4FU
ͷग़൪͕ଟ͍ɻ
ฒͼॱ ൺֱ͢ΔͨΊͷ $PNQBSBCMF͕࣮͞ΕͨΫϥε ͕ཁૉͳΒͦͷॱͰฒΒΕΔ ฒͼସ͕͑ࣗ༝ʹͰ͖ΔͱΘ͔ͬͯΔ ײ͋Δ
ฒͼॱ ฒͼସ͑Δ࣌ʹ༩͑Δɻ
$PNQBSBUPS $PNQBSBUPSͷϑΝΫτϦϝιο υʢDPNQBSJOHͱ͔ʣͰ࡞Δɻ $PNQBSBUPSΠϯλϑΣʔεΛ࣮ ͠ͳ͍ɻ
$PNQBSBUPS -JTU -JTUΛιʔτ͢Δͱ͖ʹTPSUϝ ιουʹ$PNQBSBUPSΛ͚͢Ε Ͳɺ-JTU͕มߋՄೳ-JTU͔Ͳ͏͔ Ͱ࣮ߦ࣌ΤϥʔʹͳΔɻ ࠷ۙ͋·Γ͠ͳ͍ɻ 4USFBNͰTPSUͯ͠UP-JTUͪ͠Ό͏ɻ
4FU ॏෳ͠ͳ͍ίϨΫγϣϯͰ͢ɻ ॏෳ͢Δ͔Ͳ͏͔ಉੑʹ ͞Ε·͢ɻ ಉੑ࣌ؒ࣍ୈͰ͋ͱͰɻ جຊతʹॱংͳ͍Ͱ͢ɻ ͋Δ͚ͲΞςʹͨ͠Βμϝɻ
4PSUFE4FU4PSUFE.BQ ͱݴ͑ʮ4FU͍͍͚ͨͲॱং ʔʯͱ͔ݴ͍ग़͢͜ͱଟ͍Ͱ ͢ɻΘ͕··ɻ ͳͷͰηοτͰ4PSUFE4FU͑ ͓͖ͯ·͠ΐ͏ɻ ͍ͭͰʹ4PSUFE.BQɻ
൪֎$PMMFDUJPO $PMMFDUJPO͕ग़ͯ͘Δ͜ͱ໓ଟ ʹͳ͍Ͱ͢ɻ
"SSBZ-JTU͡Όͳ͘-JTUΛ͏
ͦͷઌ ίϨΫγϣϯ͕બΔ
൚༻࣮ͷબࢶ 覚 ( 「⼊⾨」)
ͨͩ͠ ੑೳ໘͔ΒదͳίϨΫγϣϯΛબ ΜͩͭΓͰɺ࠷ۙͷίϯϐϡʔ λʔϦιʔεͩͱޡࠩʹऩ·ͬͨΓ ͠·͢ɻίϨΫγϣϯͰؤுͬͨΓ ͢Δ·͑ʹɺઃܭ4USFBNɺαʔυ ύʔςΟʔͷ#FUUFSίϨΫγϣϯͰ ରॲ͢Δ΄͏͕ྑ͍ײ͡͠·͢ɻ
༩ଠ ⽂句
͑ͳ͍ϝιου͕͋Δ 6OTVQQPSUFE0QFSBUJPO&YDFQUJPO ͕ى͜Δɻ࣮ߦ࣌ྫ֎ͭΒ͍ɻ ͜ΕKBWBMBOHύοέʔδͷͤ͘ʹ $PMMFDUJPOT'SBNFXPSLͷϝϯ όʔͳΜͰ͢ΑͶɻଞͰΘΕ ͯΔ͚Ͳɻ
OVMMͷѻ͍͕·ͪ·ͪ OVMM͕ೖΔίϨΫγϣϯͩͬͨΓɺೖΒͳ ͍ίϨΫγϣϯͩͬͨΓɺ·ͪ·ͪɻ OVMM͕ೖΒͳ͍ίϨΫγϣϯʹOVMMೖΕΔ ͱ࣮ߦ࣌ྫ֎ͭΒ͍ɻ +BWBEPDʹॻ͍ͯΔ͚Ͳಡ·ͳ͍ʢࣗനʣ ςετͰؾ͔ͮ͘Β͍͍͔ͳͬͯʜʜ
ΓΈͯ͌Ϳ JOUͱ͔CPPMFBOͱݴͬͨϓϦϛςΟϒ ʢ·ͩʣίϨΫγϣϯͰѻ͑ͳ͍ɻ ԼखʹΔͱϘΫγϯάʗΞϯϘΫγϯ ά͕සൃ͢Δɻ ͚ͲϚγϯύϫʔ্͕ͬͯผʹʹͳ Βͳ͍ͷඍົʹ໘ͳͱ͜Ζɻ
IBTI$PEFFRVBMT ίϨΫγϣϯͰཁૉಉ࢜Λൺֱ ͢Δ͜ͱଟ͍ɻ ͳͷͰ͜ΕΒΛѻ͑ͳ͍ͱʮίϨ Ϋγϣϯ͑ΔʯʹͳΒͳ͍ɻ ͜ͷ࣍ʹ$PNQBSBCMF͕ग़ͯ͘Δɻ
ಓIBTI$PEF IBTI$PEF͕Ұக͍ͯͯ͠Π ίʔϧͰͳ͍ʢશવҧ͏ͷͰ ඃ͍͍ͬͯʣ IBTI$PEF͕ҧͬͨΒඞͣҧ͏ʹ ͠ͳ͖Ό͍͚ͳ͍
͍ͨͩ͠IBTI$PEFͷ࣮ 役 ⽴
IBTI$PEFFRVBMTͷ࣮ ͖ͯͱ͏ʹ͠Β͍ͯͩ͘͞ɻ *%&ʹ࡞ΒͤΔͰ͍͍͠ɺ SFDPSEʹཔΔͰ͍͍͠ɻ
ίϨΫγϣϯͱ γϦΞϥΠζ
γϦΞϥΠζ ࣮Ͱ΄ͱΜͲҙࣝ͞Εͳ͍ Ͱ͋Ζ͏4FSJBMJ[BCMFͷɻ Βͳ͍͍ͯ͘Μ͚ͩͲɺΒ ͳ͍ͳΒΘͳ͍͜ͱɻ͏ͳ Β͓͔ͬͯͳ͖Ό͍͚ͳ͍ɻ
4FSJBMJ[BCMFੲ ҰੲલηογϣϯϨϓϦέʔγϣϯͱ͔Ͱඞཁ ͩͬͨΓͰඞ͚ͣͭ·͠ΐ͏ͱ͔ͳͬͯͨΜ͚ͩ ͲɺࠓΦϒδΣΫτΛγϦΞϥΠζ͢Δํ๏͕ ͜ΕʹݶΒͳ͘ͳͬͯΔͷͰग़൪ݮͬͯΔɻ ηογϣϯϨϓϦέʔγϣϯͰSFEJTͱ͔ͷ֎෦ ετϨʔδ͏ͳΒ͚ͦͬͪͷγϦΞϥΠζΛ ͢Ε͍͍ͷͰɻ ͨͱ͑+40/ʹॻ͖ग़͢ͳΒ4FSJBMJ[BCMFཁΒͳ͍ɻ
4FSJBMJ[BCMFੲ TFSJBM7FSTJPO6*%ͱ͍͏ͷ ʮܯࠂͰΔ͔Βͬͱ͜͏ʯ͘Β͍Ͱ࡞ ΒΕͯͨΓ͢Δɻ ͦΕͳΒ࡞Βͳ͍ํ͕ϚγͳΜ͚ͩͲͳ͊ʜʜ ͱԣͰݟͯΔɻ࣮ͳ͍ͷͰ͠͠εϧʔͪ͠Ό͏ɻ ͜ͷΛ࢝ΊΔͱऴΘΒͳ͍ͷͰলུɻ
ίϨΫγϣϯͱγϦΞϥΠζ -JTU4FSJBMJ[BCMFͰͳ͍ $PMMFDUJPOT'SBNFXPSLͷΠϯλ ϑΣʔεશ෦4FSJBMJ[BCMFͰͳ͍ "SSBZ-JTU4FSJBMJ[BCMFͰ͋Δ
ͨͱ͑͜͏͍͏࣮ NG 。 保証 。
)BTI4FUͷத
)BTI4FUͷத ॏෳΛͳ͍ͨ͘͠ͱ͖ʹΑ͘Θ ΕΔ)BTI4FUɺ)BTI.BQͱࣅ ͍ͯΔ͚ΕͲɺ)BTI.BQ͕Ωʔ ͱͷϖΞͰ͋Δͷʹରͯ͠ )BTI4FUཁૉ͚ͩΛѻ͏ͷͰγ ϯϓϧͩͱࢥ͏͔͠Εͳ͍ɻ
KBWBVUJM)BTI4FU
KBWBVUJM)BTI4FU 👈 中⾝HashMap
ੲͷࢠͨͪ
ग़͖ͯͨΒʮ͋ɺੲͷʜʜʯͱ Թ͔͍Ͱݟ͍ͯ͋͛ͯͩ͘͞ 「昔」 ⾔ 側 24年前問題
ίϨΫγϣϯͷ ެࣜυΩϡϝϯτ
ެࣜυΩϡϝϯτ 存在知 辿 着 問題
ͨͲΓ͖͔ͭͨ
None
όʔδϣϯ ̓ 分布差 込
出典 感覚
όʔδϣϯ ̓ 実際⾒ 現場
割合
👇
👉
👈
👇
👈
None
👈
None
読 物 ⾯⽩