Cloud9でDjangoの開発環境を作ろうとしたがデバッグのやり方がよく分からなかった話

# TL;DR

* Cloud9とはAWSで使えるブラウザ上で動作するクラウドベースのIDE
* OSSでも公開されていてローカル環境でも動かせるので、やってみた
* Djangoの開発環境を作れたが、デバッグのやり方がちょっとよく分からないかった

## 動作環境

* Vagrantで構築(boxは`bento/ubuntu-19.04`)
* python2.7.16 (Cloud9用)
* python3.7.3 (Django用)
* Django2.1

### Cloud9のインストール

Cloud9のインストールは割と簡単でした。とりあえずVagarntで仮想マシンを立てます。Vagrantfileはこんな感じで良いと思います。

```Vagrantfile
# -*- coding: utf-8 -*-
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vbguest.auto_update = true
  config.vm.box = "bento/ubuntu-19.04"
  config.vm.network :private_network, ip: "192.168.99.219"
end
```


立てたらとりあえずgccとpython2系を入れます。

```bash
sudo apt install --no-install-recommends -y gcc python
```

ほんで、Cloud9は[ここ](https://github.com/c9/install)にある通り、必要なdependenciesをインストールしてくれるスクリプトを公開しているのでこれを実行すれば、準備は整います。

```bash
curl -L https://raw.githubusercontent.com/c9/install/master/install.sh | bash
```

あとはgit cloneしてインストール用のスクリプトを実行すれば完了です。

```bash
git clone --depth 1 https://github.com/c9/core.git
./core/scripts/install-sdk.sh
```

### systemdとforeverを使ってcloud9の自動起動と永続化

インストールすると、`server.js`で動くよ！みたいなメッセージが出てきたりもしますが、せっかくなので自動起動と永続化をしたいと思いました。
`Node.js`で作られたアプリをデーモン化して永続的に実行するにはforeverを使うのが良さそうだったので、まずはこれを入れます。

```bash
sudo npm install -g forever
```

そしたら`/etc/systemd/system/cloud9.service`に以下のファイルを置きます。

```/etc/systemd/system/cloud9.service
[Unit]
Description=cloud9 service
After=network.target

[Service]
Type=forking
Environment="HOME=/home/vagrant"
ExecStart=/usr/local/bin/forever start /home/vagrant/core/server.js -l 0.0.0.0 -p 8080 -a : -w /home/vagrant/workspace
ExecStop=/usr/local/bin/forever stop $MAINPID
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=cloud9
User=vagrant
Group=vagrant

[Install]
WantedBy=multi-user.target
```

ハマりポイントとしては`Environment="HOME=/home/vagrant"`の部分ですかね。HOMEの環境変数がセットされていないと起動しませんでした。あと実行ユーザにはvagrantを指定してます。

置いたらあとは自動起動の設定をして起動します。

```bash
sudo systemctl enable cloud9
sudo systemctl start cloud9
```

これでCloud9が動き始めてブラウザ上で見られるようになったはずです。

私はVagrantfileに`config.vm.network :private_network, ip: "192.168.99.219"`と設定していたので、http://192.168.99.219:8080 で見れるようになりました。
![c9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24415/3d17edbe-cbf4-e269-1d2e-27560177e2bc.png)

### Djangoをインストールし、Cloud9で動かしてみる

作りたいのはDjangoの開発環境なので入れます。

```bash
sudo apt install --no-install-recommends -y python3 python3-pip
sudo pip3 install Django==2.1
```

これらのコマンドは、せっかくなのでCloud9のターミナルで実行してもいいですね。
では次に`django-admin`コマンドでプロジェクトを作ります。作ったら、

* `python3 manage.py migrate`の実行
* 外からでも見れるように`settings.py`の`ALLOWED_HOSTS`に`['*']`を入れる

これらをやります。
![ah.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24415/c753b563-322f-c3c3-eccd-54b41567f94c.png)

その次は右上の歯車マークから`Preferences`を開いてPython SupportのPython VersionをPython 3にします。
![ps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24415/6cc615dc-a05d-e08c-6ac4-dae14d6f6ffd.png)

もうそろそろ疲れてきましたが、Djangoの実行までもうちょいです。
![run.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24415/7f4ccff8-dfb6-5f19-7a0a-261b6e556dd5.png)

bashとかのタブがある画面に`New Run Configuration`を選択、`Command`には`app/manage.py runserver 0.0.0.0:8000`と入力して`Runner`はPythonを指定して実行します。そうするとDjangoのサーバが動き出します。http://192.168.99.219:8000/ で見れると思います。

### デバッグのやり方がよく分からなかった

実行してめでたしめでたし、ではなく私はデバッグのやり方を知りたいと思いました。いろいろなページをググると、どうやら「Runnerの虫さんマークにチェックするとデバッグ実行できる」ということが分かりました。が、無いんです。
RunnderでPython2を選ぶと虫が現れます。
![p2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24415/33ec2a46-9333-f6da-64e1-540bbc5cacb7.png)
しかし、Djangoのバージョン2以降はpython3系でないと動かないのでこれでは実行できません。色々調べたのですが結局分からずじまいでした。Cloud9自体は結構遊び甲斐がありそうなので使っていきたいのですが、デバッグ実行を私はやりたいので引き続き調べていこうと思ってます。