『業務経験を積む為の Ruby on Rails 実務トレーニング』を受講した感想

はじめに

この記事では『業務経験を積む為の Ruby on Rails 実務トレーニング』を受講した感想を記していきます。

 

私の受講開始時点での学習状況

私の受講開始時点での学習状況は以下のような状態でした。

  • 知識0から学習を始めて、チェリー本・Railsチュートリアルを1周読んだ
  • 基本情報やその他技術関連の書籍などは全く読んだことはない

 

良かった点

Git-Flowに沿った開発で実際の現場での開発の流れを掴めた

実際、企業の方と面談をした際にここでやっていた事(Git-Flowに沿ってリアルな開発フローを経験していることなど)をお話しすると、「実践的な経験をされていてとても良い」と言って頂けました。実際に企業の長期インターンに参加した際も大きな問題なくタスクを進められたので、基本的なタスクの進め方が身についたという実感を持つことができました。

 

Railsを用いた開発で良く使われるWebpackerやGemに慣れることができた

新しくGemを導入して開発する体験、Webpackerに触れる体験ができたのは良かったと思っています。RSpecを利用したテストに慣れることができたのも、とても良かったです。実際、長期インターンに参加した企業の業務でもRSpecを利用していたため、スムーズに業務を進めることができました。

 

実装だけでなく、用語の確認などがあり、知っておいた方が良い用語について調べる機会があった

ただ、正直なところ基本情報・WEBの基礎知識が全くなかった自分はググっても理解できないことが結構ありました。今になって振り返ると、簡単めな基本情報などの書籍を1冊読んで一度体系的に学んだ上で調べていたら、もう少しスムーズに理解できた&各課題での理解が深まっていたかなと感じました。
なので、基本情報の書籍や各分野(SQL・HTTP・ネットワーク基礎など)の基礎書籍を受講前提に加えるor課題として体系的に学ぶ機会があると良いかなと思いました。(私は比較的時間が確保できる方だったので良かったですが、基礎知識が足りないとボリューム的に課題が終わり切らないと感じました。)

また、各分野の推奨基礎書籍を添えたロードマップ的にまとめたものがあると、より効率的に学習が進められただろうなと感じました。

 

よく起こるバグの対応に慣れることができた

業務をしていて出くわすベーシックなバグを経験できたので、基本的なデバッグに慣れることができたのが良かったです。chrome developer toolsの使い方に関する言及があったのも良かったです。

 

SQLに慣れる良い機会になった

受講前は、Railsの処理の裏でどんなSQLが走っているかなんて全く気にしたこともなかった(というかSQLが走っていることすら知らなかった気がします)ので、実務で必須な知識を学ぶ機会になったのが良かったです。

 

セキュリティに関する知識を学ぶ機会になった

セキュリティが絡む課題・セキュリティ用語の確認をする課題があった点が良かったです。また、Railsではどのように対応しているか(例えばCSRFに対する対策など)を実装レベルで知ることができたのが良かったです。

セキュリティに関する課題をまとめて、「一般的なセキュリティに関する基礎知識を学びつつ、Railsではどのように対応しているのか」みたいな内容でパッケージ化するのも需要があるかなと思いました。

 

どのようにして機能が成り立っているか仕組みを学べた

具体的には「No.031【エラー解決】トップページでログアウトのリンク動作を修正しよう」でRailsがDELETEやPUTなどのHTTPメソッドをどのように実現しているかという仕組みの部分を学べたのが良かったです。この手のどういう仕組みで成り立っているかを学べる系の課題は学んでいて楽しかったですし、為になりました。

 

RailsだけでなくJavaScript, jQuery, Vue.jsについても基本的な実装を経験できた。

先にも記したように、私は受講前までRuby, Railsの学習しかして来なかったのでフロントに関わる基本的な実装を経験できたのが良かったです。確かな力が身につくJavaScript「超」入門と併せて学習することで基本的なことは分かるようになりました。
Railsをメインで働くエンジニアが身に付けたい基本的なJavaScriptの知識」を学ぶことができたのが良かったです。

 

 

現役エンジニアの方のレビューを受けることができた

現役エンジニアの方からレビューを受けられ、詳しい補足・現場ではどのように書くのかなどのフィードバックを貰えたのは一番良かったです。また、知人にエンジニアがおらず「実務をやっていく上で何の知識が必要なのか」が分からない状態だったので、現役エンジニアの方に何を学べば良いかを聞ける環境があるという点に価値を感じました。

 

TechCommitで学習意欲の高い人たちに囲まれてモチベーションを維持できた

受講期間中はTechCommitを無料で利用することができたのですが、TechCommitにはもくもく会などで継続的に学習を続けている方々がたくさんいて刺激をもらうことができました。また週に1回勉強会が開催されているため、自分の興味のある分野の勉強会に参加できたのも良かったです。

 

特に良かったと感じた課題

課題自体はどの課題も学びが多く、全て受けて良かったなと感じた課題でした。

