初学者が Ruby on Rails の広大さに途方にくれたけどなんとかやっていけるようになった話

これは「フィヨルドブートキャンプ Part 1 Advent Calendar 2020」の4日目の記事です。

フィヨルドブートキャンプ Part 1 Advent Calendar 2020 - Adventar

昨日は hogucc さんの Rubyでリファクタリングをやってみよう でした。

Part2 もあります。

フィヨルドブートキャンプ Part 2 Advent Calendar 2020 - Adventar

また、この記事は2020年ふりかえりアドベントカレンダー 4日目です。昨日の記事は 「数学ガールの秘密ノート/学ぶための対話」感想 です。

今日はフィヨルドブートキャンプで最も苦しんだプラクティス、Ruby on Rails についての思い出を書こうと思います。随分長くなってしまいましたが、ふわっとした話なので暇なときにでもどうぞ..

フィヨルドブートキャンプで Ruby on Rails を学ぶまで

フィヨルドブートキャンプでは全体の中盤くらいに Ruby on Rails のカリキュラムがあります。

学習内容 | FJORD BOOT CAMP(フィヨルドブートキャンプ) でプラクティスのタイトルは公開されており、赤く囲った枠が Rails です。プラクティスは基本的に順番通り進めることが推奨されているため、Rails は全体の中盤くらいから学びはじめることになっています。ちなみにプラクティスの内容・順番は随時更新されているので最新版はリンク先を参照してください。

f:id:imaizumimr:20201204223758p:plain

私はフィヨルドブートキャンプで学習をはじめてから4ヶ月程度で Rails のカリキュラムに到達しました。

Rails エンジニアになるぞ!!と思ってフィヨルドブートキャンプに参加したので、やっと Rails だー嬉しいー!と思った記憶があります。また、フィヨルドブートキャンプの現在のプラクティスでは Sinatra で web アプリをつくってから Rails に入る流れなので、Rails で web アプリ作るの Sinatra よりめちゃくちゃ楽じゃん...と感動しました。

しかし、そこからが大変だったのです…

rails new したらたくさんディレクトリが出来るけど、なにもわからない

私が Rails を学んだ初日の日報にこんなことを書いていました。

Railsディレクトリ構成がよくわからない。やっていたらいずれ分かるものだろうか?

これは、例えば app/models とか app/controllers がよくわからない、どこに何があるかも分からないし、何かを参考にしようにもフルパスで書いてないとどこに何を書いていいか分からないという状態でした。

分からないので調べよう、と思って調べてみても、その時点の知識レベルでは Rails ガイドに何が書いてあるのかもさっぱり分からない状態です。

日報で「わからないまま進めることに不安がある」と書くとフィヨルドブートキャンプの先輩の id:NMP300 さんから、

結局は自分で手を動かして、悩んだり苦しんだりしないと、本やサイトを読んだだけでは、あまり理解できないのかな、と思いました🤔

とアドバイスをいただいたので、とりあえず手を動かして悩んだり苦しんだりすることにしました。

Rails なにもわからない

過去の日報に悩んだり苦しんでいる様子がいろいろあったので抜粋して紹介します。Rails の学習をはじめて2〜3ヶ月間のコメントです。

  • Rails はどこに何が定義されているのかわからない
  • i18nt メソッドって何?と思ってもどこにコードがあるのかわからない
  • Rails で意味があるファイルなのかただのサンプルファイルなのかぱっと見で見分けられなくて難しい
  • devise の課題で、これどうやって理解しよう…と思って悩んでしまって手をつけられない時間が長くなってしまった
  • devise のルーティングがわからない
  • devise が分からないまま動いていることにモチベが下がる
  • devise がなんか resource ってオブジェクト使ってるけどこれはなんなんだろう
  • テスト周りで、自分が使いたい機能が何のgemの機能なのか把握するのが大変
  • i18n で翻訳するにはt ".email"のようにI18n.tメソッドを使うものだと思っているのだけど、シンボルだけで翻訳できているパターンがあって理由がわからない
  • Rails 何も理解できてないんじゃ…という不安感が常にある。どうしたものかな🧐
  • Rails 理解してスッキリ Rails のコードを書きたい!
  • Railsに対する苦手意識が生まれてしまっている気がするので、苦手意識をなくしたい🤔🤔

かなり悩んでそうな感じになっています。実際、一時期は自分は Rails わからなさすぎて Rails エンジニアに向いてないんじゃないかと考えていました。

日報に書いたところはメンターさんから都度アドバイスや回答はいただいていましたが、自分としては根本的に Rails への理解が足りないなあという不安がしんしんと積もっていきました。

一つ何かを理解すると、その周囲にあるわからないことがどんどん見えてくるんですよね。例えると、真っ暗なところをろうそくの灯火でうっすらと道を見て歩いている…と思っていたのに、懐中電灯をゲットしたので使ってみたら、道じゃなくて原っぱを歩いているしまわりには得体のしれないものがいっぱいあって、ろうそくを使っていたときより明るくなっているのに逆に不安になるような、そんな気持ちでした。少しずつ分かっていることは増えているはずなのに、わからないことのほうが増えていく状態がとても不安でした。自分が立っている場所もよく見えないようなそんな感じでした。

Rails の gem のコードを読める環境をつくって読んでいったり、Railsガイドを読んだり、手を動かしてプラクティスを進めたりしていましたが Rails への苦手意識はつのるばかりでした。

