質問: 初めて質問させて頂きます。 現在、私はpythonを独学で勉強しており、学習の一環でちょっとしたwebアプリ(非常に小規模でURLも2つくらいのものを想定)を開発しようと考えています。 pythonの構文やwebフレームワーク(flask)は一通り勉強しました。 しかし、開発環境の構築のところでよくわからないところがあったので、その点を質問させて頂きます。 具体的な質問内容としては「仮想環境(pythonのvertualenv-venvを想定)と仮想マシン(Vagrantを想定)の違いと開発環境の構築について」です。 私が調べた限りですと、pythonの仮想環境は、複数のアプリケーションを一つのサーバで走らせる時などにpythonのバージョンやそれぞれのパッケージ、モジュールなどが競合しないように、それぞれのアプリケーションに適したpython環境を構築するというイメージです。 一方で、仮想マシンは自身のローカルPC上に実際のアプリケーションを走らせるサーバ環境を構築してしまうものというイメージを持っています。pythonの仮想環境よりもより基礎となる部分に関わっているものだと考えています。 その上でですが、webアプリを開発する場合、pythonの仮想環境を構築した上でコードを完成させ、その後仮想マシンを構築し、そこでテスト起動してみるというのが一般的な流れなのでしょうか。 今回、この疑問の契機となったのは、データベースの設計です。webアプリで利用するDBを今回MySQLにしようと考えているのですが、上記のような流れ(仮想環境下でコード構築->仮想マシン下でwebアプリのテスト起動)で開発する場合、ちょっとしたコードの確認をする上で(コードがしっかり動いてMySQLに保存されているか確認する程度のコードの小規模な実行を想定)、MySQLを自身のPCにそのままインストールする必要があるのかなと思います(vertualenvではpython関連は分離するもMySQLまでは分離されないのではないかと思っています)。しかし、今後他のwebアプリを開発する時などに何らかの支障がでることも考え、仮想環境や仮想マシンのような閉じられた環境下でインストールするのが良いのではないかというのが、そもそもの疑問の契機です。 冗長かつ一般論での質問となってしまいましたが、ご回答いただけますと幸いです。 どうぞよろしくお願いします。
回答: TL; DR ====== Vagrantを使うのがよいと思います。virtualenvは使えると便利ですが、必ずしも必要という訳ではありません。 詳細 == * `vertualenvではpython関連は分離するもMySQLまでは分離されないのではないか` ご認識の通り、Pythonのパッケージなどをシステムデフォルトのものと分けて管理するために使われますが、MySQLその他Python外部の環境は分離できません。 依存パッケージの切り分けなどに便利であり、Python開発におけるベストプラクティスのような所もありますので、とりあえず使っておくのがよろしいかと存じますが、使わずとも問題はありません。 * `仮想環境や仮想マシンのような閉じられた環境下でインストールするのが良いのではないか` おっしゃる通り、ホストOS側でのインストールを行うと別の環境とぶつかる場合があるので、もし可能でしたら別の仮想マシンを用意してインストールするのがよいかもしれません。 また、もしMySQLでなければならない理由がなければ、インストール不要でPythonとの親和性も高いSQLileを使うのが便利かもしれません。この場合、仮想環境を別途用意する必要もなく、簡単かと思われます。 蛇足 == Vagrantを挙げたのでVagrantについて記述しましたが、Dockerなどのコンテナ技術を利用した仮想環境構築のほうが可搬性が高く、より最近の流れに沿っているので、もしご興味がおありでしたらそちらについても手を出すのをおすすめしておきます。