Slide 1

Slide 1 text

STORES 株式会社 「なぜ今 Rails を学ぶべきなのか」Ruby on Rails から学ぶ Web ア プリケーション開発実践 / 技育CAMPアカデミア Ruby on Rails の楽しみ方

Slide 2

Slide 2 text

自己紹介 森弘 一茂 X: @_morihirok GitHub: morihirok STORES 株式会社 ←東京Ruby会議12の様子

Slide 3

Slide 3 text

20年続くWebアプリケーションフレームワーク Ruby on Rails ● GitHub、Shopify といった大規模なWebアプリケーションが Ruby on Rails で開発されている ● 日本でもクックパッド、freeeをはじめ、様々な企業が Ruby on Rails を採用 している ● STORES は新規プロダクトの開発にも Ruby on Rails を採用している 20年間選ばれ続けるWebフレームワークは 他に例を見ない

Slide 4

Slide 4 text

なぜRailsはここまで選ばれてきたのか?これからどうなるのか? ● 「便利だから」だけでは説明できない ● Railsが誕生した歴史的背景と、その思想に目を向ける必要がある ● それをふまえてRailsから学べることと、Web開発の未来を考える 過去を振り返り、未来について考えることで 学生のみなさんに「Rails の楽しみ方」について 伝えられたらと思います!

Slide 5

Slide 5 text

謝辞 ● このスライドをレビューしていただいた一般社団法人 日本Rubyの会 代表理事 高橋征義さんに心から感謝いたします ● 高橋さんからのコメントをスライド中にいくつか拝借させていただいています

Slide 6

Slide 6 text

目次 1. Rails誕生の背景 2. Railsはなぜ開発者に受け入れられたか 3. Railsはopinionatedなフレームワークである 4. Railsの学び方とRailsから何を学べるか 5. Railsの未来

Slide 7

Slide 7 text

時は2000年初頭 Rails 誕生の夜明け前

Slide 8

Slide 8 text

2000年代初頭のWeb開発は大変だったらしい ● 小さな機能のために大量のコード・設定が必要だった ● 素早く書くと今度はコードをきれいに保つ方法がなかった 本当にたいへんでした 人間や方法論の問題ではなくハードウェア的なリソースの制限が あらゆるところで足を引っ張っていたのでは、 という感想があります 高橋さん

Slide 9

Slide 9 text

そんな課題感から当時読まれていた技術書 ● 「Patterns of Enterprise Application Architecture」Martin Fowler (2002) ○ Java等のオブジェクト指向言語におけるエンタープライズアプリケーションの設計パターン集 ○ DHH(Railsの作者)も影響を受けている ● 「Domain-Driven Design」Eric Evans (2003) ○ いわゆるDDDの原祖 ○ ドメイン(業務知識)をいかにソフトウェア設計に組み込むか、プロセス改善と実際のソフト ウェア設計について書かれている アプリケーションをキレイに作るための アプローチ

Slide 10

Slide 10 text

DHHの登場 ● デンマーク出身のエンジニア、David Heinemeier Hansson ● 37 signals社でプロジェクト管理ツール「Basecamp」の開発を担当

Slide 11

Slide 11 text

DHHのモチベーション https://kdmsnr.com/translations/interview-with-dhh/ 私には2つのプログラミングのバックグラウンドがあるんです。ずっとPHPを使ってき まして、そういうときはなんでもかんでも早く作るんですけど、とにかく結果が重要 なんですね。大学ではJavaの勉強をしてまして、J2EEの仕事もたまにやってたんです が、そういうときはパターンやプラクティスを使って、精度の高さだとか保守のしや すさなんていうのを気にするわけです。 私はこの2つのソフトウェア開発手法に挟まれてたんですね。PHPに代表されるような 「早いけど汚い」手法と、Javaに代表されるような「遅いけどキレイ」な手法にで す。それで、両者を組み合わせたら、究極の目標である「早くてキレイ」になるん じゃないかと思ったわけですよ。

Slide 12

Slide 12 text