その中でも特に、独学で学んでいたら学びづらい or 学ぶことはできるが独学で自分で1から調べて取り組むには腰が重いので課題として出されて良かったと感じた課題を挙げておきます。

 

  • No.002~011 Rubyの基礎課題
    Rubyの基礎的な書き方・ルールをレビューを通して学べた点や、外部APIを読んでツール作成する経験ができた点・役割で切ってクラス化するという考え方が学べた点が良かったです。この手の課題はトレーニングの課題とは別でもっとやりたいと思いました。

  • No.021【エラー解決】Schemaの矛盾を解決しよう
    No.022【エラー解決】time型のカラムをdatetime型のカラムに修正しよう
    マイグレーションに関する知識・基本的なコマンドの使い方、本番環境での注意点を学べたのがとても良かったです。この課題を終えてからマイグレーションに関する基本的なことで困らなくなりました。

  • No.038【リファクタリング】if文を読みやすくしよう
    この課題の「用語・処理の確認」がリファクタリングに関する学びが多かったです。

  • No.041【パフォーマンス改善】効率の良いSQLに修正しよう
    No.042【パフォーマンス改善】効率の良いSQLに修正しよう (その2)
    No.043【パフォーマンス改善】bulletのGemを導入してN+1問題を解消しよう

    SQLのパフォーマンスを気にするきっかけになりました。また、テーブルの結合について学ぶきっかけにもなりました。

  • No.045【機能追加】URLのフォーマットをチェックするカスタムバリデータを追加しよう
    学ぶのを後回しにしてきた正規表現について学ぶきっかけになりました。

  • No.054【機能追加】アルバイト用の権限を管理しよう
    権限管理の実装を行ったことがなかったので概要を掴めて良かったです。

  • No.062【開発環境構築】CircleCIを設定して自動テスト環境を構築しよう
    CIの存在自体は知っていましたが、自分で1から調べて学ぶのは腰が重かったので課題として出されて概要を把握できたのは良かったです。

  • No.069【機能追加】画像アップロードを実装しよう
    よく使う機能ですがまだ実装を経験したことが無く、いつか経験しておかねばと思っていたため丁度良かったです。

  • No.070【機能追加】商品の検索フォームを追加しよう
    Formオブジェクトの概念を初めて知りました。概要の把握ができたのが良かったです。

  • No.072【機能追加】管理画面編集の排他制御を行おう
    排他制御という概念を学ぶことができたのと、その具体的な実装を経験できたのが良かったです。この課題を受けなければ概念自体知らなかったと思います。

  • No.073【機能追加】クレジットカードによる決済機能(購入フロー)を追加しよう
    外部APIを利用かつトランザクションを使うという実装のため、複雑な実装でしたが、トランザクション自体についての知識とトランザクション内で外部APIを用いた場合にどういう考慮が必要なのかという部分を学ぶことができたのがとても良かったです。

  • No.074【セキュリティ強化】Serializerを使ってjsonデータを返却しよう
    初めてAPIを作る経験ができて良かったです。

  • No.075【機能追加】Vue.jsを導入してVue.js&APIを実装しよう
    Vueのコンポーネントで自分で作成したAPIを叩くという実装を経験することで、一般のSPAの開発のイメージができるようになったのが良かったです。
    また、Vue.jsの概要を学ぶ機会にもなったので良かったです。

 

気になった点など

チャットベースでのコミュニケーションが多くて少ししんどい

これは仕方ない部分ではあるのですが、質問する際は基本的にチャットなので、ある程度伝わるように文章をかくのに結構時間を食いました。

質問の文章をまとめる練習になったという点では良かったのですが、1個質問するだけでも結構大変でした。

 

レビュワーの方々の人格が分からない

当時、レビュワーの方々がどんな方々かはよく知りませんでしたが、レビューにおける指摘の仕方などはすごく丁寧で優しかったので、基本的に快適に課題を進めることができました。

しかしながら、井上さん以外のレビューワーの方とはほとんど会ったことがなかった為、人格がわからず、稀にどういう感情で書いているのかが分からないことがあった点が少しストレスでした。

今はレビュワーの方々と交流があるので優しい方々だと分かりますが、当時はレビュワーの方々の人柄が見えなかったため、もう少しその辺が見えると、よりやり易くなるかな思いました。

 

課題と関係のないバグが埋まっていたり、おかしな部分があった

これは、私がサービスを受けたのがリリース初期だったからです。

徐々に減るとは思いますが、たまに埋まっていたバグが原因で詰まった時もありました。ただ、これに関しては「何が原因でバグってるんだろう」と自分で考える機会になったので、(受講生には知らせた上で)あったらあったで良いかなと思いました。
私はそういうバグの原因を考えることですごく勉強になりました。

また、運営の方にバグの報告・課題の不備の報告をすると直ぐに対応して頂けたのでとても良かったです。

 

課題の仕様が若干曖昧な部分があった

