PCスタートアップガイド

# 目的
初心者エンジニアとしてPCをセットアップする時に必要になりそうなことをまとめます。
目指すは、Ruby on Railsでの開発環境がセットアップできることです。

# 環境
- macOS High Sierra
    - rubyは標準搭載されています。
- Xcodeは最初にインストールしておいてください
- エディターはatomを利用します。

# 目次
- Homebrew
- rbenv
- gem
- mysql
- atom
- git
- redis


##Homebrew
Homebrewはパッケージマネージャーです。
これは、Appleが用意してくれていないけど、開発するのに必要になるものを簡単にインストールしたり、
バージョンを管理したりすることができるものとなります。

`/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
`
[公式サイト](https://brew.sh/index_ja)で必ず実行するスクリプトは確認してください。

`/usr/local/`配下に個別にインストールしたパッケージにアクセスしやすいシンボリックリンクを集めてくれます。

## rbenv
rubyのバージョン管理をしてくれる[rbenv](https://github.com/rbenv/rbenv)。
標準搭載されているrubyよりも先に読み込む必要があるため、
インストールした後にPATHを通すことを忘れないように。

`brew install rbenv`
このインストールで、他のrubyバージョンをCUIでインストールできる`ruby-build`も同時にインストールされる。

`echo $PATH`でパスを確認可能。

```
$ vim ~/.bash_profile
eval "$(rbenv init -)"
$ source ~/.bash_profile
```

これでパスはしっかり通って、デフォルトのrubyではなく、rbenvで設定したrubyのバージョンが利用できるようになる。

例として、デフォルトのシステムバージョンが2.3.7だったが、2.4.0のバージョンをプロジェクトで使いたい場合。

```
cd プロジェクト
ruby -v <-- このタイミングでは2.3.7
rbenv install 2.4.0
rbenv local 2.4.0
ruby -v <-- このタイミングでは2.4.0
```

うまくいかなかったら、ターミナルを再起動するとか調べるとかしてみてください。

`rbenv install -l`でインストールできるバージョンは確認できます。

##gem
`gem install bundler`
デフォルトでインストールされていないので、グローバルにインストールしてください。
[Bundler](https://bundler.io/)は、Gemをバージョンやプロジェクトごとにインストールするために有用です。

[参考](https://qiita.com/hisonl/items/162f70e612e8e96dba50)

これさえグローバルにインストールしておけば、
あとはプロジェクトごとに必要なgemファイルはプロジェクト配下にインストール可能です。

`bundle install --path=vendor/bundle`

なお、僕は結構このオプションつけ忘れてしまうことが多いので、
globalのbundle設定ファイルに直接書き込んでます。

`bundle config path vendor/bundle`

また、下記のも追加しておくとbundle installを並列処理してくれるので便利です。
`bundle config jobs 4`

## mysql
おそらく、開発者でこれまで一度もMySQLをいじる機会がなかったという人は珍しいかと思いますので、
mysqlも導入ガイドに入れてしまいます。

```
brew install mysql
mysql.server start
mysql_secure_installation
```

ただ、これ以上の設定に関しては必要に応じてやればいいと思います。
あくまでローカルマシーンの開発環境ですのでそこまでガチガチにする必要はないと思ってます。

## atom
[公式サイト](https://atom.io/)からインストールしてください。

個人的にはターミナルからatomを起動することが多いので起動できるようにします。

Atomを起動して、`Install Shell Commands`を選択するだけで利用できるようになります。

ついでに、atomの環境構築もして行きます。

僕が入れてるパッケージリストです。よかったら参考にしてみてください。

```
- minimap
- merge-conflicts
- atom-beautify
- highlight-selected
- highlight-column
- git-plus
```

## git
コードの管理などにはgithubを利用したりすることが多いので、
この設定もやってしまいます。

やりたいことは下記。

- 現在の設定を確認して簡単な設定をする。
- githubにSSH接続したい。

### 現在の設定を確認して簡単な設定をする。
`git config --list` で全ての設定が閲覧可能です。

僕の場合は、購入後直後で設定を何もしていないのですが、
`credential.helper=osxkeychain`
というものが設定されていました。

これ、macOSで標準から用意されている、パスワードはmacOSへのログインと同じものを利用しますよというものらしいです。

通常は、下記のようにそれぞれの階層の設定を確認可能です。

```
git config --system --list
git config --global --list
git config --local --list
```

とはいえ、おそらく最初はどのコマンドもエラーになると思います。
作成もしていないので**ファイルが存在していないから**です。

| 階層 | PATH |
|:-:|:-:|
| system  | /etc/gitconfig  |
| global  | ~/.gitconfig  |
| local  | 対象プロジェクト/.git/config  |

上記のように各ファイルを用意してあげてその中に設定を書けばいいみたいです。

それでは、よく使う基本的なものだけを設定していきます。

```
git config --global user.name "hogehoge"
git config --global user.email "hogehoge"
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
```

### githubにSSH接続したい。
次に、SSHキーの設定をしていきますが、
そもそも新しいPCで鍵が存在していないのでその設定をします。

`ssh-keygen`とコマンドを打つと、勝手に鍵を作成してくれます。
全部Enterでいいと思います。

ちなみに、蛇足ですが`ssh-keygen`ではデフォルトで2048bitの鍵を生成しますが、オプションをつけることでそれ以上のバイト数の鍵を生成可能です。
2048bit RSA鍵で2030年まで戦えるらしいのでとりあえずはデフォルトでも問題ないと思いますが、意識高い方は下記のように生成して見てもいいかも。

`ssh-keygen -t rsa -b 4096`

これで秘密キーと公開キーの両方が生成されますので、
あとは公開キーの中身をGithubに設定して完了です。

## [redis](http://try.redis.io/)
いわゆるKVS（Key Value Store）と呼ばれる、ディスク（ストレージ）上ではなくメモリ上にデータをストックしておくことでデータのやり取りを高速にできるものです。
RedisはKVSの中でも、データの永続性や型のサポートなどの特徴があり、他のKVSと比較してもアプリケーション開発と非常に親和性が高いものらしいです。

使い方は簡単で、brewでインストールしてあとは起動するだけ。

```
brew install redis
redis-server /usr/local/etc/redis.conf
```

brewインストールで同時にクライアントも導入されるため、
redisサーバーを起動した後に`redis-cli`でアクセス可能です。

Railsからredisを使って行く場合は、
もれなくsidekiqというgemを使うケースが多いと思いますので、使う方は是非調べて見てください。僕も勉強中です。


# その他
僕が普段開発をする中でこれ便利だわーってやつをまとめてます。

- tig
    - [【Tig全まとめ】Gitを自由自在に操るための必殺ツール
](https://qiita.com/kenju/items/13313429df707fecfadf)