Rails が生み出された ● DHHがプロジェクト管理ツール「Basecamp」の開発にRubyを採用 ● 開発過程で作業が楽になるように再利用可能なフレームワークを作った Rubyは、それはもう、ものすごくフィットしたんです。私の脳に完璧にフィットしま した。それからは楽しく、より良く作業が行えるようになりました。 https://kdmsnr.com/translations/interview-with-dhh/

Slide 13

Slide 13 text

2005年 Ruby on Rails v1.0 リリース

Slide 14

Slide 14 text

Ruby on Rails リリース ● 作られたツール群を整え「Ruby on Rails」としてリリースした ● ゼロからブログアプリを15分で構築するというデモ動画を YouTube に公開 し、当時としては画期的な速さであったため話題を呼んだ

Slide 15

Slide 15 text

多くの企業がRailsを採用した ● シリコンバレーを中心にWeb系スタートアップへの投資が加速する中で、アイ デアを形にするスピードに優れているRailsは多くのサービスで採用された ● GitHub、Shopifyをはじめ様々なサービスがRailsで作られ、大きく成長した ● 日本でもWeb系企業の市場価値が上昇していく中で、クックパッド、freee、 Money Forward といったサービスがRailsで作られ、上場企業に育った

Slide 16

Slide 16 text

Railsはなぜ開発者に受け入れられたか

Slide 17

Slide 17 text

DHHはWebアプリケーション開発を大胆に抽象化した ● リソースが定まれば、生命線であるユースケースのCRUDは自動生成できる ● 例えば Blog というリソースが存在しそれを操作するとして、必要なものはコ マンド一発で自動生成される ○ blogs というテーブルをデータベースに作る ○ データベースを操作するBlogというモデルクラスを作る ○ クライアントからのリクエストを受け取り処理するBlogsControllerを作る ○ blog の一覧、詳細、作成、更新、削除ができるルーティングを作る ■ 一覧:GET /blogs ■ 詳細:GET /blogs/:id ■ 作成:POST /blogs ■ 更新:PUT /blogs/:id ■ 削除:DELETE /blogs/:id ○ 自然と「REST」というWeb APIの設計思想に従うこともできる

Slide 18

Slide 18 text

アプリケーションにとって必要なリソースを定義できればほぼ完成する ● 各種ファイルの関連付けは設定ファイルで行うのではなく規約で決まるため、 設定ファイルを書いて回る必要がない ○ Blog モデルはなんの設定をしなくても命名から判断してblogsテーブルを参照する ○ Blog モデルには各レコード・カラムに対してSELECT、UPDATE、INSERTなどのデータベース 操作を行うメソッドが自動で作られる ■ 例えば blogs テーブルに author というカラムがあれば、Blog モデルには author とい うメソッドが自動で作られ、それを介してDBを参照できる ○ BlogsController は何の設定をしなくても、メソッド名に紐づいてファイルを探索し、自動的 にテンプレートエンジンを読み込んでレスポンスを作ってくれる 大事で楽しいビジネスロジックやUIの開発に 集中できる!

Slide 19

Slide 19 text

Rails は現実のアプリケーション開発を経て生まれている ● DBマイグレーションのための機能 ● 本番環境・開発環境で動作を分けるための仕組み ● DBを操作するための様々なインターフェース ● 各種もろもろWebアプリケーションを開発するうえで便利なライブラリ 楽しく大事なことに集中できて 現実的な工夫が詰め込まれているからこそ Railsは開発者に受け入れられてきた

Slide 20

Slide 20 text

Rails は opinionated な フレームワークである

Slide 21

Slide 21 text

RailsはDHHが強い思想で方向性を決めているフレームワーク https://www.youtube.com/watch?v=HDKUEXBF3B4

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Rails がこれまでのアプリケーション開発と異なる点 ● 疎結合に設計するというソフトウェア開発の原則を、開発速度のためにあえて 破った ○ Model クラスにDBとの接続、ドメインロジックの管理、クライアントからのリクエストバリ デーションなど様々な責務が密結合に設計されている ● 設定を明示的に書いて処理のマッピングを行うのではなく、規約を作ることで 暗黙的に処理のマッピングが行われる仕組みにした 全ての人が自然に受け入れられる フレームワークではない

