Edited at

PyCharm + WSLを導入したWindows10でのDjango開発

More than 1 year has passed since last update.


はじめに

pythonを使って開発がしたい。

VPSも借りたし、いまからどっぷりweb開発するならDjangoがいいらしい。

統合開発環境:PyCharmもなんとかPro版を入手(注:筆者は2018年3月現在 春休み中の学生)

あとは手を動かすだけ…………………ッッ!!

と思っていた時期がわたしにもありました。

しかし、ふと気づきました。

「なんでわたしはこんなに遠回りをしているんだろう………………………?」

stress_woman.png

というのは、windowsでもろもろ手を動かしていくにあたって、他のLinux,Macマシンと比べると、あまりにも例外や理不尽や遠回りが多すぎるように思えたのです。

いわゆる「おま国」のwindows版,つまり「おま窓1」といえばわかりやすいでしょうか。

つまり、Mac, Linuxだとコマンドで一発インストールなところをWindowsでは複雑な手順を踏まざるを得なかったり、そもそも機能が提供されていない場合もあります。(わたしは開発最初の一週間で10回以上もこの事例に遭遇し、心が折れました2)

pc_ikari.png

コマンドプロンプトをつかって開発するのはやめよう。でもWindowsを手放したくはないから、代わりにWSLを使おう。ということで、今回は環境構築をきっちりやって、ちょっとだけDjango開発の最初の部分だけおさらいする程度にしたいと思います。

※なお、この記事は出来る限り全年齢対象として書いているので、玄人の方は適宜読み飛ばしてください……………… :sleepy:


もくじ


  1. はじめに

  2. 今回やること

  3. ここまでの感想

  4. 補足


    • 実際に開発を開始する前の毎回のルーティーン



  5. 参考文献

bird_hebikuiwashi.png


今回やること



□ 1. PyCharm Pro版のインストール


□ 1.2 公式HPからインストーラをダウンロード


□ 2. Windows Subsystem for Linux(WSL)のインストール


□ 2.2 Windows powershell を管理者として実行


□ 3. bashを見やすく使いやすく便利に

□ 4. Python3.6.xのインストール

□ 5. 仮想環境をつくる(標準ライブラリ「venv」)

□ 6. Django projectの開始

□ 7. WSL上でデーモンサーバへのssh接続確保


□ 7.2 Windows本体のhttpdサービスを停止する


□ 8. リモートインタプリタ設定



PyCharm Pro版のインストール


統合開発環境、つまりIDEと呼ばれるプログラミング開発をしていくうえで欠かせない便利ツールの一つとして、主にpythonとそのweb開発フレームワークに対応3しているPyCharmを使います。


公式HPからインストーラをダウンロード

PyCharmを提供するJetBrains公式ホームページから最新版をダウンロードしましょう。これを書いている今は3月ですが、2018年4月にはメジャーアップデートがあるようです。30日間であればEAP版も入手できるので、新旧どちらか選んでDOWNLOAD NOWしてください。ただし、実際にインストールするのは「Proffessional ver.」です。これは、後述するリモートインタプリタ設定を行えるのがそのエディションだけだからです。

JetBrainsの学割の申請方法について

学生なら上記の方法で入手、そうでない場合は年間だいたい二万円強くらいのサブスクリプションでPRO版を使い始めることが出来ます。インストーラに従いながらポチポチ押していけば簡単にインストール出来るはずです。次のステップに進みましょう。


Windows Subsystem for Linux(WSL)のインストール


コマンドプロンプトからWSLをインストールします。WSLとはWindows Subsystem for Linuxが正式名称である、WindowsのOSに搭載することが出来るLinuxのOSのことです(この説明であってるのかな?)。なんとなくふわっと理解した限りでは、デュアルブートとかユーザが難しいこと面倒なこと4を一切やらずにWindowsPCからLinuxのCLIが使えるようになるってことだと思います(そのほかにもあったらごめんなさい)。

kaisya_komaru_woman.png

………と、いわれてもまだよくわからないと思うので、以下の記事を参考にしてください。素晴らしく丁寧に書かれていました。

リモートインタープリタとしてのWSLの使用 - 公式ヘルプ | PyCharm

