VM（vagrant）のお話とリアル（現実）環境のお話

以前、直接ホストosから開発をしていたのですが、最近VMを使用して開発するようになったので開発環境のお話をしたいと思います。
（追記　前のカレンダー見てたら全く同じこと書いていたのでやっちまったなー...と。すみません）

## Virtual Machineの良い理由
### VMとしての強みがある
VM(Virtual Machine)はホストOSに影響を与えることが少なく、安全にそして大胆にOSを動かすことができるので万が一OSを破壊したとしても、「BIOS起動して、ディスク入れてインストールに何時間！」ということがなくなります。また、簡単に削除することも可能なので、プロジェクトごとにVMを建てていらなくなったらまとめて削除することもできるし、あくまで仮想環境という程なのでそこにあるデータをまとめてコピーしたり、誰かに渡すということもできます。グループ開発で開発環境を揃える時も仮想環境をシェアしてしまえば同じ環境で開発することが可能です。[^2]

### 本環境との干渉を考えなくても良い
例えばpythonで他のバージョンを使う時などに普通なら干渉しますが、VMなので干渉することがありません。Virtualenvのようなものが提供されてない場合でも本命のバージョンと干渉することがないのでおすすめです。
他にも理由はいろいろありますが僕が使っている理由はこんな感じです。

## 環境構築の仕方
[Virtual Box](https://www.virtualbox.org/)を導入する

ディレクトリを作成し、作成したディレクトリでvagrant initを使う

```:terminal
$makdir test
$cd test
$vagrant init
```

[Vagrant Cloud](https://app.vagrantup.com/boxes/search)というサイトで使いたいOSを指定する（今回はubuntuを選択しましたが、他のでもやり方は変わりません。）

![Screen Shot 2020-12-09 at 17.27.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534096/da85b3a8-4fec-d3f3-d1d2-0b7c265890e2.png)

![Screen Shot 2020-12-09 at 17.27.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534096/397374d4-a7fe-8608-020d-ff2186c3e4a0.png)

vagrant initをするとvagrantfileという設定ファイル（これからも設定するときはこのファイルを使います）が生成されるので該当箇所のコメントを外すか、新しく記入すること

![Screen Shot 2020-12-09 at 17.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534096/c436cc61-dc90-8616-3c04-2e2947dd5324.png)

(コメントアウトされているところは消しても消さなくてもokだけどvagrantでできることがたくさん載ってるのでコメントアウトは一回読んでみて）

```:vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
end
```

vagrant upというコマンドをvagrantfileが存在するディレクトリで

```:terminal
vagrant up
```

をすれば勝手にOSをインストールしてくれます。
これで環境構築は完了です！

## 作成した仮想環境に接続したい
vagrantがあるディレクトリでvagrant sshを叩くと接続されます。もしパソコンを再起動している場合は `vagrant up`をしてから叩きましょう。

```:terminal
vagrant ssh
```
もしくは[vscodeのRemote Development](https://qiita.com/ozbannot/items/df1c5ab98d676cb34b78)[^1]を使用して、接続することもできます（自分はそうしています。）

## スペックを上げたい
ちょっと長く使うと動作が遅くなってしまう時があります。それってもしかして、メモリやcpuが足りてないのでしょうか？メモリの増やしかたは

```
config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
end
```
で可能です。cpuは

```
config.vm.provider "virtualbox" do |vb|
    vb.cpu = "1"
end
```
で可能です。

## ファイルを共有させたい
```
config.vm.synced_folder "pathを指定（host側）", "pathを指定（vagrant側）"
```
で共有可能です。

## リアル環境のお話
### パソコン
Mac book proの2016年モデルを使用しています。16gbで早いはずなんだけどすんごい遅くて、vagrant起動させただけでファンが結構うるさいのが難点。新しいパソコンを買おうかすごい迷ってるけど財力がないことに気づく。
あとMac osがちょっと良くない。
あとタイプc限定なのがなかなかにめんどくさくて、usbとかディスプレイ使う時はハブを使っているんだけど接触が悪すぎてまともに作業できない時があるのでハブを変えようか迷ってる。


### キーボード
[HHKB](https://www.pfu.fujitsu.com/direct/hhkb/detail_pd-kb800bns.html)を買ったんですけどペチペチとしたmacのバタフライキーボードよりスコスコしているキースイッチでとても良いです。ただ正直このキーボードは癖が強いキーボードなので持っている人に貸してもらったりして購入を検討するのが良いと思われます。

### マウス
[ロジクールのG304](https://gaming.logicool.co.jp/ja-jp/products/gaming-mice/g304-lightspeed-wireless-gaming-mouse.910-005287.html)を使ってます。軽いし、サイドボタン2個もついているし感度も細かく調整できるし、いちいち充電しなくても電池で交換できて（めんどくさがりのGoriraにとっては本当にここ大事）とても良いです。ただ無線レシーバーの距離が意外と短い....

### 開発スタイル
vagrant起動させて、いっつもfirefoxとvscode(sshでvagrantに接続してる)で作業してます。pythonをよく使っているのでanacondaを入れてライブラリがたくさん使えるようにしてます。あとapple musicに加入しているので音楽を聴きながらやることもあります。最近の流行りは

- The Beatles
- backstreet boys
- spitz
- Wham!
- NiziU
- Twice

ですね....特にBeatlesとspitzとbackstreet boysはどの曲も良い気がする。
Whamはlast chrismasの再生数がめちゃ多い

[^1]: ちなみにbash以外のシェルを標準シェルとして使用するとタイムアウトして接続できない？っぽいので気をつけて

[^2]: https://qiita.com/pyonpyoko/items/d5e97934940f2894ff4c