Slide 24

Slide 24 text

異なる点が多かったため反発も多かった 24 それは私がRailsのマーケティングへモードを切り替えたときに、少し生意気な物言いだっ たからでもあります。 しかし、Rubyのような誰も知らないプログラミング言語から新しい何かが生まれようとし ているとき、それはささやきではなく、叫びでなければならないことは分かっていました。 だから私は叫んだのです。 https://www.publickey1.jp/blog/24/ruby_on_railsdhhruby_on_rails_the _documentary.html

Slide 25

Slide 25 text

DHHがDHHしている例 ● https://signalvnoise.com/svn3/the-majestic-monolith-can-become-t he-citadel/ ○ 2016年に業界の流れが「これからはマイクロサービスだ!」というときに「よくできたモノリ スこそが至高」と叫び炎上 ● https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0 ○ 2023年ほとんどの企業がクラウドに移行した中「私たちはクラウドをやめてオンプレに移行し ます」と宣言し炎上 ● https://world.hey.com/dhh/turbo-8-is-dropping-typescript-70165c0 1 ○ 2023年TypeScriptがもはやデファクトかという流れの中DHHの好みじゃないという理由で TurboというRailsのフロントエンドライブラリからTypeScriptを消し炎上 25

Slide 26

Slide 26 text

Rails を学ぶうえで opinionated なものであることは 意識しておくと良い

Slide 27

Slide 27 text

Railsの学び方と Railsから何を学べるか

Slide 28

Slide 28 text

Railsには良い教材がたくさんあります ● Rails チュートリアル ○ https://railstutorial.jp/ ○ X(旧Twitter)風のマイクロブログサービスを作りながら学べる ○ Web テキストだと¥1,078(税込) ○ 無料の過去版でも十分エッセンスを学べる ● Rails ガイド ○ https://railsguides.jp/ ○ 無料でRailsの機能を網羅的に学べる 28

Slide 29

Slide 29 text

Railsガイドは普遍的にWebアプリケーション開発に役立つ ● Railsガイドにはいろんなユースケースやセキュリティなど、さまざまなト ピックがある ● これらは「現実でおきた課題をRailsはどう解決したか」というショーケース であり、そのアプローチ方法はRailsに限らずWebアプリケーションを開発す る人であれば参考になるものが多い ○ 大量レコードをどのように安全に処理するか ○ デフォルトでどのようなセキュリティ対策がなされているか ○ 本番データベースに対するマイグレーションはどのように行うか ○ どのように多言語対応を行うか 29

Slide 30

Slide 30 text

DHHの考え方は仕事でも大事だったりする ● (良くも悪くも)DHHは世間に迎合しない ● 仕事していると「まあなんかこれはこうなってるものなんです」みたいに雰囲 気でそうなっているがみんな従っている、みたいなものが意外と多い ● こういうものを深ぼっていくと不要な業務を削減できたりと意外とインパクト ある課題解決につながる ● Railsから学べるDHH的姿勢から雰囲気でそうなっているものに切り込んでい くパワーを得られる(かもしれない) 30

Slide 31

Slide 31 text

DHHの考え方は仕事でも大事だったりする 31 仕事をするうえでのDHHの参考にするべきところは、何よりも「DHHが めっちゃ稼いでいる・儲かってる(らしい)」ところですよね… これで単に美しいだけとかたのしいだけとかだと(少なくとも仕事で 開発するうえでは)説得力がないので 「ビジネスでちゃんと成功する」というところからあくまでも軸足を ずらさない、そういうpracticalなところがあるからこそ生まれる説得力 というのはありそうに感じます 高橋さん

Slide 32

Slide 32 text

