django + Bootstrap4 + Apache +mod_wsgi でタスク管理アプリを作った

サーバサイドにDjangoを利用したタスク管理アプリを結構前に作りました。
というか今も鋭意開発中です。
アプリを作る際にハマったところとか、参考にしたサイトや知識なんかをまとめておきたいと思います。

#タスク管理アプリ「gantt」のご紹介
まずはじめに、こういうものが作れましたの紹介をさせてください。
僕が作ったのがタスク管理アプリ「gantt」です。
https://gantt.work/

- 登録したタスクをガントチャートで表示することができます。
- 期限のないミニマルなタスクを登録するTODO機能を使うことができます。
- Twitter、GitHub、LINEでのソーシャルログインに対応しています。
- 期限切れのタスクがある場合に、TwitterへのDMで通知することができます。

タダだよ！よかったらつかってね！
タスクの期限切れはいずれLINEのプッシュ通知とかでもできるようにするつもり。

# 事前知識の習得

WEBアプリの作成知識は全くのゼロの状態から初めたので、どのサイトを使って勉強したかから書いていきます。

### Paizaラーニング
エンジニア向けの転職サイトのPaizaが出しているWEB学習サービスです。環境構築不要で、動画を見ながら問題をときつつ学ぶことができるので効率がいいです。このサービスで**Python、SQL、HTML/CSS、Bootstrap、Flask、Bash、Git**なんかをざっと学びました。
有料会員になると、動画を早回しする機能を使えるようになるので有料会員になるのもありかもしれません。
ちなみに僕は有料会員です。

https://paiza.jp/works

正直djangoを使う場合はSQL文は書けなくてもなんとかなります。でもDBがどういうものか知っておいたほうがイメージつくんじゃないかなーと思うので、余裕があったら見ておいたらいいかも。

### Djangoの使い方
Djangoの使い方は[こちらの記事](https://qiita.com/kaki_k/items/511611cadac1d0c69c54)を参考にして勉強しました。
簡単な書籍管理アプリをイチから作り方を教えてくれるので、初心者でも簡単に一個アプリを作ることができるのでおすすめです。
「Djangoでなにか作りたかったらこの記事を読んでおけばいいんじゃない？　んで作ればいいんじゃない？」っていうくらいおすすめです。


# WEBアプリの作成（実践）
何ヶ月かかかって作っていて、どういう順序で作っていったか覚えていないので、実装している機能ごとに「こんなもの使ってるよー。こういうサイトを参考にしてつくったよー」位を書いていきます。

## ソーシャルログイン周り
**django-allauth**を使っています。pipでインストールできます。

```bash 
pip install django-allauth
```

海外のプロジェクト？なのであまり情報がなくて困りました。
特にLINEのログインはドキュメントがほとんどなくてしかもハマったので、また今度記事にしたいと思います。

(追記 2019/10/08)
記事書きました。
[django-allauthでLINEログインをする](https://qiita.com/mutax/items/a7111029a3bd2dfd7772)

標準ログイン周りは[爆速で作れるDjangoユーザ認証機能【django-allauth】](https://sinyblog.com/django/django-allauth/)を、twitterログインなんかは[こっちの記事](https://qiita.com/yukidallas/items/12ce3af85a38aaa58332)を読むとわかりやすいかも。

## ガントチャートの表示
[Google Charts](https://developers.google.com/chart/interactive/docs/gallery/ganttchart)のgantt chartをそのまま使用しています。
これはドキュメントを見た気がしないので、公式ドキュメントを見てもらうといいかも。
英語だらけで分けわからないですが、ソースコードコピペで意外となんとかなるから大丈夫。

## タスク入力画面のデータタイムピッカー
これはdjango-bootstrap-datepicker-plusを利用しています。
これもpipでインストールできます。

```
pip install django-bootstrap-datepicker-plus
```

こちらの記事を参考に作りました。
[[Django] 日付入力欄をカレンダー形式にする (bootstrap-datetimepicker)](https://qiita.com/okoppe8/items/999b8e3c86708fbb3926)

参照先で丁寧に説明してくれているので、ここでの説明は割愛します。

## djangoプロジェクトのデプロイ
### ドメインとかサーバとかを借りる
ganttは[お名前.com](https://www.onamae.com/)でドメインを取得しています。
サーバーは[ConoHa](https://www.conoha.jp/)で借りています。「AWSじゃないの？」という人もいると思いますが、AWSは従量課金制で万が一サイトが流行ったらお金が払えないのでやめました。(~~そんなにはやってないよ！~~）

どういうサイトを参考に設定したか忘れたんですけど（多分いろんな参考情報のキメラ）、今調べたらこちらのサイトがわりかしわかりやすそうでした。
[Conohaサーバと独自ドメインを連携](https://it-blue-collar-dairy.com/domain-setting/)

ドメインとサーバの連携は設定自体は簡単なんですけど、**情報の反映に時間がかかる**ので、「失敗かも！？」と焦って設定を変えまくるんじゃなくて、設定した後放置しておくくらいが丁度いいです。

### ConoHaでサーバを建てる
初めは僕も「CentOSサーバをたてて、そこにdjangoなりなんなりを入れていこう！」としましたが、ConoHaはdjango用のイメージを用意していてくれるので、**間違いなく使った方がいい**です。
イメージを指定して「作成！」とボタンを押すだけでだいたいサーバイメージができるので簡単です。
これからConoHaでdjangoをデプロイする人が居たら、迷うことなく既存イメージを使いましょう。

### djangoのアプリをデプロイする
ここもだいぶ悩んだので、色んなサイトを見ました。
いくつか参考になったサイトを載せておきます。

[ConoHaのVPSにDjango環境を作る](https://hombre-nuevo.com/vps/vps0017/)
[DjangoGirlsで作ったWebアプリを、ConoHa VPSでデプロイ](https://qiita.com/khashi001/items/3b2dbf2dafa9079e5859)


# おわりに
とりあえずこれでデプロイまでです。
後はSSL通信化したり、メールサーバ構築してシステムメールをくるようにしていますけどそれは別の機会に。

あと、もういちど、[gantt](https://paiza.jp/works)使ってください！（切実）
お問合せフォームから開発要望とか随時受け付けています！