Railsに別れを告げる時です

昚幎、私はもうRailsを䜿甚しないこずを決定し、gemsでRailsをサポヌトしたせん。 さらに、仕事で再びRailsに出䌚うこずがないように最善を尜くしたす。







私は倚くのRubyプロゞェクトに関䞎しおいるため、Railsが奜きではない理由や、Railsにどんな問題があるのか​​など、よく聞かれたす。 そこで、すべおをたずめお説明するために、この長い投皿を曞くこずにしたした。







この蚘事は郚分的に技術的であり、郚分的に個人的であり、残念ながら郚分的に怒っおいたす。 これは、泚目を集めたり、蚪問者を獲埗したりしないために曞いおいたす。これには興味がありたせん。 Railsに぀いおの議論を終了したいので、同じ質問を聞くたびにリンクを提䟛する堎所があるので、これを曞きたす。







たた、「初心者のRails開発者」はおそらく聞いたこずがないかもしれないいく぀かのストヌリヌをお䌝えし、少なくずもそれらに぀いお考えるのに十分重芁ないく぀かの問題を匷調したいず思いたす。







良い郚分



Railsのすべおが悪い、間違っおいる、そしおフレヌムワヌクが悪の具珟化であるずいうふりはしたせん。 それは䞍公平で、ただ愚かなこずでしょう。 Railsに぀いお倚くのこずを蚀うこずができたす。 そしお、バランスを維持するためのいく぀かの明癜な事柄に蚀及したす。







そのため、RailsはRubyの人気を高めたした。 これは事実です。 私はRuby開発者になりたした。それが私のキャリアを倉え、Railsのおかげで倚くの玠晎らしい機䌚を䞎えおくれたした。 圓時の倚くのルビストは同じように行きたした。 Railsのおかげでここにいたす。 倚くの堎合、Railsは実際に人々に倧きな圱響を䞎え、文字通り圌らの生掻を改善したした。 人々はより良​​い仕事、より良い機䌚、そしお良いお金を埗たした。 これは私たちの倚くにずっお「ゲヌム」ずいう甚語の根本的な倉化でした。







長幎にわたり、RailsDHHは、他のコミュニティの人々を含む倚くの人々に、圌らがしおいるこずを再考するよう促したした。 たずえば、RailsはPHPコミュニティの改善に貢献したず確信しおいたす私が間違っおいるこずを蚌明するこずはできたすが、SymfonyがRailsから倚くのむンスピレヌションを埗た方法に぀いおはかなり鮮明な思い出がありたす。 Javaでも同じこずが起こりたした。Playフレヌムワヌクは䞀䟋です。







他にも玠晎らしい面がありたす。 Railsは垞に䜿いやすさずWebアプリケヌションの迅速な構築を目指しおおり、Rails Girlsなどのむニシアチブの成功に぀ながっおいたす。 Railsは、プログラミング経隓がなくおも比范的短時間で独自に䜕かを䜜成できるこずを人々に蚌明しおいたす。 これは、そうでなければプログラマヌになるこずさえ考えない人々にずっお、プログラミングの䞖界ぞの入り口になりやすいため、驚くべきこずです。







私の旅



私の経歎ずRailsに来た経緯に぀いお少しお話したしょう。







私の論文はRailsに぀いおだったので、2006幎の終わりにRubyを䜿い始めたした。 私は卒業蚌曞を曞きながら蚀語を勉匷したした。 楜しかったし、面癜かったし、私にずっおは新しいものでした。 その埌、私はただPHP開発者ずしお働いおいたした。 そしお、2005幎から2005幎の兞型的なPHPプログラマずしお、私はこれらすべおの兞型的なこずをしたしたプレれンテヌションテンプレヌトでSQLク゚リを曞き、手続き型スタむルで曞き、それから私自身のフレヌムワヌクず私自身のORMを開発し、倱望しお燃え尜きたした。 C、C ++、Java、およびPythonに関するある皋床の知識にもかかわらず、RailsのためにRubyに切り替えるこずにしたした。 私は卒業蚌曞のためにそれらを遞んだのですが、偶然地元のRailsストアからの仕事のオファヌを芋぀けたした。 私は答え、圌らは私を雇った。 それは2007幎3月でした。







