EY-Office ブログ

Ruby on Rails実習環境をDocker化してみた

EY-OfficeのRuby on Rails教育コースでは座学だけではなく、コードを書く実習を行います。したがって受講者はRuby on Rails開発ができるPCやMacを用意する必要があります。

すでに受講者に開発者用のMacや仮想マシン、Docker、WSL等を使ったLinux環境が与えられている場合は、それを使ってもらいます。しかし大企業等ではWindows PCを使う場合も多くあります。

Windowsで研修を行う場合、研修に必要なソフト(Ruby, Git, VSCode, Chrome等)のインストール手順を渡し、受講者にインストールしてもらっています。

未来 https://www.flickr.com/photos/willbuckner/31549699548 より

RubyとWindows

RubyはWindowsでも動きますがRuby on Railsで使っているGemライブラリーの中にはC言語で書かれたものもあります、これらはインストール時にコンパイラーが動き、C言語で書かれたソースコードをマシンで動作するコードに変換されます。しかしWindowsには標準ではコンパイラーが入っていません、またそれらはUnixとは違う環境で動きます。(Macも購入時にコンパイラーは入っていませんが、Xcode等をダウンロードすれば無料でインストールできます。)

WindowsでポピュラーなRuby処理系RubyInstallerではRuby本体とDevkitと呼ばれるUnixと互換性のある開発環境(内部はMSYS2と、MinGWを使っています)がインストールされます。

今までWindowsを使ってRuby on Railsの研修をかなり行っていますが、たまに謎のエラーに出会います。Windows上でUnixをエミュレーションするソフトのバグに出会ってしまったのだと思います、RubyもGemもWindowsも随時バージョンアップしています、異なるOSのつじつまを正確に合わせるのは簡単でないと思います。

ここ数年は安定にWindowsで研修できていましたが、前回の研修では久しぶりに謎のエラーに出会いました、しかも全員ではなく一部の受講者のみでした。ただしgem installをもう一度行ったところ上手く行ったのでそれ以上のエラー追求は行いませんでした。

Docker化のメリット

そこで受講者の環境をDockerにしてはどうだろうと考えました。

インストールが簡単

DockerはDocker Desktopをインストールすれば簡単にすみます。そしてdocker runコマンドを実行すればDocker Hubから対象のDockerイメージを自動的に取得しRails環境を実行できます。
docker runコマンドをWindowsのバッチファイル(.bat)として提供すれば、それをダブルクリックするだけで済みます。

DockerとWindowsでディレクトリーやポートを共有できる

Ruby on RailsのコマンドはDockerコンテナー内のbashで実行できますが、エディターはどうしましょうか? vimの使い方を初心者に教えるのは難しいと思います、やはりGUIベースのVSC ode(Visual Studio Code)でしょう。
Dockerコンテナーにはホスト(ここではWindows)のディレクトリーをDocker内のディレクトリーにマウント(共有)できます。 この機能を使いWindows上で動くVS Codeを使い、Docker内のファイルを編集できます。

また、Dockerコンテナー内で動いているサーバーのポートをWindowsのポートに割り当てることもできるので、Dockerコンテナー内で動いているRailsアプリをWindows上で動いているブラウザーで表示できます。

Railsコマンドがキビキビ動く

Railsコマンド、たとえばヘルプを見たくてrails --helpを実行した場合、Windows上ではLinux/Macに比べかなり遅いです。
また、Railsコマンドを高速化(依存gemライブラリー等を先読みした環境でコマンド実行)するためのspringもWindowsでは使えません。

DockerはLinuxなので、Railsコマンドがキビキビ動きます。実際にWindowsのコマンドプロンプト上でRailsコマンドを実行するより、Docker Desktopで動くDockerのほうがはるかに高速です。

設定ファイル等も最初から入れておける

研修を行うには.gitconfigなどの環境設定ファイルも必要ですが、これらもDockerイメージに入れておくとこができます。
また、ある研修ではRDB/SQL入門も行っているのでMySQLコンテナーも使いますが、この中には初期データ等も入れておくことができます。

Docker化のデメリット

当然ですがデメリットもあります。

Docker,Unixを学ぶ必要がある

Dockerを使うからには、Dockerとは何か?を教える必要があると思います。このへんはDockerとは何なのか?に書いたので、これが使えますね。😊 簡単なUnix(Unixコマンド)の入門は、以前から行っているので出来そうですね。

現在のソフトウェア開発者はプログラミング以外に、Git、Dockerは必須技術になっているので、これらの教育は必要だと思います。

Docker Desktopのライセンス料を払う必要がある

昨年9月からDocker Desktopは、従業員250人以上もしくは11億円以上の会社にたいしては有料になりました。EY-Officeはまったく該当していませんが、お客様企業は該当するところが多いです。

まとめ

今回Dockerを使ったRuby on Rails実習環境を作ってみました、次回の研修では使ってみようと思います。

- about -

EY-Office代表取締役
・プログラマー
吉田裕美の
開発者向けブログ