子育てしながらエンジニアしたい

現在 7 歳 女の子の子育て中エンジニアによる、技術系 + 日常系ブログ。

WSL2 の Python スクリプトを Windows 側の VSCode で開発する

まえがき

前回の記事で、Windows 10 Home に WSL2 + Ubuntu 20.04 の環境を構築しました。

edosha.hatenablog.jp

もともとやりたかったのは、ここで Web サーバの開発をすることです。
サーバは Pipenv を使って Python で開発しています。
今回はそれを Windows 側の VSCode で開発する環境を整えてみます。

WSL2 Ubuntu 20.04 に Pyenv + Pipenv 環境を整える

Pyenv のインストール

WSL2 の Shell で以下を順番に入力します。

$ sudo apt install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
$ exec "$SHELL"

インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。

$ pyenv --version

Pipenv のインストール

まず最初に pip をインストールします。

sudo apt install python3-pip

次に pipenv をインストールします。

$ pip3 install --user pipenv
$ echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc
$ exec "$SHELL"

インストールができていることを確認するために、以下のコマンドを入れます。
バージョンが帰ってくれば OK です。

$ pipenv --version

Pipenv で新しいプロジェクトを作成する

開発を行うディレクトリに移動したら、使いたい Python のバージョンを決めて、
以下のようにプロジェクトを作成します。

$ pipenv --python 3.7.11

このバージョンが Ubuntu 内になければ、Pyenv を使用してインストールするかと聞かれるので
y にすれば勝手にインストールしてくれます。

f:id:edosha:20211109150638p:plain
Pipenv プロジェクトの作成

VSCode でリモート開発のセットアップ

基本的にはここの手順に従います。

docs.microsoft.com

Remote Development Extension のインストール

VSCode の拡張パックで Remote Development をインストールします。

f:id:edosha:20211109151250p:plain
Remote Development

WSL2 のパッケージインストール

自分の環境では不要でしたが、参照サイトでは以下のコマンドを入れよと書いてありました。

$ sudo apt update
$ sudo apt install wget ca-certificates

開発するディレクトリを VSCode で開く

WSL 側のシェルで以下のコマンドを叩くと、最初に VSCode Server が自動的にインストールされます。
その後、このディレクトリを VSCode で開いてくれます。

$ code .

Python Extension を WSL 側にインストールする

Windows 側にはすでに Python Extension がインストールされています。
しかし WSL 側にもインストールする必要があります。
そのため Python Extension を探します。

f:id:edosha:20211109155639p:plain
Python Extension

Install in WSL をクリックしてインストールします。

Python Interpreter を選択する

Python Interpreter として、さきほど Pipenv でインストールした Python を選択します。
VSCode の左下をクリックするとリストが出てくるので、それらしきものを選択します。

f:id:edosha:20211109160130p:plain
Python Interpreter の選択

Windows 10 Home に WSL2 を入れる

まえがき

今開発しているのは Ubuntu をローカル Web サーバにした機械学習系のプロダクト。
クラウド Web サーバであれば AWS などを使うのでしょうが、ローカルネットワーク内でのみ使用する Web サーバなので、
サーバもローカルで外のネットワークに出ません。
つまりリモートアクセスができないのです。

昨今の流行りに乗って、週に何日かリモートワークをしていますが、開発サーバに外からアクセスできません。
またリモート時に持って帰るわけにもいきません。
仕方ないのでリモート用の Windows 10 Home に WSL2 を入れることにしました。

WSL2 のインストール

手順はこちらに書いてあるとおりです。

docs.microsoft.com

Windows のバージョンを確認する

Windows のバージョンが 2004 以上 (Build 19041 以上) であることを確認します。
Windows の設定 -> システム -> 詳細情報から確認できます。

f:id:edosha:20211109142729p:plain
Windows のバージョン確認

管理者で PowerShell を起動する

Windows キー + X を押した後 A キーをタイプすれば OK。