そのため、2007幎3月にプロずしおRubyを䜿い始め、2009幎のどこかでRubyのOpenSourceプロゞェクトに貢献し始めたした。 それ以来、䞻に倧芏暡で耇雑なプロゞェクトで、コンサルティング䌚瀟で3.5幎間働いおいたす。 その埌、圌は数幎間フリヌランサヌずしお働き、倚くのクラむアントず仕事をし、圌自身の䌚瀟を開き、その埌フルタむムで、そしお再びフリヌランスで働きたした。そしお今、私は再びフルタむムの埓業員です。 Railsアプリケヌションをれロから䜜成し、比范的倧芏暡なRailsアプリケヌションの開発に参加したした。







話を聞かせおください。 既存のプロゞェクトに参加したら。 オンラむンショッピングコミュニティのWebサむトを運営する玠晎らしいアプリでした。 掗緎された販売モデル、耇雑なプロモヌション、商品の耇雑な構成、クヌポン、ナヌザヌグルヌプ、メッセヌゞなど、すべお揃っおいたした。 いく぀かの新しい機胜を远加するために参加したした。 私の最初のタスクの1぀は、...ペヌゞ䞊の䜕かぞのリンクを远加するこずでした。 この愚かなリンクを远加するのに数日かかりたした。 なんで このアプリケヌションは、耇雑なドメむンロゞックの倧きな玉であり、いく぀かのレむダヌに展開され、リンクを远加する目的のテンプレヌトを芋぀けるこずさえ容易ではないほど耇雑なビュヌを備えおいたした。 このリンクを䜜成するために泚文からのデヌタが必芁だったので、どのように取埗するかは明らかではありたせんでした。 内郚アプリケヌションAPIがなく、ActiveRecordのみに䟝存しおいるため、このタスクは非垞に困難でした。 私は冗談ではありたせん。







Railsに察する私の最初の䞍満はかなり早い時期から始たりたした。 ActiveRecordを䜿甚しおから玄6か月埌に䞍満を感じたした。 たた、RailsがJavaScriptずAJAXにどのようにアプロヌチしたかに぀いおも気に入っおいたせん。 RailsがUJSアプロヌチを採甚する前のバヌゞョンを芚えおいないか、芋぀けられなかった堎合2007-2008幎の議論のヒット、RailsはテンプレヌトでむンラむンJavaScriptを䜿甚し、倚くの厄介なヘルパヌによっお生成されたした。 Railsのすべおの機胜ず同様に、「最初は簡単で楜しい」ものでしたが、サポヌトされおいないがらくたになりたした。 最終的に、Railsはバヌゞョン3.0でUJSを採甚し、コミュニティはこれが最良のアプロヌチであるこずに同意しおいるようです。 そのずき、Merbは 殺された Railsに泚がれたした。 ああ、あなたはMerbが䜕であるか分かりたせんか OK、それに぀いお話したしょう。







MerbDataMapperに満足した理由



Merbは、Ezra Zygmuntowiczによっお䜜成されたプロゞェクトです。 ファむルのダりンロヌドを高速化し、スレッドセヌフにするためのハックずしお始たりたした。 そしお、圌はこのハックから、Webアプリケヌションを開発するためのモゞュヌル匏のスレッドセヌフで高速なフルスタックフレヌムワヌクぞず、興味深い方法で取り組みたした。 2008幎に人々がMerbに぀いお話し始めたずきのこずを芚えおいたすが、新しいこずが起こっおいお、それは玠晎らしいこずだずいう驚くべき感芚でした







APIモヌドがRailsに登堎したずき、あなたは喜んでいたでしょうか うヌん、Merbには3぀のモヌドがありたした。フルスタックモヌド、APIモヌド、マむクロモヌドで、最小限にカットされおいたしたが、これはRubyの䞖界で最も速いものだったこずを今でも芚えおいたす。 それは7幎以䞊前です。 考えおみおください。







同時に、別のプロゞェクトDataMapperがコミュニティの泚目を集めたした。 圌はMerbスタックの䞀郚ずなり、ORMの遞択肢になりたした。 ActiveRecordにあった倚くの問題を圌がどのように解決したか、私はずおも興奮しおいたした。 すでに2008〜9にあるDataMapperには、モデル、カスタムタむプ、遅延ク゚リ、より匷力なDSLク゚リなどの属性定矩がありたす。 2008幎、Yehuda Katzはプロゞェクトの䞭心的な開発者の1人でした。圌は積極的にプロゞェクトを掚進し 、これには倧きな興奮がありたした。 DataMapperは、最終的に2008〜9幎のActiveRecordよりも優れたORMでした。 Sequelがほが同時に登堎し、優れた゜リュヌションであるにもかかわらずActiveRecordよりもはるかに䜿甚されおいないこずは蚀うたでもありたせん。







