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
80
クラスビルダの話とMongoDB.pm
mackee
May 17, 2013
Tweet
Share
More Decks by mackee
See All by mackee
ワンバイナリWebサービスのススメ
mackee
10
8k
tanukistack ライブコーディング / tanukistack live-coding
mackee
0
120
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
840
perl for shell, awk and sed programmers
mackee
2
2.5k
今更GoのWebフレームワークを作ろうとしているワケ / Why am I trying to create a Go web framework now?
mackee
1
810
database/sqlでNullを扱う歴史とsql.Null[T]の登場 / sql.Null[T] history
mackee
0
700
マイクロサービス化を利用した Goへの移行事例
mackee
0
840
PerlでつくるフルスクラッチWebAuthn/パスキー認証 / Demonstration of full-scratch WebAuthn/Passkey Authentication written in Perl
mackee
3
5.1k
SRE定例やその辺の取り組みをアプリケーションエンジニア目線で語る / "Observe" about SRE Meeting by Application Engineer
mackee
0
2k
Other Decks in Programming
See All in Programming
AWS発のAIエディタKiroを使ってみた
iriikeita
1
110
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
220
サーバーサイドのビルド時間87倍高速化
plaidtech
PRO
0
670
Claude Codeで挑むOSSコントリビュート
eycjur
0
190
🔨 小さなビルドシステムを作る
momeemt
2
620
『リコリス・リコイル』に学ぶ!! 〜キャリア戦略における計画的偶発性理論と変わる勇気の重要性〜
wanko_it
1
620
パッケージ設計の黒魔術/Kyoto.go#63
lufia
3
380
デザインシステムが必須の時代に
yosuke_furukawa
PRO
2
130
Kiroで始めるAI-DLC
kaonash
2
440
Google I/O recap web編 大分Web祭り2025
kponda
0
2.9k
rage against annotate_predecessor
junk0612
0
140
AHC051解法紹介
eijirou
0
640
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Agile that works and the tools we love
rasmusluckow
330
21k
Writing Fast Ruby
sferik
628
62k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Why Our Code Smells
bkeepers
PRO
339
57k
Designing for humans not robots
tammielis
253
25k
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༵