質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Python

    9185questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • プログラミング言語

    702questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

プログラミング入門者にとっての仮想環境の意義について

解決済

回答 6

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 1,701

driller

score 683

IT業界とはあまり関連がなく、プログラムにあまり馴染みがない方々を対象にPythonを使った勉強会をしています。
この一環として、仮想環境を用意することを勧めているのですが、
この意義を理解してもらうのに難儀しています。

仮想環境の利点としては下記のものあるかなと思っています。

  1. スクラップアンドビルドができる
  2. システム環境を汚さない、他の仮想環境に影響を与えない
  3. 複数バージョンを扱える
  4. 配布するためのテスト環境になる

私の力不足で上記の点をうまく伝えきれない部分があったかもしれませんが、
他にもこのような点で有効だというものがあればアドバイスいただければと思います。
そもそも仮想環境なんて必要ないというご意見でも構いません。

以下、私見的な内容になりますのでお忙しい方は読み飛ばしてください。

普段開発をされる方々にとっては、環境構築は自分の家を建てるような感覚があり、
思い入れもあることから、時には議論が活発になったり加熱するのかなと感じています。

反面、プログラムを初めてやる方々にとっては、
動くプログラム書くことが第一の関心事であり、
環境構築の重要性を認識するのはずっと後のフェーズになる気がしています。

以上のことから、まずは環境構築に対する重要性について
掘り下げていくべきかなとも考えています。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 6

+10

Pythonを教えるときに、これを知っておいたほうがいい、というものはたくさんあると思います。でも、その中には最初に教えてしまうとハードルを上げてしまうものがいくつかあるように思います。思い付く範囲で列挙します。

  • Python仮想環境(virtualenv, venv)
  • with open(...) as f: のwith
  • tuple
  • range
  • class

プログラミング初学者は、プログラミング経験のある特定言語初学者とは異なり、「こういう言語機能はないの?」というような経験からの発想がありません。なので、「便利な道具」をたくさん教えても「なにが便利なのか」分かりません。これは頭が悪かったり不得意だったりというよりは、単に経験不足なだけなことがほとんどだと思います。
まずは、便利な道具は学ばなくても簡単な機能の組み合わせで実現できるところから学んでもらって、不便さを経験してもらうのが良いと思います。その人が学ぶ準備ができた時に便利な道具を教えることで、学習の効率もアップしていくのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/21 22:48

    ご回答ありがとうございます。
    不便さを経験いただくというのはよいアイデアかもしれませんね。
    不便さを感じて挫折することを恐れていましたが、不便さを感じるケースを予め用意して、この解決策というアプローチもありな気がしてきました。

    キャンセル

checkベストアンサー

+5

Python初心者の立場から回答します。
仮想環境を使うことの意義を説明する際に、「システム環境から作り直すというとても面倒くさい作業をある程度回避できる」ということを伝えるとよいかと思っています。

私の場合、初めてLinuxを触ったときにPython2.7しか入っていなかったため、仮想環境を使わずにPython3.5を手動インストールしました。
しかしその際に何か手順を間違えたのでしょう。その後おかしな依存関係が発生し、開発で必要になったPhantomJSが動かず、先輩とともに環境構築をやり直す羽目になりました。

ある程度のスキルがあれば環境構築も自由自在でしょうが、初心者にとって環境構築は難しくて大変な作業です。自力でできないという方も多いと思います。
これに対し仮想環境を使っていれば、失敗してもその仮想環境を破棄すれば良いだけです。

今目の前のコードが動いても、これから開発の業務を長く行うのであれば、今後のことまで考えてあらかじめリスクヘッジをしておくべき、ということが伝わるとよいですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/21 22:54

    ご回答ありがとうございます。
    スクラップアンドビルドの利点はリスクヘッジの手段としても有効ですね。
    これまで、手厚く環境構築をサポートしすぎたためか、あまりリスクが顕在化していなかったので、発生し得るリスクについて改めて考えてみたいと思います。

    キャンセル

+3

プログラミングの勉強と絡めるとあまり恩恵がないように思います。利点として挙げられた1~4のいずれも入門者にとってはピンと来ないでしょうから(いずれも入門者にとって興味のある内容とは思えません)。
それと、上のコメントで「日々の作業の効率化」が目的と書かれていますが、それなら、Pythonよりもまずはシェルスクリプトのようにも思います。

