技術検証：DjangoプロジェクトとDocker関連ファイルを一括で作成するシェルスクリプトを作成してみた

## はじめに
Djangoプロジェクトを始める際、必要なディレクトリやファイルを手動で作成するのは少し手間がかかります。

:::note warn
***そこで、Djangoプロジェクトと関連するDockerファイルを一括で作成できるシェルスクリプトを作成しました！***
:::

![スクリーンショット 2024-12-08 7.06.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6803553f-08b3-59c4-7006-28eb1415ce2a.png)

本記事は、未来の自分への備忘録として技術検証を行い、その成果や学びを記録していきます。

## ディレクトリ構成について

今回作成したシェルスクリプトを実行すると、以下のようなディレクトリ構成が作成されます。

```bash
my_django_project/
├── Dockerfile
├── manage.py
├── myproject/                # Djangoプロジェクトのディレクトリ
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── myapp/                    # Djangoアプリケーションのディレクトリ
    ├── __init__.py
    ├── admin.py
    ├── apps.py
    ├── migrations/           # マイグレーションファイル
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py
└── requirements.txt          # 必要なパッケージが記載されたファイル
```

## 作成したシェルスクリプト
以下のシェルスクリプトを実行すると、Djangoプロジェクトとアプリケーションの作成から、必要なDockerファイルの設定まで自動で行います。

:::note warn
**必要なDockerファイル（```Dockerfile```）と依存パッケージ（```requirements.txt```）が自動で作成されます。**
:::

```create_django_project.sh
#!/bin/bash

# プロジェクト名の設定
PROJECT_NAME="my_django_project"
APP_NAME="myapp"

# プロジェクトディレクトリを作成
mkdir $PROJECT_NAME
cd $PROJECT_NAME

# Djangoのインストール
pip install django

# Djangoプロジェクトの作成
django-admin startproject myproject .

# Djangoアプリの作成
python manage.py startapp $APP_NAME

# Dockerfileの作成
cat > Dockerfile << EOF
# ベースイメージ
FROM python:3.9-slim

# 作業ディレクトリ
WORKDIR /app

# 必要なファイルをコピー
COPY . /app

# 必要なパッケージをインストール
RUN pip install -r requirements.txt

# Djangoアプリケーションの実行
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
EOF

# requirements.txtの作成
cat > requirements.txt << EOF
django
EOF

# 初期設定: settings.pyの変更 (任意でデータベースなど設定を追加できます)

# 完了メッセージ
echo "Djangoプロジェクトが作成されました。"
```

```my_django_project``` というディレクトリが作成され、その中にDjangoプロジェクトとアプリが自動で生成されます。

## 実際にやってみた
### 1. シェルスクリプトを実行してDjangoプロジェクトを作成
まず、シェルスクリプトをファイルとして保存します。

![スクリーンショット 2024-12-08 7.18.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a8a0a0d0-12b9-5711-4b66-928cefdd550f.png)

例えば、```create_django_project.sh``` という名前で保存します。その後、ターミナルを開き、以下のコマンドで実行します。

```bash
chmod +x create_django_project.sh
./create_django_project.sh
```

これにより、```my_django_project``` というディレクトリ内に、Djangoプロジェクトと関連ファイルが作成されます。

### 2. Dockerイメージをビルド
次に、作成したプロジェクトディレクトリに移動し、Dockerイメージをビルドします。以下のコマンドを実行してください。

```bash
cd my_django_project
docker build -t my-django-app .
```

これにより、```my-django-app``` という名前のDockerイメージが作成されます。

![スクリーンショット 2024-12-08 7.23.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/519aec4e-82f9-e2a4-35a1-0f1e7b7be127.png)

```docker images``` コマンドで確認すると、正常にイメージが作成されていることが確認できます。

```bash
➜  my_django_project git:(main) ✗ docker images                        
REPOSITORY           TAG        IMAGE ID       CREATED             SIZE
my-django-app        latest     972fc2b62f4c   57 minutes ago      193MB
```


### 3. コンテナを起動
ビルドが完了したら、以下のコマンドでコンテナを起動します。

```bash
docker run -p 8000:8000 my-django-app
```

これで、Djangoアプリケーションがポート8000で起動します。

![スクリーンショット 2024-12-08 7.25.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/791a90f0-638b-a476-4872-3fd30c413a5b.png)

### 4. ブラウザで確認
ブラウザを開き、以下のURLにアクセスしてDjangoが正常に動作していることを確認します。

```bash
http://localhost:8000
```

Djangoの初期ページ（```"The install worked successfully!"``` と表示されるページ）が表示されれば、Djangoアプリケーションが正常に動作しています。

![スクリーンショット 2024-12-08 7.26.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0fa5cf74-dcf9-1dd1-6c8b-2495bd7fb6d4.png)

:::note
**シェルスクリプトを使用してDjangoプロジェクトのセットアップ自動化の検証は大成功と言えます！**
:::

## まとめ

このシェルスクリプトを使うことで、DjangoプロジェクトのセットアップとDocker環境の準備を簡単に行うことができます。

:::note warn
***手動で行う作業を減らすことで、素早くDjangoアプリケーションの開発を始められるので、非常に便利です。***
:::

この記事が、誰かの技術的な支えになれば幸いです！

## 関連記事

https://qiita.com/free-honda/items/da83c5dd44650c883164

https://qiita.com/pythonista/items/19613663ef7bb3c57d4f

https://qiita.com/tags/django