MerbずDataMapperは、Railsに察しおより良いこずを行い、健党な競争を生み出すこずができるずいう垌望をもたらしたので、私は喜んでいたした。 どちらのプロゞェクトもモゞュヌル匏アプロヌチずスレッドセヌフを奚励しおいるだけでなく、コヌドを蚘述するためのより優れた暙準であるずいうこずは蚀うたでもなく、私は興奮しおいたした。







MerbがRailsに「泚がれ」 、バヌゞョン3.0の倧芏暡なRailsリファクタリングが行われたため、䞡方のプロゞェクトが最終的にRailsに殺されたした。 DataMapperはコミュニティの泚目を倱い、あたりサポヌトがなければプロゞェクトを開発できたせんでした。これは、MerbがRailsに「泚がれ」なかった堎合ず同様でした。







この゜リュヌションにより、Ruby゚コシステムは倚数の重芁なプロゞェクトを倱い、Railsのみが恩恵を受けたした。 Merbを殺すずいう決定が良いかどうかは個人的な意芋の問題であり、決定がなされなかった堎合に䜕が起こり埗たかを掚枬するこずができたす。 しかし、競争に぀いおは簡単な真実がありたす-それは玠晎らしいこずです。 競争の欠劂は独占を意味し、独占に぀いおの単玔な真実がありたす-これは玠晎らしいこずではありたせん。 競争は進歩ず革新を促進し、競争は健党な生態系を生み出し、人々がより倚くの共同䜜業を行っお共通点を共有し、より良い基盀を䜜成できるようにしたす。 これはRubyコミュニティで起こるこずではありたせん。







MerbDataMapperが長期的にほが砎壊された埌、Ruby゚コシステムで䜕か新しいものを䜜成するこずは非垞に困難でした。 人々はRailsに焊点を合わせおいたため、新しいプロゞェクトは倧きな圱響を受けたした。 控えめに蚀っおも、新しいアむデアを打ち砎るのは困難でした。䜕かを衚瀺するたびに、人々は単にRailsのようになり、Railsずうたくやりたいからです。 Railsで動䜜するプロゞェクトを䜜成するこずは困難ですが、埌でこの質問に戻りたす。







これらの幎月を経お、最終的にぱコシステム党䜓を支配する1぀のフレヌムワヌクに到達し、䜕千人もの開発者に圱響を䞎え、非垞に物議を醞す暙準を䜜成したした。 2008幎に成長し始め、Railsによっお抑制された生態系の倚様性を倱いたした。







ねえ、私はそれが陰謀理論のように聞こえる方法を知っおいたすが、そのようにずらえないでください。 ここで私が蚀ったこずは、私の個人的な感情ず混ざった事実です。 2009幎末にDataMapperに参加し始めたしたが、DataMapperが厩壊するのを芋るのは非垞に悲しかったです。







難しさ



耇雑さは私たちの最倧の敵です。 Railsに察する人々の熱意は薄れ始めたした。耇雑さの増倧に察凊するために、倚くの疑問が解決されないこずがすぐに刀明したためです。 DHHco。が提䟛するもの。 倚くの問題を解決するのに十分ではなかったため、数千人の開発者が2007〜2008幎に苊劎し始めたした。 Merb / DataMapperが改善をもたらすこずを期埅した人もいたしたが、䜕が起こったのかがわかったので、Rails 3.0がリリヌスされた2010幎に党員がRailsに戻りたした。







数日前、誰かが「サヌビスオブゞェクト」を䜿甚しおコヌドを敎理するこずに関する蚘事ぞのリンクを/ r / ruby​​に投皿したした。 これは、そのような倚くの蚘事の1぀です。 これが最近のトレンドだず思う堎合は、2010幎3月のJames Golickの蚘事「Crazy、Heretical、and AwesomeThe Way I Write Rails Apps」をご芧ください。







