Django

Windows10 に Linux 環境を作る【 Ubuntu と WSL 】

先日 VPS を借りたので、Ubuntu のログイン設定を行いました。
今回は同じ環境をローカルの Windows 10 に作ります。

  • Windows10
  • Ubuntu 20.04LTS
  • PyCharm Proffessional(有料版)

目的は VPS と同じ環境で Django 開発を行うことです。
PyCharm を使ってローカルの Ubuntu 環境で Django を開発します。

Ubuntu のインストール

そもそも Ubuntu がよくわかってなかったので調べました。

Ubuntu とは

Ubuntu とは Linux ディストリビューションのひとつで、Windows や Mac で Linux を扱えるようにするためのものです。
読み方は「ウブントゥ」。

  • Ubuntu は現在も、将来的にも無償で提供される
  • 6か月ごとに新しいバージョンがリリースされる
  • LTS がついているバージョンはサポート期間が5年
  • とにかく使いやすい(らしい)

元々 Unity は Ubuntu で開発されていたようです。(現在はGNOME)ここで Unity の名前が出ると思ってませんでした。

Linux ディストリビューションの種類

Linux には様々な種類があり、それをディストリビューションと呼びます。

  • Cent OS
  • Ubuntu
  • Debian
  • Linux Mint

などなどありますが、日本語のドキュメントも充実して初心者向けのディストリビューションが Ubuntu です。
また、人気のディストリビューションの一つだったCent OS は終了し、Cent OS Stream に引き継がれたようです。
落ち着くまで Cent OS は怖い、という意見が多かったです。

Linux ディストリビューション とは

OSの中核部分であるLinuxカーネルに、各種のツールやユーティリティ、ライブラリ、アプリケーション、ソフトウェア開発ツール、デバイスドライバ、インストーラなどを追加して一つの圧縮ファイルやメディア(DVDなど)にパッケージしたもので、コンピュータにLinuxシステムを導入(インストール)して操作・使用可能にすることができる。

Linuxディストリビューション | e-Words

広義の Linux と 狭義の Linux があり、
広義の Linux を Linux ディストリビューション、狭義の Linux を Linux カーネルと呼びます。

カーネル

Windows も Linux もカーネルの基本的な考え方は同じです。

カーネルの中心的な機能は下記の4つ。

  1. メモリ管理
  2. プロセス管理
  3. スケジューリングと割り込み
  4. デバイス(HDD、NIC 等)管理

他にもいろいろとやってるそうですが、様々なアプリケーションや機器を管理する、OSの中核をなすソフトウェア、という感じでしょうか。

  • OS はパソコンの人格に相当するソフトウェア
  • カーネルは OS の中核部分に位置する
  • カーネルはソフトウェアとハードウェアの仲立ちをする

バックエンドはこれまで無縁だった単語の羅列ですね。

Ubuntu のインストール方法

Ubuntu についてなんとなく理解できたので、インストールに移ります。

Windows と Mac でインストール方法がずいぶん違うようです。
というのも Mac のベースは Linux だそうで、そのため Mac を Linux 環境にするのは簡単なんだそうです。
ただ、私の環境は Windows・・・。

Windows に Ubuntu を入れる方法は2種類あるようです。

  1. VirtualBox をインストールし、VirtualBox 経由で Ubuntu を起動する
  2. Windows Store から Ubuntu をインストールして WSL を使う

ネットでおススメされた 2 番で進めました。

Windows Store でのインストール

2022年 3月現在、Windows Store には 3種類の Ubuntu が並んでいます。

今回インストールするのは 「 Ubuntu 20.04.4 LTS 」の Ubuntu です。
基本的には最も数字が多きい、かつ LTS のついたバージョンを利用します。

冒頭でも記載しましたが、LTS のついているバージョンであれば5年間のサポートが受けられます。
今回の 20.04.4 であれば 25年までサポートが続きます。

WSL を使用する

Ubuntu をインストールすることで Linux ディストリビューションは構築できたんですが、これで Linux 環境ができたのかというと、まだ不完全です。

Windows で Linux を扱うには、

  • Linux ディストリビューション
  • Windows Subsystem for Linux ( WSL )

の 2つが必要です。

WSL とは

Linux 用 Windows サブシステムを使用すると、開発者は、従来の仮想マシンまたはデュアルブート セットアップのオーバーヘッドなしで、ほとんどのコマンド ライン ツール、ユーティリティ、アプリケーションを含む GNU/Linux 環境を変更せずそのまま Windows 上で直接実行できます。

Linux 用 Windows サブシステムとは | Microsoft Docs

イマイチよくわかりません。

かなり長くて専門的でしたが、上記の記事がわかりやすかったです。

  • これまで Windows では仮想化環境を利用して Linux を使用していた
  • 仮想化環境ではいろいろと問題があった
  • そのため開発者は Windows ではなく Mac や Linux を使用することが多かった
    ( そういえばうちの会社の開発陣のほとんどが Mac です )
  • そこで Windows10 から仮想化環境の代わりに WSL が使えるようになった
  • Windows の Web開発者やPython/Rubyなどの開発者にとっては WSL 一択

要約するとこんなところでしょうか。
Ubuntu のインストール時の選択肢に VirtualBox がありましたが、これは Windows で Linux を扱うための仮想化環境のひとつだったようです。

WSL の特徴

  • 運用サーバーとしては使えない
  • Linux サービス、デーモン、ジョブなどのバックグラウンドタスクは動作しない
  • どんな Linux ソフトでも動くわけではない(やってみないとわからない)
  • Bash から Windows ソフトを実行できる
  • Windows のユーザーと WSL のユーザーは別管理
  • 日本語のファイル名が設定できるかはディストリビューション次第
    → Ubuntu なら大丈夫っぽい。 UbuntuのCUIで日本語ファイルを使う方法
  • 空白を含むファイルは使えるが、Linux では使用しないため、WSL に渡さないほうがいい
  • C:\Program Files\WindowsApps にインストールされる

