タイトルがやや煽り気味ですが、Rails案件での開発やプログラミング講師を経験してきた自分として思うこともあり、Twitterでよく見かける「駆け出しエンジニアの方」や「プログラミングスクールでRuby on Railsを勉強している方」たち向けのヒントをまとめてみました。
今後のキャリアや学習方法を考える上で、何かしら参考になれば幸いです。
- 初学者がRailsを学ぶことが批判されやすい理由
- そもそも駆け出しエンジニアがRailsを学ぶ理由
- Ruby on Railsを学習する駆け出しエンジニアのレベルが低いと見られる理由
- Railsで学習を進めるメリット
- Rails学習でやるべきスキルアップ施策
- 制作しているプログラミング学習環境
- まとめ
初学者がRailsを学ぶことが批判されやすい理由
Twitter上などでもそうですが、かなり昔から(特にIT素人からの学習において)Ruby on Railsを学ぶことは批判されがちではありました。
下記のブログなども目をしたことがある人も多いでしょう。
まずその理由として抑えておきたいことに、Railsの特徴の1つである「メニューはお任せで」という考え方があります。
postd.cc ※詳しくは↑
Railsでは開発速度を上げる為に、作業や実装内容を抽象化して、レバレッジを効かせて小さな労力で大きな成果を生んでいけるようになっています。
特にコレが大きなメリットでもありデメリットにもなっています。
中身をイメージして、問題になりそうな所を先回りしつつ使えるベースの知識がある人だと良いのですが、分からない人が分からないまま使うと所謂「コピペコード」のようなものが量産されてしまうだけでなく、自分でロジックを作っていく力が身につかないというのが大きく問題になるところでしょう。
Railsはなんでもござれの重量級のフレームワークであり、特に学習を始めたばかりのときには「こんな処理はこう書くのかー」という様々な 覚えゲー として進めることになりがちです。
そもそも駆け出しエンジニアがRailsを学ぶ理由
初学者のエンジニアを目指す人が、Ruby on Railsを学ぶことが多い理由は単純で、プログラミングスクールなどのブログがSEOでやたら強いというのがあります。
Railsブームの直後くらいからRailsを教えるスクールが台頭してきましたが、そこで量産されたブログ記事資産の活用により、(初学者は特に)調べれば調べるほどよく見かけるRailsに手を出していくということですね。
その「認知」のユーザーを囲うために、プログラミング学習サービスなどを運用しているところでも積極的に採用されることになり雪だるま式に増えてきました。
Rails学習自体は、メリットもデメリットもあるので、学習する際にきちんとその特徴などを抑えておくことが大切です。
Ruby on Railsを学習する駆け出しエンジニアのレベルが低いと見られる理由
Rails自体は様々な問題を抱えつつも、まだまだ使われている良いWEBフレームワークであり、他のWEBフレームワークに通じる部分も多いため、Railsを学習すること自体は全然問題はありません。
RailsではITエンジニアの素養が全く育っていない、という意味ではないです。
ただ、下記のような点で否定的な意見があるのは知っておかないといけないでしょう。
本当に使えるようになるまでは、実は学習コストが高い
上記で書いた「メニューはお任せで」文化により、取り敢えず見た目上で動くものというのは実はそんなに難しくなく雰囲気だけでも作っていけるようになってしまいます。
ただ、職場では内部的な動きまで意識して作るのが「当たり前」ですし、コードの書き方だけでなく(特にRailsの場合は重量級なフレームワークであることもあって)色々な周辺知識も求められやすくなります。
この『なんとなく動くものが作れた』と『実際に裏側や運用まで意識して作れる』ところには大きなギャップが有り、「なんとなく動くものが作れた」マンが自信満々に活動していることがある為、「この人は本当に大丈夫かな…?どこまで分かってるんだろう…?」という目で見られやすいということです。
自分で正解を導いていく文化がない場合がある
(特に変なプログラミングスクールなどで)学習している人は、『Railsが便利にやってくれるんだから詳しいことは知らなくていいじゃない。』という所謂「完全に理解した(つもり)」状態で止まってしまっている人が一定数います。
これはこれで、ディレクターやマネージャー、および経営者など、複合スキルで勝負していこうと考えている方には十分なのですが…。
ITエンジニアとして『技術』、もといモノづくりの力で勝負していこうとしているのであれば話にならないという評価がされても仕方ありません。
このような「理解の解像度が低い」状態だと、ちょっとした機能追加などを依頼してもなかなか実装できない為、もちろん職場などで活躍することもできません。自分で考えた機能なら妥協しながらそれっぽくは出来るかもしれませんが…。
無理やり例えるとしたら、自分がオシャレをしたい時に、(ネットで調べながら)定員さんに「こんな感じで!」と注文すれば、いい感じにジャケットやジーンズを見繕ってくれてそこそこイケてるファッションにしてくれるような感じでしょうか…。
ただ、自分自身で『オシャレのロジック』を理解していないと、全く同じような格好は自分で再現できても、ちょっとした応用をしようと思うと途端に破綻してしまうようなイメージです。
Railsで学習を進めるメリット
ネガティブな内容を始めに出してきましたが、Railsで学習することにメリットもしっかりあります。
RailsWayに乗っかれると開発者としての役割を持ってもらいやすい
Railsは『設定より規約』という思想で、細かく色々決まってしまっているため、所謂RailsWayにちゃんと乗っかれば、特殊な処理でない限り比較的変な実装になりにくいです。
出来るだけ皆で同じような書き方になるようにルールで縛ることで、(慣れている人にとっては)直感的でわかりやすく、余計なものを準備しなくても良いので実装も比較的早くなります。
ちゃんとRailsを『御することが出来るまで到達できれば』、サーバーサイドの機能追加等をする時に共通認識を持って作業を進めやすくなる為、開発チーム内で役割を持って仕事をしていきやすいということがあります。
特に下記のようなControllerのCRUDアクションのルールなどを抑えて、チーム内で知見を共有しておけば、実装時にも迷うことが少なくなっていきます。 https://postd.cc/how-dhh-organizes-his-rails-controllers/
RailsWayをずっとやっていると「Railsじゃないと実装できない」みたいな状態にもなりかねませんが…。
逆にRailsで取り敢えずWebアプリ開発者としての業務経験を積めれば、他のスキルは必要に迫られた時に学習すれば問題になることあまりないでしょう。
比較的様々な情報にアクセスしやすい
Rubyなどは日本語教材なども豊富で、学習者コミュニティなども活発です。
学習をしていきたいとなったときに周りの人に聞きながら進めやすいというのもあります。
その分転職などを考えられている業務未経験の方は優位性がないので独自の戦略を持つ必要があったりもしますし、質の悪い情報も溢れている場合もあり取捨選択も必要にはなってきます。
Rails学習でやるべきスキルアップ施策
まず、Rubyの読み書きについても自信がない方には下記をやっておくのがおすすめです。
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る
そして、実装力を高めるためには様々なアプリ開発を通じて「パターンを経験する」および「周辺知識の深堀りもしていく」ということが何よりの近道になるでしょう。
パターンを経験するために
1. 実サービスを開発・運用してみる
特にポイントとしては「実装の要件が存在する」ということです。
先にアウトプットしたいものや満たしたい条件があり、それをいかに達成していくのかという試行錯誤の中で、どんどん各種技術を深堀りが出来るだけでなく実装力もついていきます。
(すごい漠然とした主観で申し訳ないですが)特に転職等を視野に入れている方のレベル感としては下記のようなイメージを持っています。
RPGでいうと、
— 井上慎也@TechCommitメンバー募集中 (@ino_dev) July 17, 2019
Lv.1 Progateやドットインストールやってます!
Lv.5 入門書終えました!
Lv.6 コピペメインでポートフォリオ作りました!
Lv.15 小規模なアプリで企画から開発・リリースまで一通りやってみました!
Lv.30 品質も意識してユーザー数◯人のサービス運用してます!
くらいのイメージ。 https://t.co/nSUNR75cbz
集客等の数値目標等から逆算して実装をしていくことで飛躍的に能力が伸びていきます。
また、「自分で作りたいものが無い!」という方は、友達のためにお店の予約システムなど何か作ってあげるというのも良いでしょう。
実際の仕事に近いフローも経験できてオススメです。
2. 様々なサンプルアプリに触れる
なかなか作りたいものもないよ!自信がないよ!という方には、ハンズオン形式の書籍や学習教材をひたすらやって、自分の中での引き出しを増やしていく方法もおすすめです。
GitHub上でコードを読むというのも勿論有用なのですが特に初学者には敷居が高いので、下記のようなサービスなどを使って特に実装したことがないパターンを4~5つくらいやるというのも悪くないでしょう。
Udemy https://www.udemy.com
Techpit market.techpit.jp
※このあたりはマーケットプレイスで、各個人が出品されているので質にはばらつきがあるかもしれませんが…。
いくつか実装したプロジェクトを手元やGitHub上のリポジトリに置いておくと、似たような処理を実装するときの具体的な「実装リファレンス」としても使用していけるようになります。
規模や難易度にもよりますが未経験の人であれば、オリジナルアプリを2~3つ、またはハンズオンでのアプリ開発は4~5つくらいやるとかなり実装力はついていくはずです。
周辺知識の深堀りもしていくために
ここまで解説しておいてなんですが、Railsによる実装方法の学習なんて開発全体から見ると一部の知識でしかありません。
周辺知識の学習においては「知識の引き出しインデックスを作る」ことと「キャリアや役割を考えて逆算する」ことがオススメです。
1. 知識の引き出しインデックスを作る
こちらの内容はITリテラシーが低い方向けです。
IT業界に携わるにあたり、専門用語や様々な常識的な考え方や文化があるため、畑違いのところから学習されている方にはこのあたりが障壁になることもあります。
詳しくは下記にも書いていますが、個人的に基本情報の午前問題をさらっとやって、「今後何を勉強していけばいいかを勉強する」土台の知識を付けることもオススメしています。
2. キャリアや役割を考えて逆算する
周辺知識を深堀りする…と言っても、IT技術の世界はどこまでも深く広い深淵です。沼です。
手当たりしだいに先回りするというのは無理ゲーです。
業務を開始している方は当たり前ですが目の前の仕事をしていく為の必要に迫られたスキルを学習をしていけると良いでしょう。
転職が目的の方は、自分が行ってみたい企業が採用している技術を調べてそれを学習し、作りたいアプリがある方はそれに近いアプリの技術構成などを調べてそれを学習するのが良いでしょう。
当たり前のことを書いているようですが、存外(特にTwitterや変なインフルエンサーの言葉にいちいち右往左往したりして)出来ていなかったりするものです。
自分の登る道を自分で見据えて「キャリアの設計」もしていきましょう。
転職も作りたいものもなーい!という方は、取り敢えず下記のようなところから取り組んでみるのもおすすめです。
SQL(Railsでは特にActiveRecordの挙動)
DB…というよりはDB操作について自信がない方はこのあたりは良いのではないかと思います。
スッキリわかるSQL入門 第2版 ドリル222問付き! (スッキリシリーズ)
- 作者: 中山清喬,飯田理恵子,株式会社フレアリンク
- 出版社/メーカー: インプレス
- 発売日: 2018/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
HTTPを始めとする基本的なネットワークに関する知識
ネットワーク周りに自信のない方はこのあたりがオススメです。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (183件) を見る
Linuxの基本的な部分の学習
Linuxについては、無料でも利用可能な「Linux標準教科書」などが鉄板でしょう。
https://linuc.org/textbooks/linux/
是非活用してみてください。
制作しているプログラミング学習環境
TechTrainingで現場目線での業務トレーニングを実施
最後に宣伝になりますが、
- プログラミングスクールを卒業された方
- 転職を目指しているがスキルに自信が無い方
- Railsの経験があまりなく業務研修を受けたい方
という方を対象として、コードレビューを中心とした脱初心者〜中級者を目指す方の為の、
『現場で迷惑をかけないための Ruby on Rails 業務研修』 というものを8/13から開始します。
※30名までの限定で半額キャッシュバックの対象になりますので、もしスキルアップに悩まれている方がいればこの機会にもご活用ください。
TechCommitでマイペースなアプリ開発を実施
研修レベルでがっつりっていうのはちょっと…という方にはTechCommitというアプリ開発者の為のコミュニティ型学習環境も提供しています。
プログラミング学習は「独学vsプログラミングスクール」になりがちですが、手軽に学習のモチベーションアップを図れたり、ちょっと聞ける環境が出来ればと運用しておりますので、お気軽にご参加ください。
まとめ
- Railsはメニューはお任せでという思想のため中途半端な理解になりやすい
- 動くものを作るまでは難しくないが、裏側を理解するまではハードルが高い
- しっかり学習してRailsWayに乗りつつパターンと周辺知識を抑えよう
ぶっちゃけ始めにメインとする言語や技術は「自分が楽しいもの」や「周りの知り合いがやってるもの」で良いと思います。
Rails学習中の方はちゃんと使えるようになるまでやるのが良いとは思っています。
1つでも今後の学習やキャリアの参考になれば幸いです!