上記の解説を参考にして、WSL(今回はUbuntu16.04)をWindowsPCで使えるようにします。記事に従い、細かな設定を行なってサーバを起動するその直前で手を止めてください。つまり、手順6まで終わったら手順7のsudo service ssh startは実行せず、待機していてください。なぜならサーバを動かすその前に、まずはそのコマンド実行環境とpythonの環境を整える必要があるからです。

……………… さぁ、これからが長い長い環境構築のはじまりです。


Windows powershell を管理者として実行

キーボード左下、Altキーの横辺りにあるはずのWindowsキー(スタートキー)を押しながら X を押してください。すると、画面左側にメニューがホップしたかと思います。この真ん中あたりにある「Windows PowerShell(管理者)(A)」を選択してください。そうすれば、青いウインドウが現れるので、そこへ以下のコマンドを入力してください。


Windows-powershell

# Windows powershell を管理者として実行

# 以下のコマンドを入力
$ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
#:
#:
# (処理メッセージが並ぶ)
#:
#:
# 最終的に、再起動を求められる => Yes
# 再起動(画面が自動的に暗転し再起動した後ログイン画面まで戻る)

PCが再起動したら、次はコマンドプロンプトを開きましょう。スタートキーを押し、そのまま続けて「cmd」と打てば自動的にプログラムを検索して候補を表示してくれますので、コマンドプロンプトが現れたらEnterキーを押してそれを開いてください。同様に、以下のコマンドを入力します。


cmd.exe

# 以下のコマンドを入力


$ bash

# WSLのパスが要求される => 入力
#:
#:
# $ROOT ディレクトリが変化する

UserName@hostname:/mnt/c/Users/username$

# => UserNameはWSLでのユーザー名(先程決めたやつ)
# => hostnameはPC自体に付けられた名前(変更可能)
# => usernameはWindowsでのユーザー名

# パッケージ管理のためのコマンド`apt-get`を更新&バージョンアップする

UserName@hostname:/mnt/c/Users/username$ sudo apt-get update
UserName@hostname:/mnt/c/Users/username$ sudo apt-get upgrade

# 'sudo apt-get update' もそこそこ、'sudo apt-get upgrade'のほうも
# 実行完了までかなーり時間がかかるので、余裕のあるときにやること

# 次は、外部からssh接続できるように許可設定を行う
# 内部エディタ'vi' を起動して設定ファイルを編集する

UserName@hostname:/mnt/c/Users/username$ sudo vim /etc/ssh/sshd_config

# => 'vi'の使い方は適宜ググって欲しい
# => 簡単に言うと「コマンドモード」「編集モード」の二つを使い分ける必要がある
# cf. 'https://net-newbie.com/linux/commands/vi.html'

'''/etc/ssh/sshd_config
# 「i」を押すと入力モードに移行('i'nsert)

(中略)

UserPrivilegeSeparation no # yes => no

(中略)

PasswordAuthentication yes # no => yes

# 「Escキー」を押すと編集モードに移行('Escape')
# 「:w」+「Enterキー」で変更を保存
# 「:q」+「Enterキー」で編集の終了(viの終了)
'''

# ここまでが手順6
# 次の手順7には進まず待機させておく


これで、Windowsからbashを使う準備ができました!bashとは、Windowsでいうところのコマンドプロンプトとほぼ同じようなものだと思っておいてください。次はそのbashを使いやすくカスタマイズしてみます。

※既にストアからアプリとしてWSLをインストールしていた場合、記事の内容とは少し挙動が異なるかもしれません。しかし、結果としてコマンドプロンプトにbashと入力して画面が変化すれば成功です。

tamashii_nukeru_woman.png

やることが多すぎて今こんな感じの人もいるかもしれません。

大丈夫です!人生の春休みを自宅に引きこもって過ごす哀れな学生には誰も負けません。


bashを見やすく使いやすく便利に



:warning: お急ぎの方、最低限の環境構築だけして開発に移りたい方はそのままこの章は飛ばして、次の「Python3.6.xのインストール」へお進みください。


次は、Windowsユーザからするとあまり馴染みがない「bash

これは単にLinuxのOSにおけるコマンドプロンプトとおんなじようなもの、と思っとけば大丈夫です。強いて言えば、コマンドプロンプトのそれよりはずっと強力で心強い最高の友となりうる存在です。

