Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
モノリシックRailsアプリケーションを モジュラモノリスへ移行している noteの事例
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shshimamo
October 22, 2022
Programming
14k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
モノリシックRailsアプリケーションを モジュラモノリスへ移行している noteの事例
shshimamo
October 22, 2022
Other Decks in Programming
See All in Programming
スマート反転とウェブアクセシビリティ
camiha
0
210
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
9
7.2k
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
2.5k
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
130
Are APIs Still Relevant in the AI Era?
soyuka
0
290
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
270
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
140
アクセシビリティから考える情報設計
high_g_engineer
0
380
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
150
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
840
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Prompt Engineering for Job Search
mfonobong
0
460
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Building the Perfect Custom Keyboard
takai
2
880
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Amusing Abliteration
ianozsvald
1
310
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
670
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
710
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
Transcript
note inc. ϞϊϦγοΫRailsΞϓϦέʔγϣϯΛ ϞδϡϥϞϊϦεҠߦ͍ͯ͠Δ noteͷࣄྫ 1 Kaigi on Rails 2022
note גࣜձࣾɹౢຊ ༸
ౢຊ༸ ʢ͠·ͱͻΖʣ note inc. ɾ!TITIJNBNP ɾετΞΧ ˠΫϦϓϥ
ˠOPUF ɾOPUFͰɺܾࡁ୲ɾγεςϜׂͳͲ
note inc. ࠓͷ ɾQBDLXFSLʹ͍ͭͯ ɾOPUFͷಋೖࣄྫ
4 packwerk ʹ͍ͭͯ
note inc. QBDLXFSLͱ ɾ4IPQJGZ͕։ൃ ɾ3BJMTʹύοέʔδʢϑΝΠϧάϧʔϓʣΛ࡞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔ ɾେ͖ͳίʔυϕʔεΛখ͘͞ݟͤͯ։ൃޮߴΊΔ͜ͱ͕͜ͷHFNͷత Rails App ύοέʔδ
ύοέʔδ
note inc. ύοέʔδػೳతͳڥք ɾػೳ͝ͱʹBQQ MJCͳͲΛͭ͘ΔΠϝʔδ ɾઃఆϑΝΠϧʢQBDLBHFZNMʣΛஔͨ͠σΟϨΫ τϦ͕ύοέʔδʹͳΔ Rails App
ϑΝΠφϯε ύοέʔδ ηΩϡϦςΟ ύοέʔδ package.yml package.yml package.yml
note inc. ύοέʔδڥքͷͨΊͷͭͷڧ੍ࣄ߲ ɾύοέʔδؒͷґଘؔ ɾΞΫηείϯτϩʔϧʢެ։ඇެ։ʣ σΟϨΫτϦΛ͚͚ͨͩͰӨڹൣғΛݶఆ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ packwerk 2ͭͷࣄฑΛ੩తղੳͰڧ੍
͢Δ͜ͱͰཧతͳڥքઢΛͭ͘Δɻ
note inc. ڧ੍ࣄ߲ύοέʔδؒͷґଘؔ ɾFOGPSDF@EFQFOEFODJFTΛUSVFʹ͢Δͱɺผύοέʔδͷࢀর͕ҧ ͱΈͳ͞ΕΔ ɾผύοέʔδΛࢀর͍ͨ͠߹ґଘؔΛ໌ه͢Δඞཁ͕͋Δ Rails App ύοέʔδ
package.yml ύοέʔδ ❌
note inc. ྫϑΝΠφϯεˠηΩϡϦςΟͷҧ packages/finance/app/models/payment.rb packages/security/app/models/check_content.rbɹ͕͋Δͱ͢Δɻ ผύοέʔδͰ͋ΔηΩϡϦςΟύοέʔδΛࢀর͍ͯ͠ΔͨΊҧͱͳΔɻ ͜ͷઃఆΛ͏͜ͱͰύοέʔδͷӨڹൣғΛݶఆ͢Δ͜ͱ͕Ͱ͖Δɻ Rails App
ϑΝΠφϯε ηΩϡϦςΟ ❌
note inc. ྫηΩϡϦςΟˠϑΝΠφϯεͷґଘΛՃ ηΩϡϦςΟύοέʔδԣஅతʹࢹ͢Δػ ೳͳͷͰଞύοέʔδͷґଘΛڐՄ͢Δɻ ͔͠͠ɺϑΝΠφϯεύοέʔδͷͯ͢ͷ ΫϥεΛར༻Ͱ͖Δͷ·͘͠ͳ͍ɻ Rails App
ηΩϡϦςΟ ϑΝΠφϯε ґଘ
note inc. ڧ੍ࣄ߲2: ΞΫηείϯτϩʔϧʢެ։/ඇެ։ʣ 11 ɾFOGPSDF@QSJWBDZΛUSVFʹ͢ΔͱBQQQVCMJDҎ֎ͷͯ͢ͷΫϥε͕ ඇެ։ͱͳΔʢެ։σΟϨΫτϦมߋՄೳɻΫϥεࢦఆͷॻ͖ํ͋Δɻʣ Rails App ύοέʔδ
ύοέʔδ app/public ެ։ ඇެ։ ⭕ ❌
note inc. ྫ: ϑΝΠφϯεͷҰ෦ͷΫϥε͚ͩެ։͢Δ 12 ɾϑΝΠφϯεύοέʔδͷFOGPSDF@QSJWBDZΛUSVFʹ͢Δ ɾBQQQVCMJDʹެ։ΫϥεΛ࡞ Rails App ηΩϡϦςΟ
ύοέʔδ ϑΝΠφϯε ύοέʔδ app/public ެ։ Ϋϥε package.yml
note inc. packwerk ͷίϚϯυ 13 ᶃQBDLXFSLWBMJEBUF ઃఆϑΝΠϧͷਖ਼͠͞ͳͲΛνΣοΫ ᶄQBDLXFSLDIFDL ґଘؔɺΞΫηείϯτϩʔϧͷνΣοΫ ᶅQBDLXFSLVQEBUFEFQSFDBUJPOT
ҧϦετͷࣗಈੜɻSVCPDPQ@UPEPZNMͷΑ͏ͳࢦఠର֎ͷϦετɻ
note inc. ᶃύοέʔδσΟϨΫτϦ࡞ˍϑΝ ΠϧҠಈ ᶄύοέʔδͷґଘؔΛՃ ᶅެ։ΫϥεΛ࡞ ᶆҧϦετΛݮΒ͍ͯ͘͠ ྫ: note Ͱͷӡ༻
14 WBMJEBUFίϚϯυ DIFDLίϚϯυ Λ$*Ͱ࣮ߦ VQEBUF EFQSFDBUJPOTί ϚϯυΛखಈ࣮ߦ ҧϦετ૿Ճ ҧϦετݮগ
note inc. ҧϦετ 15 ηΩϡϦςΟύοέʔδͷ $IFDL$POUFOUΫϥεʹରͯ͠ ґଘؔͱΞΫηείϯτϩʔϧͷҧ͕ൃੜɻ ҧ͕ൃੜ͍ͯ͠ΔϑΝΠϧϑΝΠφϯεύοέʔδͷϑΝΠϧɻ ɾSVCPDPQ@UPEPZNMͷΑ͏ͳͷ ɾϦετࢦఠͷର֎ͱͳΔɻҧϦετΛʹ͢Δ͜ͱ͕࠷ऴతͳඪ
note inc. ҙ 16 ɾ;FJUXFSL͕લఏͱͳ͍ͬͯΔ ɾ;FJUXFSL͕ແޮͰQBDLXFSLΛ͏͜ͱͰ͖Δ͕ɺ;FJUXFSL ͷنʹ͢Δఆҧݕ͞Εͳ͍ ɾఆϕʔεͷ੩తղੳͰ͋Δ ɾҾͰผύοέʔδͷΦϒδΣΫτΛड͚औ͍ͬͯͨͱͯ͠ҧݕ ͞Εͳ͍
17 note ͷಋೖࣄྫ
note inc. packwerk ಋೖͷ͖͔͚ͬ 18 ɾେنԽʹ͏։ൃޮԼΛղফ͢ΔͨΊʹߴڽूɾૄ݁߹Λҙࣝͨ͠ߏ ʹม͍͑ͯ͘ඞཁ͕͋ͬͨ ɾํ๏Λࡧ͍ͯ͠ΔதͰ̍ͷॻ੶ʹग़ձ͏ ɾ 4UFQIBO)BHFNBOO
ஶ (3"%6"-.0%6-"3*;"5*0/'0336#:"/%3"*-4 ɾஈ֊తͳυϝΠϯׂɺΓ͕͠༰қɺͱ͍͏ಛ͕υϝΠϯׂͷ࠷ॳͷε ςοϓͱͯ͠ద͍ͯ͠Δͱஅ͠ಋೖΛܾఆ
note inc. ݱࡏͷ note ͷσΟϨΫτϦߏ 19 QBDLBHFTԼʹ ͭͷύοέʔδ ֤ύοέʔδʹ BQQҎ֎ͯ͢Ҡಈ
note inc. ύοέʔδԽͷखॱ 20 ᶃύοέʔδσΟϨΫτϦ࡞ ᶄઃఆϑΝΠϧ࡞ ᶅDPO fi HBQQMJDBUJPOSCʹϩʔυύεՃ ᶆϑΝΠϧΛҠಈ
ᶇҧϦετߋ৽ ᶈҧϦετͷࠩΛ֬ೝ͠ߋʹҠಈ͢ΔϑΝΠϧ͕͋Δ͔νΣοΫ ᶉQBDLXFSLͷ੩తݕ͕ࠪ௨Δ͜ͱΛ֬ೝ ᶊҧϦετΛݮΒ͍ͯ͘͠ ᶋQBDLBHFTҠಈޙɺͬ͘͠Γ͜ͳ͍߹ݩʹ͢͜ͱߟ͑Δ $ mkdir packages/finance $ touch packages/finance/packages.yml $ git mv app/models/payment.rb packages/finance/app/models $ bundle exec packwerk update-deprecations $ bundle exec packwerk check
note inc. packwerk ಋೖ࣌ʹՃͨ͠ઃఆ 21 ᶃBVUPMPBE@QBUIʹQBDLBHFTΛՃ ᶄ3BLF fi MFʹQBDLBHFTͷϩʔυΛՃ ᶅ"QQMJDBUJPO$POUSPMMFSʹQBDLBHFTͷ7JFXΛಡΉࠐΉઃఆΛՃ
ᶆ$JSDMF$*ͷςετରʹQBDLBHFTΛՃ ᶇGBDUPSZ@CPUͷύεʹQBDLBHFTΛՃ جຊతʹ֤πʔϧͷύεʹ৽نσΟϨΫτϦ( packages/ ) ΛՃ͢Δ͚ͩͰok
note inc. ᶃ autoload_path ʹ packages/ ΛՃ 22
note inc. ᶄ Rakefile ʹ packages/ ͷϩʔυΛՃ 23
note inc. ᶅ ApplicationController ʹ packages/ ͷ View ΛಡΈࠐΉઃఆΛՃ 24
note inc. ᶆ CircleCI ͷςετରʹ packages/ ΛՃ 25
note inc. ᶇ factory_bot ͷύεʹ packages/ ΛՃ 26
note inc. ύοέʔδԽͷϧʔϧ 27 ɾQBDLBHFT3&"%.&NEύοέʔδԽͷϧʔϧ ύοέʔδԽʹڵຯΛͬͨνʔϜ͕ੵۃతʹಈ͚ΔΑ͏ʹߟ͑ํखॱΛඋ ɾQBDLBHFT\ύοέʔδ໊^3&"%.&NE֤ύοέʔδͷઆ໌ ύοέʔδͷׂ͍ํ
note inc. packages/README.md ͷྫ ϞδϡʔϧԽͷࢦ • ׂલͷେ͖͍ϞϊϦεΛίΞͱݺͿ • \3BJMTSPPU^QBDLBHFTσΟϨΫτϦԼʹϞδϡʔϧΛஔ͢Δ •
ϞδϡʔϧؒͷґଘؔQBDLXFSLHFNΛ༻͍ͯ%4-ͰϧʔϧΛهड़͠ɺ$*Ͱҧͷ༗ແΛݕࠪ QBDLXFSLDIFDL ͢Δ • Ϟδϡʔϧͷத3BJMT&OHJOFͰߏஙͯ͠ྑ͍ • ϞδϡʔϧͷڥքൃݟͰҎԼΛߟྀ͢Δ ◦ ଞ͔Βಠཱͨ͠ॲཧ͔ʁ ґଘ͕গͳ͍͔ ◦ νʔϜΛඥ͚ͮΔࣄ͕Ͱ͖Δ͔ʁ ◦ σʔλϕʔεςʔϒϧଞͱಠཱ͍ͯ͠Δ͔ʁ • ཧతʹɺϞδϡʔϧؒͷґଘશ͘ແ͍͔ɺܾΊΒΕͨํ๏ QVCMJDBQJQVCTVC ܦ༝ͷΈͰߦΘΕΔ͖ɻ͔͠͠ɺ ॳظͷҠߦஈ֊Ͱ͍͠ ◦ ίΞˠϞδϡʔϧɺϞδϡʔϧˠίΞͷ॥ࢀর͕ൃੜͯ͠͠·͏ ◦ ίΞˠϞδϡʔϧͷґଘҰൠతʹ༰ೝͯ͠ྑ͍ ◦ ॥ࢀরΛݮΒ͔͢ɺܾΊΒΕͨํ๏ͷΈͰͷΓͱΓʹ͢Δঢ়ଶΛࢦ͢ ◦ ॥ࢀর͕Ͳ͏ͯ͠ݮΒͤͳ͍߹ɺίΞʹͨ͠ํ͕·͔ͬͨ͠Մೳੑ͋Δ • ॥ࢀরͷҰཡQBDLXFSLHFNͰϦετԽ͠HJUDPNNJU͢Δʢޙड़ʣ 28
note inc. packages/README.md ͷྫ public apiʹ͍ͭͯ • packwerkཧͷύοέʔδɺଞͷύοέʔδ͔Βར༻͞ΕΔࣄΛલఏʹͨ͠public apiΛઃஔͰ͖Δ ◦
σϑΥϧτͰ packages/hoge/app/public/* ҎԼʹஔ͞ΕͨαʔϏεΫϥε͕public apiͱͳΔ • public api ύοέʔδʹॴଐ͢Δ໊લۭؒͷԼʹ Public ͱ͍͏ࢠͷnamespaceΛΓɺͦͷԼʹαʔϏε ΫϥεΛஔ͘ܗͰ࣮͢Δ • ্ه͔ΒɺAPIͷrbϑΝΠϧ packages/{{pkg_name}}/app/public/{{pkg_name}}/public/ Լʹஔ͘͜ͱʹͳΔ 29
note inc. ֤ύοέʔδͷ3&"%.&NEͷྫ 30
31 packwerk ͷϝϦοτ
note inc. ϝϦοτ: ஈ֊తʹׂΛਐΊΔ͜ͱ͕Ͱ͖Δ 32 ɾϚΠΫϩαʔϏεͷΑ͏ʹಈ͘ঢ়ଶͰΓग़͢ඞཁͳ͘ɺஈ֊తʹϑΝΠ ϧΛҠಈ͢ΕΑ͍ ɾ௨ৗ։ൃΛ͠ͳ͕Βগͣͭ͠ύοέʔδԽΛਐΊΒΕΔɻίϯϑϦΫτආ ͚͍͢
note inc. ϝϦοτ: ؆୯ʹΓ͕͠Ͱ͖Δ 33 ɾ࠷ॳͷ࡞ۀ୯७ͳϑΝΠϧҠಈͳͷͰ؆୯ʹΓ͠Ͱ͖Δ ɾύοέʔδԽͷཻɺύοέʔδʹؚΊΔཁૉͳͲɺࢼߦࡨޡ͠ͳ͕Βਐ ΊΔ͜ͱ͕Ͱ͖Δ
note inc. ϝϦοτ: ϦϙδτϦͷߏཁૉɺґଘ͕ؔѲ͘͢͠ͳΔ 34 ɾڊେͳϦϙδτϦ͕ͲͷΑ͏ͳߏཁૉ͔ΒΓɺͦΕΒ͕Ͳ͏ґଘ͠ ͍ͯΔ͔͕Ѳ͘͢͠ͳͬͨ ɾίʔυͷमਖ਼ൣғͱӨڹൣғ͕֬ೝ͘͢͠ͳͬͨ ɾ৽͍͠ϝϯόʔͷೝෛՙ͕ܰݮ
note inc. ϝϦοτ: ϦϑΝΫλϦϯάͷଅਐޮՌ 35 ɾҧϦετ͔Βύοέʔδؒͷґଘͷ߹͍͕͋ΔఔѲͰ͖Δ ɾଞΫϥεʹҠಈͨ͠΄͏͕ྑ͍ϝιουɺΛׂͨ͠ํ͕͍͍Ϋϥε͕ݟ ͔ͭͬͨΓ͢Δ ɾ֤ύοέʔδԼ୲νʔϜʹࡋྔΛ࣋ͨͤͨ͜ͱͰɺίʔσΟϯάϧʔϧ ͳͲͷҙࢥܾఆ͕εϜʔζʹͳͬͨ
note inc. σϝϦοτ 36 ɾҰൠతͳ3BJMTͷσΟϨΫτϦߏͰͳ͘ͳΔͷͰࣾͰͷपΛ͔ͬ͠ Γߦ͏ඞཁ͕͋Δ
37 ࠓޙͷ՝
note inc. ՝: ·ͩશମͷ2ׂఔ͔͠ύοέʔδԽͰ͖͍ͯͳ͍ 38 ɾਐΊ͢͞ɺࢼߦࡨޡͷ͋͢͠͞ΔͷͷɺυϝΠϯڥքͷݕূɺඥ͚ ΔνʔϜͷௐɺͳͲϚΠΫϩαʔϏεͱಉ͡Α͏ʹ͕͔͔࣌ؒΔ ɾύοέʔδԽ͕͍ྃͯ͠Δͷ͍ͭͯɺҧϦετ͕͍ͬͯΔঢ়ଶɻ· ͩํΛ͍ٞͯ͠Δ෦͋Δʢެ։*'ͷฦΓΛ+40/ʹ͢ΔͳͲʣ
note inc. ՝: ࣅͨΑ͏ͳׂͷϑΝΠϧ͕ෳଘࡏ͍ͯ͠Δ 39 ɾͱͱ͕͋ͬͨύοέʔδԽʹΑͬͯݦࡏԽ ɾྫ͑4͔ΒϑΝΠϧΛऔಘ͢ΔॲཧͳͲɺࣅͨΑ͏ͳϢʔςΟϦςΟΫ ϥε͕ෳͷύοέʔδʹଘࡏ͍ͯ͠Δ ɾݱࡏύοέʔδΛ·͍ͨͩڞ௨ԽաʹٻΊͳ͍ํͰਐΊ͍ͯΔ͕ɺ ॏෳϑΝΠϧ͕૿͖͑ͯͨΒํస͕ඞཁ͔͠Εͳ͍
40 ͦͷଞ
note inc. ֤υϝΠϯʹݻ༗ͷnamespaceΛׂΓͯΔ 41 ɾదͳOBNFTQBDFʹDMBTTΛҠಈͤͯ͞ߏԽ͓ͯ͘͠ࣄॏཁ ɾSVCZBUTDBMFTUJNQBDLͷߏ͕ࢀߟʹͳΔ ଞύοέʔδΛҙࣝ͠ͳ͍͍ͯ͘Α͏ʹ υϝΠϯ໊ͷωʔϜεϖʔεΛΔΑ͏ ʹ͍ͯ͠Δɻ ݱঢ়1030ʹͷΈద༻
note inc. ެ։IFͷΓ 42 ɾ"DUJWF3FDPSE"DUJWF3FDPSE3FMBUJPOͷΦϒδΣΫτΛฦ͢ͱ ͖উखͰ͖ͯ͠·͏ͷͰɺকདྷతʹ͢ΔՄೳੑ͕ߴ͍υϝΠϯʹؔͯ͠ +40/1SPUPDPM#V ff FSTͰฦ͢͜ͱΛݕ౼தɻ ɾͨͩ͠"3ͷརศੑɺՄಡੑΛࣦͬͯ͠·͏ͨΊద༻͢Δύοέʔδݫબ
ͨ͠ํ͕͍͍͔͠Εͳ͍ Rails App ύοέʔδ ύοέʔδ app/public +40/
note inc. ৫ʹ͍ͭͯ 43 ɾϚΠΫϩαʔϏε΄ͲͰͳ͍ʹ͠ΖɺϞδϡϥϞϊϦεԽʹ৫ͷڠྗ ͱڧ͍͕࢟ඞཁɻʢ͔ͭQBDLXFSLͷΑ͏ͳ͍উखͷྑ͍੩తݕࠪπ ʔϧͷॿ͚ॏཁʣ ɾղମΛਪ͠ਐΊΔΤϯδχΞͷڧ͍ҙࢤͱ࣮ߦྗʢྗɺ$50ςοΫϦ ʔυͷ߸ྩͳͲʣ͕֬อͰ͖ͳ͍ঢ়ଶͳΒɺͦͷஈ֊Ͱղମʹ౿Έࠐ·ͳ ͍ํ͕ྑ͍͔͠Εͳ͍
44 ·ͱΊ
note inc. ·ͱΊ 45 ɾυϝΠϯׂΛਐΊΔʹ͋ͨͬͯQBDLXFSLͷಛ͕OPUFʹదͯ͠ ͍ͨ ɾࠓͷͱ͜ΖOPUFͰଟ͘ͷϝϦοτΛײ͓ͯ͡ΓɺσϝϦοτ΄ͱΜ Ͳײ͍ͯ͡ͳ͍ ɾQBDLXFSLΛಋೖͨ͜͠ͱͰಋೖతͰ͋ͬͨߴڽूɾૄ݁߹ͳγεςϜͷ ࣮ݱগͣͭ͠Ͱ͋Δ͕ண࣮ʹલʹਐΊΒΕ͍ͯΔ
ɾ͔͠͠՝ଟ͘·ͩ·ͩઌ͍ͷͰࠓޙܧଓͯ͠ଓ͚͍͖͍ͯͨ