見出し画像

【メモ】WSLでRailsを扱えるようにする+おまけ

はじめに

なんかだいぶ前に下書きだけして眠っていたメモです。
そのままにしておくのも勿体ない気がしたので、色々思い出しながら補完して記事にしてみました。
つまり何が言いたいかというと、だいぶあやふやな記事なのであんまり参考にしないでください()。

また、下書き作成時の都合上、WSLはWSL1を、Ubuntuは18.04.2 LTSのバージョンを利用しているという前提となっています。
WSL2もつい最近正式にリリースされ、Ubuntuも20.04 LTSが登場したので頃合いを見てアップグレードしたいですね。WSL2はWSL1の純粋な上位互換というわけではないそうなので、もうちょっと詳しく調べてみないといけませんが。

WSLの準備

まず最初にWSLをインストールしましょう。
WSL、Windows Subsystem for Linuxはその名の通り、Windows環境上にLinuxディストリビューションを導入し、それを動かすことが出来る機能です。
なぜWSLを利用するかですが、RubyやRailsを管理・動作させる環境を直接Windows上に構築するのは結構ハードルが高いです。Macと違ってgemの依存性がうまく解決できなかったりするので行き詰まることもしばしば。
なのでWSLを使ってWindowsの上にLinuxディストリビューションを置き、その上でRailsを動かそうということですね。

というわけでWSLのセッティングを行います。といってもWSLの機能を有効化するコマンドをPowerShellで打つだけですが。詳しくは公式のドキュメントを参照していただければ。
WSLの機能が有効化されたら、Windows Storeにアクセスしましょう。「linux」とかで検索すると、UbuntuやFedoraといったlinuxディストリビューションの名前が見えると思います。これらをポチッと押してインストールしてやればOK。
今回はUbuntuを利用します。

なお、Ubuntuはバージョンが書かれているものとバージョンが書かれていないものがStoreに並んでいます。バージョンの書かれていないUbuntuは原則最新版のUbuntuがインストールされるようです。(2020/06/07現在だと20.04 LTS)
ここで注意したいのが、利用するWSLとUbuntuのバージョンの組み合わせによってはバグが生じる可能性があるというものです。
こちらの記事で、WSL1にUbuntu 20.04 LTSを導入した際に発生するバグについてご紹介されています。

こういった情報も参考にしつつ、適切なバージョンのディストリビューションをインストールしましょう。

各種パッケージのインストール

Ubuntuを起動してユーザー設定など済ませた後、Railsの環境構築周りで入り用となる各種パッケージをインストールします。
Rubyのインストールにはrbenvを利用するつもりなので、それに必要なパッケージや、あったら便利そうなパッケージも前もってインストールしておきましょう(抜け漏れがあったらすみません)。
rbenvで使われているruby-buildの動作に必要なパッケージはwikiにも記載されているので、ご参考までに。

sudo apt update    //インストール可能なパッケージリストの更新
sudo apt upgrade   //インストールされている各種パッケージの更新

sudo apt install -y gcc git curl g++ make autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev sqlite3 libsqlite3-dev

これでgitやコンパイラの準備が出来ました。
とりあえずDBはsqliteでいいかと思って入れてます。pgやmysqlを入れてもいいですが、今回はまあ導入テストということなので、一番設定が簡便なsqliteで。その他、Node.jsを入れたい人とかもいるかと思いますが、その辺はお好みでどうぞ。

