今回は、Windows 10の便利な機能の一つであるWindows Sandboxを使って
- Anaconda をインストール
- Anaconda Navigator から VSCode が起動できるようになる
以上「VSCode」「Python」「Anaconda」の3つがインストールされ、連携した状態の開発環境を自動的に一発で構築する方法を紹介します。
kivyのインストール記事も追記しました。(2023/3/27)
Windows Sandboxとは?
Windows Sandboxとは、Windows 10に搭載された仮想マシンのような機能です。
Windows Sandboxを起動すると、クリーンなWindows 10が別ウィンドウで表示されます。
このウィンドウ内でアプリケーションやスクリプトなどを実行しても、ホストコンピュータには一切影響しません。
また、終了時にはすべてのデータや設定が消去されます。
これにより、安全かつ簡単にテストや実験ができます。
以上を箇条書きにしてまとめると、以下の通りです。
- Windows Sandboxとは
- Windows 10に搭載された仮想マシンのような機能
- Windows Sandboxを起動すると
- クリーンなWindows 10が別ウィンドウで表示される
- このウィンドウ内でアプリケーションやスクリプトなどを実行しても
- ホストコンピュータには一切影響しない
- 終了時にはすべてのデータや設定が消去される
- 結論:安全かつ簡単にテストや実験ができる
紹介する内容とメリット
この記事では、WSBファイル(後述)にログオンコマンドを追加することで、Windows Sandbox内で自動的にVSCodeとPython3の実行環境を構築する方法を紹介します。
これにより、
- VSCodeやPython3など
- 必要なアプリケーションやスクリプトなどの
- 事前準備が不要になる
- 必要なアプリケーションやスクリプトなどの
- Windows Sandbox内で
- VSCodeやPython3などを
- 自由に使ってテストや実験ができる
- VSCodeやPython3などを
- 終了時には
- すべてのデータや設定が消去されるため
- ホストコンピュータが汚れない
- すべてのデータや設定が消去されるため
といったメリットが得られます。
それでは早速始めましょう。
Windows Sandboxの有効化
まずはWindows Sandboxを使うために必要な手順です。
以下の手順でWindows Sandboxを有効にしましょう。
- 「Windows機能の有効化または無効化」を開く
- 「Windows + X」を押す
- 「ファイル名を指定して実行」を起動
- 「OptionalFeatures.exe」と入力してOKを押す
- 「ファイル名を指定して実行」を起動
- 「Windows + X」を押す
- Windows Sandboxを選択して、OKをクリック
- コンピューターを再起動
これでWindows Sandboxが有効化されました。
スタートメニューから[Windowsツール]→[Sandbox]または[Sandbox]と入力して起動できます。
スタートやタスクバーにピン止めしておくと良いでしょう。
WSBファイルの作成と記述
次にWindows Sandbox 内に「メモ帳」を起動する WSBファイルを作成してみましょう。
WSBファイルとは?
WSBファイルとは、Windows Sandboxの設定を記述するXMLファイルです。
WSBファイルにログオンコマンドやマッピングフォルダなどを指定することで、Windows Sandbox内で自動的にアプリケーションのインストールやファイルの共有などができます。
基本編(メモ帳を起動する例)
新規ファイルに以下の内容を記述して、note_open.wsb などの任意の名前を付けて保存します。
<Configuration>
<LogonCommand>
<Command>"C:\Windows\notepad.exe"</Command>
</LogonCommand>
</Configuration>
このWSBファイルを実行すると、Windows Sandbox が起動して、Sandbox 内で「メモ帳」が起動します。
では次に、「メモ帳」だけでなく、「Edge」も同時に起動してみましょう。
応用編(失敗例)
先ほど「メモ帳」が起動した note_open.wsb をコピーして note_edge_open.wsb にリネームします。
<LogonCommand><Command>コマンド</Command></LogonCommand>をコピーして書き換えたら以下のようになりました。
<Configuration>
<LogonCommand>
<Command>"C:\Windows\notepad.exe"</Command>
</LogonCommand>
<LogonCommand>
<Command>"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"</Command>
</LogonCommand>
</Configuration>
これでよさそうな気がしますが・・・試してみると、メモ帳だけ起動して、Edgeは起動しない・・・
順番を入れ替えて、Edgeを前にすると、Edgeだけが起動し、メモ帳は起動しない・・・
少し手ごわいですね(💦)
さあ次は、別の方法でリベンジです!
応用編(成功例:メモ帳とEdge同時起動)
startup.bat というファイルを、以下の内容で用意します。
start notepad.exe
start msedge.exe
sb_folderという名前のフォルダをデスクトップに作成して、その中に入れてください。
次に、note_edge_open.wsb というファイルを、以下の内容で用意します。
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\Users\「ユーザー名」\Desktop\sb_folder</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\sb_folder\startup.bat</Command>
</LogonCommand>
</Configuration>
<HostFolder>の「ユーザー名」はお使いの環境に合わせて編集してください。
commands_note_edge.wsb を実行すると、Sandbox が起動して、 sb_folder が共有されて、Sandbox のデスクトップに現れます。
そしてフォルダ内の startup.bat が実行されて、「メモ帳」と「Edge」も同時に起動するという仕組みです。
今度は両方とも起動しました!
この成功例の手順をまとめると以下のようになります。
- 仮想環境に共有するフォルダを用意
- フォルダ内にバッチファイル(*.bat)を用意
- Sandbox 起動時に実行する処理を記述
- フォルダ内にwsb ファイル(*.wsb)を用意
- MappedFoldersでフォルダを共有する設定を記述
- LogonCommandで起動時に実行するバッチファイルを指定
- フォルダ内にバッチファイル(*.bat)を用意
- ホスト側でwsb ファイルを実行すると
- Sandbox 起動
- 仮想環境にフォルダが共有される
- フォルダ内のバッチファイルが実行される
次はいよいよ表題の通り「Windows SandboxでVSCodeとPythonの開発環境を自動構築する方法」を解説していきます!
Windows Sandboxで開発環境を自動構築する方法
大まかな流れは、先ほどの成功例の方法と同じです。
inst_DevEnv.bat というファイルを、以下の内容で用意します。
rem Download Python
curl -L "https://www.python.org/ftp/python/3.10.1/python-3.10.1-amd64.exe" -o C:\users\WDAGUtilityAccount\Desktop\python.exe
rem Install Python
C:\users\WDAGUtilityAccount\Desktop\python.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
rem Download VSCode
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" -o C:\users\WDAGUtilityAccount\Desktop\vscode.exe
rem Install and run VSCode
C:\users\WDAGUtilityAccount\Desktop\vscode.exe /verysilent /suppressmsgboxes
rem Download Anaconda3
curl -L "https://repo.anaconda.com/archive/Anaconda3-2022.10-Windows-x86_64.exe" -o C:\users\WDAGUtilityAccount\Desktop\anaconda.exe
rem Install Anaconda3
C:\users\WDAGUtilityAccount\Desktop\anaconda.exe /S /D=C:\Anaconda3 /AddToPath=1
フォルダ(ここでは、C:\sb_DevEnv)を作成して、inst_DevEnv.batその中に入れてください。
次に、inst_DevEnv.wsb というファイルを、以下の内容で用意します。
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\sb_DevEnv</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\sb_DevEnv\inst_DevEnv.bat</Command>
</LogonCommand>
</Configuration>
inst_DevEnv.wsb を実行すると、Sandbox が起動して、 sb_DevEnv フォルダが共有されて、Sandbox のデスクトップに現れます。
inst_DevEnv.bat が呼ばれ、以下の処理が順番に実行されます。
- Download Python
- Install Python
- Download VSCode
- Install VSCode
- Download Anaconda3
- Install Anaconda3
デスクトップに出現するPythonとVSCodeとAnacondaのアイコンはインストーラですから、お間違えなく。
インストールがうまくいって、もうインストーラ不要という状態が確認出来たら、削除しても大丈夫です。
VSCode の起動確認
Windowsのスタートを右クリック > Windows PowerShell を起動して「code」と実行してみてください。
PS C:\Users\WDAGUtilityAccount> code
あるいは、Windows スタートボタン右の検索ボックスに「code」と入力して出てくる「Visual Studio Code」を選んで実行でもOKです。
起動したら、次回のために「Pin To Taskbar」で、タスクバーにピン止めしておきましょう。
VSCode のターミナルでPythonのバージョンを確認
VSCode が起動したら、「Ctrl + J」でターミナルを表示します。
ターミナルに「python -V」(Vは大文字)を入力して実行してみてください。
PS C:\Users\WDAGUtilityAccount> python -V
Python 3.10.1
このようにPythonのバージョンが表示されれば、インストールが成功していることがわかりますね。
Anaconda の起動確認
Anacondaのインストールは結構時間がかかりました。
すべてのアプリ(All apps)を見ていると、「Anaconda3(64-bit)New」フォルダが出現します。
フォルダを開き、Anaconda Navigator を起動してみましょう。
一覧の中にVSCodeを含んだ状態で起動することが確認できると思います。
ちなみに、事前にVSCodeがインストールされていないと、ここにVSCodeのアイコンは表示されません。
だから、最後にAncondaをインストールする必要があるのです。
VSCodeとPythonとAnacondaのまっさらな開発環境があっという間に構築できるなら、結構使い勝手が良いですよね!
VSCode「Django・Flask」編
さらに応用編として、VSCodeで動作する「Django・Flask」を一発で作る方法を紹介します。
- Python をダウンロード&インストール
- pip をインストール&アップグレード
- Django をインストール
- Flask をインストール
- VSCode をダウンロード&インストール
- Python 用のVSCodeエクステンションをインストール
Django・Flask環境構築のバッチファイルの準備
環境設定の肝であるバッチファイルを準備しましょう。
@echo off
rem Download Python
curl -L "https://www.python.org/ftp/python/3.10.1/python-3.10.1-amd64.exe" -o C:\users\WDAGUtilityAccount\Desktop\python.exe
rem Install Python
C:\users\WDAGUtilityAccount\Desktop\python.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
rem Install pip
python -m ensurepip --default-pip
python.exe -m pip install --upgrade pip
rem Install Django
py -m pip install Django
rem Install Flask
py -m pip install Flask
rem Download VSCode
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" -o C:\users\WDAGUtilityAccount\Desktop\vscode.exe
rem Install VSCode
C:\users\WDAGUtilityAccount\Desktop\vscode.exe /verysilent /suppressmsgboxes
rem Install VSCode extensions
code --install-extension ms-python.python
echo Installation complete.
この記事の説明では、ファイル名は「inst_Django_Flask.cmd」としましょう。
保存するフォルダは、前回と同じ「C:\sb_DevEnv」にしました(ファイル名を変えて前回と区別する)。
バッチファイル:コマンドの説明
以下は、上記のバッチファイルで実行されるコマンドの説明です。
- "@echo off":
- バッチファイルが実行されたときに、実行されるコマンドをコマンドプロンプトに表示しないようにします。
- "curl -L":
- 指定されたURLからファイルをダウンロードします。
- "rem":
- コメントを追加します。
- "python.exe":
- Pythonインタープリタを起動します。
- "python -m ensurepip --default-pip":
- Pythonにpipをインストールします。
- "python.exe -m pip install --upgrade pip":
- pipをアップグレードします。
- "py -m pip install Django":
- Djangoをインストールします。
- "py -m pip install Flask":
- Flaskをインストールします。
- "code":
- Visual Studio Codeを起動します。
- "code --install-extension ms-python.python":
- Visual Studio CodeのPython拡張機能をインストールします。
- "echo":
- 指定されたメッセージをコマンドプロンプトに表示します。
このバッチファイルでは、Python、Django、Flask、VSCodeを自動インストールするために必要なコマンドが含まれています。
また、VSCodeのPython拡張機能も自動的にインストールされます。
最後に、"echo"コマンドを使用して、インストールが完了したことを示すメッセージを表示します。
WSBファイルの準備
「C:\sb_DevEnv」に前回作成したWSBファイルがあるので、コピーして先ほど作成したバッチファイルのファイル名に書き換えれば出来上がりですが、中身は以下の通りです。
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\sb_DevEnv</HostFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Desktop\sb_DevEnv\inst_Django_Flask.cmd</Command>
</LogonCommand>
</Configuration>
ファイル名は「inst_Django_Flask_VSCode.wsb」で保存しました。
Flask用のファイル「app.py」も用意
すぐにFlaskの動作確認ができるように、「app.py」ファイルを用意して共有フォルダに入れておきました。
むき出しだとほかのファイルに混ざって探すのが面倒だったので、「Flask」フォルダに入れて、「C:\sb_DevEnv」に保存。
「app.py」の中身は以下の通りです。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return'<h1><big>Hello, Flask!</big></h1>'
if __name__ == '__main__':
app.run()
Flaskによってブラウザに「Hello, Flask!」と表示される仕組みですが、文字が目立つように<h1>と<big>タグで囲んでいます。
さあ、どのように表示されるかは、次の動作確認の項目に譲ります。
動作確認
では、ちゃんとインストールができているか、いろいろと検証していくことにしましょう。
「Django」「Flask」のバージョン確認
「inst_Django_Flask_VSCode.wsb」を実行後、インストールが成功したことを確認するために、VSCodeで「Django」「Flask」のバージョンを確認したところです。
py -m django --version
4.1.7
flask --version
Python 3.10.1
Flask 2.2.3
Werkzeug 2.2.3
と表示されました。
Djangoの動作確認
Djangoがインストール済みの状態から、Djangoの開発用サーバを起動するまでの手順は以下です。
- django-admin startproject <project_name>
- 新しいDjangoプロジェクトが作成される
- cd <project_name>
- 作成したプロジェクトのディレクトリに移動
- python manage.py runserver
- Djangoの開発用サーバが起動される
<project_name> は長いと面倒なので、以下のように「dj」にしました。
django-admin startproject dj
cd dj
python manage.py runserver
結果は下の図のようにロケットの絵が表示されました。
このように表示されたらOKです。
Flaskの動作確認
Flaskがインストール済みの状態から、Webブラウザの表示を確認するまでの手順は以下の通りです。
「app.py」は共有フォルダの「Flask」フォルダにあるので、VSCodeで「Flask」フォルダを開きます。
そうしたら、以下のコードを実行します。
python app.py
そして、
* Running on http://127.0.0.1:5000
このようにコマンドラインに表示されているので、カーソルをURLの上に持っていくと下線が表示されて、クリックできることがわかります。
そこで、下線が表示されている状態で、Ctrlを押しながらクリックしてURLを開きます。
すると、以下の図のようにブラウザに「Hello,Flask!」と大きな文字が表示されるはずです。
このように表示されたらOKです。
お疲れさまでした~「Django・Flask」の開発環境が一発で自動構築する方法とその確認方法は以上です。
Windows Sandbox起動時のヒント
作業していて気付いたちょっとしたヒントを書いておきます。
開発別のファイルを共有フォルダに入れ替えて起動
Sandbox内で使用するファイルやフォルダを、共有するフォルダ内に入れておいて、WSBファイルを起動すると、後から環境をまたいでコピペやネットワーク越しに受け渡すなどの手間が省けます。
案件によってフォルダごと入れ替えれば良いし、そのフォルダをそのままVSCodeのプロジェクトフォルダとして開けば手間がかかりませんね。
起動後にホスト側の共有フォルダに追加したファイルは、Sandbox側で共有フォルダを開き直さないと表示されませんでしたので、ご注意ください。
CドライブにWSBのフォルダ&デスクトップにショートカット
また、WSBなどの入ったフォルダはCドライブなどに置いて、ショートカットだけデスクトップに置いておくと、設定時のパスが短いし、デスクトップもスッキリするのでおすすめです。
ショートカット右クリックから「ファイルの場所を開く」でフォルダも一発で開けます。
いろいろと試してみて、効率の良いSandboxの運用方法を見つけて活用してみてください。
追記:kivyを追加してみた
kivy の環境が必要になり、すでにあるバッチファイルに追記して試してみることにしました。
Python を対応バージョンに変更
KivyはまだPython 3.10に正式対応しておらず、推奨バージョンも3.7-3.9となっています。以下のように、バッチファイル内でインストールするPythonのバージョンを3.9.10に変更しましょう。
curl -L "https://www.python.org/ftp/python/3.9.10/python-3.9.10-amd64.exe" -o C:\users\WDAGUtilityAccount\Desktop\python.exe
kivy のインストールを追記
前回のバッチファイルの最後(echo Installation complete. の前)に以下のコードを追加しましょう。
rem Install kivy
py -m pip install kivy
バッチファイルを「kivy.cmd」として保存し、以前作成した○○.wsbをコピーしてファイル名を「kivy.wsb」に変更して、<command>のファイル名部分を「kivy.cmd」に書き換えて保存します。
実行して確認
「kivy.wsb」を実行してみましょう。
しばらく待つと、Sandbox内でVSCodeが起動している状態になります。
タスクバーのアイコンを右クリックして、「Pin to taskbar」で保存して、VSCodeを閉じてタスクバーのアイコンから起動しなおします。
VSCodeが起動したら、Ctrl+Jでターミナルを表示させます。
pip list
を実行してみましょう。
PS C:\Users\WDAGUtilityAccount> pip list
Package Version
------------------ ---------
asgiref 3.6.0
certifi 2022.12.7
charset-normalizer 3.1.0
Pygments 2.14.0
pypiwin32 223
pywin32 306
requests 2.28.2
setuptools 58.1.0
sqlparse 0.4.3
tzdata 2023.2
urllib3 1.26.15
Werkzeug 2.2.3
zipp 3.15.0
kivy がリストの中にありませんね。
そのような場合、パッケージがまだインストール中である可能性があります。
Kivyの場合、非常に大きなパッケージであり、インストールに時間がかかる場合があります。
そのため、しばらく待ってから再度 pip list を実行すると、パッケージがインストールされたかどうかを確認できます。
また、pip list コマンドでは、キャッシュによって以前にインストールされたパッケージが表示されることがあります。
そのため、確認する前に、pip list の前に pip freeze コマンドを実行して、最新の情報を取得することもできます。
しばらく待って、もう一度「pip list」を実行してみましょう。
PS C:\Users\WDAGUtilityAccount> pip list
Package Version
------------------ ---------
asgiref 3.6.0
certifi 2022.12.7
charset-normalizer 3.1.0
click 8.1.3
colorama 0.4.6
Django 4.1.7
docutils 0.19
Flask 2.2.3
idna 3.4
importlib-metadata 6.1.0
itsdangerous 2.1.2
Jinja2 3.1.2
Kivy 2.1.0
kivy-deps.angle 0.3.3
kivy-deps.glew 0.3.1
kivy-deps.sdl2 0.4.5
Kivy-Garden 0.1.5
MarkupSafe 2.1.2
pip 21.2.4
Pygments 2.14.0
pypiwin32 223
pywin32 306
requests 2.28.2
setuptools 58.1.0
sqlparse 0.4.3
tzdata 2023.2
urllib3 1.26.15
Werkzeug 2.2.3
zipp 3.15.0
今度は「kivy」や、他にもいろいろ追加されて表示されました。
サンプルコードの実行
以下のコードを「app.py」として保存します。
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.config import Config
Config.set('graphics', 'width', '480')
Config.set('graphics', 'height', '320')
class MainApp(App):
def __init__(self, **kwargs):
super(MainApp, self).__init__(**kwargs)
self.count = 0
def build(self):
layout = BoxLayout()
button = Button(text='Click me!', on_press=self.increment_counter)
layout.add_widget(button)
self.label = Button(text='0')
layout.add_widget(self.label)
return layout
def increment_counter(self, instance):
self.count += 1
self.label.text = str(self.count)
if __name__ == '__main__':
MainApp().run()
Ctrl+Jでターミナルを表示させ、サンプルコードを実行してみましょう。
python app.py
以下のような画面が表示されましたか?
おわりに
本記事では、Windows Sandboxで「VSCodeとPythonの開発環境」を自動構築する方法と、「Django・Flask」の開発環境を自動構築する方法を紹介しました。
WSBファイルにログオンコマンドを追加するだけで、
- VSCodeやPython3など必要なアプリケーションやスクリプトなどを事前に準備しなくても良くなる
- Windows Sandbox内でVSCodeやPython3などを自由に使ってテストや実験ができる
- 終了時にはすべてのデータや設定が消去されるため、ホストコンピュータが汚れない
といったメリットが得られました。
この方法は他のアプリケーションやツールでも応用できます。
例えば、
<LogonCommand>
<Command>powershell -ExecutionPolicy Bypass -NoExit -Command "& {Start-Process PowerShell -ArgumentList '-ExecutionPolicy Bypass -NoExit -Command &quot;&amp; {choco install firefox --yes}&quot;' -Verb RunAs}"</Command>
</LogonCommand>
と記述すればFirefoxブラウザをインストールできます。
WSBファイルはXML形式なので、タグや属性などの文法に注意して記述する必要があります。また、特殊文字(& < > ’ ")はエスケープ(& < > ' ")しなければなりません。
Windows Sandboxは便利な機能ですが、以下のような制限もあります。
- Windows Pro版またはEnterprise版しか対応していない
- ハードウェア仮想化(VT-x)に対応したCPUとBIOS設定が必要です。
- Windows Sandbox内ではネットワーク接続しか共有できません。USBデバイスやオーディオ出力などは共有できません。
- Windows Sandbox内ではMicrosoft Storeからアプリケーションをインストールすることはできません
対応していなければ動作しませんが、動作可能であれば、工夫次第でさまざまな用途に活用できます。
私の場合は、開発環境ではない「まっさら」な環境での動作確認のために、作成したEXEファイルと必要なファイルを共有フォルダに置いて、何もインストールせずに起動します。
その状態で正常動作なら「他のWindows PC でも動作するはず」という確認になり、動作しないなら何が不足しているかを判断するきっかけになるので助かっています。
この記事を参考にして Windows Sandbox の活用方法を見つけ、学習や仕事に役立てていただけると幸いです。
Part2(この記事の続編)もぜひ続けてお読みください。
コメント