WSL のインストール

WSL は Windows で Ubuntu を使えるようにするためのものなので、Windows にインストールします。
インストールは簡単で PowerShell でコマンドをひとつ実行するだけです。

Windows PoweeShell を管理者として実行します。

PowerShell のターミナルで下記のコマンドを実行します。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

このあと PC を再起動すれば Windows上で Ubuntu が起動します。

Ubuntu の起動と初期設定

Ubuntu を起動すると bash が開きます。

初回起動時に アカウント名とパスワードを求められるので設定します。
下記のコマンドで出力情報を初期化できます。

clear

アップデート

下記二つのコマンドを実行することで環境をアップデートすることができます。

sudo apt-get update
sudo apt-get upgrade

python 環境の確認

python3 --version

20.04.4 にはデフォルトで python 3.8.10 が入っています。

pip --version

pip はインストールされていません。python の環境構築はこの辺から必要そうです。

ユーザ設定

下記も参考にしてください。

root パスワード設定

インストール直後は root パスワードが設定されていません。

sudo passwd root

ユーザの追加

adduser ユーザ名

管理権限の付与

gpasswd -a ユーザー名 sudo

ユーザーの切り替え

ここも少し違います。
WSL は自動で root アカウントでログインします。最初から一般ユーザでのログインができません。

そのため、root でログイン後に一般ユーザに切り替えます。

一般ユーザへの切り替え
su ユーザ名
スーパーユーザへの切り替え

su コマンドだけの場合は スーパーユーザに切り替えます。

su

PyCharm での開発環境を整える

PyCharm で Ubuntu を使える環境を整えていきます。

上記の記事みてたのでかなり覚悟してたんですが、この数年でずいぶん楽になっているようです。

インタープリターの追加

まずはデフォルトで Ubuntu にインストールされている Python を登録します。

Linux ディストリビューションの項目にインストールした Ubuntu20.04LTS が入っていて選択できるはずです。

Python インタープリターのパスに /usr/bin/python3を指定します。
Ubuntu の Python はここに入っています。

Python 環境の構築

足りていないものが多々ありますので、Python 環境を構築していきます。

インタープリターを設定した時点でターミナルが Ubuntu のものになっています。
ここからは Ubuntu ではなく PyCharm のターミナルでコマンドを打っていくことができます。

pip のインストール

sudo apt install python3-pip

Ubuntu の pip は通常の pip と比べ、インストールするパッケージの保存先が異なります。

通常の pip全ユーザーが利用できる場所にインストールされる
Ubuntu の pipインストールしたユーザーのみが利用できる場所にインストールされる

※ pip はどのユーザーでも使える場所にインストールされます。
 対象となるのは pip でインストールするパッケージです。

venv のインストール


venv のインストールは下記のコマンドです。

sudo apt install -y python3-venv

Ubuntu で Django プロジェクトを作る

では、最終目標だった PyCharm を利用した Ubuntu での Django プロジェクトの作成を行っていきます。

プロジェクトの環境構築

プロジェクトディレクトリの作成

新規プロジェクトを作成する際、 Ubuntus のディレクトリが表示されるようになっています。

bash の root の home が
\wsl$\Ubuntu20.04LTS\root
になっていますので、ここを基準に作ります。

テスト用のものなので django_test としました。

venv 環境構築

WSL では PyCharm の GUI 機能を使用した venv の構築ができません。
今まで楽だった仮想環境の構築や設定、起動をターミナルから手動で行う必要があります。

WSL の venv は自作する

もう少し具体的にお話しすると、

PyCharm のターミナルで WSL を操作するには上記の設定でインタープリターを設定する必要があるんですが、
この項目には venv 環境を設定する項目はありません。

pure Python であれば venv 環境をついでに自動で作ってくれますが、ここの基本インタープリターの項目に WSL の Python が設定できません。

上記の設定で作るプロジェクトの場合、venv を自動で作ってくれますがターミナルが Windows の PowerSHell になってしまいます。

そのため、インタープリターを WSL 環境に設定した上でターミナルで手動で venv 環境を触っていきます。

他の方法でなんとかなりそうな気もするんですが、調べてもぱっとでてこなかったのでこのまま進みます。

仮想環境の構築
python3 -m venv パス

今回は「 venv 」の名前で作成します。

python3 -m venv venv

ちゃんと venv 環境を構築してくれます。

仮想環境の有効化

該当のディレクトリにて

source 仮想環境名/bin/activate

今回の場合だと下記のコマンドです。

source venv/bin/activate
仮想環境から抜ける
deactivate

各種パッケージインストール

Ubuntu でパッケージをインストールする場合、冒頭の python の部分が python3 となります。

例えば Django 3.2 をインストールする場合は下記のコマンドになります。

python3 -m pip install Django==3.2.8

Django プロジェクトの構築

ここからはいつも通りです。

django-admin startproject testproject .
python manage.py startapp testapp
python manage.py runserver

問題ないですね。
無事 PyCharm で Ubuntu / WSL 環境で Django が開発できるようになりました。

Visual Studio Code の環境を整える

私は完全に PyCharm 派の人間なのですが、ついでに VSCode でも Ubuntu が使えるようにしておきます。

Remote - WSL のインストール

リモートの開始

これでターミナルから Ubuntu の bash を操作できます。
VSCode のほうがかなり簡単です。

-Django
-, ,