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
入門 境界づけられたコンテキスト
Search
yuuki takezawa
April 11, 2022
Technology
6
4.1k
入門 境界づけられたコンテキスト
phperkaigi 2022の資料です。
理解しながら共通化するところはするなどいいバランスを心がけましょう。
音声が悪いですが資料だけでなく、トーク内容も併せて・・!
yuuki takezawa
April 11, 2022
Tweet
Share
More Decks by yuuki takezawa
See All by yuuki takezawa
PHPでアクターモデルを理解・体験しよう / Understand and experience the actor model in PHP
ytake
2
150
再考 アクターモデル/ reconsider actor model
ytake
0
550
GoとアクターモデルでES+CQRSを実践! / proto_actor_es_cqrs
ytake
1
260
Phluxorでアクターモデルを 理解・体験しよう / toolkit-for-flexible-actor-models-in-php-phluxor
ytake
1
200
オブジェクトのおしゃべり大失敗 メッセージングアンチパターン集 / messaging anti-pattern collection
ytake
2
960
DRE/SREのプラクティス融合によるクラウドネイティブなデータ基盤作り / dre_sre
ytake
0
680
技術的負債と向き合う取り組みでよかったもの / positive_efforts_to_tackle_technical_debt
ytake
10
3.7k
アプリケーションエンジニアから強いデータエンジニアへの歩き方 / How to transition and become a Data Engineer from an Application Engineer
ytake
1
480
時間軸とドメインイベントとデータ処理
ytake
1
2.1k
Other Decks in Technology
See All in Technology
ABEMA のコンテンツ制作を最適化!生成 AI x クラウド映像編集システム / abema-ai-editor
cyberagentdevelopers
PRO
1
180
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
49k
【技術書典17】OpenFOAM(自宅で極める流体解析)2次元円柱まわりの流れ
kamakiri1225
0
210
10分でわかるfreeeのQA
freee
1
3.4k
APIテスト自動化の勘所
yokawasa
7
4.1k
サイバーエージェントにおける生成AIのリスキリング施策の取り組み / cyber-ai-reskilling
cyberagentdevelopers
PRO
2
200
Commitment vs Harrisonism - Keynote for Scrum Niseko 2024
miholovesq
6
1.1k
新卒1年目が向き合う生成AI事業の開発を加速させる技術選定 / ai-web-launcher
cyberagentdevelopers
PRO
7
1.5k
WINTICKETアプリで実現した高可用性と高速リリースを支えるエコシステム / winticket-eco-system
cyberagentdevelopers
PRO
1
190
いまならこう作りたい AWSコンテナ[本格]入門ハンズオン 〜2024年版 ハンズオンの構想〜
horsewin
9
2.1k
使えそうで使われないCloudHSM
maikamibayashi
0
170
Fargateを使った研修の話
takesection
0
110
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
Rails Girls Zürich Keynote
gr2m
93
13k
4 Signs Your Business is Dying
shpigford
180
21k
Designing Experiences People Love
moore
138
23k
Done Done
chrislema
181
16k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
Into the Great Unknown - MozCon
thekraken
31
1.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
BBQ
matthewcrist
85
9.3k
Code Reviewing Like a Champion
maltzj
519
39k
Building Your Own Lightsaber
phodgson
102
6k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Transcript
1)1FS,BJHJ:VVLJ5BLF[BXB ೖڥք͚ͮΒΕͨίϯςΩετ
1SP fi MF • ᖒ༗وBLBZUBLF • ελʔϑΣεςΟόϧגࣜձࣾଞࣾ • ετϦʔϜॲཧɺσʔλج൫తͳ͜ͱɺ1E.ͳͲ
• UXJUUFSIUUQTUXJUUFSDPNFY@UBLF[BXB • GBDFCPPLIUUQTXXXGBDFCPPLDPNZVVLJUBLF[BXB • HJUIVCIUUQTHJUIVCDPNZUBLF
"HFOEB • ڥք͚ͮΒΕͨίϯςΩετΛແࢹ͢Δ • ڥք͚ͮΒΕͨίϯςΩετΛཧղ͢Δ
ίϯςΩετΛཧղ͢Δ͜ͱ͕ γεςϜ։ൃ͋ΒΏΔ׆ಈʹ͓͍ͯͷϙΠϯτ
ΒΉ
͡·Γ • ͜͜Ͱ͍͏ͱ Ұൠతͳ৯ྉΛࢦ͠·͠ΐ͏ • ͜ͷاۀ͕ܝ͛Δϛογϣϯ ͨ͘͞Μͷ৯ྉʹग़ձ͏ॴΛఏڙ͠ɺ
৯จԽΛ๛͔ʹʂ
͡·Γ • ࠷ॳʹ৯ྉͷϨϏϡʔαΠτ εϞʔϧελʔτͰ·͔ͣ͜͜Β • ࠷ॳʹ͋Γͱ͋ΒΏΔ৯ྉͷ ϚελʔσʔλΛ࣋ͭͷ͍͠
• ϨϏϡʔΛଅਐ͢ΔͨΊʹ ϨϏϡΞʔʹ৯ྉΛొͰ͖ΔΑ͏ʹ͠Α͏ʂ
࠷ॳͷ৯ྉ • ৯ྉ໊ • ϝʔΧʔ໊ • ࢢൢചՁ֨ʢNJONBYͷΑ͏ͳൣғ͔͠Εͳ͍ʣ • δϟϯϧ
• ϨϏϡʔຊจ • ৯ྉొϢʔβʔ
࠷ॳͷ৯ྉ • ݕࡧ͢ΔϢʔβʔͷ͜ͱΛߟ͑ͯ δϟϯϧࢢՁ֨ͳͲͲ͏ࣺͯͯ͠ΒΕͳ͍ • ੈؒҰൠͷ৯ྉʹର͢Δೝࣝͱେ͖ͣ͘Εͳ͍ͷͰ ͜ΕͰྑ͍Ͱ͠ΐ͏ʂ
ӡ༻Λղܾ͢ΔͨΊͷػೳՃ
ϦϦʔε͔ͯ͠Βগ͠ͷ͜ͱ • ΓϚελʔͷσʔλ͕ͳ͍ͱɺ ΧλΧφͻΒ͕ͳࣈɺ֯શ֯ͳͲඍົͳදه༳ΕͰ ಉ͚ͩ͡Ͳҧ͏ͷʹͳͬͯ͠·͏ • ͜ΕαʔϏεར༻ऀେมΘ͔ΓͮΒ͍ʂ
ϦϦʔε͔ͯ͠Βগ͠ͷ͜ͱ • ໊લొ༰ͷ໊دͤΛ͠Α͏ʂʢਖ਼نԽʣ • ໊دͤࡁΈ͔Ͳ͏͔Λݟͯɺӡ༻ۀʹͯ ٵऩ͢Δ͜ͱ͕Ճʢ໊ͷมߋΛӡ༻ͱͯ͠ߦ͏ʣ
໊د͔ͤΒݟ͑ͨ৯ྉͷଐੑ • ৯ྉ໊ • ϝʔΧʔ໊ • ೖྗ࣌ͷ৯ྉ໊ • ໊د࣮ͤࢪ
໊دͤͷೝࣝ ΤϯδχΞ • ৯ྉ໊ • ϝʔΧʔ໊ • ೖྗ࣌ͷ৯ྉ •
໊د࣮ͤࢪͱϑϥά • ໊دͤ࣌ʹݩͷ৯ྉ໊*%Λ࣋ͨͤΔ • ৽͍͠৯ྉ໊*%Λ༩
໊دͤͷೝࣝ ΤϯδχΞ • ಉ͡৯ྉͩ͠ɺ ίʔυڞ௨Խ͓ͤͯ͜͞͏ • ͍ͭͰʹσʔλϕʔεΧϥϜՃ͘Β͍Ͱ͍͍͔ͳʔ
ΑΓ͔ͨ͠ͳσʔλΛఏڙ͢ΔͨΊͷػೳՃ
લճͷϦϦʔε͔ͯ͠Β·ͨগ͠ޙ • ৯ྉσʔλͷ໊دͤۀΛ ొޙʹ͢ΔͷͰΓେมɾɾʂ • ొ࣌ʹਖ਼͍͠ͷͰ͋Δ͔Ͳ͏͔Λ֬ೝ͢ΔͨΊʹ ొਃϑϩʔΛՃ͠·͠ΐ͏ʂ
৯ྉొਃͷೝࣝ • ৯ྉ໊ • ϝʔΧʔ໊ • ࢢൢചՁ֨ʢNJONBYͷΑ͏ͳൣғ͔͠Εͳ͍ʣ • δϟϯϧ
• ϨϏϡʔ • ৯ྉొϢʔβʔ • ೝՄ
৯ྉొਃͷೝࣝ ΤϯδχΞ • ಉ͡৯ྉͩ͠ɺ ίʔυڞ௨Խ͓ͤͯ͜͞͏ • ೝՄ͍ͬͯ͏ͷ͕͍͖͚ͭͯͨͲɺ
৯ྉͷεςʔλεͩΑͶɺΧϥϜՃͰ͍͍͔ͳʔ
ϨϏϡʔଅਐͷͨΊͷػೳՃ
લճͷϦϦʔε͔ͯ͠Β·ͨগ͠ޙ • ϨϏϡʔΛߘͯ͘͠ΕΔํͷ Ϟνϕʔγϣϯ͕Լ͕Βͳ͍Α͏ʹ ࢀߟʹͳͬͨͳͲͷϑΟʔυόοΫΛ͚ͭΑ͏ʂ • ϨϏϡʔ͔Βʹ৯ྉʹΛ͚ͭͨΓɺ
ฏۉΛ৯ྉʹ༩ͤͯ͞ ݕࡧͷฒͼॱͷҰͭʹ͓͏ʂ
ϨϏϡʔଅਐࢪࡦͷೝࣝ • ৯ྉ໊ • ϝʔΧʔ໊ • δϟϯϧ • ϨϏϡʔจ
• ϨϏϡϫʔʢߘऀʣ • • ฏۉ • ฒͼॱ
ϨϏϡʔଅਐࢪࡦͷೝࣝ ΤϯδχΞ • ಉ͡৯ྉͩ͠ɺ ίʔυಉ༷ʹڞ௨Խ͓ͤͯ͜͞͏ • ϨϏϡʔͱ͔ͷ࣋ͨͤํ͕ͪΐͬͱมΘ͖ͬͯͨͳ͊
ςʔϒϧΛͦΖͦΖׂ͢Δ͔ʔ ͜ͷฏۉݕࡧʹ͔͠Θͳ͍͚Ͳɺ͜͜ʹͳ͍ͱ ද͕ࣔେมͩ͠ɺݕࡧ࣌ͷ0SEFS͜͜ʹͳ͍ͱҰճͰऔΕͳ͍ ͳ͊ɾɾ
Ϗδωε֦େͷͨΊͷػೳՃ
લճͷϦϦʔε͔ͯ͠Β·ͨ·ͨগ͠ޙ • ϨϏϡʔ͔Β࢝·ͬͨαʔϏεେ͖͘ͳΓɺ ͍ͭʹ௨ൢΛελʔτ • ࡏݿঢ়ଶΛөͤ͞ͳ͕Βɺ ϩάΠϯϢʔβʔͷॅॴͷૹ࣌༧ΛೖΕΑ͏ʂ
௨ൢ͔ΒΈͨ৯ྉͷೝࣝ • ৯ྉ໊ • ϝʔΧʔ໊ • ৯ྉ • δϟϯϧ
• ௨৴ൢചՁ֨ • ϨϏϡʔจ • ϨϏϡϫʔʢߘऀʣ • • ฏۉ • ฒͼॱ • ૹઌ • ࡏݿཧ • 4,6 • ൢചεςʔλε༗ແ • Ϩίʔυঢ়ଶ
ٸʹΈ͕ • ͜ͷ৯ྉڊେ͗͢Δ͚Ͳɺ ڞ௨͍ͯ͠Δͱ͜ΖҎ֎ׂͰ͖ͳ͍ʁ • Ͱ͋ͬͪͱͬͪ͜Ͱ͍ͬͯͯͰ͢Ͷ • ͬͪ͜Λม͑ΔͳΒɺ༷ม͑ͳ͍ͱ͍͚ͳ͍Ͱ͢Ͷ
͏ʔΜɹෳࡶͩɾɾʂ ʢ͜ΕҎ্͍͠ͷͰʣͰ͖·ͤΜʂ
৯ྉͱ͍͏໊લ͚ͩͰ શͯΛͭͳ͛Δͱɾɾɾʁ
class Product { public function __construct( private string $name,
private string $maker, private ?DateTime $created = null, private ?User $user = null, private ?string $marketPrice = null, private ?string $originalName = null, private ?DateTime $nameIdentificationDate = null, private ?string $genre = null, private ?string $reviewBody = null, private ?User $reviewUser = null, private ?int $score = null, private ?float $avg = null, private ?int $orderNumber = null, private ?int $salePrice = null, private ?string $deliveryArea = null, private ?int $stockKeepingUnit = null, private ?int $saleStatus = null, private ?int $enabled = null ) {} }
ʢͯ͢Λแͨ͠ʣ৯ྉΛදݱ͢ΔͨΊʹ OVMMBCMFͰදݱʂ
ڥք͚ͮΒΕͨίϯςΩετΛཧղ͢Δ
৯ྉͱʢΤϯδχΞʣ • ৯ྉQSPEVDUTͱͯ͠උ͍ͯͨ͠ • ৯ྉʹೖྗݩͷ໊ͱਃঢ়ଶ͕͋Γɺ ಉ͡Α͏ͳσʔλ͕ͲΜͲΜ࡞ΒΕ͍ͯ͘ ໊دͤ͞Εͨͷਃ͞Ε͍ͯͳ͍͚ͲೝՄঢ়ଶͰɺ
໊دͤϑϥά͕͋Δ • ϝʔΧʔ߹Ͱ௨ൢͰചΕͳ͍͜ͱ͋Δ͕ɺ ϨϏϡʔ͕͍͍ͭͯΔͷදࣔ͠ͳ͚ΕͳΒͳ͍ • Ϩίʔυ͕ແޮͳͱ͖ͳʹΑΓ༏ઌͤ͞ͳ͚ΕͳΒͳ͍ ʢཧআʣ
৯ྉͱʢΤϯδχΞʣ • ৯ྉૹՄೳͳͷͰ͋Δ͔Ͳ͏͔ͷఆ͕͋Γɺ Ӿཡऀͷॅॴ͔ΒૹΛܭࢉ͢Δඞཁ͕͋Δ • ݕࡧϖʔδͰฒͼॱ͕͋Γɺ
ଞͷϖʔδͰ৽͍͠ॱʹฒͤͳ͚ΕͳΒͳ͍ • ৯ྉࢢൢചՁ֨ͱɺฐࣾͰͷ௨৴ൢചՁ͕֨͋Γɺ ௨৴ൢച࣌ʹ4,6Λߟ͑ͳ͚ΕͳΒͳ͍
ΒΈ͗ͨ͢৯ྉͱ͍͏ଘࡏ • ৯ྉͱ͍͏ྖҬΛڞ௨Խ͓͚ͤͯ͞ શ͕ͯ͏·͍ͣͩͬͨ͘͘ • ཁΛΞϓϦέʔγϣϯͷ༷ͱͯ͠औΓΜͩ ͜Ε༷͕ෳࡶͳ͍ͤͩʂ
ίϯςΩετΛҙࣝ͢Δ
ίϯςΩετͱ • ར༻ऀͷҙཱࣝʹΑͬͯ ࣄഎܠঢ়گΛࢦ͢ͷ • ৗੜ׆ͷ͋ͪ͜ʹͪଟ͋͘ΔͷͰɺ ೝࣝͷᴥᴪͷ΄ͱΜͲ͜ͷίϯςΩετΛཧղͤͣʹ
ࣗͷཱͰͷࢥߟͳͲͱҧ͏··ਐΉ͜ͱͰى͖Δ
ΤϯδχΞʹ৯ྉʹର͢Δ ߟ͑ํ͕ܾ·ͬͯ͠·͍ͬͯͨ
σʔλϕʔε߹ϥΠϒϥϦ߹ͳͲ͕ ؚ·Ε͍ͯͨ ΤϯδχΞࢹͰͷίϯςΩετͱͯ͠ද໘Խ
ίϯςΩετΛཧղ͢ΔϝϦοτ • ࣄͷίϯςΩετΛཧղͯ͠ɺཧ͢Δ͜ͱͰ ཱͳͲ͕ҧ͏߹Ͱ ೝࣝϨϕϧΛଗ͑Δ͜ͱ͕Ͱ͖Δ • ೝࣝͷᴥᴪͷ΄ͱΜͲ͕͜ͷίϯςΩετ͔Β͘Δͷ
ίϛϡχέʔγϣϯͷվળͱཧղͷΞοϓ • ͜ͷίϯςΩετΛ͏·͘දݱ͢Δ͜ͱͰϦϑΝΫλϦϯάͪΖΜɺ ΞϓϦέʔγϣϯͱͷ͖߹͍ํɺෳࡶ͞ͷճආʹܨ͕Δ
Ͳ͏͢ΕΑ͔ͬͨͷ͔
ίϯςΩετ͕࡞༻͢ΔൣғʢྖҬʣΛ ݟ͚ͭग़͠ɺڥքઢΛݟ͚ͭΔ
໊دͤͷέʔε • ৯ྉͱϨϏϡʔؔΛ࣋ͭ • ৯ྉͱ໊دͤؔΛ࣋ͭ • ϨϏϡʔͱ໊دͤ৯ྉΛڬΜͰؔΛ͔࣋ͭ͠Εͳ͍
໊دͤͷέʔε • ϨϏϡʔͷཱ͔ΒݟΔ৯ྉͱ ໊د͔ͤΒݟΔ৯ྉಉ͔͡Ͳ͏͔ • ϨϏϡʔ͔ΒݟΔ৯ྉͷ໊د࣮ͤߦͱ • ೖྗݩͷ৯ྉ໊ϨϏϡΞʔɺӾཡऀ͕ೝࣝ͢Δͷ
• ໊د͔ͤΒΈΔϨϏϡΞʔϨϏϡʔͱ
໊دͤͷέʔε • ϨϏϡΞʔ͔ΒΈͨ৯ྉͷೝࣝͱ ӡ༻্ͷ໊دͤʹؔ͢Δ৯ྉ͕ࠩ͋Δ • ͭ·Γ໊લ͕ಉ͡Ͱ ೝࣝϨϕϧɾҙຯ߹͍͕ඍົʹҟͳΔͱ͍͏͜ͱ
ొਃͷέʔε • ໊د͔ͤΒΈΔ৯ྉɺϨϏϡΞʔ͔ΒݟΔ৯ྉɺ ਃϑϩʔ͔ΒݟΔ৯ྉಉ͔͡Ͳ͏͔ • ਃϑϩʔͷ͏ͪɺڐՄ͞Εͨͷ͚͕ͩ ॳΊͯϨϏϡʔରͷ৯ྉͱͳΔ
• ϨϏϡʔ͔Βݟ͑Δ৯ྉͱਃڐՄ͞Εͨ৯ྉಉ͡ͷ ਃ͕ڐՄ͞ΕΔ·Ͱશ͘ҟͳΔ৯ྉ
ొਃͷέʔε • ਃڐՄ͞ΕΔ·ͰϨϏϡʔແ͍ ৯ྉͱೝࣝ͞Εͳ͍ͨΊɺ σʔλߏతʹ৯ྉ*%ΛৼΔ͜ͱ΄ͱΜͲͳ͍ • ͨͩ͠ɺσʔλੳྖҬͰ͕มΘͬͯ͘Δέʔε
ొਃͨ͠৯ྉͷ͏ͪɺͲΕ͚ͩڐՄ͞Ε͔ͨɺͳͲ
ϨϏϡΞʔ
໊دͤ
ΤϯδχΞ
৯ྉͱ͍͏໊લ͕ಉ͚ͩ͡Ͱ ֤ྖҬͰͷೝ͕ࣝҟͳ͍ͬͯͨ
͜ͷίϯςΩετͷڥքઢ͕ ڥք͚ͮΒΕͨίϯςΩετ
ڥքઢΛݟ͚ͭΔ࣌ͷϙΠϯτ
ίϯςΩετΛݟ͚ͭग़͢ϙΠϯτ • ͷલʹ͋ΔจষԽ͞Εͨࣄɺ͍ۙ͠ձɺ ༷͔Βຊʹ࣮ݱ͍ͨ͜͠ͱΘ͔Βͳ͍ • ͜ΕΒΛݟ͚ͭΔίϛϡχέʔγϣϯɺ ࣄΛଟ֯తʹΈΔࢥߟํ๏நͷఐࢠΛ͏·͘औΓೖΕ
ϝλใΛݟൈ͘͜ͱ
ίϯςΩετΛݟ͚ͭग़͢ϙΠϯτ • աڈͷܦݧͳͲ͔Β͘Δ ʮ͋͋ͳͬͨΒ͜͏ͳΔʯͱ͍ͬͨʮߦಈͷΠϝʔδʯΛ த৺ͱ͢ΔͷͰͳ͘ɺ ཱ͔ΒͷഎܠɺจষձҎ֎ͷཪʹજΉͷΛΔ
• ܾΊ͚ͭࢥ͍ࠐΈͰͳ͘ རؔऀΛΓɺใΛҾ͖ग़ͯ͠ຊ࣭తͳղΛΔ
ίϯςΩετݟ͚ͭग़͢ϙΠϯτ • σʔλϕʔεϥΠϒϥϦͷ͜ͱҰߟ͑ͳ͍ • ࣮߹Ͱߟ͑ͳ͍͜ͱ • ͜ΕΒΤϯδχΞͷཱ͔Βͷࣄͷ͖߹͍ํʹ ڧ͘ґଘͯ͠͠·͏ͨΊɺ
ձͷத߹ͬͯɺදݱטΈ߹Θͳ͍ঢ়ଶʹ
ίϯςΩετݟ͚ͭͩͨ͠Β • ಉ໊͡લͰ͋ͬͯؔ࿈ੑ͕͋Δ͔͠Εͳ͍ɺ ͙Β͍Ͱߟ͑Δ • ڞ௨ͯ͠ߟ͑Δͷͨ͘͞ΜͷॏͳΓ͕ݟ͖͔͑ͯͯΒ
ଞͷྫʹ͍ͭͯಉ༷
ϨϏϡʔͷͷέʔε • 69తͳࢪࡦͱͯ͠࡞༻͢ΔͷͰɺ ΄ͱΜͲαʔϏεར༻ऀͷͨΊͷͷ͔͠Εͳ͍ • ଞͷ৯ྉͷཱͰΈΔͱ ϨϏϡʔͷ͕͍͍ͭͯΑ͏͕ͳ͔Ζ͏ͱ
Ұؔ৺ͷͳ͍ͷ • ৯ྉͱ͍͏ݴ༿͕ͭ͘ͷͯ͢ʹΛؔͤͯ͞ͳΒͳ͍
࣮ફͷͨΊʹ͢Δ͜ͱ
࣮ફͷͨΊͷεςοϓ • ϓϩδΣΫτ͘͠ձࣾશମͷ༻ޠूͱ ίϯςΩετϚοϓΛ࡞Δ • ݸਓͷ؍Ͱͳ͘ɺརؔऀΛר͖ࠐΉ •
ݸਓతʹ࠷ॳʹऔΓΉͷ͕͜Ε
࣮ફͷͨΊͷεςοϓ • ڥք͚ͮΒΕͨίϯςΩετʹ߹Θͤͯ ίʔυ͚ͯߟ͑Δ • ίʔυڞ௨Խͤͯ͞ɺ ࣄ͚ͩ͏·͚ͯ͘ߟ͑Δͷ͍͠
• Ͱόϥϯεେࣄ
۩ମతͳ࣮ํ๏ɾɾ
·ͱΊ • ڥք͚ͮΒΕͨίϯςΩετΛೝࣝ͠ɺ දݱͷώϯτͱ͢Δ͜ͱͰࢥߟͷෳࡶ͞Λճආ͢Δ • ίϯςΩετ͕ੜ·ΕΔࣄΛݟ͚ͭग़͢͜ͱͰ ଟ͘ͷώϯτʹͭͳ͕Δ
• ͷલͷࣄϝλใͷҰ෦ͱͯ͠ଊ͑Δͷେࣄ