そんなbashを使いこなすためには、自分の好みにあったカスタマイズがほしいところです。ここでは一旦、開発をより快適に進めていくために、自分だけのオリジナルのカスタマイズを行ってみましょう。どうやってカスタムするのかという疑問が浮かぶかもしれませんが、それもすべてbash内部のコマンドで解決します。具体的には、内部エディタである「Vi」を使って「.bashrc」「.bash_profile」に手を加えることで自分好みのカスタマイズが実現できます。

それゆけ!ターミナル部 第6回Bashをカスタマイズしていい感じにしよう!|Geekroid

Linuxで、bash プロンプトを素敵で実用的なものに変更する | Linux.com

上記のページを参照しながら、自分でエイリアスや関数を設定してみてください。bashの実行コマンドにエイリアス(alias)を設定することで、作業効率が大幅に上がることが実感できるでしょう :sunglasses:

※実際問題、コマンドを毎回ちまちまと打っていると、そればかりに気が取られてしまい本当にやりたかったことが霧散してしまうことがあります。

computer_keyboard_yatsuatari_woman.png


◇エイリアスや環境設定など、WSL(ubuntu)のデフォルト設定を元にした「.bashrc」「.bash_profile」を用意してみました

◆さらにそれをコマンド一発で自動セットアップするシェルスクリプトを書いてみました。前述したご自分でのカスタマイズが面倒であれば、以下のページからgit cloneして使ってみてほしいと思います


Ningensei848/dotfiles | Github

これさえあれば、何度もLinux環境を新しくし直してもコマンド一発でいつでも同じ自分の好みにあったbash画面で作業することが出来るはず……………?




Python3.6.xのインストール


どうせやるなら最新環境のpythonを使って開発5がしたい……………。

というわけで一番信頼できるページの情報に従ってpython3.6.xをインストールします。

snake_dokuhebi_kiba.png

Ubuntu環境のPython - python.jp

上記ページの指示に従ってインストールしていきます。WSL(ubuntu)のVer.は16.04 LTSだから、その説明がなされている先頭の方にあるやり方で行います。

この時点でインストール先のWSLはほぼほぼまっさらな状態なので、よっぽどのことがないとエラー等は出ないと思いますが…………………もしエラーを吐いたらごめんなさい:innocent:


bash

# 念の為、デフォルトで実行プログラムが置かれるディレクトリへ移動

$ cd /usr/bin

# pip, pip3 コマンドのためのパッケージをインストール
/usr/bin$ sudo apt install python3-pip python3-dev
/usr/bin$ sudo apt install python-pip python-dev

# 以下5つのコマンドを順番に正確に実行
# 出典: https://www.python.jp/install/ubuntu/index.html
/usr/bin$ sudo add-apt-repository ppa:jonathonf/python-3.6
# => gpg: imported: 1 (RSA: 1)
# => OK

/usr/bin$ sudo apt update
# => Fetched 1,673 kB in 12s (131 kB/s)
# => Reading package lists... Done

/usr/bin$ sudo apt install python3.6 python3.6-dev
# => 以下のような処理メッセージが並ぶ
'''



Setting up libpython3.6-minimal:amd64 (3.6.3-1ubuntu1~16.04.york1) ...
Setting up python3.6-minimal (3.6.3-1ubuntu1~16.04.york1) ...
Setting up libpython3.6-stdlib:amd64 (3.6.3-1ubuntu1~16.04.york1) ...
Setting up libpython3.6:amd64 (3.6.3-1ubuntu1~16.04.york1) ...
Setting up libpython3.6-dev:amd64 (3.6.3-1ubuntu1~16.04.york1) ...
Setting up python3.6 (3.6.3-1ubuntu1~16.04.york1) ...
Setting up python3.6-dev (3.6.3-1ubuntu1~16.04.york1) ...
Processing triggers for libc-bin (2.23-0ubuntu10) ...
'''

/usr/bin$ sudo wget https://bootstrap.pypa.io/get-pip.py

# => 2018-03-XX 20:48:27 (12.5 MB/s) - ‘get-pip.py’ saved [1595408/1595408]

/usr/bin$ sudo python3.6 get-pip.py

# => Successfully installed pip-9.0.1

# rootディレクトリへ移動
/usr/bin$ cd ~

