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実習環境を作ってみました、次回の研修では使ってみようと思います。