はじめに
こんにちは、Devnikiです!
2週間までは暑かったのに急に寒くなりましたよね。
私は風邪を引いて1週間ほど咳と喉の痛みで苦しみました...
季節の変わり目なので風邪を引かないように気をつけて下さい😌
今回は、Railsチュートリアルを完走したので、チュートリアルで得た学びを皆さんに共有したいと思います。
チュートリアルは全体で14章あり、1日1章ペース(2週間ほど)で終わらせようと思ったのですが、内容がボリューミーで1ヶ月ほどかかってしまいました。また、ログインなどの実装に関してはあやふやな理解のまま進めてしまったので復習したいと思っています。
この投稿を通じて、自分の理解を整理しつつ、これから学ぶ人の参考になれば嬉しいです。
Qiitaでの投稿は初めてなので、何を書けばいいか、どのぐらい書けばいいかと感覚がわからないため、ご了承ください🙏
対象読者
- Rubyを学びたい人
- Railsでアプリを開発したい人
- Web開発の全体像を掴みたい人
学習の背景
今回、Railsチュートリアルを始めようと思ったきっかけは、Webアプリの全体像を掴み、理解した上でWebアプリを開発してみたかったからです。
学生時代に授業やインターン等でWebアプリを開発した経験がありましたが、理解を深められないまま終わってしまうことが多くありました。その後も本やUdemy等で学び、自分で自作アプリを開発したものの、他人に見せても技術的な説明ができず、「自分には向いていないのかもしれない」と感じて、しばらくWeb開発から離れていました。
それから時が過ぎ、ChatGPTの登場によって誰でもアプリ開発ができる時代になりました。これを機に「もう一度ちゃんと学び直そう」と思ったものの、どこから始めればいいのか、どこまで学べばいいのかわからない状態でした。
そんなとき、Web系企業で働く友人から、「ログインの実装やCookie、デプロイなどとWeb開発の全体像を掴めるチュートリアルがあるよ」と教えてもらいました。
目次を見ると、まさに自分が求めていたWeb開発の全体像を理解できそうな内容だったので、思い切って1,000円払って挑戦することにしました。
Railsチュートリアルを通して学べたこと
Railsチュートリアルを通して、本当にたくさんの学びがありました。
Webの基礎をすっかり忘れていた自分でも理解できる内容で、初学者にも優しい教材でした。
それでいて、セキュリティ対策やログイン時のセッション処理など、実践的な要素も多く、経験者でも手応えのある内容だと感じました。
その中でも、特に印象に残った学びを紹介します。
セッションの理解が深まった。
第8章と第9章のログイン処理では、初めてセッションを実装しました。
概要としては理解していたつもりでしたが、実際に自分で実装してみると、セキュリティの観点で考えることが多く、とても勉強になりました。
例えば、固定セッション攻撃やセッションリプレイ攻撃といった脅威に対しては、reset_sessionの呼び出しや@current_userの管理方法など、細かい実装の工夫が必要になります。
現在では、偉大な先人たちが開発してくれたライブラリを使えば、これらの対策があらかじめ実装されている場合があります。(とはいえ、本当に対策しているかはご自身で確認する必要があります)
それでも、1から自分で実装してみることで理解が格段に深まったと実感しました。
この章を通してセッションの仕組みを自分の手で構築できたことは、非常に価値のある経験だったと思います。
ダイジェストって必要なの?目的の履違え
ダイジェストは、トークンを一方向にハッシュ化した値のことです。
実装しているときに「これって本当に必要なの?」と考えることがありました。
当初は、「セッションが盗まれたら結局すべて終わりじゃん?」って思っていたからです。
しかし、実は混乱していた理由は、ダイジェストの目的をちゃんと理解できていなかったからでした。
ダイジェストの目的
| リスク | 防ぐこと |
|---|---|
| DB漏洩 | トークン(鍵)がバレない |
| 改ざん | 一方向ハッシュなので復元不能 |
| クッキー偽造 | 照合で失敗するため無効化 |
たしかに、セッション自体が盗まれてしまえば被害は避けられません。
ですが、ダイジェストは「漏洩した場合の被害を最小限に抑える防壁」として必要なものでした。
この実装を通して、改めて
「技術の仕組みそのものよりも、なぜそれが必要なのか(目的)を理解することが大切」
だと実感しました。
テストの重要性
最後に、テストの重要性についてです。
私は仕事でアプリ開発をした経験がなかったので、「テストを書く」という習慣がまったくありませんでした。
エラーやバグが出たらその都度直す、いわゆる動けばOK精神でやっていて、「テストっていつ使うねん」と思ってました(笑)
しかも、テストを書くのって正直めんどくさい印象があり、興味もありませんでした(当時はまだChatGPTもなかったので…)
しかし、Railsチュートリアルでは各機能ごとにテストが用意されていて、スペルミスや記述ミス、バージョン違いで動作が崩れても、どこを直せばいいのかを教えてくれるような仕組みになっていました。
そのおかげで、エラーの原因を探す時間がぐっと減って、「テストってめっちゃ効率いいじゃん」と感じるようになりました。
さらに、チュートリアルではテスト駆動開発(TDD)についても触れられていました。
テストを書くことで、
- 何を実装したいかが明確になる
- 仕様変更や新機能追加のときも自信を持って修正できる(=運用・保守がしやすい)
- テストが失敗した箇所から、影響範囲をすぐに把握できる(=バグの早期発見につながる)
といったメリットを実感しました。
正直、テストを書くのは手間がかかるけど、アプリを本格的に開発・リリース・運用していくなら絶対に必要な仕組みだと感じました。
今後について
チュートリアルを通して、Railsでの開発の流れからセキュリティ、テストまで、本当に幅広く学べました。
ただ、終わってみると「まだまだ理解が浅いな」と感じる部分も多かったです。
これからは、セッションやCookieの復習をしながら、HotwireやRSpec、Rails APIモードなど、ポートフォリオ開発に必要な技術を順番に学んでいこうと思います。