# python3.6へのPATHを表示
$ which python3.6
/usr/bin/python3.6 # Installation Completed!!

$ python3.6 --version
Python 3.6.3 # you can use `python3.6`


出典: https://www.python.jp/install/ubuntu/index.html

(※wgetsudo付けてないとpermission deniedになってしまったので付けておきました)


Django projectの開始


seiza13_hebitsukai.png

Djangoの公式チュートリアルを見ながら、DjangoのインストールとDjango projectを開始していきましょう。

なお、django-admin startproject websiteしたとき、内側のwebsiteはDjangoの内部仕様上、あとから変更することは出来ない(難しい・煩雑)のできちんと考えて決めましょう(1敗)。

以下、公式チュートリアルページからの引用です。


django-admin startproject mysite が何を作成したかをみてみましょう:



website

mysite/              # <= 外側の'mysite'ディレクトリ(単なる入れ物)

manage.py
mysite/ # <= 内側の'mysite'ディレクトリ
__init__.py # (Django内部の"Pythonパッケージ"という扱い)
settings.py
urls.py
wsgi.py


外側mysite/ ルートディレクトリは、このプロジェクトのただの入れ物です。 この名前は Django に関係しませんので、好きな名前に変更できます。

内側 の mysite/ ディレクトリは、このプロジェクトの実際の Python パッケージです。


つまり、

- 外側と内側で二つの同名ディレクトリがある

- 外側は名前を変えても問題がない

- 内側は「名前を変えると大変なことが起きる



よって、django-admin startproject websiteしたときのwebsite部分が、実はプロジェクト内部のpythonパッケージであることがわかりました。よって、コマンドの引数として渡すwebsiteは常に目に入れることになるpythonパッケージである、ということを念頭においてdjango-admin startprojectを実行しなくてはなりません。

私の場合、同じ名前のディレクトリが2階層続けて現れるのがすごく嫌だったので、すぐさまプロジェクト名を「myDevelopment」に変更しました。気にならない方はそのままでも構いません。

以上のことを踏まえて、bashにコマンドを入力していきたいと思います。


bash

# pipを利用してDjangoの最新版をインストール

$ sudo pip3 install Django

# => Successfully installed django-2.0.3 pytz-2018.3

# versionの確認
$ python3.6 -m django --version
2.0.3  # latest version 2018/03/16

# FAQ: module don't exsist
$ python -m django --version
/usr/bin/python: No module named django # not installed to 'python'
# so you have to use 'python3.6'

# BEFORE init new project...
$ cd ~ # move to root dir

# create NEW PROJECT by Django
$ django-admin startproject website # make new project Dir

# confirm dir
$ ls
website # directory created

# rename your project
$ mv website myDevelopment

# confirm dir
myDevelopment


さて、これであなたの開発プロジェクトがスタートしました!

つぎは、その開発に使うpythonのための仮想環境を作っていきましょう。


仮想環境をつくる(標準ライブラリ「venv」)


hebi_niramu_kaeru.png

python仮想環境界隈のシェア争いは熾烈で、しかし初心者には全く情勢が読めない6状況になっています。(参照:Pythonの仮想環境についてのまとめ - Qiita)

2018年3月現在、3.3以降のpython3系にはvenvが標準ライブラリとして付属しているようです。今回は、このvenvを利用して仮想環境を作ろうと思います。


※実際のところ、仮想環境が絶対に必要というわけではありません。実行環境のリセットが簡単にできたり、環境の使い分けが簡単になったりするという利点があることから仮想環境を導入することが多いようです。


Python で仮想環境管理 venv の使い方 - Qiita を参考にしてみます。

といっても使い方は簡単で、仮想環境をつくりたいディレクトリへ移動して、


bash


# python3.6-venvが必要って怒られるかも。そんなときは指示に従って以下のコマンドで対応。
'''
$ sudo apt install python3.6-venv
'''

$ cd ~/myDevelopment # 仮想環境を作りたいディレクトリへ移動する

$ python3.6 -m venv myvenv # `myvenv`という仮想環境ディレクトリを作成

$ ls # myvenvが作成されているか確認
myvenv # 仮想環境ディレクトリが作成されている

$ source myvenv/bin/activate # 仮想環境を起動(注:起動しないと使えません)

