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

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

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

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

Python

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

Q&A

解決済

6回答

4522閲覧

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

driller

総合スコア720

プログラミング言語

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

Python

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

1グッド

3クリップ

投稿2017/02/21 12:57

編集2017/02/21 13:36

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

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

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

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

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

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

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

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

LouiS0616👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

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

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

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

投稿2017/02/21 13:40

shimizukawa

総合スコア1847

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/21 13:48

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

0

ベストアンサー

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

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

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

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

投稿2017/02/21 13:39

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/21 13:54

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

0

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

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

投稿2017/02/21 15:09

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/21 15:20

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

2017/02/21 15:36

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

0

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

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

投稿2017/02/21 13:30

....

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/21 13:45

ご回答ありがとうございます。 「普及活動」という単語が少し曖昧だったため修正いたしました。 当面の目的としては、対象としている方々のやりたいことが達成したり、日々の作業が効率化できるようになればよいと考えております。 特に明確なゴールは設けていませんが、対象者がプログラミングを学びたいという意欲がある限りは現在の活動を続けていく所存です。
guest

0

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 01:18

編集2017/02/22 03:00
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/22 02:04

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

2017/02/22 04:13

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

0

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

投稿2017/02/21 15:11

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

driller

2017/02/21 15:32

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問