Vagrantでの`$rails s`までの道のり


### 背景
---
[初心者でもかんたん！Ruby on Rails の開発環境の構築手順（Mac/Windows 両対応） \| 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト](https://www.sejuku.net/blog/39936)

これに従って仮想環境の構築をして、数ヶ月後に触り直した。

---

### そもそもVagrantの使い方忘れた、、、

#### vagrant立ち上げ
CentOSのディレクトリにいって
`$vagrant up`

#### vagrantに入る
`$vagrant ssh`


これで仮想環境に入ることができる。
#### vagrantから出る
`$vagrant halt`
というのが調べるとよく出てくるが、自分の場合は
`$exit`
で出ることができた。

---
### アプリ作成
Vagrantに入って、作りたい場所のディレクトリ上で
`$rails new ディレクトリ名`

`$cd ディレクトリ名`

そして、
`$rails server`
よし、サーバーが立ち上がった！
見てみよう、、、
あれ、なんかエラーが出ている、、、

### `$rails s`でのエラー
```
Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 'sqlite3'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
```

#### 解決方法
`Gemfile.lock`ファイルのsqliteのバージョンを`sqlite3(1.4.0)`から`sqlite3(1.3.13)`に変え、

`$bundle install`

これでうまくいった。

<参考サイト>
・[Ruby on Rails - "Add 'gem sqlite3'' to your Gemfile" - Stack Overflow](https://stackoverflow.com/questions/17350837/ruby-on-rails-add-gem-sqlite3-to-your-gemfile)

#### 解決するまでに困ったこと
Gemfile.lockを書き換えようとした時、あれ、Atomでどうやって仮想環境のファイルにアクセスして編集すればいいんだ！ってなった。

##### 解決方法
1.`$vagrant up`の後、`$vagrant ssh-config`で情報を得ておく。

``````
HOME:VirtualBoxTest test$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/test/VirtualBoxTest/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
``````


2.Atom側で、`remote-ftp`をインストール

3.インストール後、パッケージの欄に`Remote-FTP`というのが追加さえているはずのので、それの`Create SFTP config file`を選択。

4.ファイルが作成されて、そのファイルをさっきの情報をもとに編集する。

``````
{
    "protocol": "sftp",
    "host": "127.0.0.1",
    "port": 2222,
    "user": "vagrant",
    "pass": "",
    "remote": "/home/vagrant/",
    "agent": "",
    "privatekey": "/Users/test/VirtualBoxTest/.vagrant/machines/default/virtualbox/private_key",
    "passphrase": "",
    "hosthash": "",
    "ignorehost": true,
    "connTimeout": 10000,
    "keepalive": 10000,
    "keyboardInteractive": false
}
``````
5.これで`Remote-FTP`の`Connect`を押すと繋がる。

6.`success`とでるが、どうやって目的のディレクトリにいけばええねん！ってなったが、`Remote-FTP`の`Toggle`を押すと左のツリーに出てくる。


・[vagrantで立ち上げた仮想マシンのファイルをAtomで編集する - Qiita](https://qiita.com/To_BB/items/143b93419b0d5e2eaa1f)

・[Vagrantで立ち上げた仮想マシンの中にあるプロジェクトをAtomエディタで編集する方法 - 試練の軌跡](https://bake0937.hatenablog.com/entry/2017/02/28/012502)


### 仮想環境とローカル環境とのファイル共有方法
#### `Vagranfile`の内容を編集する

```
config.vm.synced_folder "home/vagrant/share", "/home/vagrant/share"
```
前半のパスがローカル、後半のパスがリモートである。
`/`がはじめに入るかどうかに注意！

書き換えたら、一度Vagrantから抜け出して、
`$vagrant halt`
`$vagrant up`
をすることで、変更が反映される。

#### 一方通行
この共有は、ローカルの内容を仮想環境に同期するだけであり、仮想環境で行った変更がローカルに反映されるわけではない。よって、そのことを意識していないと同期によって全てがぱあになってしまう可能性があるから注意！

#### shareディレクトリを作って画像を送る
仮想環境はなぜかAtom上からコピーやペースト、ドラッグ＆ドロップができなかった。しかし、画像を追加したい、となった時にこのファイル共有が役に立った。ローカルのshareディレクトリに画像を置くことで共有し、仮想環境に共有されたものをコマンドラインを使って移動させれば良い。
`$mv ファイル名 ディレクトリ名`
で移動は可能だ。
この時、階層構造によく注意しなければならない。
１つ上のディレクトリは
`..`
で表すことができる。


### 考察
今回はsqliteのバージョンを変えることでうまくいった。これは数ヶ月前のバージョンと同じにした。
なぜこれで解決したのかを考えると、railsのバージョンが現在の新しいsqliteに対応できなかったのではないかと思う。railsのバージョンは数ヶ月前にインストールしたものだが、sqliteは今回新しくインストールされたものだ。このバージョンの違いによって、このような事態が起きたのではないかとお思う。
バージョンの管理は大事だと実感した。
よくわからないエラーはバージョンによるものかもしれないことを意識に入れることが大切だと感じた。