Djangoでwebサービスを作ってみるまで~その１(環境構築編)~

# Djangoでwebサービスを作ってみるまで~その１(環境構築編)~

## なぜ書き始めたか
ただの練習です。Djangoを触れるようになってから早1年、そろそろまとめるように何か記事を書いてみようということで初心者の方やDjangoってそもそもなんすかというような人向けの記事を僕なりにまとめたいと思います。(最終的には色々機能ごとに分けてテンプレ化したい)

ということで早速始めていきましょう

## 今回のテーマ
タイトルにもある通り`Djangoでwebサービスを作ってみるまで~その１(環境構築編)~`です

環境構築しましょう。(この記事を参考にdocker環境を構築しました。→https://qiita.com/bakupen/items/f23ce3d2325b4491a2dd)
今回はdocker上で構築・実装していきたいと思います。なのでdocker上のコンテナでコマンドを実行するような形になっています。

```
docker-compose run web python3 --version
docker-compose run web python3 manage.py --version
docker-compose run db mysql --version
```

```
Python 3.8.13
3.2
Ver 14.14 Distrib 5.7.37, for Linux (x86_64) using  EditLine wrapper
```

## mysqlで日本語を使えるようにする対応(DBで日本語を使いたい人向け)
上記までの手順でdocker上にコンテナを立てるところまでは行けるようになっているはずです。
最後に、mysqlを日本語で対応できるようにするところをやっておきましょう。

引用させていただいた記事にある通りdocker-compose.yamlでCOMMANDを使っていたのですが、どうしても日本語に対応しなかったので別の方法を取りました。(これにつきましてはこちらの記事を参考にしました→https://qiita.com/k8uwall/items/79dbe6dd03aa8b0ed119)

ということで、記事と同じように手順を踏んでいくとdocker-compose.yamlとmy.cnfの内容は以下の通りになります。

```docker-compose.yaml
  db:
    image: mysql:5.7
    container_name: xxxx
    environment:
      MYSQL_ROOT_PASSWORD: xxxx
      MYSQL_DATABASE: xxxx
      MYSQL_USER: xxxx
      MYSQL_PASSWORD: xxxx
      TZ: 'Asia/Tokyo'
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
```

```my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
log-bin=/var/log/mysql/bin-log
server-id=1

[client]
default-character-set = utf8mb4
```

## ここまでの確認
ここまでのできたことを確認しましょう。

- dockerを使ってDjango x mysqlの環境をコンテナで作成すること
- mysqlを日本語に対応することができた

上記2点ですね。

docker-compose.yamlファイルがあるディレクトリで以下コマンドを実行してみましょう

```shell
docker-compose up --build -d
```

成功していればbuildなどで長文が表示された後に以下のようにdoneという文字列が表示されるはずです・

```
Creating ${docker-compose.yamlのcontainer_nameで指定した名前} ... done
Creating ${docker-compose.yamlのcontainer_nameで指定した名前} ... done
```

実際にコンテナが作成されているかを確認するコマンドは以下の通りです。

```shell
docker ps
```

また、mysqlが日本語に対応したかどうかは、実際にmysqlのコンテナに入って確認するほかありません。
dockerコンテナに入るコマンドは以下になります。

```shell
docker exec -it ${docker-compose.yamlのcontainer_nameで指定した名前} bash
```

コンテナに入ったあとは以下のコマンドを1つずつ実行しましょう。

```
mysql -u root -p${docker-compose.yamlのMYSQL_ROOT_PASSWORD}
show variables like "chara%";
```

コマンドの内容としては
1. mysqlに入る。
1. 文字コード設定を確認する

といった内容です。

結果が以下の通りになっていれば、無事に日本語のデータをmysqlに格納できます。

```
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

# おわりに

いかがだったでしょうか？
いろいろな記事やサイトを調べてみて実際に役に立ったものを引用させていただいて途中の説明を省いてしまいましたが、ここまででdocker上にコンテナを立ててwebサービスを作成する準備ができました。

次回からは実際にこの機能を作成するというものに焦点を絞り、なるべくテンプレ的に使い回すことができるような説明を補足した記事を作成していこうと思います。

では、次の記事でお会いしましょう。