Django は、特に人気の高い Python 向け Web 開発フレームワークです。 プロレベルのアプリケーションとしての水準は維持しながら、開発を迅速に進められる設計になっています。 無料のオープンソースであり、MVT (モデル、ビュー、テンプレート) アーキテクチャパターンが採用されています。また、多数のテンプレートがカプセル化されているため、Web アプリを次々と迅速に作成できます。
このチュートリアルでは、Django アプリをホスティング環境に継続的にデプロイするデプロイパイプラインの作成方法について、実践形式で説明します。
チュートリアル目次
前提条件
この記事の手順に沿ってチュートリアルを進めるには、いくつかの準備が必要です。
- Python の基礎知識を身につける
- Python (バージョン 3 以上) をローカルシステムにインストールしてアップデートする
- Heroku アカウントを用意する
- CircleCI アカウントを用意する
- GitHub アカウントを用意する
これらのインストールとセットアップが済んだら、チュートリアルを始めましょう。
サンプル Django プロジェクトをクローンして実行する
まずは、デプロイの実践練習に使うシンプルな Django プロジェクトをクローンします。 以下のコマンドを実行して、プロジェクトをクローンします。
git clone --single-branch --branch base-project https://github.com/CIRCLECI-GWP/cci-cd-django
クローンできたら、プロジェクトのルートに移動し (cd cd-django-site
)、以下のコマンドを実行して、ローカルの Python サーバーでプロジェクトを起動します。
python manage.py runserver
これでサーバーが立ち上がり、アドレス http://localhost:8000
でアプリケーションが実行されます。 ブラウザーでこのアドレスにアクセスします。
Heroku アプリを作成する
次に、アプリケーションをホストするための Heroku アプリケーションをセットアップします。 Heroku ダッシュボードに移動し、[New (新規)]、[Create new app (新規アプリを作成)] の順にクリックします。 新規アプリケーションの名前を入力します。
入力した名前は控えておいてください。 この情報は、チュートリアル後半で必要になります。 次に、ダッシュボードの [Account Settings
(アカウント設定)] セクションで Heroku API キーを確認します。 この情報もチュートリアルで後ほど必要になります。
デプロイ用の CircleCI プロジェクトをセットアップする
このプロセスを開始するにはまず、プロジェクトを GitHub のリモートリポジトリにプッシュする(英語)必要があります。 必ず、CircleCI アカウントに紐づけられている GitHub アカウントを使用してください。
次に、CircleCI ダッシュボードの [Projects (プロジェクト)] ページに移動します (左側の縦型メニューで [Projects (プロジェクト)] をクリック)。 プロジェクトを追加します。
[Set Up Project (プロジェクトをセットアップ)] をクリックします。 表示されるモーダルで [Skip this step (このステップをスキップ)] をクリックします。 CircleCI 設定ファイルは、このチュートリアル後半にて、手動で追加します。
[Setup (セットアップ)] ページで、表示されたサンプルを無視して設定ファイルを手動で追加するため、[Use Existing Config (既存の設定ファイルを使用する)] をクリックします。 パイプラインの設定ファイルをダウンロードするのか、ビルドを開始するのかを確認するメッセージが表示されます。
[Start Building (ビルドの開始)] をクリックします。 設定ファイルのセットアップがまだのため、このビルドは失敗します。
最後に、先ほど追加したプロジェクトの環境変数を設定します。 これにより、デプロイ用 Heroku アプリケーションへの認証済みアクセスが可能になります。
パイプラインページで [Project Settings (プロジェクト設定)] ボタンをクリックして、プロジェクト設定に移動します。 このチュートリアルのプロジェクトが選択されていることを確認してください。
[Project Settings (プロジェクト設定)] ページに戻り、サイドメニューにある [Environment Variables (環境変数)] をクリックします。
環境変数のページで、[Add Environment Variable (環境変数を追加)] をクリックします。
以下の環境変数を追加します。
HEROKU_APP_NAME
: Heroku アプリケーションの名前 (今回はcci-cd-django
)HEROKU_API_KEY
: Heroku アカウントの API キー。 Heroku のアカウントページからコピー & ペーストできます。
これで環境変数を追加できました。Heroku にデプロイするための CircleCI コンソールでのセットアップはすべて完了です。
Django アプリのデプロイを自動化する
プロセスの仕上げとして、Heroku にデプロイするための Django プロジェクトをセットアップしましょう。
まずは、Python 用の Web サーバーである Gunicornをインストールします。 Gunicorn は、本番環境での Django アプリの実行用として Heroku で推奨されているサーバーです。 プロジェクトのルートで以下のコマンドを実行し、Gunicorn をインストールします。
pip install gunicorn
次に、psycopg2
をインストールします。これは Python アプリケーションの Postgres アダプターです。 次のコマンドを入力します。
pip install psycopg2-binary
Heroku でデプロイを正常に行うには、django-heroku
パッケージもインストールして設定しておく必要があります。 以下のコマンドを実行して、このパッケージをインストールします。
pip install django-heroku
インストールが完了したら、my_django_project/settings.py
ファイル内の先頭の部分で、この最新のパッケージをインポートします。 次のコマンドを from pathlib import Path
という行の直下に配置します。
import django_heroku
次に、ファイルの最下部に以下の行を追加します。
django_heroku.settings(locals())
依存関係をすべてインストールできたら、すべての依存関係を追跡する requirements.txt
ファイルを更新します。 次のコマンドを実行します。
pip freeze > requirements.txt
このコマンドでは、pip freeze
ですべての依存関係をプロジェクトに取り込み、コマンドの出力を requirements.txt
ファイルに書き込んでいます。 Heroku ではこの手順が必須です。
次に、プロジェクトのルートに Procfile
という名前のファイルを作成し (Heroku アプリでは Procfileにより、起動時にアプリで実行するコマンドを指定します)、次の行を追加します。
web: gunicorn my_django_project.wsgi
このコマンドにより、Heroku ではアプリケーションの実行時に gunicorn
サーバーが使用されます。 これで、Django アプリケーションを Heroku に正常にデプロイするための準備はすべて完了です。
それでは、プロジェクトをローカル環境から Heroku のリモートホスティング環境にリリースする、継続的デプロイパイプラインのスクリプトを作成しましょう。
プロジェクトのルートに、.circleci
という名前のフォルダーを作成して、config.yml
という名前のファイルをその中に作成します。 config.yml
に、以下のコードを入力します。
version: 2.1
orbs:
heroku: circleci/heroku@0.0.10
workflows:
heroku_deploy:
jobs:
- heroku/deploy-via-git
この設定ファイルでは、Heroku 用の Orb である circleci/heroku@0.0.10
をインポートしています。この Orb を使用すると Heroku の一連のジョブとコマンドにアクセス可能になり、Heroku の便利なツール一式が簡単に使えるようになります。 その 1 つが、GitHub リポジトリから Heroku アカウントにアプリケーションをデプロイする heroku/deploy-via-git
ジョブです。 このジョブを利用すれば、Heroku CLI のインストール、プロジェクトの依存関係のインストール、アプリケーションのデプロイが自動で処理されます。 また、Heroku へのデプロイをスムーズに進められるよう、環境変数の反映も行われます。
すべての変更をプロジェクトにコミットして、リモート GitHub リポジトリにプッシュします。 これで、デプロイパイプラインが自動的にトリガーされます。
![ビルド成功 - CircleCI]2021-08-09-django-deploy-04.png
完了です。 ビルド (heroku/deploy-via-git) をクリックして、デプロイの詳細を確認しましょう。
ビルドの成功は喜ばしいことですが、Heroku 上でアプリが実際に問題なく動作しているか確認しなければなりません。 そのためには、Heroku で割り当てられたアプリケーションの URL にアクセスします。 URL は、https://[アプリ名].herokuapp.com
という形式であり、 このチュートリアルでは https://cci-cd-django.herokuapp.com/
です。
うまくいきましたね。
おわりに
Django が Python 開発者に好まれる理由は、機能が豊富であり、使いやすい API も用意されているからです。 Python 自体も開発者にとって扱いやすい言語ですが、Django と組み合わせることで、Web アプリの開発における Python の価値がさらに高まります。 みなさんのチームでこれらのツールを使用する場合は、このチュートリアルで学んだことをメンバーにぜひ教えてあげてください。 継続的デプロイパイプラインを使用して Django アプリケーションのデプロイを自動化すれば、数多くのメリットを得られます。しかもこうしたメリットは、他のメンバーに情報を共有することで、より強化されます。 チーム全員が、今後 Heroku へのデプロイで悩まずに済むようにしましょう。
Happy coding!