ちなみにUbuntuのパッケージインストールのあれそれを調べてると、記事によってはapt-getコマンドだったりaptコマンドだったりで、インストールに使うコマンドが異なっていたりしますが、aptコマンドのほうがパッケージ管理のコマンドとして新しいものだそうで、基本的にはこちらの利用が推奨されているそうです。(参考にさせていただいた記事はこちら

rbenvインストール

ではまずrbenvを入れていきましょう。
もしインストールに必要なパッケージが足りてないエラーが表示されたら、随時指定されたパッケージを追加でインストールしてください。

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

source ~/.bash_profile
rbenv --version  //rbenvコマンドが有効になってるか確認

Rubyインストール

rbenvの動作が確認できたら、Rubyをインストールしていきます。
ついでなので、ここでgemを管理するbundlerも入れておきましょう。

rbenv install --list  //インストール可能なバージョン一覧を確認
rbenv install 2.6.3   //バージョンを指定してインストール
rbenv versions        //インストールされているRubyのバージョン一覧を確認
rbenv global 2.6.3    //グローバル環境で利用するRubyのバージョンを指定

gem install bundler   //bundlerインストール

Railsインストール

それではRubyの準備も整ったので、Railsをインストールしましょう。
ここで注意したいことは、Railsのアプリケーションの配置先をWindows環境から参照できるところに配置するということです。
Windows環境側からWSLに構築したRailsアプリを参照することが出来ないと、VSCodeのようなWindows側で利用するテキストエディタでRailsのソースコードを開けず、色々と面倒なので。

Windows管理下の領域にプロジェクトを作成するには『/mnt/』以下にCドライブやDドライブがマウントされているので、任意の箇所にディレクトリを作成しましょう。
その先でGemfileを作成してRailsをインストールし、動作が確認できればOKです。なお、記事の冒頭らへんでも述べたように、gemのインストール先がWindows環境下だと問題が起こりやすいので、各ライブラリのインストール先はLinux環境下に行うようにしてください。
railsのgemそのものもbundlerの管理下に置いてインストールするなら、以下のような操作になるでしょうか。

cd /mnt/c                  //例として、Cドライブ直下に作ってみる
mkdir rails_install_test   //ディレクトリ作成
cd rails_install_test      //作成したディレクトリに移動
bundle init                //Gemfile作成。その後『gem "rails"』を有効にする
bundle install --path ~/tmp/rails_install_test/vendor/bundle  //Railsをローカルインストールするためのみのbundler環境を構築。Railsのプロジェクト作成後は削除しても良い
bundle exec rails new rails_project_test  //ローカルインストールしたRailsを使ってRailsプロジェクトを作成

cd rails_project_test  //作成したRailsプロジェクトに移動
bundle install --path ~/tmp/rails_project_test/vendor/bundle  //Railsプロジェクトで利用するbundler環境を構築
bundle exec rails c    //railsコマンドの動作確認

実際には、Cドライブ直下にディレクトリを作るよりは各ユーザーの権限以下の領域にディレクトリを作ったほうが見通しが良くなりそうな気がしますね。「/mnt/c/Users/ユーザー名/ubuntu」とか。
あとこれは完全に余談なんですが、bundle installにpathを指定するべきか否かというトピックでこちらの記事が大変興味深かったので、ぜひ一読されてみると良いかと。自分は今回の記事では明示的にpathを指定してます。
ともあれ、これでRailsがインストールできました!お疲れさまでした!

おまけ

先程ちょろっとだけVSCodeの名前を出しましたが、VSCodeはエディタ内でターミナルを展開できるという機能を有しています(VSCodeに限った機能でもなかった気はしますが)。
詳しくはこちらの公式ドキュメントを参照していただければ。
こちらのターミナルでWSLのシェルを指定しておくと、何かRailsコマンド等を打ち込む必要があったときにubuntuを別途立ち上げる必要がなく、VSCode上だけで操作が完結するので煩雑さを減らすことが出来ます。

設定方法はいたって単純で、設定画面でsettings.jsonのファイルを開き、以下のようなコードを記述してやればよいです。

{
  "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\bash.exe"
}

ただしこれはWSLのログインシェルをbashに指定している場合の設定で、これをzshなどに変更していると上手く動きません。
その場合は以下のように、bash.exeをwsl.exeに置き換えるとOKです。

{
  "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe"
}

ちなみにWSLのログインシェルをzshに変更したい場合は、こちらの記事こちらの記事が参考になるかと思います。

その他参考リンク

https://qiita.com/stkdev/items/96f507f46276c4e782c0


この記事が気に入ったらサポートをしてみませんか?