専業アフィリエイターからWebエンジニアに転職成功したYUUKIです。
ここ数ヶ月取り組んでいたRuby on Railsチュートリアルですが、ようやく2周することができました。長かった・・・。
1周目はエラーが頻発したのもあって、完走するのに約70時間掛かりました。
2周目はQiitaに全まとめを書いたこともあり、2ヶ月半掛かりました。
この記事では、Railsチュートリアルを完走するに当たって掛かった時間や難易度、全内容を整理したいと思います。
Ruby on Railsチュートリアル 1章〜14章まで
Ruby on Rails チュートリアル全まとめ(解説・単語・演習) – Qiita
第1章 難易度 ★ 5時間
- AWS Cloud9による環境構築
- Webアプリケーションの基本構造であるMVCモデル
- GItの使い方
- Herokuへのデプロイ
クラウドIDEによる開発環境の構築から、Webアプリケーションを実際にWebに公開する所までやります。
環境構築はそんなに難しくないですが、最後の方でGItを扱うのでそこで苦戦するかも。
僕は1周目の時に、Herokuにデプロイできなくて詰みそうになりました。
第2章 難易度 ★ 4時間
- MVCモデルの挙動
- scaffoldとresourcsの概要
- Rails Consoleの使い方
- 継承の仕組み
Toyアプリケーションという簡単なユーザー管理システムを構築します。
MVC(Model View Controller)の挙動の理解がのちに非常に重要となるのでここだけはしっかり覚えておきたいですね。
1章が出来ればそんなに難しくないと思います。
第3章 難易度 ★★ 3時間
- ルーティングの仕方
- 埋め込みRuby
- テスト駆動開発の基礎
- 自動テスト(Gurad)の方法
2章で作ったToyアプリケーションをテスト駆動開発します。
ターミナルをやたらと弄るので、黒画面が苦手な人にはキツイかもしれません。
minitestのGuradはホントに便利なのでしっかり導入しましょう。
第4章 難易度 ★★★ 8時間
- ヘルパーの概念
- メソッドの使い方
- 配列や演算子・ブロックの基礎
- ハッシュとシンボル
- CSSの基礎
- クラスとインスタンスの関係
Railsから離れてRubyの基本を覚えます。
いわゆる「プログラミング」をRails Consoleを用いて行いますが、Rubyを勉強した経験がないと厳しいかも。。
ボリュームが多いし、覚えること多くて大変なのでわからない所は飛ばした方がいいですね。
ただし、ハッシュとシンボルについてはこれから使う機会が多いので、しっかりと違いを理解しておきましょう。
第5章 難易度 ★★ 3時間
- HTML/CSS/Sass/Bootstrapの基礎
- パーシャル
- 統合テストの方法
フロントエンド周りを弄るので、好きな人には楽かも。
Sassのネスト構造や変数を扱うあたりが多少難しいかもしれませんが、Tutorialでは重要視されないのでわからなくても大丈夫。
パーシャルについては今後使う機会が多いので、その概念を覚えておきましょう。
第6章 難易度 ★★★ 5時間
- バリデーションの方法
- データベース(DB)の基礎
- SQliteの使い方
- 正規表現の概念
- パスワードの保存方法
バリデーション(検証)を用いてDBへの保存を制御したり、SQliteでDBの中身を見たりとバックエンド側の動きをみていきます。
正規表現を用いたユーザー認証機能を実装するなど、一度に様々な知識を求められるのでかなり難しいです。
6章から急に難易度が上がった気がする。
第7章 難易度 ★★★ 6時間
- デバッグの導入
- Gravatarで画像表示
- ユーザー登録フォームの構築
- flashメッセージの表示
- production環境のSSL化
フォームで送信した値を受け取ったり、デバッグしたり、flashメッセージを表示したりとバックエンド・フロントエンド両方を扱います。
データの送受信の部分では、ハッシュの構造やparmasで細かく属性を指定して受け取ったりと、セキュアな方法で実装していきます。
最後のSSL化では、Webサーバーをdevelopmentとproductionで切り替えるのでプロのデプロイ方法を学びます。ここはしっかりやり終えたい所。
途中、アクションで説明なしにこのような構文が出現します。
redirect_to @user
これについては調べるなりしてしっかり意味を理解しないと後々詰みます。
第8章 難易度 ★★ 3時間
- セッションの実装(cookies情報の保存)
- ログイン/ログアウト機能の構築
- ドロップダウンメニューの構築
ログイン/ログアウトの仕組みを構築するため、ブラウザに情報を保存させる「セッション」について学びます。
8章は短いし簡単ですが、9章で扱う内容の基本を多く含んでいるのでしっかりやっておきたい所です。
第9章 難易度 ★★★★ 4時間
- remember me機能の実装
- 永続的セッション、一時セッションの切り替え(チェックボックス)
- remember meのテスト
9章は8章の応用で、一時的なログイン保持と永続的なログイン保持機能、いわゆるremember meを実装します。
if文をネストしたり、base64とBCryptを用いて記憶トークンと記憶ダイジェストで永続的セッションを作成するなど、高度なログイン機構を実装するのでかなり難しいです。
9章で挫折する人は多いようです。頑張って終わらせたいですね。
第10章 難易度 ★★★ 5時間
- RESTアクションの実装
- admin(管理ユーザー)属性の追加
- ページネーションの実装
10章では、UsersリソースをRESTfulにする為、edit/update/index/destroyアクションのそれぞれを完成させます。
フォーム送信からリファクタリング、テスト、admin属性の追加、ページネーションまで、幅広い部分を取り扱うためこれまで覚えてきた知識を一気に消化させるイメージですね。
アプリケーションの根幹的な部分の構築はこの章で終わりなので、しっかりこなしたい所です。
第11章 難易度 ★★★★★ 10時間(エラー頻発の為)
- アカウントの有効化
- Mailerを使ってのメール送信システムの実装
- SendGridの使い方
Railsチュートリアル最初の難関、11章。
アカウント有効化機能を実装するために、Mailerを使ってメール送信システムを実装します。
これが中々大変で、というのもデータを送信する際に文字列をエスケープしたり、メタプログラミングしたりと複雑な処理を行います。
テストも長文になってくるので、処理を追うのに必死です。
最後のSendGridを用いてのメール送信では、サーバー間通信(SMTP)を行ってHerokuと連携させる高度な処理を実装するので、一気に難易度が上がる印象です。
第12章 難易度 ★★★ 3時間
- パスワード再設定の仕組み(PasswordResetsリソース)の構築
- パスワード再発行ビューの作成
- パスワード再発行のテスト
内容は11章と似通っている部分が多く、難しくはないですがテストがやたらと長いので大変です。
12章では新しく覚えることは殆どないので、割とすぐ終わると思います。
第13章 難易度 ★★★★★ 8時間
- マイクロポスト(ツイートのような物)機能の実装
- データモデルの関連付け
- 画像投稿機能の実装
- AWSのS3を用いたproduction環境での画像投稿機能の実装
Railsチュートリアル最大の難関、13章。
マイクロポスト機能を実装する為に、データモデルの関連付けの仕組みを構築し、それに対応したフォームやフィードの作成、画像投稿機能、バリデーション、テストまで行います。
データモデルの関連付けについては、関係データベースの基礎を知らない人にとっては理解が困難であること間違いなしです。
最後のS3は設定方法がアップデートされる毎に変わるので注意。
第14章 難易度 ★★★★ 5時間
- フォロー&リフォロー機能の実装
- 多対多のリレーションシップを用いたデータモデリング
- Ajax(非同期通信)を用いたステータスフィードの実装
- SQLのサブセレクトを用いたDBが高速化されたステータスフィードの実装
最後の砦、14章。
フォロー/リフォロー機能は実装自体は難しくないのですが、データモデルの構造を理解するのが大変です。
また、AjaxやSQLサブスクリプトなど新しい知識が次々登場。高速化通信の実装はもはやプロレベルですね。
完走すればTwitterのようなWebアプリケーションが完成します。
達成感は半端ないので、最後までやり切りましょう。
Railsチュートリアルを終えてみて
Progateと比べると、非常に内容の濃いチュートリアルでした。
全てを理解するのは大変ですが、Qiitaにメモを残したお陰で普通に学習するよりは1つ1つ理解することが出来たのでは、と思っています。
今後オリジナルWebアプリケーションを製作する時の引用としても使えますしね。
正直、チュートリアルを終えたレベルでは現場で即戦力として扱われることはありません。
あくまで、Webアプリケーション製作の基礎が身についただけです。
ですので、これからは実践で経験を積んでいく必要がありますね。
幸い今ではRailsチュートリアルを終えた人向けのプログラミングスクール、「ポテパンキャンプ
」があって、ポテパンキャンプでは実務レベルのカリキュラムが用意されています。
Web系エンジニアとして転職するのに、即戦力として入社するには、やはりこのようなプログラミングスクールに通うのがもっとも効率良いでしょう。
私はこれからRailsを用いたオリジナルのポートフォリオを制作します。
インプット後に即アウトプットしないと覚えた内容を忘れてしまうので、Railsチュートリアルの学習を活かすために、早めに取り掛かりたいと思います。