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
クラスビルダの話とMongoDB.pm
Search
mackee
May 17, 2013
Programming
0
83
クラスビルダの話とMongoDB.pm
mackee
May 17, 2013
Tweet
Share
More Decks by mackee
See All by mackee
perlをWebAssembly上で動かすと何が嬉しいの??? / Where does Perl-on-Wasm actually make sense?
mackee
0
430
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
4.7k
今!ソフトウェアエンジニアがハードウェアに手を出すには
mackee
14
6.3k
ワンバイナリWebサービスのススメ
mackee
10
8.4k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
330
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
1.1k
perl for shell, awk and sed programmers
mackee
3
2.7k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
1k
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
940
Other Decks in Programming
See All in Programming
Grafana:建立系統全知視角的捷徑
blueswen
0
330
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
730
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
610
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
320
izumin5210のプロポーザルのネタ探し #tskaigi_msup
izumin5210
1
140
CSC307 Lecture 05
javiergs
PRO
0
500
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
21
7.4k
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
790
React Native × React Router v7 API通信の共通化で考えるべきこと
suguruooki
0
100
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
210
SourceGeneratorのススメ
htkym
0
200
Apache Iceberg V3 and migration to V3
tomtanaka
0
170
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
380
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
64
A Tale of Four Properties
chriscoyier
162
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
How to Ace a Technical Interview
jacobian
281
24k
Raft: Consensus for Rubyists
vanstee
141
7.3k
The Invisible Side of Design
smashingmag
302
51k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
67
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
120
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
170
Transcript
PerlͷΫϥεϏϧμʔͷϞδϡʔϧͱ MongoDBͷ @mackee_w Ϛίϐοϐ 135݄30༵
PerlͰΫϥεΛ࡞Δ Ϟδϡʔϧແ͠ͰΫϥεΛ࡞Δʹ package Sheep { sub new { my $class
= shift; my $self = { color => “white” }; return bless $self, $class; } } ৄ͘͠perldocͷperlbootͱ͔ 135݄30༵
ͰΊΜͲ͍͘͞Μʁ ΞτϦϏϡʔτʹΞΫηε͢Δͷʹ$self->{color} ͱ͔Μͳ͍ͱ͍͚ͳ͍͠ɺsubͰ͘ΔͷΊΜ Ͳ͍͘͞Μʁ 135݄30༵
ͦ͜ͰΫϥεϏϧμʔ ͦΕͬΆ͍ײ͡ͰΦϒδΣΫτΛ࡞ΕΔ Class::Accessor::Liteͩͱ͜Μͳײ͡ package Sheep { use Class::Accessor::Lite ( new
=> 1, rw => qw/color/, ); } 135݄30༵
Class::Accessorܥ جຊతʹϓϩύςΟ/ΞΫηαΛউखʹΑ͠ͳʹ ͬͯ͘ΕΔ͚ͩͰɺଞͷݴޠ͕ࡌ͍ͯ͠ΔΑ ͏ͳศརػೳ(abstractͱ͔traitͱ͔privateϓϩύ ςΟͱ͔)ͳ͍ 135݄30༵
͍Ζ͍Ζ͋Δͧ Class::Accessor ݩ Class::Accessor::Fast ……͔ͬͨ Class::Accesor::Lite Tengͱ͔ͰΘΕ͍ͯΔFastΑΓૣ͍ جຊతʹ͜Ε͓͏ Class::Accessor::Tiny ϑΝΠϧαΠζ͍ܰͳͬͯࢥͬͨΒ19ߦͩͬͨ
135݄30༵
ͬͱΦϒδΣΫτΦϒ δΣΫτͨ͠ʔʔʔʔ͍ ྫ͑mix-inͱ͔ɺϝλϓϩతͳΞϨʁ͋ΔΜʁ RubyͬͯΔਓ͕ϞςΔͷͬͯɺ͔͢͠Δͱϝ λϓϩΛΨϦΨϦͬͯΔ͔Β͔͠Εͳ͍ʂ PerlͰϝλϓϩΔͱϞςΔ͔ʂ 135݄30༵
Moose Mouse Moo ϔϥδΧɹωζϛɹڇ ͍͍ͩͨ͜ͷลΓ͏ͱΞΫηαͷܕΛࢦఆͰ͖ ͨΓɺmix-inΈ͍ͨͳ͜ͱ͕ग़དྷͨΓɺϝλϓϩ ग़དྷͨΓศརػೳ͕ͨ͘͞Μ͋Δ 135݄30༵
MouseͰ͕ΜΔ package Sheep { use Mouse; has color => (
is => ‘rw’, isa => ‘Str’, default => sub { ‘white’ }, ); no Mouse; } 135݄30༵
Moose ݩϞμϯPerlͷOOPϞδϡʔϧ ͰΫιॏ͍ CatalystͳͲͷग़͕ࣗݹΊͷϞδϡʔϧͰґଘͯ͠ ͍Δ͜ͱ͕͋Δ 135݄30༵
Mouse ΄΅MooseͷΦϒδΣΫτγεςϜΛແۤૣ ͨ͘͠Ϡπ ҆৺ͱ৴པͱࠇຐज़ͷgfxΣΞ blessΑΓ͍Β͍͠ɻҙຯ͕Θ͔Βͳ͍ ࠃͰ͜ΕΛ͍·͠ΐ͏ 135݄30༵
Any::Moose ΦϫίϯͳͷͰΘͳ͍Α͏ʹ͠·͠ΐ͏ ͳ͓ɺ0.2ܥ·ͰͷArk͕ґଘ͍ͯ͠·͕͢0.3ܥ͔ ΒMouseʹΓସΘΓ·ͨ͠ ิ͢ΔͱɺMooseͱMouseͷͲ͔͍͍ͬͪ΄͏ Λ͏·͍͜ͱͬͯ͘ΕΔϥούʔͰ͢ 135݄30༵
Moo ւ֎Ͱྲྀߦ͍ͬͯΔΒ͍͠ ͍ΒΜͱ͜ΖলུՄͯ͋͠ΔఔಡΊΔײ͡Ͱ ͔͍ͭײ͡ʹ͍ͯ͠ΔΒ͍͠ ؾΛൈ͘ͱMooseʹม͢Δ(metaͱ͔) CPANʹ্͛ͨͯ͘ւ֎ͰΘΕ͍ͨͳΒ͜Ε 135݄30༵
݁ blessΊΜͲ͍͘͞ͷͰΊͱ͜͏ ΞΫηα͔͠ཁΒͳ͍ͳΒClass::Accessor::LiteͰ ͍͍Μ͡Όͳ͍͔ͳ ͕ͬͭΓOOP͍ͨ͠ͳΒMouseͰ ւ֎έΛૂ͏ͱ͔Mooseͷͭॻ͖͑Δͱ͖ MooͰ 135݄30༵
ւ֎έΛૂ͏ͱ͔Mooseͷͭॻ͖͑Δͱ͖ MooͰ 135݄30༵
MongoDB.pm meets Mouse 135݄30༵
MongoDBͱ 135݄30༵
ಛ εΩʔϚϨε جຊతʹΩʔͱυΩϡϝϯτͱ͍͏͚ؔͩΕͲɺυΩϡ ϝϯτͷͰݕࡧग़དྷͨΓ͢Δ ΠϯσοΫεషΕΔ JSONͬΆ͍ײ͡ͷܗࣜͰอଘ͞ΕΔ(BSON) JavaScriptͷ࣮ߦΤϯδϯੵΜͰΔͷͰؔͱ͔JSͰॻ͚Δ 135݄30༵
͜Μͳײ͡ db.collection.save({ user_id: 1 }) db.collection.find({ user_id: 1 }) db.collection.find({
user_id: { $gte: 0 }) 135݄30༵
ϩάͬΆ͍͜ͱͰ͖Δ capped collectionͱݴͬͯ͋ΔҰఆ༰ྔ·ͰஷΊ ͜ΜͰɺ͋;ΕͨΒݹ͍ͷ͔Βফ͍͍ͯͬͯ͘͠ ͏collection͕࡞ΕΔ 135݄30༵
MongoDB.pm is Moose 135݄30༵