自作PCにwsl2で開発環境を整える～Rails導入編～

# Abstract
[前回](https://qiita.com/SatoshiNonomura/items/80a1a606f0750f3dcd11)まででRubyとSQLを導入できたので、本番のRailsを入れます。

# インストール
## libpqを入れる
これがないとgem installができないようです。事件簿は後ろの方に書きます。

```sh
sudo apt install libpq-dev
```

## pgを入れる
```sh
gem install pg
```

## bundlerを入れる
```sh
gem install bundler
```
詳しい話は[この記事](https://qiita.com/pkrpkrhogehoge/items/f4842f769383dd8672ed)とかを読んでみるといいと思います。

## railsを入れる
```sh
gem install rails
```

## 確認
```sh
rails -v
```

# 事件簿
```sh
$ gem install bundler
$ gem install rails
```

よし、確認だ！

```sh
$ rails -v
```

ん？

```sh
Could not find minitest-5.14.4 in any of the sources
Run `bundle install` to install missing gems.
```

足りないものがあるらしいからbundle installしろと言われた。

```sh
bundle install
```
ん！？

```sh
Fetching gem metadata from https://rubygems.org/............
　　　（中略）
Installing sassc 2.4.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pg-1.2.3/ext
~/.anyenv/envs/rbenv/versions/3.0.0/bin/ruby -I ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/3.0.0 -r
./siteconf20210626-5286-artcg.rb extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=~/.anyenv/envs/rbenv/versions/3.0.0/bin/$(RUBY_BASE_NAME)
        --with-pg
        --without-pg
        --enable-windows-cross
        --disable-windows-cross
        --with-pg-config
        --without-pg-config
        --with-pg_config
        --without-pg_config
        --with-pg-dir
        --without-pg-dir
        --with-pg-include
        --without-pg-include=${pg-dir}/include
        --with-pg-lib
        --without-pg-lib=${pg-dir}/lib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/pg-1.2.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pg-1.2.3 for inspection.   
Results logged to
~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/pg-1.2.3/gem_make.out

An error occurred while installing pg (1.2.3), and Bundler cannot continue.
Make sure that `gem install pg -v '1.2.3' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  pg
```
どうやらpgとかいうのが入らなかったらしい。``Make sure that `gem install pg -v '1.2.3' --source 'https://rubygems.org/'` succeeds before bundling.``と言われたのでとりあえずやってみよう。

```sh
gem install pg -v '1.2.3' --source 'https://rubygems.org/'
```
が、当然にダメ。というか上の方で出てるエラーをちゃんと読むべきでしたね。

```sh
Building native extensions. This could take a while...
ERROR:  Error installing pg:
        ERROR: Failed to build gem native extension.

    current directory: ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pg-1.2.3/ext
~/.anyenv/envs/rbenv/versions/3.0.0/bin/ruby -I ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/3.0.0 -r ./siteconf20210626-9298-nglvhd.rb extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        　　　　（中略）
        --without-pg-lib=${pg-dir}/lib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/pg-1.2.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/pg-1.2.3 for inspection.   
Results logged to ~/.anyenv/envs/rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-linux/3.0.0/pg-1.2.3/gem_make.out
```
さっきと同じじゃん。
`Can't find the 'libpq-fe.h header`のあたりが気になったので調べてみたら、pg_configの場所を指定しろみたいな記事を見つけたのでやってみることに。

とりあえずconfigファイルを見つけたので実行。

```sh
gem install pg --with-pg-config=/lib/postgresql/13/bin/pg_config
```
すると......

```sh
ERROR:  While executing gem ... (OptionParser::InvalidOption)
    invalid option: --with-pg-config=/lib/postgresql/13/bin/pg_config
```
んー？invalidじゃねぇよ。

もう1つ書いてあった、bundleのconfigを変えてやってみる。

```sh
bundle config build.pg --with-pg-config=/lib/postgresql/13/bin/pg_config
bundle install
```

が、ダメ。最初と同じエラーが出ます。
もうちょっと調べてみると、「ARCHFLAGを指定してgemのインストール」みたいなのを見つけたので試してみる。

```sh
ARCHFLAGS="-arch x86_64" gem install pg
```

これでもダメ。
で、やはり`Can't find the 'libpq-fe.h header`が気になるのでもう少し調べてみると、PostgreSQL関連のライブラリがないって話を聞いた。

```sh
sudo apt install libpq-dev
```

```sh
gem install pg -v `0.18.4`
```

おや……？

```shell
Building native extensions. This could take a while...
Successfully installed pg-1.2.3
Parsing documentation for pg-1.2.3
Installing ri documentation for pg-1.2.3
Done installing documentation for pg after 0 seconds
1 gem installed
```

行けた～！！！

という感じです。PostgreSQLのライブラリはちゃんと入れておきましょう。

# バックナンバーと次回予告
[初回：WSL導入編](https://qiita.com/SatoshiNonomura/items/1b23107b2ab9c28b5f2a)
[前回：PostgreSQL導入編](https://qiita.com/SatoshiNonomura/items/80a1a606f0750f3dcd11)
[次回：node/mongo導入編](https://qiita.com/SatoshiNonomura/items/c57d95f2dc944d144c28)

# 参考
[[Rails] WindowsのWSL2(Ubuntu、VSCode)にRailsをローカルインストールしてgitコマンドでgithub(master)にpushする @Taka5689 ](https://qiita.com/Taka5689/items/7f209ffb46906cc86be6)
[WSLで作るRuby on Rails環境構築 〜VSCode Remoteを添えて〜 @Developer_KanZG ](https://qiita.com/Developer_KanZG/items/f329dd3dd197b2005390)
[Ruby on Rails - WSL2上で環境構築から簡単なアプリケーション開発まで @yut-nagase ](https://qiita.com/yut-nagase/items/2b340f3cf0d9345398fc)
[gemをインストールする @pkrpkrhogehoge ](https://qiita.com/pkrpkrhogehoge/items/f4842f769383dd8672ed)
[pgがインストールできない @shiroitsubakito ](https://qiita.com/shiroitsubakito/items/b35d2ccaecc3c91b89aa)
[gem install pgしてNo pg_configとなる対処法 @youcune ](https://qiita.com/youcune/items/5b783f7fde45d0fd4b35)
[pg_config... no →libpq-dev いれとけ](https://toriniku.hatenablog.com/entry/20111012/1318390958)
[Mavericks でgem install pgしてNo pg_configになるとき @satour ](https://qiita.com/satour/items/e142b7590eec1a649e8b)
[Mac/PostgreSQL gemのインストール @kawashinji ](https://qiita.com/kawashinji/items/947d38a2197443dcb825)
[【Tips】Ubuntuへのpg gemインストール時に発生しうるエラーへの対処 @GandT](https://qiita.com/GandT/items/7d3e40a36610db54bfc1)