先日 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つ。
- メモリ管理
- プロセス管理
- スケジューリングと割り込み
- デバイス(HDD、NIC 等)管理
他にもいろいろとやってるそうですが、様々なアプリケーションや機器を管理する、OSの中核をなすソフトウェア、という感じでしょうか。
- OS はパソコンの人格に相当するソフトウェア
- カーネルは OS の中核部分に位置する
- カーネルはソフトウェアとハードウェアの仲立ちをする
バックエンドはこれまで無縁だった単語の羅列ですね。
Ubuntu のインストール方法
Ubuntu についてなんとなく理解できたので、インストールに移ります。
Windows と Mac でインストール方法がずいぶん違うようです。
というのも Mac のベースは Linux だそうで、そのため Mac を Linux 環境にするのは簡単なんだそうです。
ただ、私の環境は Windows・・・。
Windows に Ubuntu を入れる方法は2種類あるようです。
- VirtualBox をインストールし、VirtualBox 経由で Ubuntu を起動する
- 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 のほうがかなり簡単です。