shibuso.net

プログラミングとかゲームとか

最近の私のWindowsでのWeb(Rails)開発環境

2019年01月01日 | タグ: 開発 , Web

明けましておめでとうございます。本年もよろしくお願いいたします。早いもので前回投稿してから丸一年放置してしまいました(苦笑) ありがたいことにまだ検索で訪れてくれる方がいるみたいですし、今年は更新していきたいと思います。

Web開発界隈は私の観測範囲では結構Mac派の方が多いですが、最近Windowsを使い始めたという記事を続けて見かけたので、ずっとWindows環境で開発を続けてきたWindows派の私の環境についてもちょっと書いてみたいと思います。ちなみに今の職場は周りは全員Macです。

以前win-sshfsの記事を書いたりしましたが、最近は使わなくなっています。最近はDockerを使うことが多いですが、この方法はDockerでも単純な仮想環境でもどちらでも対応可能です。加えて言うと、別にWindowsじゃなくてMacでも可能です(笑) ただしIntelliJ IDEAかあるいはRubyMine等のJetBrains製のIDEにあるdeployment機能ありきのものです。類似の機能があれば他のIDEでも対応可能かと思いますが、ご了承くださいm(_ _)m

ちなみに私の現在の開発環境はホストはWindows 10 Proで、ゲストとして仮想環境(VirtualBox)にUbuntu18.04を使っています。更にその上にDockerを動かしていて、そこでRailsを走らせています。

何故マウントしないのか

上でも触れましたが、私は過去にsshfsや、更に前はsambaや仮想環境独自のマウント機能を使ってマウントしたりしてきました。ただそれぞれ問題がありました。共通しているのはディスクアクセスが遅くなることです。それがホスト側で問題になること、ゲスト側で問題になること、両方ありました。

色々悩んだ結果、ソースコードはそれぞれの環境で別々に持った方が速度的に問題なくなるということになったのですが、それはそれで今度はソースコードの不整合が発生することになります。

それを対処するためにrsyncみたいなsync機能があればいいなと考えていたのですが、IntelliJ IDEAが便利なdeployment機能を搭載していてくれたおかげで簡単に実現できました。今回紹介する方法はその機能を使った方法ですが、これも上で書いたとおり類似した機能があれば何でも実現可能です。

現在の大まかな構成

構成

ホスト上とゲスト上両方にソースコードを置くことになるのがこの構成の特徴です。Dockerを使う場合は仮想環境上で動かし、仮想環境上のソースコードを置いたディレクトリをDockerにマウントすることで対応します。Dockerが仮想環境上のファイルを見る分には特にディスクアクセスの速度に問題は起こっていません。コマンドラインから立ち上げる時は-vオプション、docker-compose.ymlで設定する場合はvolumesで設定する感じですね。

まずホストからゲストと繋げるためにSSHが繋げるようにしておきます。これは個人的にSSHを導入するのが一番楽だったり、その他開発する上で便利かと思って使っていますが、FTPを使っても対応可能です。

続いてホストとゲストそれぞれの環境でgit cloneしておきます。その方が改行コードの問題とか起こりづらいです、多分。

その後IntelliJ IDEAのdeployment機能を使います。「Tools > Deployment > Configuration」から設定します。ホスト環境とゲスト環境のそれぞれのコードの置き場を設定すれば、初期設定は完了です。ついでにExcluded Pathsタブでホスト環境の.ideaディレクトリと、ゲスト環境のtmpディレクトリ、logディレクトリを指定しておけば大まかに大丈夫かと思います。

ここまで設定すれば実際deploymentツールを実行することが出来るはずです。実行して問題が無ければ設定成功です。最後に「Tools > Deployment > Automatic Upload (always)」を選択すれば、上書き保存する度に勝手にアップロードされます。多分これだけで設定完了です。便利!簡単!

注意点

上記までで一通り使えるようになったかと思いますが、少し注意点があります。

まず気をつけれなければいけないことは、deployment機能は万能ではないということです。上書き保存時にアップロードしてくれますが、ゲスト側で新規にファイルを作ってもホスト環境にダウンロードしてくれません。rails g等でゲスト側でファイルを作成した後には手動で同期を行う必要があります。私はSettingsのKeymapで「Sync with Deployed to...」を設定して、すぐにdeployメニューを呼び出せるようにしています。

それからホスト側の文字コードや改行コードにも、特にWindowsでは気をつける必要があります。Windows上でテキストファイルを新規作成すると改行コードはCRLFになってしまいます。IDEの設定でLFに設定しておくのが無難で、且つファイル作成はIDEから行うように徹底しておいた方が良いと思います。

あとファイル権限周りは同期に失敗する原因になります。特にDockerを使っていると仮想環境とDockerでユーザが違ったりして、ファイルを新規作成する時に毎回設定する必要があったりします。まぁそこら辺は慣れれば毎回意識して設定出来るかと。ちなみに私は常にホスト側でgit commit, pushするようにしています。

まとめ

私のWindowsと仮想環境を使った開発環境の構成を紹介しましたが、完全に我流の構成です。Windowsと仮想環境を使ってどうやってWeb(Rails)開発が楽に出来るかとあれこれ試行錯誤した結果ではあるものの、これよりも便利に開発できる方法があるかもしれないので、これがベストだと主張するつもりもありません。

Macでもまったく同じことが出来るので、個人の趣味嗜好で環境を選択できれば良いんじゃないかなと思います。アプリと違ってWeb開発はあまりOSに縛られないのが楽なところかと思います。私は以前Macを買って使ってみたものの肌に合わなかったので、今後もしばらくはWindows環境でやっていけたらと思います。