Railsを学ぶうえでよくある間違い ● 場当たり的実装で終わらせる ○ Railsにはいろんな現実的ユースケースに備えたAPIが用意されている ○ とにかく書いてみるのも大事だが、結構な確率でそれをやるためのより優れた方法がRailsから 提供されているので、ドキュメントを探ってみよう ● 「RailsでDDD的なレイヤードアーキテクチャをやってみよう」 ○ Railsは「あえて密結合」にすることを選んだフレームワークで、レイヤードアーキテクチャな ど責務を疎に設計するものとは違う思想を持っている ○ これに反する設計を持ち込むのはそもそものRailsの思想とは反しており、かなりの覚悟が必要 ○ もしやりたくなったらまずは「リソース」つまりDB設計に着目するなどいろいろアプローチが ある ○ まずはRailsの思想をしっかり理解しよう ○ そのうえで Rails で大規模にスケールしている GitHub、Shopify などの取り組みを参考にし てみよう 32

Slide 33

Slide 33 text

あえてRailsで学べないことを話すと ● Rails のエコシステムに含まれていない技術は学びにくい ○ 例えばGoであればアプリケーションに必要な様々なライブラリやミドルウェアを各種選定した り自前で作ったりする ○ その過程でいろんな選択肢を見るきっかけになる ○ Railsの場合はあらかじめ内包されていたり定番ライブラリが多くあるので悩むことが少ない が、いろいろ選定して回って知識を得るきっかけがない ● 個人的にはRailsのフロントエンドのエコシステムは今のところバックエンドほど「これでいいじゃん!」感はないかも... 33

Slide 34

Slide 34 text

Railsの未来

Slide 35

Slide 35 text

Railsは2025年においても、あくまでひとりでも全てを行えることを指向している 35 The One Person Framework https://world.hey.com/dhh/the-one-person-framework-711e6318

Slide 36

Slide 36 text

つまり個人開発をする際にはかなりおすすめできる ● 最新版Railsでは、必要なインフラが最小限でOKになるようにいろんなツール が追加されている ○ Railsが動くサーバとDBがあれば十分 ● JSONを返すWeb APIを作るのも簡単なので、クライアントをモバイルアプリ にしてもいいし、フロントエンドはReactやVueで書くといったこともお手軽 ● しかも使いながら自然といろんなWeb開発の実践的なユースケースを学べる 36 学生のみなさんにはとてもおすすめ!

Slide 37

Slide 37 text

もちろん大規模開発にも引き続き使われる ● ShopifyはRubyKaigiというカンファレンスで「100年続く企業を目指してお り、そのためにRubyとRailsへの投資を続ける」という旨の発言をしている ● STORESもRubyとRailsの生産性の高さにベットし、既存のRailsへの投資はも ちろん新規サービスも多くをRailsで作っていく 37 「強いこだわり」と「GitHub/Shopifyなどのふつうにでかいサービスでも使え る利便性」が両立できている、そのバランス感覚がすごいなーというところです このバランス感覚はDHH一人に帰属するところでもないはず 高橋さん

Slide 38

Slide 38 text

STORESエンジニア組織の将来予測 ● LLMの登場によってマイクロサービス的分業の世界観からよりひとりのエンジ ニアがより広い範囲の課題解決を行う世界観に ● The One Person が事業に対して大きなインパクトを生み出す時代に 38 引き続きRails本気でやっていくぞ...!

Slide 39

Slide 39 text

ぜひ Rails を通じて Webアプリケーション開発の楽しさを 学んでください!

Slide 40

Slide 40 text

参考文献 ● 2024年のRailsと自由について考える ○ https://speakerdeck.com/takahashim/enishitechcconf2024 ● Ruby on Railsの正体と向き合い方 ○ https://speakerdeck.com/yasaichi/what-is-ruby-on-rails-and-how-to-deal-with-it ● Ruby on Rails: DHHのインタビュー ○ https://kdmsnr.com/translations/interview-with-dhh/ ● Ruby on Railsはどのように生まれ、発展してきたのか ○ https://www.publickey1.jp/blog/24/ruby_on_railsdhhruby_on_rails_the_document ary.html ● texta.fm ○ https://open.spotify.com/show/2BdZHve9cIU6c8OFyz7LeB 40