インストールするバージョンを選択する

WSL2 でインストールしたいバージョンがあるか確認します。
PowerShell で以下のコマンドを入力します。

wsl -l -o
f:id:edosha:20211109142959p:plain
インストールするバージョンの選択

所望のバージョンをインストールする

今回は Ubuntu 20.04 をインストールしたいので、PowerShell で以下のコマンドを入力します。

wsl --install -d Ubuntu-20.04

このあと再起動を求められることもあります。
その後ユーザ ID とパスワードを決めて、インストール完了です。
すごく簡単。

初期設定

初期設定の Best Practices は以下を見よとのことです。

docs.microsoft.com

とりあえずはパッケージのアップグレードだけしておきました。

$ sudo apt update && sudo apt upgrade

あと、WSL2 のファイルを Explorer で操作できるのは便利。

$ explorer.exe .

こうすると WSL2 のカレントディレクトリを Explorer で開けます。

Ubuntu から QNAP NAS にバックアップを取る

まえがき

バックアップ用に QNAP NAS TS-431Kを調達しました。

ここに、仕事用の様々な PC からバックアップを取ることにします。
Windows からは、QNAP 純正ユーティリティの NetBak Replicator が使えるので、それを使いました。

www.qnap.com

ただこのツールは Windows 専用。
Ubuntu 用には QSync というツールがありますが、これは Google Drive みたいな感じで、QNAP の特定ディレクトリをマウントするユーティリティのようです。
なので、これを使ってマウントしたうえで、rsync でバックアップを取ることにしました。

QNAP に Qsync Central を設定する

基本的には以下のドキュメントに書いてあるとおりです。

www.qnap.com

まず最初に QNAP の GUI から App Center を開きます。
そこで Qsync Central を検索してインストールします。

f:id:edosha:20210428093906p:plain
Qsync Central のインストール

次にメインメニュー -> アプリケーションから Qsync Central を開きます。
共有フォルダーを開き、バックアップ先にしたいディレクトリに権限付与を設定します。

f:id:edosha:20210428094249p:plain
権限付与

これで QNAP 側の設定は OK です。

Ubuntu に Qsync Client を設定する

Ubuntu で QNAP ユーティリティのページにアクセスし、Qsync の Ubuntu 用パッケージをダウンロードします。

www.qnap.com

f:id:edosha:20210428094549p:plain
Qsync Ubuntu

ターミナルを開き、ダウンロード先のディレクトリに移動します。
そこで以下のコマンドを叩きます。

$ sudo dpkg -i <download_file.deb>

インストールすると再起動せよと出るので、指示通りに再起動します。
すると起動後に Qsync Client が自動的に起動されます。
そこで QNAP 側のアドレスや ID を設定し、同期用のディレクトリを指定すれば完了です。

Ubuntursync によるバックアップを行う

まずは rsync をインストールします。

$ sudo apt update
$ sudo apt -y install rsync

次に rsync コマンドを発行します。

$ sudo rsync -auv --delete --progress src_path dest_path

src_path はバックアップしたいディレクトリ、dest_path は、さきほど設定した同期用のディレクトリです。
これで、バックアップが行われるようになります。

定期的に実行されるようにする

cron を使えば、定期的にバックアップを実行できます。
私の場合はいくつかのディレクトリをバックアップしたいので、簡単なシェルスクリプトを作って実行させるようにしました。
こんな感じです。

#!/bin/bash

echo 'password' | sudo -S rsync -auv --delete --progress src_path1 dest_path1
echo 'password' | sudo -S rsync -auv --delete --progress src_path1 dest_path1

password は sudo 用のパスワードです。
これをすることで sudo が自動的に実行されるようにしました。

最後に cron への設定です。

$ sudo crontab -e
0 3 * * * bash /home/user/backup.sh

これで毎日3時に、バックアップ用のスクリプトが実行されるようになりました。