(myvenv) $ # カレントディレクトリの横に`myvenv`が出現

(myvenv) $ deactivate # 仮想環境を停止(?)

$ # 元の環境に戻る(仮想環境から抜け出す)


これだけです。入って、出る。これだけならなにも心配はいりません。もっと高度にいろいろな調整がやりたい場合は「pipenv」を使うといいかもしれません。

参考: pipenv を使ってみる - Unyablog.


WSL上のデーモンサーバへのssh接続確保


ここまできてようやくリモートインタープリタとしてのWSLの使用 - 公式ヘルプ | PyCharmの続きに取り掛かることが出来ます。長かったとは思いますが、あと少し頑張ってください!

pose_sugoi_okoru_woman.png

コマンドプロンプトからコマンド「bash」を入力し、コンソール画面(つまりあなたが今見ている黒いウィンドウのこと)が変化したかと思います。これは、「コマンドプロンプトからbashを起動した」ということです。それでは、以下bashから、コマンドを実行していきましょう。


bash

# sshサーバをデーモンモードで起動する

$ sudo service ssh start

# => * Starting OpenBSD Secure Shell server sshd

# プロセスツリーを表示して起動を確認する
$ pstree
init─┬─bash───pstree
└─sshd # running daemon server


bashからsshサーバーを起動しました。これにより、外部からWSLにssh接続出来る体制が整ったことになります。

もし、このbashを終了してしまうと、同時にsshサーバーのプロセスが終了してしまい、デーモンサーバといえど接続ができなくなってしまいます。よって、このbashウィンドウはこのまま放置して、別のcmd.exe(コマンドプロンプト)からbashを起動してください(ややこしいですね:weary:) そしてそこから以下のコマンドを入力し、WSLデーモンサーバへのssh接続を試みます。


bash(コマンドプロンプト)

# WSl上のデーモンサーバにssh接続する

UserName@hostname:/mnt/c/Users/username$ ssh 127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can`t be established.
ECDSA key fingerprint is SHA256:B1LaJj7PaToATVKnjoJ8cw6ogD8pVugri9BX6QB0qnZ.
Are you sure you want to continue connecting (yes/no)? yes # キーボード入力
Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
Ningensei848@127.0.0.1`s password: # パスワード入力

# if you input correct password...
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-43-Microsoft x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud

3 packages can be updated.
0 updates are security updates.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

UserName@hostname:~$ # Successfully connected!


上記のテキストが出力されていれば接続は成功です!お疲れ様でした!!

:thumbsup: :raised_hands: :clap:


Windows本体のhttpdサービスを停止する

なぜだか接続が確保できず困っているそこのあなたへ。実は、WSLではなくWindows本体に入っているhttpdが動いているがために、それがWSLの邪魔をしてしまいデーモンサーバにssh接続出来ないという事故が起こりえます。

Windows10 Anniversary updateで知らぬ間にSSHdが起動している : やすひでぶろぐ

私の場合、一度はssh接続することが出来たために喜び勇んで再度挑戦したらなぜかWSLではなくいつも普通に使っているcmd.exe(コマンドプロンプト)にssh接続してしまったということがありました。なるほどわかってみればなんということはないですね(2敗)。Windowsユーザでしか起こりえないことなのに、ほとんど情報がなく(というか初心者はhttpdのプロセスが衝突しているなんて発想に至ることが出来ず)、わけわからん事態だったのでここに警鐘として書き残しておきます。

対策は以下のとおりです。


  1. スタートメニューから歯車型アイコンの「サービス」というプログラムを検索

  2. サービス一覧から「SSH Server Broker」を見つけ出し、ダブルクリック

  3. プロパティが開くので[スタートアップの種類] を「無効」にする(同時に「SSH Server Proxy」も無効にする)

  4. OKを選択し、変更を適用する。


以下のページには、わかりやすく画像つきで説明がなされています。

ASCII.jp:Windows 10でSSH(Secure Shell)サーバーを使う|Windows Info


お疲れ様でした……………(疲労困憊)

ここを乗り越えれば、最後にPyCharmからGUIでぽちぽちクリックしていくだけです。


リモートインタプリタ設定


wa_uroboros_django.png

ここまで来てやっとこさPyCharmに戻ってきました。リモートインタプリタをつなぐにも一苦労ですね。

