未経験からRuby on Railsを学んで仕事につなげるまでの1000時間メニュー

Rails使って仕事してて、最近はRubyを使って初学者の方たちにプログラミング教えてます、[@saboyutaka](https://twitter.com/saboyutaka)です。

未経験からエンジニアになりたいという人達に普段教えていて、ガイドラインがあるといいなと思って作りました。

## まずなんで1000時間か

これからWebアプリケーションを作るエンジニアになりたい人がこれを読んでくれていると思って書きます。そもそもなぜエンジニアとして働けるかというと、作りたいものがある人や企業が居て、それを作ることができる技能に対して給与や報酬が発生します。そして技術職として仕事で対価を得られる最低限のスタートラインに立つための学習期間が1000時間だと想定しています。

技術は投資時間に比例して身につくので向き不向きはここでは考えません。向き不向きはむしろ時間投資を続けれるかどうかであって、楽しめるかどうかやなぜやるかの動機、決意などに依存します。これに関してはまたどこかで書きます。

## 1000時間のスケジュール感

* 会社員であれば業務時間でだいたい8-12ヶ月
* 日々の時間を使いながら1日3時間積み重ねれば約10ヶ月
* 時間に余裕があって毎日5時間できるなら6ヶ月
* 時間に余裕があって毎日10時間できるなら3ヶ月

ぐらいのスケジュール感です

自分がどこまでに達成していたいかなどを考慮してプランニングするといいです。シリコンバレーの授業料200万円のガチプログラミングスクールは3ヶ月で1000時間達成するメニューになっています。200万払って必死でジョブチェンジしようとしてる人たちなので納得ですね。

平均的には8~12ヶ月ぐらいで就職を目指すのをオススメしています。会社員であれば、現在の仕事を続けながら学習を進め、転職が見えてきたタイミングで退職することを進めています。未経験の方で中には、集中するために思い切ってすぐに退職するという人も居ますが、学習には半年以上時間がかかる上、転職先が見つかるかどうかはご縁次第なのでいつゴールに辿り着くかは見えません。思い切って退職する場合でも、約1年間収入が無くても生活が出来る貯蓄があるかどうかで判断するといいと思います。

## なんでRuby
今流行っててWebアプリケーションを作ることが言語はたくさんあるなかでなんでRubyを使って学ぶかというと、日本語のドキュメントが充実している、コミュニティが多い(聞ける人が多い)、書籍が揃っている、ProgateがRuby推し、[Ruby on Railsチュートリアル](https://railstutorial.jp)、[Ruby on Rails ガイド](https://railsguides.jp)のような実践的かつ濃い教材がある、実際の業務でRuby on Railsを使ってる、Web以外でも使える範囲が広い、などの点でRubyを選択してます。

基礎中の基礎のコテコテなWebアプリケーションの仕組みを学ぶにおいてはRubyが秀でてるなという印象です。初学者の方が3年間やり通すための総合的なハードルが低いのはRubyじゃないかなという気持ちです。


### PHPじゃないの?
Webアプリケーション開発はPHPでLaravelも流行って来ているのでPHPで学ぶ方法もありますが、LaravelがRuby on Railsを参考にして作ってるのもありそれらの往復はそんなに学習コストなく移行できるので、実際にLaravelを使うシーンが出てきたら学べばいいかなというスタンスです。PHPはWebに特化した言語なので、Web以外のものを作ろうと思うと候補から外れます。その点Rubyを学ぶとWeb以外でも利用の範囲が広いので最初に学ぶをオススメしてます。すでにJavaやPHPを経験している人とかにはLaravelをオススメしてます。

### Pythonじゃないの?
PythonはIoTや機械学習で幅広く使われていてRubyとも似た言語です。こちらもRubyとPythonの行き来のコストはあまり高くないです。世界を見渡せばPython優勢なのですが、日本に限って言えばRubyとポジションが似ているのでWebアプリケーション開発にはあまり使われてない、日本語のドキュメントが少ないなんかがあって選択肢から外してます。

### JavaScriptじゃないの?
最近JavaScriptがどんどん進化してて使える箇所も増えているので確実に世の中のトレンドはJavaScriptに移行してきてる感じがあります。Webアプリケーションを構築せずにフロントエンド + FirebaseなんかのMBaaSの組み合わせでWebアプリが作れる時代にもなってきてます。最近ではVue.jsやReact.jsが台頭してきていて安定した開発基盤が整いつつあります。しかし、多種多様な人が使う言語なのでコミュニティやライブラリがきちんとオーガナイズされていない印象で、混沌とした中から正しい技術や学び方を理解するのには、優れたメンターがそばにいないとちょっとむずかしいなぁと思ってます。


## メニュー
Progateや書籍を使った方法を個人的にはおすすめしています。Progateをやる時のやり方なのですが基本的に2周やること、1周目はProgate上で学びながら行う。2周目はProgateを進めながら同時に自分の手元のPCでエディタとターミナル、ブラウザなどを利用して1からファイルを作って書いていくことを推奨しています。俗に言う写経という学習方法です。

### 0-100h HTML, CSS, JS, Webページ作成

まずPCブラウザでWebページが動く仕組みを理解するためにHTML, CSS, JSを学び、3つのファイルのそれぞれの仕組みや役割を理解します。それに付随してWebブラウザの役割や動作、ファイルの操作、CLIの使い方を学ぶ。

Progateで学び、HTML, CSS, JS, jQuery, Bootstrap4でWebページを作成するのが最初の100時間。HTML, CSS, JSのほぼ正式相当の情報は[MDN](https://developer.mozilla.org/ja/)なのでここを確認しましょう。学ぶ時にいろんな情報がありますが**1次ソースを見に行く** 習慣は大切ですので意識しておくといいと思います。

#### やること
* [Progate](https://prog-8.com)で[HTML&CSS](https://prog-8.com/languages/html), [JavaScript](https://prog-8.com/languages/es6), [jQuery](https://prog-8.com/languages/jquery) を各2周、2周目は写経する。
* 気になることは[MDN](https://developer.mozilla.org/ja/)で学ぶ
* [Bootstrap4](https://getbootstrap.com)を使って1画面のページを1から自作する

#### 学ぶこと
* HTML
* CSS
* JavaScript
* jQuery
* Bootstrap4
* Finderの使い方， ディレクトリの構造など
* Terminalの使い方、簡単なCLIコマンド

### 100h-200h SinatraでHTTP、Webアプリケーションを学ぶ

まずRubyの基礎を学び、その後にSinatraを利用してHTTPの基礎を学び、小さいWebアプリケーションを作成する事をゴールにします。プログラミングの基礎知識、Webアプリケーションの役割と動作原理、HTTPやTCP/IPへの理解を深めます。目安としてDBのテーブル数4-10。

#### やること
* [ProgateのRubyコース](https://prog-8.com/languages/ruby)と[ゼロからわかる Ruby 超入門](https://amzn.to/2L45d76)を使ってRubyの基礎を学ぶ。本は読みながら写経、Progateは2周目は写経します。
* [「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか](https://amzn.to/2QhWoMR)や[ちゃんと使える力を身につける Webとプログラミングのきほんのきほん](https://amzn.to/2Qjo3No)でWebの基礎概論を理解します、前半部が特に大切で、後半部は少し古くなってきてるのもあって参考程度にパラパラ見るぐらいでいいかもしれせん。
* [ProgateのSQLコース](https://prog-8.com/languages/sql)で基礎的なDB操作を学ぶ
* [RubyとSinatraではじめる Webアプリケーション開発の教科書](https://amzn.to/3Jihcuk)か[ドットインストール Sinatra入門](https://dotinstall.com/lessons/basic_sinatra_v2)を見てRubyでのWebアプリケーションの作り方を学びます。
* [Sinatraのドキュメント](http://sinatrarb.com/intro-ja.html) を参考にする
* Sinatraを使って小さなWebアプリケーションを1から作る

#### 学ぶこと
* Ruby
* HTTP
 * routing
 * GETとPOST
 * sessionとcookie
* Webアプリケーションの仕組み
* DB, SQL
* Sinatra

### 200-250h Railsを学ぶ下準備
[Rails Girls ガイド](http://railsgirls.jp)や[Railsの教科書](http://igarashikuniaki.net/rails_textbook/)を使って、Webアプリケーションの仕組みの復習とRuby on Railsのすごさをここで実感します。Sinatraでシンプルに作って来たからこそ、Ruby on Railsのすごさに気づくことができると思います。Rails Girlsでサクサク実装できる楽しみを知り、Railsの教科書でRuby on Railsの仕組みの基礎を学びます。またこの辺りからGitを使えるようになるといいです。今後の進捗とともにGitを使っていきましょう。Rubyを更に理解したい方は[プロを目指す人のためのRuby入門](https://amzn.to/2L74amJ)をオススメしてます。この辺りは明日の [@kou-sy](https://qiita.com/kou-sy) さんの記事を参考にしてください。Railsの教科書はPDF, Epubでも販売しているので、電子書籍として読みたい方は[こちら](https://tatsu-zine.com/books/rails-textbook)からぜひ。

#### やること
* [Rails Girls ガイド](http://railsgirls.jp)を利用してRailsアプリケーションを作成する
* [Railsの教科書](http://igarashikuniaki.net/rails_textbook/)を利用してRailsアプリケーションを作成する
* [ProgateのGitコース](https://prog-8.com/languages/git)
* [プロを目指す人のためのRuby入門](https://amzn.to/2L74amJ) でRubyを深掘り

#### 学ぶこと
* Ruby on Railsの基本的な仕組み
* Git

### 250-500h Ruby on Rails入門

ここでようやくRuby on Railsの入門に入ります。今まで積み上げてきた250h時間でWebの仕組み、Webアプリケーションの仕組みを理解していれば、ある程度はすんなり入れると思います。前工程をスキップしていきなりここに来るとかなり躓くと思うので250hくらいがちょうどいいかなと感じてます。Railsの世界に踏み込みましょう。

#### やること
* [Progate Railsコース](https://prog-8.com/languages/rails5), 2周, 2周目は写経
* [Ruby on Rails チュートリアル](https://railstutorial.jp) 2周

#### 学ぶこと
* Ruby on Railsの基本操作、仕組み
* 本格的なWebアプリケーション構築法
* MVCモデル

### 500-600h Ruby on Rails 中級

[現場で使える Ruby on Rails 5速習実践ガイド](https://amzn.to/2Lc8h1f), 俗に言う現場Railsを読んでRuby on Railsの仕組みの復習と実際の現場でどう使われているかのイメージをつけます。特に9章, 10章は実際に業務している人でもためになる内容なのでぜひ読んでみてください。

#### やること
* [現場で使える Ruby on Rails 5速習実践ガイド](https://amzn.to/2Lc8h1f)

#### 学ぶこと
* 実際の開発でのRails開発、Webアプリケーション開発をイメージできるようにする

### 600-800h Ruby on RailsでWebアプリケーションを自作する
ここまでで勉強した内容を使って自分が作りたいWebアプリケーションをRuby on Railsを使って作成します。目安としてDBのテーブル数10-20ぐらいをイメージするといいと思います。また作成したアプリケーションを[Heroku](https://jp.heroku.com/)にデプロイします。

#### やること
* Ruby on Railsを使ってWebアプリケーションを作成する
* [Heroku](https://jp.heroku.com/)にアプリケーションをデプロイする

#### 学ぶこと
* 実際の開発を通してアプリケーション開発をより理解する
* サービス開発設計
* Herokuでのデプロイを通して、アプリケーションの公開について理解する

### 800-1000h インターン or アルバイト
自作アプリを1から作って人に見せることができるレベルになれば最低限仕事にできるレベルになります。ただ実際の業務の進め方や人とコミュニケーションを取りながら作るスキルはまた別なので最低限の報酬をいただきながら学ばせてもらえる環境を見つけるといいです。

#### やること
* アルバイト or インターン

#### 学ぶこと
* 実際の業務の進め方
* 人とコミュニケーションを取りながら開発する方法

### 就職または自分のサービス開発 1000h-
早い人で800h、時間のかかる人で1500hくらいの幅はあると思いますが、ここまで来るとアプリケーション開発者としてのスタートラインに立てます。この当たりから就職活動を開始します。

以上が、未経験からエンジニアになるための約1年間のスケジュールです。これから学ぶかたはまずここを目指してがんばりましょう！

## その他の参考文献

### RubyとRailsの学習ガイド2019年版 - るびま

https://magazine.rubyist.net/articles/0059/0059-Ruby-Rails-Beginners-Guide.html

> RubyそしてRailsをこれから勉強したい方に、どんな技術を勉強すればいいかと、それらの技術全体のガイドマップを図示します。そしてそれを学ぶための資料（書籍、Web記事ほか）を紹介していきます。

こちらの記事にもRuby, Rails, Webアプリケーションを学ぶために必要な知識のガイドラインがあるので合わせて読むといいと思います。

### RubyとRailsの学習ガイド

[RubyとRailsの学習ガイド 2019 技術書典6 拡大版 - igaiga.rb - BOOTH](https://igaigarb.booth.pm/items/1312664)

> 本書はRubyist Magazineに掲載され、はてなブックマーク数1000を獲得した「RubyとRailsの学習ガイド2019年版」の加筆、改訂版です。地図は構成を見直して再設計、さらにRuby超入門のイラストレーターである べこさん の手による描き下ろしになっています。技術要素も増量し、それらを学ぶための資料や書籍の情報を加筆しています。そして、掲載以降の3ヶ月間で発売、改訂された書籍を加えるなど、最新の情報へ更新しています。

## 推奨環境

### OS - macOS
macOSはもともとUnixから派生したOSなので、Linux系のOSと似たファイル構造、コマンド、挙動などが多くあります。実際の業務でWebアプリケーションを作る時はLinux系のOSで作ることが多いので、シームレスに移行しやすいです。Windows OSも昨今だいぶ良くなってますが、macOS, Linux系のOSとの挙動の差分でいちいち躓くので初学者のうちはつまづきポイントを出来るだけ減らしたほうが継続しやすいとの思いでmacOSオススメしてます。[現場で使える Ruby on Rails 5速習実践ガイド](https://amzn.to/2Lc8h1f) にWindowsでRuby環境を整える方法が書いてあるので、Windowsの方はそちらを参照してください。

### エディタ - VSCode

[Visual Studio Code](https://code.visualstudio.com)が使いやすくてまずおすすめです。基本的なエディタ機能が十分扱えることとVSCode上でターミナル、Gitの操作、デバック等、開発のほとんどをVSCode上で操作することが出来ます。またプラグインが豊富でプラグインを入れることにより更に便利になります。


### Webブラウザ - Google Chrome
開発に必要な機能が一式入っていて、世の中の解説記事なんかもだいたいChromeで書いてるのでChromeで良いと思います。macOSでもWindowsでも使えますし。

### ターミナル - Terminal or iTerm2

macOSであれば、Terminal がmacOS標準のターミナルで、[iTerm2](https://www.iterm2.com)がターミナルに更に便利な機能を付け加えたアプリみたいな感じです、分割表示出来たりショートカットキーで呼び出せたりするので興味があれば。Terminalでもいいです。WindowsであればWSLを使えば良いです。

### DB - PostgreSQL
オープンソースで一般的に使われるRDBMSとして[PostgreSQL](https://www.postgresql.org)か[MySQL](https://www.mysql.com/jp/)がメジャーです。Railsを使う観点でいえばどちらでも問題なく使用できます。しかし、いくつかの理由からこれから学ぶ人に取ってはPostgreSQLがオススメです。

* 元々Railsがやや推奨している事
* [現場で使える Ruby on Rails 5速習実践ガイド](https://amzn.to/2Lc8h1f) にPostreSQLのインストール方法が記載されている事
* [Heroku](https://jp.heroku.com)を利用する際のデフォルトである事


## おわり

普段スクールや学生に教えている方法を共有することで他のこれから学習する方、これから人に教えようとしている方に参考になるのかなと思ってまとめてみました！参考になれば幸いです！

最後に宣伝😎

#### [CODEBASE プログラミング講座](https://www.protosolution.co.jp/codebase/program-school/index.html)
沖縄県宜野湾市にある[CODEBASE](https://www.protosolution.co.jp/codebase/)にてエンジニアになるためのプログラミングスクール、 [CODEBASE プログラミング講座](https://www.protosolution.co.jp/codebase/program-school/index.html)を開催しています。興味ある方はリンクを参照ください🙌

#### [ギークハウス沖縄](https://twitter.com/geeoki)
沖縄県沖縄市コザにあるシェアハウス、[ギークハウス沖縄](https://twitter.com/geeoki)ではプログラミングに興味のある住民を募集してます🏠

#### [Okinawa.rb](https://okinawarb.doorkeeper.jp)
沖縄のRubyコミュニティとして[Okinawa.rb](https://okinawarb.doorkeeper.jp)が定期開催されているので遊びにきてください💎

Twitterやってるのでよかったらフォローしてください🙋‍♀️ [@saboyutaka](https://twitter.com/saboyutaka)

この記事は[Okinawa.rb Advent Calendar 2018](https://qiita.com/advent-calendar/2018/okinawarb)の9日目の記事です。
昨日は [@fullkawa](https://qiita.com/fullkawa)さんの[プログラムにおける起承転結](https://qiita.com/fullkawa/items/67fec9a159b0f3de6e33)でした。
明日は [@kou-sy](https://qiita.com/kou-sy) さんの[「プロを目指す人のためのRuby入門」を6週間かけて写経して学んだこと](https://qiita.com/kou-sy/items/9de7ba50a8c98f696381)です。