そうこうしているうちに Rails を学習しはじめてから数ヶ月がたち、スッキリコード書けないまま進めたツケなのか完全に Rails が嫌になってしまいました。AtCoder やってみたり、英語学習してみたりと Rails からの逃避をはじめました。

ラクティス的には進めようと思えば進められる状況でした。やろうと思えば..コードの意味を追わなければ..コードは書ける、でも、そうやって書きたくない…という気持ちでもやもやしていました。日報を書く回数も減っていって、周りからは少し心配されていたような気がします。

Entaku.rb

Rails の進捗は悪くなっていっていましたが、そのころから Ruby コミュニティに参加しはじめていました。フィヨルドブートキャンプの先輩の id:s4na さんから、「Rails のプラクティスを始めたら地域 Ruby コミュニティに参加するといいですよ!」と勧められていたので、私も Rails を学び始めたから参加してみるかぁという軽い気持ちでした。2020年4月〜5月頃です。当時新型コロナウイルスが流行しており、勉強会は休止かオンラインになっていました。

そんな中で、twitter で Entaku.rb という勉強会の存在を知りました。

Entaku.rbは日本語での技術ディスカッションをメインとしたコミュニティです。名前に".rb"とあるようにRuby周辺の話題を主に取り扱いますが、参加者の方が話題を決めるため、何を議論するかは都度変わります。 議論は4人ほどの少人数グループによって行われます。各グループによって何を議論するかは異なり、最後に全グループで何を話し合ったかや何を得られたかを共有します。

Entaku.rb | Doorkeeper

Entaku-rb/minutes: 議事録

ここで Rails の学習に関する悩みについて質問したことがきっかけで、Rails スランプを抜け出せました。

Rails は gem の集まり

当時の自分のモヤモヤを要約すると「Rails について「こうしたらこうなる」は分かるが、なぜそうなるかが分からず壁を感じている」でした。

その問題に対し、参加者でワイワイ議論したのですが私としては「Rails は個々の gem が集まって出来ている。細かいコードを追うのではなく、大きな gem 同士の関係性を知ったほうが理解するのに役に立つかも」という回答がとても参考になりました。

これまでは Rails を使っていてわからないことがあるとまずコードレベル、メソッドレベルで追いかけて「ようわからんなあ」と思っていました。

しかし各々の gem がどういう役割なのかを知ることが大事だと分かりました。また、プロのエンジニアでもコードレベルで細かい処理の流れを追うことはほとんどないということを知れたのも良かったです。それまで自分は Rails をコードの集合体としか見れていませんでした。プログラムはコードから成り立っているものだからコードを見れば分かるはずだと思っていました。でも、もっとレイヤの高い視点で見ることができて、Rails は gem が協調して動いているということが Entaku.rb のおかげで分かったんですよね。それは、自分にとっては目から鱗が落ちるかのような発見でした。

それまでコードの狭い世界で見ていたものが、もう一段広い gem 同士のつながりという世界で見られるようになりました。文字通り世界が広がったような気持ちでした。木を見て森を見ずという言葉がありますが、まさに自分がその状態でした。森という概念を知らないまま、全体像が分からないよ・・・と木ばかり見ていた感じです。

それ以外にも、「Railsの思想はSimpleでなくてEasyで「とにかくこのように書け」というものなので、ある程度の諦めは肝心かもしれない」とか、全てを「理解している」まで持っていかなくてもよくて「知っている」でも良いとか、非常に学びの多い勉強会でした。

当時の議事録です:minutes/Railsの勉強法.md at master · Entaku-rb/minutes

そして現場 Rails

Rails の見え方が変わって気持ちを新たにした私は、とりあえず『現場Rails』を読んで基礎を学ぶことにしました。

現場RailsRails の学習開始1ヶ月くらいで少し読んでいたんですが、そのときは書いてある内容が全然ピンときませんでした。

それが、4ヶ月くらい悩んだり苦しんだりした後に読むと全然見え方が変わっていて、知りたかったことがたくさん書いてあって読んでてめちゃくちゃ楽しい本に見えるようになっていました。

現場Rails を読み終わるころには Rails への苦手意識もなくなり、プラクティスを進められるようになりました。

結局は自分で手を動かして、悩んだり苦しんだりしないと、本やサイトを読んだだけでは、あまり理解できないのかな、と思いました🤔

これは最初にいただいたアドバイスですが、本当にこのとおりでした。

悩んだり苦しんだりして、ようやく分かること、気づくこともあります。Rails のプラクティスではスランプになったり、Rails エンジニアやっていけるのか悩んだり、いろいろありましたがそのおかげで理解できるようになったことがたくさんありました。悩みを質問する過程でたくさんのことを学びました。自分では気づけなかった視点を持つこともできました。

Rails はまだまだ分からないことだらけですが、今の自分はあのときの自分よりたくさんの武器を持っています。いろいろな角度で問題を眺めることができるようになりました。これまでの学びを血肉としてなんとかやっていっています。でもまだまだこれからが本番です。今後もなんとかやっていきたいなあと思います。

謝辞

Entaku.rb でアドバイスいただいた id:okuramasafumi , id:osyo-manga ,参加していた皆様にとても感謝しています。あの Entaku.rb から Ruby コミュニティにハマって今に至るので、あの会がなければ今の自分はありませんでした。ありがとうございます。