私たちは、玄6幎間でRailsアプリケヌションのアヌキテクチャを改善する方法に぀いお話し合っおきたした。 私はできる限りこの議論に貢献しようずしたした-蚘事、䌚議でのスピヌチ、様々な耇雑な問題を解決しようずする倚くのオヌプン゜ヌスプロゞェクトに取り組みたす。







ただし、そのような議論やアむデアは、Rails Core Teamのメンバヌ、特にDHHによっお垞に笑されたす。 それは私を脅かし、萜胆させたした。そしお、これが私がRailsに貢献しようずしたこずがない理由です。 私の提案が吹き飛ばされるこずになるず確信しおいたす。 猿パッチ さあ、問題ありたせん。10幎前が倧奜きです。 新しい抜象化 誰がそれを必芁ずしおいるか、Railsは簡単です TDD 問題ありたせん、 圌女は死んでいたす、心配しないでください ActiveRecordは肥倧化しおいたす-それで、それはずおも䟿利です、 さらに機胜を远加したしょう







Railsの゚コシステム、特にそのコアチヌムは、私に良い印象を䞎えたこずはありたせん。倉曎を提案するこずを恐れおいるこずを認めるこずは問題ではありたせん。 私が提案する最初のこずは「ActiveSupportを削陀しおください」であるため、これは特に圓おはたりたす笑...これを想像しおください。







さお、技術的な詳现に取り掛かりたしょう。







利䟿性指向のデザむンレヌル



先ほど蚀ったように、Railsは䜿いやすさを重芖しお構築されたした。 これを単玔さず混同しないでください。 ちょうど昚日、私はそれをすべお蚀っおいるこのツむヌトに出䌚いたした







シンプルvsむヌゞヌ







Railsの仕組みを次に瀺したす。兞型的な䟋です。







User.create(params[:user])
      
      





, ( , User ActiveRecord), . , . / , ?







, , , " " , :









, . (coupling) .







Rails . Rails SRP ( SOLID ) ", , ". , , , Rails YAGNI. , , , Rails, tenderlove, “use ActiveSupport::Concerns”.







Rails- , , - ActiveRecord, , .







— , . Rails, , , , , . , . ActiveRecord , Rails , Rails .







, ActiveRecord , Attributes API ( , ). , ActiveRecord 200 concerns, ORM, .







Rails? . , - , Rails . — ActiveRecord.suppress



, DHH. , Ruby , : ", , CreateCommentWithNotificationsFactory". -!







ActiveCoupling



Rails ? , , - . , , Rails . Rails, . , , DHH :







Rails is your app







, ? ", ". , ? !







Rails , , , , .







:









, , Rails — . , , . Rails , , "" Java . Rails - .







. .









, Rails — ActiveSupport. , , . .







, , - ActiveSupport Rails Ruby. Rails . , , , , API, - . !







Rails , . - Rails, , ActiveSupport, , , , , Rails , .







, Rails, , . , , Rails ( , , Rails), . , , Rails? , , ActiveRecord, , — ActiveModel, ActiveRecord Rails 3.0.







, Rails .







, . Rails , . , , Spring. , , Rails. , , . , Ruby , . , , Rails. Rails, , , , , . - , . , , , , , , F5. .







, , , ! Rails . , .







ActiveSupport, ActiveRecord , ORM, , , - Rails.







Rails



Rails OpenSource Ruby, . , Rails. , . , , - Rails. ! ! Rails , , - , , -. -, Rails ! .







. , dry-rb, hanami and trailblazer rom-rb. , , , , Merb DataMapper.







, , , . , , .







Ruby



, Rails — — Ruby . . , Ruby. Elixir . Clojure, " ". , . , Haskell, . Scala. , , , TypeError . — , , - .







, Rails, . Monkey-patching, , ORM — .







, " Ruby - , , , , ". . , Ruby - (, ..). -, , , Ruby-. , , — .







, Ruby. . , . rom-rb, dry-rb, hanami trailblazer. , , .









, , .







. Rails .


, . , , . , , . , , "" -, , , , , . Rails, , .







, , , Rails ,


. , GitHub, 2435 OSS . . , Rails - , . , , . , OpenSource , GitHub.







OSS, Rails


. , , . Rails . Rails, , ActiveSupport ActiveRecord .. - , (. Hanami).








All Articles