【初心者向け】これからRailsエンジニアとして成長したい人がすべきこと

# はじめに
プログラミング初心者でRuby, Railsを始めて1か月〜半年ぐらいの人でこれからエンジニアとして成長したい人を対象に書いています。

# そもそも未経験

独学で失敗したという人は多いと思います。諦めずにプログラミング教室に通いましょう。今では1か月、2か月通えば1人で勉強できるレベルまでの必要な最低限の知識を身につけることができます。
プログラミングを上達させるためには必ずわからないことを聞ける先生が必要です。

[Progate](https://prog-8.com/)で基礎を学習するのもおすすめです。

# 始めて1か月〜半年の人

独学やプログラミングスクールで勉強してHTML・CSS・Ruby・Rails etc..の基礎を体系的に学び終わる頃だと思います（目安100〜200時間）。
そして、そろそろRailsエンジニアとして仕事をしてみたいと思ってくると思いますが、ここで注意があります。
それは、

**企業によって求めているエンジニア力が違う**

ということです。完全に未経験でも受け入れてくれる企業もあれば、ある程度の力を求められる企業もあります。ただほとんどの企業は未経験ではなくある程度力のある人（基礎基本が身についている人）を採用したいと思っていると思います。
では、そのある程度力のある人になるためには何をすればいいのかあげていきます。

## 改めてRuby, Railsを勉強し直す
Progateなどの無料学習サービスや１か月・2か月のプログラミングスクールで身につけた知識はあくまで、これからエンジニアとしてやっていくために一人で進んでいける力（エラーなど自分で調べて解決できる力）を身につけたにすぎません。また、挫折させないことを目標に作られているため、どうしても実際の開発で必要な知識が足りないことが多いです。
ここでもう一度足りない知識を補うためにRuby, Railsを学習し直しましょう。
### 1-1. Railsガイド or Railsチュートリアルを読む
1-1（Railsガイド or Railsチュートリアルを読む）もしくは1-2（1冊本を買ってやる）をやりましょう。プログラミングを全くやったことない人が読むものではないと思いますが、1か月ないし2か月勉強した後であれば理解できるようになっていると思います。わからない単語を調べつつ最後まで読みましょう。またRubyのドキュメントも読みましょう。

[Railsガイド](http://railsguides.jp/)
[Railsチュートリアル](http://railstutorial.jp/)
[Rubyドキュメント](https://www.ruby-lang.org/ja/documentation/)

### 1-2. 1冊本を買ってやる
1-1と同様で1か月2か月勉強した後であればある程度理解できると思います。こちらもオススメです。

[Ruby on Rails 4アプリケーションプログラミング](http://www.amazon.co.jp/Ruby-Rails-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4774164100/ref=sr_1_1?ie=UTF8&qid=1458486477&sr=8-1&keywords=ruby+on+rails+4)

[Ruby on Rails 5アプリケーションプログラミング](https://www.amazon.co.jp/Ruby-Rails-5%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4774188832)

### 2. RSpecの勉強をする
エンジニアとして働くと「テスト書いて」とよく言われます。その時にRspecの知識はなくてはならないので学びましょう。
以下のリンクが大変参考になるので読みましょう。

[使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」](http://qiita.com/jnchito/items/42193d066bd61c740612)
[使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」](http://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
[使えるRSpec入門・その3「ゼロからわかるモック（mock）を使ったテストの書き方」](http://qiita.com/jnchito/items/640f17e124ab263a54dd)
[使えるRSpec入門・その4「どんなブラウザ操作も自由自在！逆引きCapybara大辞典」](http://qiita.com/jnchito/items/607f956263c38a5fec24)


### 3. APIを作れるようにする
Railsで作れるアプリはフルスタックでアプリケーションを構築するときだけではなくて、クライアントサイドで動くJavaScriptアプリケーションとかネイティブアプリケーションを構築する時にも使えます。「API書いて」と言われて書けないと困るのでこれもできれば勉強しましょう。
ただこれに関しては働いてからでもいいと思うので+αで取り組みましょう。

## JavaScript・jQuery・CoffeeScriptを勉強する
~~Railsを使う人はCoffeeScriptを使うことが多いと思いますが、もちろんCoffeeScriptを使うためにJSやjQueryも理解しなければならないのでネットで調べながら勉強していくといいと思います。~~

最近はCoffeeScriptは見なくなりました。JavaScript・jQueryをやりながら、Vue.jsやReactの勉強まで手をつけられるといいと思います。

## Gitを勉強する
ソースコードをGithub上で管理する企業は多いと思います。これからチーム開発をしていく上でGit・Githubが使いこなせないと仕事にならないのでこれはマストですね。

[サルでも分かるGit入門](http://www.backlog.jp/git-guide/)

## リーダブルコードを読む
これも重要です。
この本はいいコードを書くためのノウハウが詰まっています。チームで開発をしていく上で読みやすいコードを書くことは大事です。
僕はこれがしっかりと身についていなく、毎回英語の命名などで指摘を受けることが多いので再度読み直します笑

[リーダブルコード](http://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Dustin-Boswell/dp/4873115655)

## 最後に１つ自分でアプリケーションを作る
これまで学んだことを生かして１つ自分でアプリケーションを作ってみましょう。
エンジニアとして働きたい場合はこんなもの作りましたとアピールできるものがあるといいのでソースコードはgithub上で公開しておくのがいいと思います。herokuやAWSへのデプロイも挑戦しましょう。

上のことを踏まえた上でここまで出来ればエンジニアとして基礎基本の技術は身につけられたと思います。

あとはどれだけコードを書いてきたかという経験がものをいうと思うので自分にあった企業を探してコミットしましょう。


# すでに企業で働いている人
初心者ですでにエンジニアとして企業で働いている人は経験を積むチャンスだと思うのでどんどんコードをレビューしてもらいましょう。
はじめは、コードの量が多くてコードを追うだけでも大変だと思いますが、負けずにやっていくことが大切です。その際に気をつけることを以下にまとめました。


## コードの書き方に気をつける
基礎基本を身につけエンジニアの卵として働けるようになって、とりあえず振られたタスクに対して自分なりにコードを書くことができるようになっていると思います。ただなんとなく読みにくいコードになってしまったり、「この記述はよくないね」と指摘されることがあるかと思います。経験がものをいう部分だと思いますが１回言われたことを２度繰り返さないために意識しましょう。

### 1. 直感的にわかりやすいコードを書く


例えば以下のコード

```ruby:
unless user_signed_in? && user.admin?
  puts "見れないよ"
else
  puts "見れるよ"
end
```
上の例のように unlessに`&&` や`else`が入ってくると直感的にわかりにくいのでやめましょう。素直にifを使うべきです。

unlessを使う場面は後置unless文で１行で完結するなどが多いです。

**追記**

```ruby:
unless user_signed_in? && user.admin?
  puts "見れないよ"
end
```
このような記述はifではなくていいと指摘していただきました。
`&&`があっても確かにifで書くよりわかりやすいですね。
時と場合による部分が多いとは思いますが、うまく使いこなしましょう。

この手の話は他の記事によくまとまっているので１度読みましょう。

[[初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか](http://qiita.com/jnchito/items/dedb3b889ab226933ccf)


### 2. 変数名や関数名などの命名に気をつける

これはセンスの部分も少しはあると思います（僕自身毎回注意される）が、前述のリーダブルコードをしっかり読みましょう。
直感的でわかりやすい単語を選ぶ必要があります。


### 3. 使うメソッドはちゃんと理解する

例えば「そこに書いてある○○○ってメソッド使って○○○機能作って」と言われたとします。
この時に○○○メソッドをしっかり追わずにメソッドに引数だけ渡して実装するのは危険です。
そのメソッドはコードが長くて読むのが大変かもしれませんが、自分が使ったメソッドの説明はきちんとできるようにしましょう。



## どんな問題を解決するためにコードを書いているのか考える

どんな問題を解決するためにコードを書いているのか考えれば、解決策として頼まれた要件通り実装するより良い方法を自分で考えて見つけることができるかもしれません。
ユーザー目線に立って日頃から考える習慣が大切です。


## 他の企業のエンジニアと交流する

１つの企業だけで働いていると「今のエンジニアとしての自分の立ち位置」が企業内でしか分からなくなってしまいます。
同い年でも自分より圧倒的に成長している人や魅力的な人がいます。そういう人たちと交流して、新しい発見や刺激を受けましょう。


## 最新の技術に敏感になる
エンジニアとして働く以上時代の波についていかないといけません。日々インターネットの世界は進歩しています。RailsもRails5が出ますしそう言った最新の技術を追いかけていきましょう。


# まとめ
やることがたくさんあります笑

僕自身エンジニアとして働く前にやっておけばよかったなと後悔していることや最近やっててよかったと思うことをつらつらと書いていきました。何かの参考になればと思います。