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
Rails Tutorialを Phoenixで移植してみた
Search
hagiyat
August 25, 2015
Programming
3
2.3k
Rails Tutorialを Phoenixで移植してみた
* *
* + うそです
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
hagiyat
August 25, 2015
Tweet
Share
Other Decks in Programming
See All in Programming
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
210
tool ディレクティブを導入してみた感想
sgash708
1
150
物語を動かす行動"量" #エンジニアニメ
konifar
14
5.5k
AIエージェント開発、DevOps and LLMOps
ymd65536
1
340
パスタの技術
yusukebe
1
400
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
13
3.2k
MLH State of the League: 2026 Season
theycallmeswift
0
160
Flutterと Vibe Coding で個人開発!
hyshu
1
260
開発チーム・開発組織の設計改善スキルの向上
masuda220
PRO
13
7.7k
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
260
kiroでゲームを作ってみた
iriikeita
0
180
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
210
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
How GitHub (no longer) Works
holman
315
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Code Reviewing Like a Champion
maltzj
525
40k
Git: the NoSQL Database
bkeepers
PRO
431
65k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Designing for humans not robots
tammielis
253
25k
KATA
mclloyd
32
14k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
Designing for Performance
lara
610
69k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Transcript
Rails TutorialΛ PhoenixͰҠ২ͯ͠Έͨ @hagiyat 2015/08/25 #shibuya.ex#1
͡Ί·ͯ͠ɻഡ୩Ͱ͢ɻ github/twitter: hagiyat 2014/05͔Βגࣜձࣾnanapiʹॴଐ ձࣾͷTechBlogͪΐͬͱॻ͍ͯ·͢ http://blog.nanapi.co.jp/tech/author/hagiyat/ ͦΕ·ͰϑϦʔϥϯεΛ໊Γͳ͕Β৭ʑͳձࣾͰSIerͱͯ͠ಇ͍ͯ ͍ͨΓ͠·ͨ͠ 2014/12ͷݴޠೖΕ͔͑ࣄมͰॳΊͯRuby/Ruby on
Railsʹ͞ΘΔ Ҏ߱΄΅RubyͷΈॻ͍ͯա͍ͯ͝͠·͢
ͳͥElixirʹڵຯΛ࣋ͬͨͷ͔ʁ RubyΛॻ͍͍ͯͯҰ൪ָ͍͠ͷϝιουνΣΠϯ࡞Γ RubyΛॻ͖࢝Ίͯɺ͙͢ʹ@merborne͞Μͱ@yuroyoro͞ΜͷϒϩάͰ܆ ಃΛड͚ͨ ϝιουνΣΠϯʹ͔ܽͤͳ͍ͷߴ֊ؔ ߴ֊ؔͱ͍͑ؔܕݴޠ ؔܕݴޠࣗମʹڵຯ͕Θ͍͚ͨͲɺϝδϟʔͲ͜Ζͷݴޠ͙͢ʹֶͷ ͕࢝·Δͷ͕ਏ͔ͬͨ खͷ͖͖͍ͬͯͳ͍ؔܕݴޠΛٻΊΔ Elixirʂʁ
·ͣԿ͔ॻ͍ͯΈΑ͏ ۙͳڥΛ࠶ݱͯ͠ΈΔͱ͍͏ͷ͕ਅͬઌʹࢥ͍͍ͭͨ WAFɺ͍͙͢ʹPhoenixͱ͍͏ͷ͕ݟ͔ͭͬͨ ͦΕ͕Railsʹ͍ۙͱ͍͏ᷚฉ͖͚ͭͨ
ͬͯΈΑ͏ʂʂʢ҆ʣ
·ͣڥͮ͘Γ ηοτΞοϓʢ1ষʣͬ͘͞ͱࡁΜͩ ࣌࠷৽ͩͬͨPhoenix0.13.0ΛΠϯετʔϧ ࠓ͔Β͡ΊΔΜͩͬͨΒઈରanyenv - erlenv/exenv͕ Φεεϝ http://qiita.com/nownabe/items/ 67a27ddd23652676ffee
ͬͦ͘͞Phoenix.new EctoͷηοτΞοϓ ඪ४ͷσʔλετΞPostgreSQL PostgreSQLૉਓ͗ͯ͢ɺଓ͢Δ·ͰͪΐͬͱϋϚΔ ↑useraddతͳͱ͜Ζ localhost:4000ΛݟͯؾΛߴΊΔ ৽͞ϞνϕʔγϣϯʹͳΔ
֤GemͷସΛ୳͢ Rails Phoenix sqlite3 EctoͰαϙʔτ sass-rails brunch-config.jsͰઃఆ͢ΕOK uglifier brunch-config.jsͰઃఆ͢ΕOK coffee-rails
brunch-config.jsͰઃఆ͢ΕOKͷͣɻެࣜυΩϡϝϯ τʹTypescriptʹ͍ͭͯͷݴٴ͕͋Γ·͢ jquery-rails brunch-config.jsͰઃఆ͢ΕOK turbolinks ͳ͍ʂ jbuilder ViewͰରԠ sdoc ex_doc http://d.hatena.ne.jp/k-1/20130505/p1 rails_12factor ެࣜυΩϡϝϯτʹهࡌ͋Γ http://www.phoenixframework.org/docs/heroku
൪֎ฤɿϥΠϒϥϦ୳͠ͷ༑ http://getawesomeness.com/ ຊʹศར
Scaffoldతͳͭ mix phoenix.gen.html Ͱ࣮ߦͰ͖Δ http://www.phoenixframework.org/docs/mix-tasks ༻ײ΄΅ಉ͡ͱݴͬͯྑ͍ͱࢥ͍·͢ jsonϨεϙϯε༻ͷઐ༻λεΫ phoenix.gen.json ͕ଘࡏ ͢Δͷ͕ಛత
ActiveRecordతͳͭ Ectoͱ͍͏ඪ४ORM(?) PostgreSQL/MySQL/MSSQL/SQLite3͕͑Δ MongoDB͑ΔΑ͏ʹͳΔ༷ associationActiveRecordͱಉ͡ײ֮Ͱ͑Δ model͝ͱ࡞Δ(phoenix.gen.model)ͷɺmigrate୯ମ (ecto.gen.migration) mixλεΫͰ࣮ߦͰ͖Δ ͍͜͠ͱࢼ͍ͯ͠ͳ͍ͷͰɺ༻ײ·ͩอཹ
rails server/rails console RubyͰ͋ΕଈPryؔ࿈ͷGemΛ͋Ε͜ΕಥͬࠐΉ͚Ͳɺiex ૉͰઓ͑Δ iex -S mix phoenix.server ɺrails
server݉rails consoleͰɺ tmuxʹ͍͞͠ ิ͕ຊʹര byebugඪ४ͰೖͬͯΔ(ϒϨΠΫϙΠϯτషΔͷ؆୯ɻ͠ ͔ͯ͠εςοϓ࣮ߦͰ͖ͳ͍ʁ) show-docͰ͖Δ͚Ͳshow-sourceͰ͖ͳ͍ʁʁ
2ষऴྃɺ3ষ ൃੜ
Rails TutorialΛҠ২ͨ͠ͱݴ͕ͬͨɺΞϨӕͩ ࣮͍ͯ͘͠ʹͭΕͯɺ࣮ફʹೖͬͨΒViewपΓͰۤ͠Ή͜ ͱ͕༧Ͱ͖ͯ͠·ͬͨ Slim͕ͳ͍ʂ Turbolinks͕ͳ͍ʂ Cells͕ͳ͍ʂ Kaminari͕ͳ͍ʂ
ͬͱࠜຊతʹ RailsTutorialʹग़ͯ͜ͳ͍͚ͲɺElixir/Phoenixతʹ ॏཁͳ͜ͱ͕͍͔ͭ͘ ฒྻॲཧؔ࿈ Channelؔ࿈ ͜ΕΒͳ͍ͰͲ͏͢Μͷײ
PhoenixRailsͷҠ২(్த)ʹ͗͢ͳ͍ʁ ଟࢦ͍ͯ͠Δͱ͜Ζ͕ͪΐͬͱҧ͏ Channelͷଘࡏ 0.13.1Ҏ߱ɺWebSocketͱ͔PubSubͱ͔ Transport.LongPollͱ͔ɺίϯςϯπੜɾ৴ػೳ͔Β Εͨͱ͜ΖͷڧԽཱ͕ͬͨ͜ͱ͋Γɺ༨ܭͦ͏ײ͡ Δ
Elixirʹ͍ͭͯͷ·ͱΊ - πʔϧฤ iex͕࠷ߴ͗͢Δ REPLͳ͠ͰԿͰ͖ͳ͍ʹͱͬͯࢸߴͷπʔϧ mix૬͍͍͢ ૣͯ͘؆୯ mix.exsͷهड़ཧղ͍͢͠ ຊ֨తʹ͍ग़ͨ͠Βɺzshͷิࣗ࡞ͯ͠ͰͳΜͱ͔͠ ͍ͨ
Elixirʹ͍ͭͯͷ·ͱΊ - ݴޠฤ |> Ϡό͍ RubyͰϝιουνΣΠϯ͕ݏ͍ͩͬͨਓʹΦεεϝ͍ͨ͠ “hoge,fuga,piyo,baz” |> String.split(“,”) ͱ͍͏۩߹ʹɺॲ
ཧͷίϯςΩετ͕pipeͷޙʹ͋Δ(͜ͷྫͩͱString)ͬ ͯɺಡΈͯ͘͢Θ͔Γ͘͢ͳ͍Ͱ͔͢ʁ ฒྻॲཧ͕ຊʹΧδϡΞϧʹͰ͖Δ spawn_linkͱ͔؆୯͗͢ͰΘ͔Γ͗͢͢
Phoenixʹ͍ͭͯͷ·ͱΊ ίϯςϯπΛ৴͢ΔλΠϓͷαʔϏε։ൃ࣌ظঘૣ(͔ʁ) ࠓ·Ͱ͖ͬͯͨViewपΓͷศརͳಓ۩͕͑ͳ͍ͷ͕ਏ͍ ཧը໘ͱ͔ಛʹɺखؒΛ͔͚ͣʹαΫαΫը໘࡞ͬͨΓ͍ͨ͠ͷͰɺγϣʔτΧοτͷ උେࣄ͔ͳʔ RestfulͳAPI։ൃʁ ػೳతͳෆɺී௨ʹ͍ͬͯΔͰಛʹײ͡ͳ͍ ڧ͍ͯݴ͑KVSΛEcto͔Β͍͍ͨέʔε࣮֬ʹ͋ΔΑͳ͊ɾɾͱ͍͏ͱ͜Ζ Scala/Akkaൺֱͩͱ࣮ߦҰาৡΔ͚Ͳɺ࣮͕͘͠ͳͯ͘Ϗϧυ͕ૣ͍ Railsൺֱͩͱಉ࣌ଓ࣮ߦʹ༏Ґੑ͕͋Δ
্هཧ༝ʹΑΓɺདྷΔ͖Http2࣌ͷόοΫΤϯυͱͯ͠ຊʹͪΐ͏Ͳ͍͍ؾ͕͢Δ
Ε͍͚ͯͳ͍Ϣχοτςετ - extest ී௨ʹී௨ͷςετεΠʔτ͚ͩͲɺasyncઃఆ͕σϑΥ ϧτͰೖͬͯΔ RailsͰ͋Ε͜Εۤ࿑ͯ͠ฒྻςετͷΈΛߟ͑ͨΓ ͯͨ͠ͷͰɺΧδϡΞϧʹͰ͖͗ͯ͢ٽ͚Δ ͨͩɺ࣌ʑFactoryGirlFakerTimecopͳͲ͕࿀͘͠ͳ Δ͔͠Εͳ͍ ࣗಈ࣮ߦGuardͷ··Ͱ͍͍͔ͳʔ
ऴΘΓʹ Elixir/PhoenixɺϓϩμΫτͷೖ։࢝͠·ͨ͠ʂʂ ͦͷ͏ͪৄͤ͘͠Δ͔ɾɾ ͋ͱ͜ͷϓϩδΣΫτԠԉͯ͠·͢ https://github.com/awetzel/neovim-elixir neovimElixirઐ༻ͷIDEʹͳΔ͔ʂʁ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