WSLのデーモンサーバが起動していて、かつbashからssh接続が完了した状態で、新たにPyCharmを起動してください。

pycharm_startwindow.PNG

この画面右下にある:high_brightness:から[Settings]を選択し、Default Settingsのウィンドウを開きます。

pycharm_defaultsettings.PNG

左のメニューから[Project Interpreter]を選び、さらに右上の:high_brightness:をクリックして、[Add remote]を選択します。

※この辺のやり方はPyCharm 2018.1 EAP ver.だとちょっと違っていたので、2018年春以降は少し仕様が異なるかと思います。

pycharm_add_remote_interpreter.PNG

新たにホップしたウィンドウ上部にある5つのラジオボタンのうち、真ん中あたりになる「SSH Credentials」を選択し、画面中心部にある"PyCharmがWSLへ接続するための必要事項"をフォームに入力してください。その情報が正しければ、そのままOKを押して終了できると思います。

※もし接続が確立できない場合、エラーが起きてしまいます。そしてPyCharmから、その入力した情報を保存するかしないか選ぶように言われるでしょう。

無事接続が確立されていれば、これにてすべてのセットアップが完了です!!!

お疲れ様でしたっっぅッッッ!!!!!!!!!!!!!!

happy_schoolgirl.png

つぎは、「PyCharm + WSLを導入したWindows10でのDjango開発日記 その02」になると思いますが、春休み中には書きたいと思いますゥゥゥゥぅ

ほな、まったのぅぅぅ~~~~っいぇっあ!


ここまでの感想


  • 「Windowsはクソ」ではなく「コマンド・プロンプトで開発しようとするのがおかしい」ということに気付かされた

  • httpdの疑似バグにしたって、なまじっか「接続できてしまう」がために手がかりとなる情報が乏しく、初見殺しになっている

  • こんな便利な開発環境があるになぜ情報が上がっていないのか不思議でたまらない。こういう本当に有力な情報は埋もれてしまうか秘匿されるのだろうか…………?


補足のはなし


実際に開発を開始する前の毎回のルーティーン


  1. コマンドプロンプトからbashを起動

  2. bashからWSlデーモンサーバを起動


    • このbashプロセスを保った状態でウィンドウは放置



  3. 別のコマンドプロンプトを起動&bashに切り替え

  4. bashから、コマンド「ssh 127.0.0.1」でlocalhostにssh接続

  5. WSLに接続されていることを確認

  6. PyCharmを起動

  7. Let's 開発!


この記事では、多少手荒だが完全に自動でサーバ起動までやってしまえる方法が紹介されています。後で試したい。

Windows10でBashのSSHサーバーを自動起動してみた


◇環境構築に失敗してもうなにがなんだかわからなくなったときに、WSLの場合は強制的にリセットすることができます。[スタートメニュー] >> [設定] >> [アプリ] >> [ubuntu] >> [詳細オプション] >> [リセット] を選んで、WSLを最初からやり直してみる(クリーンインストールし直す)のも一つの手かもしれません。


なんかapt-getじゃなくてaptが推奨されてるらしい?

6.2. aptitude、apt-get、apt コマンド - Debian 管理者ハンドブック

Debian の apt/apt-get/aptitude について

まぁいくつもパッケージ管理コマンドがあったら使い分けとかわからんし全部aptで解決してくれるならそのほうがいいよねって感じ


参考文献


注釈





  1. :apple:「おまえの窓にはこの機能は対応してねぇから!!!!!!!笑:grin:」 



  2. webにデプロイするときに必要になりそうな「uWSGI + nginx」とか「mod_wsgi + Apache」とかも結局導入できず3日くらい時間を浪費したので(瀕死) 



  3. フレームワークがいくらあってもそれDjangoでよくね?というくらいDjangoがフルスタックで実装できるらしいが………………? 



  4. windows10アップデートでデュアルブートマシンが起動不能になった話とかもあり、今は大丈夫だとしてもそれがずっと大丈夫とは言えない状況になっているようです(?) 



  5. 2系?そんなの知らない子ですね…………………:sweat_smile: 



  6. というかそもそも名前が似すぎていてどれがどの機能を持つのか誰もわかっていないという説がある(大嘘)(あながち間違ってはいないかも)