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 Committer Talk
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Akira Matsuda
December 16, 2016
Programming
1.1k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rails Committer Talk
「コミッターから見たRuby on Rails」の発表資料
https://connpass.com/event/46395/
Akira Matsuda
December 16, 2016
More Decks by Akira Matsuda
See All by Akira Matsuda
My daily life on Ruby
a_matsuda
3
780
Ruby x Terminal
a_matsuda
7
780
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
16
8.4k
Hanamiを支える技術 2023 / Asakusa.rb Hanami 2023
a_matsuda
2
850
Rails 7.1をn倍速くした話
a_matsuda
11
14k
RubyKaigi 2022 After Talk
a_matsuda
0
570
Coming Soon…💎 / coming soon
a_matsuda
12
8.6k
Rails Performance Issues and Solutions
a_matsuda
9
40k
Extending Rails for Real World App Development
a_matsuda
9
8.2k
Other Decks in Programming
See All in Programming
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
450
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
270
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
Are APIs Still Relevant in the AI Era?
soyuka
0
430
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
20
21k
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
160
Heart of Swift Concurrency
koher
0
1.2k
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
310
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
390
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
710
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
260
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
920
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
The browser strikes back
jonoalderson
0
1.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
270
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
450
Transcript
ίϛολʔ͔Βݟͨ Ruby on Rails @a_matsuda
Ruby on Railsͷίϛολʔ ͬͯ·͢
ʮRailsͷίϛολʔʯͱʁ
Ruby on Railsͷίϛολʔ
18 Members • ίϛοτݖอ༗ऀݱࡏ18໊
41 Repositories • ϝΠϯϓϩμΫτͪΖΜ rails/rails • ಛʹ୲Λ࣋ͨͣɺશһͰ1ͭͷϦϙδτϦͷશମΛ د͔͍ͬͯͨͬͯ͡Δ • github.com/rails
ԼͷશϦϙδτϦʹίϛοτ Ͱ͖ΔݖݶΛ༗͢Δ
ࢀߟ·ͰʹRubyͷ߹ • Rubyͷίϛολʔ୲੍ • ॎׂΓͰ୲Ϟδϡʔϧ͕ܾ·͍ͬͯΔͷ͕ଟ͍ • github.com/ruby ԼͷϦϙδτϦͷॻ͖ࠐΈݖɺ ڵຯͷ͋Δਓ͕ࣗͰΫϨͬͯݴΘͳ͍ͱΒ͑ͳ͍
Rubyίϛολʔͱ Railsίϛολʔͷҧ͍ • RubyํࣜͩͱɺશମΛѲͯ͠ͳͯ͘ɺॲཧܥͷ ͋ΔҰ෦ͷΈʹؔ͢Δਂ͍͕ࣝ͋Ε·Δ • ͦͷ߹ɺଞͷϝϯόʔͱͷίϛϡχέʔγϣϯ ࿈ܞඞͣ͠ཁٻ͞Εͳ͍͔͠Εͳ͍ • Railsํࣜͩͱɺ͋ΔఔओମతʹશମʹؔΘΔؒͰ
͋Δ͜ͱ͕ٻΊΒΕΔ
Railsίϛολʔ͕ΞΫςΟϒ͡Όͳ͘ͳΔͱ ίϛοτݖΛฦ্ͨ͠ΓΞϨͨ͠Γ͢Δ׳श͕ ͋ΔͷͰɺίϛολʔͷਓ͕গͳΊ
ҰํRubyͰ • ίϛολʔجຊతʹӬੈίϛολʔɻ • ਓશ෦Ͱ100ਓऑ͙Β͍ʁ(ৄ͘͠shugo͞Μʹ ฉ͍͍ͯͩ͘͞)ɻ • RubyKaigiͷίϛολʔେू߹اըͰஃ্ʹ্͕ͬͯ ͩ͘͞Δͷ30ਓલޙɻ
RubyRailsνʔϜͷنײ ͍͍ͩͨಉ͙͡Β͍ͱݴ͑Δ • 20ਓલޙͷΞΫςΟϒͳϝϯόʔ
RubyνʔϜͱRailsνʔϜͷ ӡ༻ख๏ͷҧ͍
Ruby • Ϟδϡʔϧ͝ͱʹ͓͓·͔ʹ୲ऀ͕ܾ·͍ͬͯΔ • ୲ൣғΛඈͼӽ͑ͯࣗ༝ʹίϛοτ͍ͯ͠Δਓؒ(ʁ) ύονϞϯελʔ͙Β͍ • ϝϯςφ͕inactiveʹͳΔͱɺͦͷ··Ϟδϡʔϧࣗମ͕ unmaintainedঢ়ଶʹؕΔ
Rails • খϓϩδΣΫτ੍Έ͍ͨͳײ͡ • νʔϜBasecampʹͯλεΫ͕ϦετΞοϓ͞Εͯɺ Γ͍ͨਓ͕Γ͍ͨͷΛऔ͍ͬͯ͘ • ͋ͱɺGHͷΔΓΛͻͨ͢Βtriage͢Δ໊͕͍ͯɺ botͰ୲͕ϥϯμϜΞαΠϯ͞ΕΔ
ຊͷ͓
ʮRailsΞϓϦͷίʔυઃܭʯ
ୈҰ෦ • RailsΞϓϦͷίʔυઃܭ
ʮαʔϏεͷ࡞Γ͔ͨʯ
Έ͍ͨͳ͠·ͤΜ
ʮίϛολʔ͔Βݟͨʯ ؍ͰΛ͢ΔͳΒ • Railsͬͯօ͞Μ͕ࢥ͍ͬͯΔҎ্ʹΑ͘Ͱ͖ͯΔΜͰɺ ιʔείʔυΛΑ͘ಡΜͰษڧͯ͠ɺϑϨʔϜϫʔΫ ࣗମͷػೳΛ͏·ͬͯ͘ΞϓϦΛ࡞ͬͯΈ͍ͯͩ͘͞
෭ಡຊ • Rails3 ϨγϐϒοΫɺͱ͔ʁ • ͪΐͬͱݹ͍͚Ͳɺ༰͕ਖ਼֬Ͱ͜Ε͚ͩ·ͱ·ͬͯ ͍Δॻ੶͕ࠓͷͱ͜Ζଞʹ͋Μ·ΓݟͨΒͳ͍͔
͔ͯ͜͠͠͏͍͏͕ظ ͞ΕͯΔʁ • C◦◦kpadͰͲ͏ͬͯRailsΞϓϦΛεέʔϧͤͯ͞Δ ͔ • Speaker Deckʹ্͕ͬͯΔΜͰɺউखʹݟ͍ͯͩ͘͞ https://speakerdeck.com/a_matsuda/the-recipe-for-the- worlds-largest-rails-monolith
Ϩʔϧͷ֎Εํ • ͋ΔఔҎ্ʹϏδωε͕ෳࡶʹͳͬͨΓن͕େ͖͘ ͳͬͨΓͨ͠ΞϓϦ෦తʹϨʔϧ͔Β֎ΕΔܾஅΛ ͨ͠΄͏͕ྑ͍͜ͱ͋Δ͔
ݱʹΑͬͯ͋·Γʹ έʔεόΠέʔεͳͷͰ • ҰൠԽͰ͖ΔιϦϡʔγϣϯಛʹ͋Γ·ͤΜ
ͦ͏͍͏ͱ͖
ωοτ্ͷ҆қͳใʹ Θ͞Εͣ • ࣗͷ಄ͰΑ͘ߟ͑ͯ
ͷຊ࣭Λ͖ͪΜͱ ݟۃΊͯ • దͳٕज़Λͬͯ • ϝϯςφϯεՄೳͳίʔυΛ
Good Luckʂ
ୈҰ෦
Questions?
ୈҰ෦(ཪ)
γϯɾίϛολʔ͔Βݟͨ Ruby on Rails • ͱ͍͏͜ͱͰɺRuby on RailsࣗମͷΛ͠·͢ɻ
Ruby on Rails • 1stϦϦʔε͕2005
͕Υον࢝͠Ί͔ͯΒ ͪΐ͏Ͳ10͙Β͍
ͱ͍͏Θ͚Ͱɺͪΐͬͱ࣌ ΛͬͯੲΛ͠·͢Ͷ
ͷ͔ΒݟͨRailsͷ10
1.x
1.x • BasecampͷόοΫΤϯυΛΦʔϓϯιʔεԽͨ͠ͷ • Basecamp͕ॻ͍ͨίʔυ͕େ • @dhh, @jeremy, @sstephenson, @jamis
͋ͨΓ
AR finder • HashͰͳΜͰ͢ελΠϧ • ࣌Hash rocket͕ॻ͖ʹ͔ͬͨ͘ͷͰ͋ͷ࣌ʹΓ ͍ͨͱࢥΘͳ͍͚ͲɺࠓͷHashه๏ͳΒҊ֎ѱ͘ͳ͍ API͔ʁ
WebϑϨʔϜϫʔΫͱͯ͠ • controllerͷivarʹಥͬࠐΜͩͷ͕viewͰݟ͑Δ Ṗͷ(ศརͳʁ)API • form_tag :controller => 'users', :action
=> 'create' • authenticity_tokenͱ͔ଘࡏ͠ͳ͍Վతͳ Πϯλʔωοτͷ࣌
RJS • JavaScriptΛॻ͔ͣʹAjax! • ͍͢͝ςΫϊϩδʔͩͬͨ • Turbolinksͷݪͱݴ͑Δ • (Turbolinksͱҧͬͯ)࣮ͰΊͪΌΊͪΌͬͯͨ
ActiveSupport • ݴޠΛ֦ு͢Δͱ͔͍͏ؾͷ৮Εͨൃ • Jakarta Commons͋ͨΓͱ࣍ݩ͕ҧ͍͗ͨ͢ • AMC • Symbol#to_proc
• ఱ࠽ͨͪͷ࠽ೳᷓΕΔίʔυ͕ຯΘ͑ͨ
2.0
2.0 - RESTֵ໋ • verb == HTTP method • RESTΛ࣠ʹͨ͠نͰ࠶ߏங͞Εͨ࠷ߴʹΧοί͍͍
ੈք؍ • ϞσϧΦϒδΣΫτͷURLදݱͱ͔·͞ʹఱ࠽ͷൃ • form_for @user ͱ͔ॻ͚ΔΑ͏ʹͳͬͨ
2.1
2.1 • ͜ͷΜ͔ΒύονΛ͛ͯؔΘΓ࢝ΊΔ • ͷར(Asakusa)Λ׆͔ͨ͠Ruby 1.9ରԠͷύονΛ ৭ʑ
2.2
named scope • ޙʹArelͱ࣮݁ • ͜ΜʹͪͷAR APIͷํੑΛܾఆ͚ͮͨస • @nk •
ৄ͘͠gihyo.jpͷهࣄΛࢀর http://gihyo.jp/dev/serial/01/ruby/0043
I18n • I18nϓϩδΣΫτʹࢀը • ϦʔμʔυΠπͷ @svenfuchs • ถࠃओಋͰͳ͍ଟࠃ੶܉ʹΑΔϓϩμΫτͩͬͨ͜ͱҙٛਂ͍ • ϓϩμΫτࣗମɺ·͊೦ͳग़དྷ
• I18n.t ͷμα͞͏ͪΐͬͱͲ͏ʹ͔ͳΒͳ͔ͬͨͷ͔ɺࠓͰߟ͑Δ • i18nͷίʔυϕʔεͷͻͲ͞ • ͜ΜͳʹͻͲ͘ͳΔͳΒ͜ͷ࣌ʹϓϩδΣΫτͷίϛοτݖΒ࣮ͬͯʹ ؔΘ͓͚ͬͯྑ͔ͬͨ…͔
I18n - ෭࢈ • i18n_generators • GHͰॳΊͯެ։ͨࣗ͠࡞Gemɺͩͬͨͱࢥ͏ • ੈքͰԿ൪͔ʹI18nʹৄ͔ͬͨ͠ݟΛ׆͔ͯ͠ɺ ݱͰΊͪΌΊͪΌཱͭϓϩμΫτΛ࡞ͬͨ
• ࠷ۙʹͳΔ͜ͱগͳ͍͚Ͳɺ࣮Rails 5Ͱ όονϦ͑ΔݱϓϥάΠϯ
Rackͱ͍͏HTTPநԽ ϨΠϠʔͷొ • PythonͷWSGIͷϙʔςΟϯάͳΜ͚ͩͲɺRubyͳΒ call() ΛAPIʹ͢ΕProcͰΠέΔ͡ΌΜʂͱ͍͏ɺ ൃͱ࣮ͷΧοίྑ͞
Rackͷొʹ͏ɺWeb Ap αʔόʔ࣮ϒʔϜͷນ։͚ • WEBrick͕࣌ͷׂΛऴ͑Δ͜ͱʹ
Merb͍ͬͯ͏͍͢͝ΠέͯΔRails alternative͕ ຊͰʹͳͬͨͷ͜ͷ͜Ζ͙Β͍ ͔ͩͬͨ • ໊ࣈ͕ಡΊͳ͍͜ͱͰ༗໊ͳࠓ͖ @ezmobius ͕ ఏএ͢Δbetter Rails
͜ͷ͜Ζɺhpricotͱ͍͏_whyͷײಈతͳ XMLύʔαʔͷalternativeΛ࡞ͬͨAaron͞Μ ͱ͍͏͍ͷ͋Δएऀ͕ొ • RubyKaigiʹͯεϐʔΧʔσϏϡʔ • (̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋)
2.3
ΦϥΠϦʔͷHead First Rails Λ༁
Head First Rails༁ͷ෭࢈ • ίʔυΛͨ͘͞ΜಡΜ͍ͩͭͰʹύονΛྔ࢈
3.0
Merb Merger • MerbνʔϜͷcarlhudaϖΞ(̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋)͕ɺAPIޓੑΛอͬͨ··શͯΛϦϥΠτͱ͍͏ ΕۀΛୡ • ঈͱͯ͠ɺಈ࡞͕͑Β͘ಷॏʹͳͬͨ • ͦͷޙRuby͕ண࣮ʹ͘ͳ͍͔ͬͯͬͨΒϓϥϚΠθϩ͙Β͍ʹͳ͔ͬͨ
ͳ͊ • ৭ʑ͚͋ͬͨͲɺBundler͕രͨ͠ͷ͕࠷େͷՌͰͳ͍͔ • ThorΛϕʔεʹͨ͠Ṗͷgenerator࣮ͳͲ̋̋̋̋̋࢈·ΕΔ (GSoCͰJose܅͍ͬͯ͏एऀ͕औΓΜͩσϏϡʔ࡞)
Merb Merger • Rails Engines, Applicationͱ͍͏֓೦ɺ৽͍͠ϓϥάΠ ϯγεςϜ • طଘͷϓϥΪϯͷޓੑΛෘͳ͖·Ͱʹഁյ •
kaminariੜͷ͖͔͚ͬ (͋Ε͔Β5ɺͬͱ1.0͕ ग़ͤͦ͏ʂ)
͜ͷ͋ͨΓͷৄࡉ WEB+DB PRESSͷRails 3ಛूΛࢀর • Vol. 58 • WEB+DBࣥචͷ෭࢈ •
ίʔυΛͨ͘͞ΜಡΜ͍ͩͭͰʹύονΛྔ࢈ • ͜ͷ͜ΖʹCampfire্ͷRailsίϛολʔνϟοτʹট ͞Εͯɺίϛολʔͨͪͱձ͢ΔΑ͏ʹͳΔ
At Matz-e • 3.0ϦϦʔεલʹୈ1ճRWC • JeremyͷײಈతʹΠΠ
3.1
Sprocketsͱ͔͍͏ෛͷҨ࢈ • Basecamp͔Βొ • ·ͨͯ͠sstephensonͱ͍͏͍͢͝ϋοΧʔ • Railsͷͤ͘ʹڥߏஙͱ͔σϓϩΠ͕ͨΒ͍͠ͷ ʹͳΔ • ޙͷల։ʹͭͳ͕Δੴ
Arel/ARͷվྑ • Aaron͕ArelʹखΛೖΕͯvisitorύλʔϯΛۦͨ͠ ͍͠ίʔυʹॻ͖͑ͯίʔυ͕୭ʹಡΊͳ͘ͳΔ
Rails 3ϨγϐϒοΫࣥච • ࣥචͷ͍ͭͰʹύονΛྔ࢈
RailsConf • ͜ͷ͜Ζ͙Β͍(͍ɺ͏ͪΐͬͱલ͔ʁ)ʹ RailsConfʹॳࢀՃͯ͠ɺίϛολʔͨͪʹϦΞϧͰձ͏ • Ҏ߱ຖࢀՃ͢ΔΑ͏ʹͳΔ
3.2
where.not • ࠷ॳͷύονΊͬͪΌΤϨΨϯτͳ࣮ͩͬͨ(̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋) • ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋ ̋̋̋̋̋̋ • likeҰॹʹೖΕͨΜ͚ͩͲDHHʹݴ͍ෛ͔͞Εͯrevert
Aaron͕͞ΒʹARΛ͍͡Γ·ͬͯ͘ ޓੑΛखʹഁյ • ͬͱग़ἧ͖ͬͯͨAR֦ுܥϓϥΪϯͨͪʹ࠶ͼக໋త ͳμϝʔδ
ϧʔςΟϯά͍ΛAaron͕Journeyͬ ͍ͯ͏࣍ੈrouterʹஔ͖͑ͯ՚ྷʹղܾ • visitorύλʔϯΛۦ͍ͨ͠͠ίʔυʹͳͬͯɺී௨ ͷਓʹಡΊͳ͘ͳΔ • ͜Εʹؔͯ͠ɺҎલͷίʔυ͕͋·Γʹμϝ͗ͨ͢ ͚ͩͰɺ͍ͬͯ͏͔ɺ͜ͷલͷੈͷϧʔλʔ̋̋̋̋ ̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋̋
ϦϦʔεϚωδϝϯτ͕ େࠞཚ • ηΩϡϦςΟΞοϓσʔτʹฆΕͯؔͳ͍ίϛοτ͕ ೖͬͯσάϨʔυΈ͍ͨͳࣄ͕݅සൃ • ͜ͷ͜ΖࣗϦϦʔεʹؔΘΔηΩϡϦςΟύον Λ͍͔ͭ͘ॻ͍ͨهԱ͕͋Δ
4.0
Ruby
Turbolinks • SprocketsͰͷ෬ઢ͕ͭͳ͕Δ • DHHͬͺఱ࠽ • ͰjQueryͱͷ৯͍߹Θ͕ͤѱ͗ͯ͢ਏ͔ͬͨ
ए͖ϗʔϓjonleighton͕ϦϑΝΫλϦϯάͱশͯ͠ ARΛແବʹ͍͡Γ·ͬͯ͘ഁյ • Ϋϥε໊ͱ͔ϑΝΠϧ໊·ͰΉΈʹมߋ͢Δͷ ΄Μͱצห…
Object#try ͱ try! ͷ༷มߋΛ ఏҊͨ͠ͷ͔֬͜ͷΜ
WEB+DBͰRails 4ಛूࣥච • Vol. 74 • ࣥචͷ͍ͭͰʹͬͱίϛοτݖΛऔಘ
͜ͷ͜Ζ͙Β͍͔ΒϦϦʔεϚωδϝϯτͷ ϧʔϧΛ෦Ͱ͠߹ͬͯɺ ͖ͪΜͱΔΑ͏ʹͳͬͨ • 2ੈ͙Β͍ηΩϡϦςΟύονΛड͚͚Δ • 1ੈલ͙Β͍όάfixύονड͚͚Δ • ͋͘·ͰϒϥϯνϝϯςφͷؾΛ༏ઌ
4.2
4.2ʙ • ৽Ωϟϥͷsgrif͕ARΛ͍͡Γ·ͬͯ͘ޓੑͱ ύϑΥʔϚϯεΛ༰ࣻͳ͘ഁյ
ARͷडͷྺ࢙ • Δؾͷ͋Δ৽ೖΓίϛολʔ͕͙͢ʹΦϞνϟʹ ͕ͨ͠ΔͷͰɺ͍͔ͭΘ͍ͦ͏ͳʹૺ͏…
5.0
ruby 2.2+
WebϑϨʔϜϫʔΫతʹ ͷ͋ͷػೳ
Symbol GC!!! • @nari3 ΧοίΠΠʂ
GCབྷΈͰ͏Ұͭ • ۭલͷ .freezeϒʔϜ • Ruby 2.3ͷfrozen_string_literalಋೖͷ͖͔͚ͬ
Rails 5͔Β2.3+ ʹͨ͠΄͏͕ ྑ͍ͷͰʁͱ͍͏ٞ͋ͬͨ • frozen_string_literal ͍͍ͨ • ରԠRubyόʔδϣϯͷδϟϯϓ͕େ͖͗ͯ͢Ҡߦύε͕ ݫ͗͢͠ΔͷͰ٫Լ
• 2.2Ͱಈ͔ͨ࣌͠ͱ2.3Ͱಈ͔ͨ࣌͠Ͱڍಈ͕มΘΔͷ ϝϯς/σόοά͕େม͗͢ΔͷͰಋೖ·ͩͦ͠͏
ͦ͏͍͑5.0ͷͱ͖WEB+DBॻ͍ͯͳ͍͔Β ͋Μ·ΓίʔυಡΜͰͳ͍͠ίϛοτͯ͠ͳ͍ ͔
͜ͷ͜Ζɺkamipo͞Μʹձ͏ͨΊʹԿ͔ ͷษڧձʹࢀՃͯ͠ɺkamipo͞ΜΛἤΔ
5.1 • JSपΓͰ͍Ζ͍Ζ
͜Μͳ;͏ʹɺਓΛͬͯίϛοτΛͬͯ ϓϩμΫτΛΥονͯ͠Δͱݟ͔͕͑ͨมΘΔ • ΈΜͳ͕Φʔϓϯʹ׆ಈ͍ͯ͠ΔOSSͳΒͰ
OSSͨͷ͍͠ʂ • ͱ͍͏͔ɺ͜͜Λָ͠·ͳ͍ͱɺOSSΛͬͯΔޣຯ ͷେΛࣺͯͯΔΜ͡Όͳ͍͔
RailsʹԿ͔৽ػೳ͕ೖΔͷɺԿ͔ࣗવͷ େ͖ͳྗ͕ಇ͍ͯఱ͔Β߱ͬͯ͘Δ͔Βͱ͔Ͱ ͳͯ͘ɺͦͷػೳ͕ཉ࣮ͯͨ͘͠͠ਓ͕ډΔ͔Β
͜͏͍͏ใද͖ίϛοτϩάʹ͔͠ ؚ·Εͳ͍߹͕ଟ͍ͷͰɺίʔυϦʔσΟϯά ͷجຊίϛοτΛಡΈ·͠ΐ͏
͋Δ࣌Ͱ۠ͬͨฏ໘తͳίʔυΛݟΔ ͷͰͳ͘ɺਓʑͷ͍͕ࠐΊΒΕͯ ͕Ε͖ͯͨྲྀΕΛಡΈऔΔ
͔Βݟͨίϛολʔͷ ਓʑ • ruby: ͍͢͝Ϡό͍಄ͷ͓͔͍͠ҞΕଟ͍ਓʑ • rails: ΈΜͳ༑ୡ
ͳ͔ͥʁ • ੈަͯ͠Δ͔Ͳ͏͔ͷҧ͍ • ྸͱྺͷ྆ํͷҙຯͰ
OSSਓͰͭ • ΞΫςΟϒͳίϛολʔ20ਓલޙ • RubyͦΜͳΜ • RubyνʔϜͷنײɺΞΫςΟϒͳίϛολʔຖਆࡏ݄ʹ8ׂ͕ͨౡࠜʹ ू݁͢ΔͷͰɺ͜͜ͷօ͞Μ͝ଘͷͣ • ͪΐ͏Ͳ͜ͷ෦ʹ͍Δਓͱಉ͘͡Β͍
• ίʔυʹͷ͘͢͝ਓͷݸੑ͕ग़ΔͷͰɺ͕ࣗ͏ϓϩμΫτʹ͍ͭͯ ࡞ऀΛΔ͜ͱ͕େࣄ • ಛʹɺOSS׆ಈ͕ͨ͠Δ͚Ͳίʔυ͕೦ͳཕͳਓɺΈ͍ͨͳͷɺ͍Ζ͍Ζ ίʔυΛಡΜͰΔ͏ͪʹ͢Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔ͠ɺղܾͷେ͖ͳखॿ͚ ʹͳΓ·͢
Railsͷίϛολʔʹ ձ͍ʹߦ͜͏
RubyKaigi? • RailsͷίϛολʔRubyKaigiʹ໓ଟʹདྷ·ͤΜ • աڈʹRubyKaigiʹདྷͨ͜ͱ͕͋ΔRailsίϛολʔɺ dhh, tenderlove, wycats, carllerch, josevalim,
chancancode, schneems ͙Β͍ͳͣɻ
RubyKaigiʹݺΜͰ ͍͍Μ͚ͩͲ • ຊͷΈΜͳ͕Railsίϛολʔͱ͔Βͳ͗ͯ͢ɺ ݺΜͰʮ୭ʁʯͬͯͳΔ͚ͩͰ͠ΐʁ • Ͱͦ͏Ͱ͠ͳ͍ͱΈΜͳͱΓ߹͏ػձͳ͍ ͱ͍͏ܲ&ཛঢ়ଶ • ͋ͱɺඇӳޠωΠςΟϒऀ͕ଟ͍ͷͰɺਓલͰ͢ͷ
͕ۤखͳਓ͕ҙ֎ͱଟ͍ͷ͍͠ͱ͜Ζ
Asakusa.rb? • ্هҎ֎ͰAsakusa.rbʹདྷͨ͜ͱ͕͋ΔRailsίϛολʔ senny ͙Β͍ɻ
Railsίϛολʔཧతʹ ͳ͔ͳ͔ձ͑ͳ͍
ͳ͔ͥʁ
Rubyίϛολʔͱ Railsίϛολʔͷҧ͍ • Ruby: ͍͍ͩͨຊʹॅΜͰΔɻ͝ொͰձ͑ͨΓ ͢Δ • Rails: ੈքதͷ͋ͪͪ͜ʹࢄΒͬͯΔ
Railsίϛολʔͷࠃ੶ (͍͍ͩͨډॅ) • ถࠃ: 6 • ϒϥδϧ: 3 • ϧάΞΠ:
1 • εϖΠϯ: 1 • ίϩϯϏΞ: 1 • ӳࠃ: 1 • εΠε: 1 • Χφμ: 1 • ΦʔετϥϦΞ: 1 • σϯϚʔΫ: 1 • ຊ: 1
͜ͷਓʑʹ·ͱΊͯձ͑Δ །Ұͷػձ • RailsConf (ʹซઃ͞ΕΔίϛολʔύʔςΟʔ)
ͳͷͰɺRailsʹڵຯ͕͋ͬͯRailsͷ͜ͱΛͬͱ ਂ͘Θ͔Γ͍ͨਓRailsConfʹߦͬͯΈΔͱ Α͍ͱࢥ͍·͢
RailsConf • ถࠃͰʹ1։࠵͞ΕΔɺੈք࠷େͷRubyؔ࿈ Πϕϯτ (ࢀՃऀ2000ਓ͙Β͍)
RailsConfͷ͓͢͢ΊϙΠϯτ • Ruby Hero Awardͷදজ͕ࣜߦΘΕΔͷͰɺͦͷͷ(ੈ քͷ)Rubyք۾ͷ(͍ΖΜͳҙຯͰ)ͷਓʹձ͑Δ • ΈΜͳ͕RailsΞϓϦͰͬͯΔGemͷ࡞ऀͱ͔͕͚ͬ͜ ͏དྷΔ(RubyKaigiʹ͋Μ·Γདྷͳ͍Ͱ͢Ͷ)
RailsConfͷ͓͢͢Ί͡Όͳ͍ ϙΠϯτ • ࢀՃඅͷ҆͞ʹఆධͷ͋ΔRubyKaigiͱҧͬͯɺνέο τ͚ͩͰ750υϧͱ͔͔͔Δ • RubyKaigiͱҧͬͯɺτʔΫ͕ͲΕϏοΫϦ͢Δ͙Β ̋̋̋̋̋̋ • RubyKaigiͱҧͬͯɺถࠃͷͲ͔͜ͷࢢͰ։࠵͞ΕΔ
ͷͰɺجຊతʹϝγ͕Ϛζ͍
Railsίϛολʔ͔Βݟͨ Railsͷݟ͑ํ • 18ਓத16ਓձͬͯͨ͜͠ͱ͕͋Δ • Railsͷ͋ΔػೳΛݟͨͱ͖ʹɺ͍ͭ୭͕࣮ͨ͠ίʔυ ͔͕͍͍ͩͨࢥ͍ग़ͤΔ • ओཁͳGemΛ࡞ͬͯΔਓ͍͍ͩͨΓ߹͍ •
͍͟ͱ͍͏࣌ʹͳΜͱ͔Ͱ͖Δ
༑ୡ͕ؔΘͬͯΔͷͬͯड͚औΔ ͱ͖ͷؾ͕࣋ͪ͘͢͝มΘΔͰ͠ΐʁ • ༑ୡ͕ॻ͍ͨຊ • ༑ୡ͕ԋͯ͠ΔCD • ༑ୡ͕ग़ԋͯ͠Δ • ༑ୡ͕ௐཧͯ͠ΔϨετϥϯ
• ༑ୡ͕ৢͨ͠ञ
͕ࣗͪΐͬͱʮίϯτϦ Ϗϡʔτʯͯͨ͠Γ͢Δͱ • ࣗϨϏϡʔͨ͠༑ୡͷຊΈ͍ͨͳײ͡
͕ࣗओମతʹؔΘͬͯΔͱ • ͕ࣗओԋͯ͠Δөըͱ͔͕ࣗ࡞ۂͨ͠ۂͷԋձ Έ͍ͨͳࢥ͍ೖΕ
͕ࣗ࡞ͬͨgem͕ΘΕͯΔ ΞϓϦ • ࣗͷࢠڙ͕ͬͯΔӡಈձͷ͔͚ͬ͜ΛݟकΔؾ࣋ͪ
શ͘Βͳ͍ਓͷϓϩμΫτ Λ͏ͷෆ҆ʹͳΔ • ͕ࣗΑ͘Θ͔͍ͬͯͳ͍ͷΛ͓٬͞Μʹग़ͨ͘͠ ͳ͍ • ͍͟ͱ͍͏࣌ʹίϯτϩʔϧͰ͖ͳ͍
༑ୡͷGemͷόάΛ ౿Μͩͱ͖ • ʮ͓ʔ͍ɺ͜Μͳόάݟ͚ͭͨͧʔɻ͜ΕͰି͠1ͭ ͳʔʯ • ʮ͓ͬͱɺαϯΩϡʔɻࠓձͬͨͱ͖Ϗʔϧ1ഋᇋΔ Θʔʯ • ͬͯͳ۩߹ʹͳΔ
͍͍ͩͨͦΜͳײ͡ • OSS͕ͬͱࣗ͝ͱʹͳΔ • ͏ͷָ͕͘͠ͳΔ • (ͦͯ͠ͲΜͲΜপʹϋϚΔ) • (Ͱແঈͷ׆ಈͳͷͰ͓ۚʹͳΒͳ͍)
ʮRailsίϛολʔ͔Βݟͨʯ ਖ਼͍͠ϨʔϧͷΓํ • ਓͷߟ͑ํΛΔ • ਓΛΔ • ਓͱ͢
ίʔυͷಡΈํ • ͋Δ࣌ؒ࣠ͰͬͨίʔυΑΓ࣌ܥྻʹԊͬͯ ίϛοτϩάΛಡΉ • ίʔυΛॻ͍ͨਓͷཧղΛத৺ʹɺྲྀΕΛѲ͢Δ • ྺ࢙ͷษڧͷָ͠Έํʹ͍͔ۙ
ίϛοτ ίϛϡχέʔγϣϯͷखஈ • ͦͷͱ͖ࣗͷͷલʹ͋ͬͨʹରͯ͠ԿΛߟ͑ͯ ͲͷΑ͏ʹରԠ͔ͨ͠Λޙੈͷಡऀʹ͑Δ
༏ΕͨOSS։ൃऀʹͳΔʹ • ಛผͳεΩϧཁΒͳ͍ • ࡢࠓ͓ࣄͷ։ൃݱͱOSS։ൃͰΘΕͯΔಓ۩΄ͱΜͲಉ͡ͷʹͳͬͯ ͖͍ͯΔ • ͦ͠͏Ͱͳ͍ͳΒࣄͷΓํΛม͑Δ͔ɺ৬ͦͷͷΛҠΔ͔ͨ͠΄͏ ͕ྑ͍ •
Λ୳ͯͦ͠ΕΛղ͍ͯίϛοτʹͨͨ͠Ίͯɺ୭͔ʹՁΛೝΊͤ͞Εྑ͍ ͚ͩ • ύονΛ͚͛ͭΔ૬ख͕৬ͷಉ྅Ͱͳͯ͘ɺੈքͷͲ͔͜ʹډΔRailsνʔϜ ͷਓGemͷ࡞ऀʹͳΔ͚ͩ • ʑͷ1ͭ1ͭͷίϛοτΛେࣄʹ
ͦͷ͋ͨΓͷɺOSSͷίʔυ Λॻ͘·ͨ໌
ࠓɺRailsʹؔΘΔਓʑΛΥον͠ͳ͕Β RailsͷίʔυΛಡΉָ͠͞ΛޠΓʹ͖·ͨ͠ • ͷײ͍ͯ͡Δָ͕͠͞গ͠ͰΘ͍ͬͯΕ͍ Ͱ͢
end