仕様に沿って実装を進める上で仕様が若干曖昧な部分があり、自分で考えるべき部分なのか確認すべき部分なのか悩んでしまいました。(例:Payjpでのクレカ決済機能の追加において、フォームはPayjpから提供されている簡単に導入できるチェックアウトを利用するか、カスタマイズしてオリジナルのフォームを作るか。など)

実際の開発でも細かい部分の仕様が決まりきってない(考慮から漏れている)状態でタスクに取り組むこともあるので、仕様に関して曖昧な部分に気付いたら積極的に・早めに確認した方が良いという点を「トレーニングの進め方の基本ルール」みたいなものを定めてトレーニングの初めに強調してもらえると嬉しいなと思いました。

 

Formオブジェクトを使う課題のハードルが高かった

初めて着手した際はFormオブジェクトを使うことが明示的に要件に書かれていなかった(かつ自分がFormオブジェクトの概念を知らなかった)ため、かなり手間取ってしまいました。Formオブジェクトの概念の解説・参考記事などあればより良いなと思いました。また、「SearchFormだけでなくCreateFormなどもフォームオブジェクトとして作る」ということが課題の中で認識できるとよりFormオブジェクトを使う意味に対する理解が深まるなと感じました。
 

 

改善案

DB・SQL周りの課題がもう少し欲しい

課題に加えて『スッキリ分かるSQL入門』は一度読みましたが、卒業した段階では実践するには少しレベルにギャップがありました。(実務で使う場面に出くわして結構ハマりました。)merge, joinsなどのRailsのメソッドを実践する&SQLRubyメソッドとの対応を確認する課題・QueryObjectとして実装する課題など、SQLの実践課題がもう少しあったら良いなと感じました。

また、少し複雑な要件に対して自分でテーブル設計する課題もあるといいなと感じました。(できればER図作るなども課題にいれたい)

 

課題にはなかったけど、実務でよくorたまに使うので課題として有ってもいいかなと思ったテーマ

  • decoratorを使ってみよう
  • テスト用のモックを作成しよう


エンジニアとしての基礎を鍛えるコンテンツを増やして欲しい

エンジニアとしての基礎体力を鍛えるコンテンツを増やしてもらえると嬉しいなと思いました。

レーニングの課題を進めていた時は少しでも早く「とにかく実務ができるように」ということ意識がいってしまっていましたが、1年間実務を経験させて頂いて、エンジニアとして基礎体力の必要性を実感しました。

エンジニアとしての基礎体力を鍛えるコンテンツは、本トレーニングにも含まれていました(Rubyのレポジトリの方の課題のRuby読解など)が、もっとそのような課題をやりたいと思いました。

(ボリューム的な意味で)このトレーニングとは別で作成するのが良いのかもしれませんが、そのようなコンテンツがあればそちらも受講したいなと思いました。

また、HTTPやネットワークの基礎を確認する課題もあったら嬉しいなと思いました。それらの基礎知識があまりない状態で課題を進めていたため、(調べて用語の確認や課題のコードは書けたものの)正直、表面的な理解になりがちな部分がありました。早い段階である程度体系的にそれらを理解していれば、それぞれの課題の理解度もより上がっていただろうなと感じています。

 

ロードマップ的にWebエンジニアに必要な知識・学習が必要な分野が可視化されたコンテンツが欲しい

実際に課題を終えて、基本的なデバッグやよく使われるライブラリの使い方などが身につき、受講前と比べて、アプリ開発に対する自分の理解度の向上は感じることができました。

今、受講期間を振り返って、より効率的に学習を進める方法を考えると、実務トレーニング用に、ロードマップ的にWebエンジニアに必要な知識・学習が必要な分野とそれを学ぶための教材が可視化されたコンテンツ(この分野の知識はこういう時に必要なのでこれぐらいまでは学んでおくと良いというマップ)があると良いなと思いました。これは結構ボリュームのあるこのトレーニングを進める上でも、自分が今何を知っていて、何を知らないのかという全体像を把握できるので、モチベーションにつながると思いました。(課題で知識を得られている感覚はあったものの、全体が見えず、今自分は何を学習しているんだろう…と感じた時もあったので)

課題には含まれていないけど、この辺についても知っておいた方が良いよというのもまとまっているとより良いのかなと思いました。
(課題に付随して記載してあったり、面談の度に必要な知識を教えていただいたりしていましたが、予め体系的に優先度付きでまとまっていると、学習の見通しが立って、より良いかなと思いました。)

実務トレーニングの課題をこなすことで、それぞれの課題の内容に関する理解が深まったので、あとはそれらの知識項目を体系的にまとめたものがあると「自分の理解できていること・学習すべきこと」がよりはっきり分かって学習効率が上がると感じました。

 

終わりに

このトレーニングを受講して、実務に取り組む上で「何を知らなければならないか」「何ができないといけないのか」を知り、身に着けることができました。

「実務で何が必要なのか」は独学でやっていると知ることが難しいため、それを体系的に学べたのはとても良かったです。

実際、他の企業での業務に取り組んだ際も、大きな問題無くこなせる状態になっていました。

本当にありがとうございました。