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
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
4
430
「App Intent」よくわからんけどすごい!
rinngo0302
1
110
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
1
310
フロントエンドのパフォーマンスチューニング
koukimiura
5
2.1k
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
370
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
470
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
AWS Summit Japan 2024と2025の比較/はじめてのKiro、今あなたは岐路に立つ
satoshi256kbyte
1
170
Python型ヒント完全ガイド 初心者でも分かる、現代的で実践的な使い方
mickey_kubo
1
240
ふつうの技術スタックでアート作品を作ってみる
akira888
1
1.3k
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
16
7.9k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
65k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Speed Design
sergeychernyshev
32
1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
How GitHub (no longer) Works
holman
314
140k
Thoughts on Productivity
jonyablonski
69
4.7k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
840
The Pragmatic Product Professional
lauravandoore
35
6.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
282
13k
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ʹͳΔ͔ʂʁ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