Django は、特に人気の高い Python 向け Web 開発フレームワークです。 プロレベルのアプリケーションとしての水準は維持しながら、開発を迅速に進められる設計になっています。 無料のオープンソースであり、MVT (モデル、ビュー、テンプレート) アーキテクチャパターンが採用されています。また、多数のテンプレートがカプセル化されているため、Web アプリを次々と迅速に作成できます。

このチュートリアルでは、Django アプリをホスティング環境に継続的にデプロイするデプロイパイプラインの作成方法について、実践形式で説明します。

前提条件

この記事の手順に沿ってチュートリアルを進めるには、いくつかの準備が必要です。

  1. Python の基礎知識を身につける
  2. Python (バージョン 3 以上) をローカルシステムにインストールしてアップデートする
  3. Heroku アカウントを用意する
  4. CircleCI アカウントを用意する
  5. 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 (新規アプリを作成)] の順にクリックします。 新規アプリケーションの名前を入力します。

新規アプリ - Heroku

入力した名前は控えておいてください。 この情報は、チュートリアル後半で必要になります。 次に、ダッシュボードの [Account Settings (アカウント設定)] セクションで Heroku API キーを確認します。 この情報もチュートリアルで後ほど必要になります。

アカウント設定 - Heroku

デプロイ用の CircleCI プロジェクトをセットアップする

このプロセスを開始するにはまず、プロジェクトを GitHub のリモートリポジトリにプッシュする(英語)必要があります。 必ず、CircleCI アカウントに紐づけられている GitHub アカウントを使用してください。

次に、CircleCI ダッシュボードの [Projects (プロジェクト)] ページに移動します (左側の縦型メニューで [Projects (プロジェクト)] をクリック)。 プロジェクトを追加します。

プロジェクトの追加 - CircleCI

[Set Up Project (プロジェクトをセットアップ)] をクリックします。 表示されるモーダルで [Skip this step (このステップをスキップ)] をクリックします。 CircleCI 設定ファイルは、このチュートリアル後半にて、手動で追加します。

設定ファイルの追加 - CircleCI

[Setup (セットアップ)] ページで、表示されたサンプルを無視して設定ファイルを手動で追加するため、[Use Existing Config (既存の設定ファイルを使用する)] をクリックします。 パイプラインの設定ファイルをダウンロードするのか、ビルドを開始するのかを確認するメッセージが表示されます。

ビルドに関するプロンプト - CircleCI

[Start Building (ビルドの開始)] をクリックします。 設定ファイルのセットアップがまだのため、このビルドは失敗します。

最後に、先ほど追加したプロジェクトの環境変数を設定します。 これにより、デプロイ用 Heroku アプリケーションへの認証済みアクセスが可能になります。

パイプラインページで [Project Settings (プロジェクト設定)] ボタンをクリックして、プロジェクト設定に移動します。 このチュートリアルのプロジェクトが選択されていることを確認してください。

プロジェクト設定 - CircleCI

[Project Settings (プロジェクト設定)] ページに戻り、サイドメニューにある [Environment Variables (環境変数)] をクリックします。

環境変数のページで、[Add Environment Variable (環境変数を追加)] をクリックします。

環境変数の追加 - CircleCI

以下の環境変数を追加します。

  • 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) をクリックして、デプロイの詳細を確認しましょう。

ビルドの詳細 - CircleCI

ビルドの成功は喜ばしいことですが、Heroku 上でアプリが実際に問題なく動作しているか確認しなければなりません。 そのためには、Heroku で割り当てられたアプリケーションの URL にアクセスします。 URL は、https://[アプリ名].herokuapp.com という形式であり、 このチュートリアルでは https://cci-cd-django.herokuapp.com/ です。

稼働中のサイト - Heroku

うまくいきましたね。

おわりに

Django が Python 開発者に好まれる理由は、機能が豊富であり、使いやすい API も用意されているからです。 Python 自体も開発者にとって扱いやすい言語ですが、Django と組み合わせることで、Web アプリの開発における Python の価値がさらに高まります。 みなさんのチームでこれらのツールを使用する場合は、このチュートリアルで学んだことをメンバーにぜひ教えてあげてください。 継続的デプロイパイプラインを使用して Django アプリケーションのデプロイを自動化すれば、数多くのメリットを得られます。しかもこうしたメリットは、他のメンバーに情報を共有することで、より強化されます。 チーム全員が、今後 Heroku へのデプロイで悩まずに済むようにしましょう。

Happy coding!

関連記事


Fikayo Adepoju は、Web とモバイル テクノロジー、DevOps に精通した LinkedIn Learning (Lynda.com) 講師、フルスタック開発者、テクニカル ライター、テクニカル コンテンツ クリエイターです。スケーラブルな分散アプリケーション開発については 10 年以上の経験を持っています。 CircleCI、Twilio、Auth0、The New Stack のブログで 40 以上の記事を執筆するほか、個人の Medium ページでも情報を発信しており、役立つ知識を多くの開発者に広めることに専心しています。 また、Udemy で動画形式のコース (英語) も開講しています。ぜひご覧ください。

さんの他の投稿を読む Fikayo Adepoju