もしプログラミングと絡めるなら、例えばネット通信とかリモートアクセスとかCGIとか、実行するのに複数のPCが必要な仕事が仮想環境を使えば1台のPCでできる、というような必然性があれば取っつきやすいし仮想化の意義も説明しやすいと思います。私も、仮想化に対して最初に興味を持ったことは「1台のPCで複数のPCを持つのと同じことができる」というものです。状況に応じて仮想環境を作ったり壊したりしていれば、自然と1~4の利点が理解できるようになると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 00:20

    ご回答ありがとうございます。
    必然性のないものには興味を持たないというのは、至極まっとうなお話ですね。
    仮想環境を推奨したもう一つの理由としては、プログラミングを教えてるに当って同じ環境を作りたいという都合もありました。
    このような背景等を端折ってしまったところもあるので、折を見て説明していきたいと思います。

    キャンセル

  • 2017/02/22 00:36

    なるほど、そういう理由があるなら確かに仮想環境を導入したいですね。利点2に通じますが、異なるPCで環境を合わせることができるのも仮想環境のメリットです。
    それを説明すれば良いのではないでしょうか。教えやすいように環境を合わせることは、教わる側としても都合が良いはずですから。

    キャンセル

+1

普及対象はIT業界とはあまり関連がなく、プログラムにあまり馴染みがない方々です。

賛否はさておき興味をそそられた点として、その「普及対象」の方々に何をさせようとされているのですか? 言い換えると、その方々が自発的に何をするようになったら、普及作業のゴールに達したと言えるのですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/21 22:45

    ご回答ありがとうございます。
    「普及活動」という単語が少し曖昧だったため修正いたしました。

    当面の目的としては、対象としている方々のやりたいことが達成したり、日々の作業が効率化できるようになればよいと考えております。
    特に明確なゴールは設けていませんが、対象者がプログラミングを学びたいという意欲がある限りは現在の活動を続けていく所存です。

    キャンセル

+1

仮想環境の意義、という話ですが…
勉強会というレベルなら、使える環境を(用意してあれば)
コピーして読み込ませてすぐにトライできる
つまりインストールや設定など面倒なことを
すっとばして始められるのは双方にメリットが
あるんじゃないかなあ。
まあ、パソコンのスペックによっては
仮想環境が実用的ではなかったりするでしょうから
その辺が心配っていえば心配ですかねえ。
場合によっては live CD とかの方がよいかも?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 00:32

    ご回答ありがとうございます。
    一度、dockerをやったことがあったのですが中々大変でした。
    これまでやった中では、クラウド上でブラウザからのコーディングが割とうまくいったので、この辺をメインにすすめていくのもよいかもしれません。

    キャンセル

+1

Pythonはバージョン2系と3系で大変な事になるので、
深くやるならVagrantかDockerで仮想環境作るのはマストと言って良いでしょう。
(環境が壊れたり僕の環境では再現しませんでした系もVagrantfileやDockerfile1個で対応完了なのは凄まじいですよね)

しかし、どちらも「それなりに分かって使える!」というレベルに達するには
Linuxを数年慣れ親しんだ人間が数日間触り続けてようやくといった代物です。
たかだか数十分〜数時間のハンズオンに盛り込むには明らかに無理があります。

pyenvとvirtualenvで環境構築 - Qiita
こういったツールを使ってもらうのが初期段階ではわかりやすいと思います。
私もNode.jsメインですが、メインマシンでさらっとコードを書く用にNodebrewを常備していますしね。


追記:

私が以前読んだ本に、上級者に至る為の条件が紹介されていました。
初心者は手段より、出来上がったモノ自体に興味を示します。
検索ワード例「PHP ブログ 自作」

初級者が中級者に、中級者が上級者に至る為には実際に行動に起こして様々な壁にぶつかります。
その壁を乗り越える過程で、根本の仕組みを知ることに興味がわいてきます。
検索ワード例「PHP PDO prepare」 ←PDOはPHPのデータベースを扱う標準ライブラリを指します

エンジニアならばいずれ上級者になったほうが良いので仮想環境も覚えさせるべきだと思います。

しかし、Pythonを覚える層は機械学習や統計データを解析するという面が強いのだろうと思います。
アナリストは統計や分析により出てきたデータで金儲けをすることに興味関心があり、統計データを上手に操ったり式を操る上級者を目指すと想定しています。
別にLinuxの上級者を目指す人ではないから仮想環境に対しても興味が薄いでしょうし、その必要もないでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/22 11:04

    ご回答ありがとうございます。
    確かにインフラ周りは一朝一夕で身につくようなものではないですね。
    興味がある人は勝手に自分で学ぶのですが、そうでない人にとっては敬遠されがちな分野なので、その辺は悩ましいところではあります。

    キャンセル

  • 2017/02/22 13:13

    実践的にはスライド2〜3枚程度の紹介をしておいて、
    食いついた人には深掘りして教えていく方式が良いかもしれませんね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Python

    9185questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • プログラミング言語

    702questions

    プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。