
みなさん、こんにちは。
何回か前のコラムで、「Bash on Ubuntu on WindowsでRailsを動かしてみよう」という記事を書きました。Bash on Ubuntu on Windowsを使うには、Windows Insider Programに登録してWindows Insiderビルドを入れなければいけないので、もちろん私もこれを適用していたわけですが、ある時のアップデートから、マシンが極端に不安定になってしまい、10分も使うとブルースクリーン(Insiderビルドの場合は緑の画面になるのでグリーンスクリーンでしょうか笑)で再起動する状態になってしまいました。
前回の記事でも、自分で「Windows Insiderビルド(言葉の響きはカッコいいですが、いわゆる開発者向けの早期提供版、ベータ版的なものです)をインストールしなければいけないため、正式版ではないことによる不具合がもし何かあったとしても、その対応がやや面倒になる可能性があります。安定性が求められるような環境にはWindows Insiderビルドはやや入れにくいかもしれません。」と書いていたわけですが、まさにミイラ取りがミイラといいますかなんといいますか・・・。そんなわけで、Windows Insiderビルドはいったん中止して、クリーンインストールで通常のビルドに戻しました(実はこの前にも一度再インストールをしていたため、Microsoft Officeのライセンス認証回数が上限になって、電話認証をさせられる羽目になりました・・・)。
そんなわけで、Railsを使うための別の環境を用意しなければなりません。もちろん、Indiderビルドでなくても、Bash on Ubuntu on Windowsを使うこともできるのですが、せっかくですから、他の方法を試してみたいと思います。
これまた、その回の記事で自分自身が「最近では、Dockerなどのいわゆるコンテナ型といわれる軽量な仮想環境も登場してきていますが、お手軽性という意味ではまだやや敷居が高い印象があります(私がよく知らないだけと言われればそれまでなのですが・・・)。」などと書いているわけですが、ここはひとつ情報提供の意味も含めて、DockerでRails環境の構築に挑戦してみましょう。
Dockerはいわゆる「コンテナ型」の仮想化環境を提供するソフトウェアです。ホスト型(VirtualBoxなど)やハイパーバイザー型(ESXi、Hyper-V、Xenなど)と比較して、動作環境が軽量、ポータビリティーが高いことが特徴となっています。ただ、少し前までは、Docker自体がLinuxでしか動作しなかったため、WindowsでDockerを動作させようとすると、Windows上にVirtualBoxをインストールしてLinuxを動作させて、その上でDockerを動作させて、その上でコンテナを動作するという構造になってしまうので、正直なところDockerの動作の軽量性の恩恵を受けるにはやや微妙な状況がありました。
現在は、Windows 10 ProでHyper-Vが利用できる環境であれば、Docker for WindowsというVirtualBoxを必要としない環境も提供されているので、Windows 10 Proを使っている方は、Docker for Windowsをインストールしてみてください。また、Windows 10 Homeの方でも、Docker ToolboxというVitrualBoxやKitematicというGUIツール含めた環境一式をインストールしてくれるソフトウェアスイートもありますので、ご安心ください。
ここでは、Docker自体のインストール方法は割愛させていただきますが、DockerとKitematicがインストールされているという前提で、Railsの実行環境を作ってみたいと思います。
Kitematicを起動すると以下のような画面になります。
Dockerでは、あらかじめいろいろな用途別にセットアップされたコンテナイメージをDocker Storeというリポジトリで公開しています。たとえば、Kitematicの検索窓から、「ruby」と入力するといろいろなコンテナがリストアップされるのがわかりますが、何かと癖のある部分も多そうなので、ここは素直にまっさらに近いCentOSのコンテナからRubyとRailsをインストールしてみましょう。
また、せっかく仮想環境を利用するので、コンテナ側とホストOS(ここではWindowsです)の間で、ファイルを共有できるようにしてみます。そうすると、実行はコンテナ上で、編集はWindows上で、と使い分けることができます。
Docker Storeでは、その名もずばりcentosという名称のコンテナがCentOSの公式コンテナとして登録されていますので、これを使いましょう。
その前に、Kitematicの設定ボタンをクリックし、デフォルトのシェルをshからbashに変更しておいてください。
↑設定ボタンをクリック
↑シェルの設定をbashに変更
次に、Kitematicの「DOCKER CLI」ボタンをクリックして、コマンドラインを起動します。
↑DOCKER CLIボタンをクリック
表示されたコンソール(Windows PowerShell)で、以下のようにコマンドを入力します。
docker run -it –name myruby1 -v /c/docker/myruby:/opt/myruby -p 3000:3000 centos:latest
このコマンドによって、主に以下の設定が実行されます。
・コンテナ名(このマシン内での識別名)は myruby1
・ホストOSのC:\docker\myrubyというフォルダと、コンテナ側の/opt/myrubyというフォルダを共有(同期)する
・リポジトリから、centos:latestという名称のコンテナを(ローカルに存在しなければ)ダウンロードして配置する
・ポート3000をWindows側から透過的にコンテナ上のポート3000としてアクセスできるようにする
コンテナのセットアップが完了しますと、そのままCentOSのシェルが起動します。
あとは、rbenvなどを使って、Rubyをインストールし、そのうえでRailsをインストールします。
CentOSへのrbenvのインストール手順は、
CentOS 7.3にRuby 2.4.1をインストールする
https://qiita.com/micheleno13/items/c0f8160b0deb2984677f
などを参考にしていただくとよいでしょう。ただし、今回セットアップしたコンテナのCentOSは上記記事とツールのインストール状況が異なるため、yumコマンドを以下のように実行しておいてください。
yum install -y bzip2 git sudo openssl-devel readline-devel zlib-devel gcc gcc-c++ make sqlite-devel
また、初期状態では一般ユーザがこのコンテナにいないので、一般ユーザの作成とsudoの有効化を行い、一般ユーザにsuしてから作業を始めるとよいでしょう。
ユーザtaroを新規に追加します。
adduser taro
ユーザtaroにパスワードを設定します(パスワードは任意のもので結構です)。
passwd taro
sudoを有効にするため、ユーザtaroをwheelグループに追加します。
gpasswd -a taro wheel
suコマンドでユーザtaroとしてログインします。
su – taro
あとは、上記記事の通りにインストールを進めていただき、Railsのインストールは、おなじみの
gem install rails
で行います。
Railsがインストールされましたら、Windowsと共有している/opt/myrubyフォルダに移動し、以下コマンドでRailsのアプリケーションを作成してみます。
cd /opt/myruby
rails new TestRails514
アプリケーションが作成できましたら、このフォルダをWindows側の適当なエディタで開いてみましょう。今回はVisual Studio Codeを使って「C:\docker\myruby」フォルダを開いてみます。
↑Visual Studio Codeでコンテナと共有しているフォルダを開いた状態
ただし、このままサーバを起動しようとしますと、JavaScriptのランタイムがなくエラーになってしまいますので、Gemfileをあらかじめ編集して「therubyracer」をインストールしておきます。Visual Studio Code上で、Gemfileを開いて編集します。
# gem ‘therubyracer’, platforms: :ruby
と書かれた行のコメントを外して、
gem ‘therubyracer’, platforms: :ruby
のようにします。そのあと、CentOS側で
bundle install
を実行し、therubyracerをインストールし、その後で
rails s
でサーバを起動します。すると、Kitematicの画面にブラウザを開くためのショートカットボタンが出てきますので、このボタンをクリックするか、もしくはブラウザから直接
http://localhost:3000/
を指定して画面表示を確認します。
↑Kitematic上でWeb Previewボタンをクリック
↑おなじみの画面が表示されました
もちろん、今回ご消化したのは、とりあえず的な手順ではありますが、これでWindowsの好きなエディタでソース編集しつつ、仮想コンテナ上で簡単にRailsアプリを実行できるようになりました。
ご参考になりましたら、幸いです。