早速アプリケーションソフトウェアを作っていきますが、本書で例にとるシステムでは、バックエンド側のソフトの言語としてPythonを、フレームワークとしてDjangoを使います。フロントエンド側のソフトの言語はJavaScriptでフレームワークとしてREACTを使います。これらを使う前提で、必要な開発環境やその他のツールについて説明していきます。
6.1 開発環境に必要なもの
アプリケーションを開発するための開発環境としては、コードを書くためのエディターの他に最低でも以下の仕組みが必要になります。
1 アプリケーションプログラムを動かす
当然ですが、開発したプログラムを実際に動作させるための「実行環境」が必要です
2 パッケージを管理する
現在の主要なプログラミング言語では、アプリケーションプログラムの全てのコードを一から書かないで済むように、汎用的な機能が再利用可能な形でライブラリ化された「パッケージ」が準備されており、開発者はこれを使うことになります。パッケージがさらに別のパッケージを使っているといった「依存関係」を持ったパッケージも多くあります。このため、必要なパッケージの依存関係を解析し、指定されたパッケージだけでなく必要なパッケージ全てをインターネット上にあるリポジトリなどからダウンロードすることが必要になります。また、環境を再構築するなどのために、何をダウンロードしたかを記録し管理しておく機構も必要です。
3 他プロジェクトの環境との分離を行う
他のプロジェクトの開発で使ったものと同じパッケージを使うが、異なるバージョンのものが必要だったりします。プロジェクト毎に異なる環境が必要になり、これを実現する機構が必要になります。
4 開発物をリリースする
最後に、開発したアプリケーションプログラムを別の環境に持って行っても問題なく動作させるようにすることが必要になります。例えば、アプリケーションプログラムや関連するファイルなどをパッケージングしたり、別の環境でも開発した時に使ったのと同じパッケージがインストールできたりする機能などが必要になります。
6.2 バックエンドの開発環境(Python+Django&DRF)
バックエンド側のソフトウェアの開発言語がPythonでフレームワークとしてDjangoを使う場合を説明します。

まず、アプリケーションプログラムを動かす機構必要なのはpythonの実行環境です。Python公式サイト(https://www.python.org)からダウンロードできます。インストールの方法はすでに色々なサイトに書かれていますので、ここでは省略します。Pythonをインストールすることで、とりあえずアプリケーションプログラムを動かす基本的な仕組みはできました。
Macの場合、公式サイトからダウンロードしたPython環境は、デフォルトで以下にインストールされます。
/Library/Frameworks/Python.framework/Versions/<バージョン>
6.2.1 Poetryをインストールして使う
元々のPython標準には「パッケージを管理する」ためのpip、「他プロジェクトの環境との分離を行う」ためのvenvというツールが付いています。これらを使うこともできますが、ここでは、両方の仕組みを持ち、かつ使い勝手が良い「poetry」というツールを使うことにします。なお、poetryには開発したものを再利用してもらうためにパッケージングしてリリースする機能もありますが、今回作るのはDjango上のアプリケーションということで基本的に使いませんので、本書ではこの機能については触れません。
Poetry公式サイトのDocumentationにインストール方法が書かれていますので、これを参考にインストールします。
以下にpoetryがどのように動くのかを説明します。
(1)プロジェクトのセットアップ
Pythonのアプリケーションを開発するためのプロジェクトディレクトリをセットアップします。
まず、プロジェクトディレクトリ(この章では例として'backend'というディレクトリ)を作った後に、その下に、「pyproject.toml」というファイルを作ります。pyproject.tomlはプロジェクトに関する情報(プロジェクト名、著者、バージョンなど)や実行時に使用するpythonのバージョンや、必要になるパッケージとそのバージョンなどの情報などの情報を含むファイルです。エディターなどを使って手動でファイルを記載することもできますが、最初はpoetryの機能を使って自動的にファイルを作るのが良いでしょう。
$ poetry init
このコマンドを実行すると、プロジェクトに関する設定値についての質問が次々に出てきます。これらに答えていくと自動的にpyproject.tomlを生成してくれます。答えを入力せずリターンを押してスキップすることもできます。取り敢えず最初にプロジェクトをセットアップするだけであれば、全部スキップしても大丈夫です。
poetryは、このpyproject.tomlに記述された内容に沿ってpythonの実行モジュールやライブラリを格納したディレクトリを作ります。これらの実行モジュールやライブラリは、最初にインストールしたPython環境から持ってきたものです。(実際にディレクトリが作成されるのは、プロジェクトの内容を操作したり参照したりする何らかのpoetryコマンドを実行した時です)

このディレクトリをどこに置くのかはpoetryの設定により変更できます。プロジェクトディレクトリの下に置いて他プロジェクトの環境との分離して管理したいので、以下のような設定をしておきます。
$ poetry config virtualenvs.in-project true
このように設定しておくと、プロジェクトフォルダの下に.venvというディレクトリができ、ここに格納してくれます。
他に、以下のようにpoetryが新たなプロジェクトディレクトリを作成するやり方もあり、この場合、tomlファイルの他にプロジェクトディレクトリの下にPython開発用のフォルダが自動生成されます。
$ poetry new <project-name>
このやり方は今回はあまりおすすめではありません。今回の開発でフレームワークとして使うdjangoにもプロジェクトディレクトリという概念があって、初期設定を行うとプロジェクトディレクトリの下にdjangoアプリケーションの開発に必要なファイルやディレクトリが自動的に生成されます。結果として、poetry が生成したファイルとdjangoが生成したファイルがコンフリクトを起こしてしまい、結果としてうまく設定できないということがあるのです。
(2) 仮想環境でのプログラムの実行
poetryはプログラムを実行するための仮想環境を提供しています。同じ仮想化という名前が付いてはいますが、poetryで提供する仮想環境は、OSのレベルで環境を分離する仮想マシンや仮想コンテナなどとは、全く異なるもので、プロジェクトごとに実行するPython環境を別々のものにするというだけです。
仕組みとしては、Pythonのコマンド群を実行するためのパス(PATH)や、ライブラリを読み込む先の場所(PYTHONHOME)等を動的に書き換えて.venv内のPythonモジュールを実行するようにしているだけです。仮想環境でプログラムを実行する方法は2通りあります。
一つは、一旦仮想環境に入ってプログラムを実行する方法です。
> poetry shell ← 仮想環境に入る
> python App.py ←プログラムを実行する
> exit ←仮想環境から出る
もう一つは、仮想環境の外からプログラムを実行する方法です
> poetry run python App.py
実行すると、下図のようにプロジェクト内のファイルを使ってpythonプログラムが実行されます。

プログラムがサードパーティーのオープンソースのパッケージを使う場合は、.venvの中に置かれたものが実行に使われます。(サードパーティーのオープンソースのパッケージを.venvの中にダウンロードするやり方は次で説明します)
(3) パッケージの追加
poetryでプログラムの実行に必要なパッケージを追加するにはaddコマンドを使います。
> poetry add <パッケージ名>
コマンドを実行すると、poetryはPythonのオープンソースな各種パッケージのリポジトリであるPyPI(https://pypi.org)から指定されたパッケージをダウンロード/インストールします。

この際、指定されたパッケージだけではなく、当該パッケージが依存しているパッケージがあればこれらも併せてダウンロード対象となります。
今回使うフレームワークであるDjangoとDjango REST Framework (DRF)をインストールする場合は以下を実行します。
> poetry add Django
> poetry add djangorestframework
- ダウンロードされたパッケージは、.venvのlibの下に置かれます。
- パッケージの中に実行ファイルがあればこれらは.venvのbinの下に置かれ、実行可能になります。
- pyproject.tomlには、poetry addで指定されたパッケージに関する情報が記録されます。
- poetry.lockには、指定されたパッケージだけでなく依存関係があってダウンロードされたパッケージと、実際ダウンロード・インストールされたバージョンなどの情報が記録されます。
(4) 開発環境の再現
このようにpyproject.tomlとpoetry.lockにインストールしたモジュールの情報記録しておくことで、これらのファイルを使って開発環境を再現することができます。この2つのファイルを新たな環境のフォルダに置き、以下を実行することで必要なパッケージが全てダウンロード・インストールされ開発環境が再現されます。
> poetry install

6.2.2 Djangoのインストールとセットアップ
Djangoのインストール
次に、poetryのモジュール追加機能を使ってdjangoをインストールします。プロジェクトディレクトリの下で以下を実行します。
> poetry add django
最新のPythonを使っていればこれで成功するはずですが、もし古いバージョンのPythonを使っている場合は、これに合わせたバージョンのdjangoをインストールしないといけないかもしれません。以下のようにバージョンを指定してpoetry addを実行します。
> poetry add django==<バージョン番号>
これによってフォルダーの中は以下のようになります。

プロジェクトディレクトリの下にある、pyproject.tomlファイルの中を見ると、djangoが入っていることが確認できます。
[tool.poetry]
name = "backend"
version = "0.1.0"
description = ""
authors = ["Kazuhiro <kuyama@systemdesignk2.jp>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.11"
django = "5.1.2" <=ここに追加されている
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Djangoプロジェクトの生成
次に、Djangoのプログラムが動くpoetryで仮想環境に入った後、Django の管理タスクのためのコマンドラインユーティリティ'django-admin'を使ってDjangoプロジェクトを作ります。プロジェクトとは、データベースの設定や Django 固有のオプション、アプリケーション固有の設定などを集めたもののことです。
> poetry shell
> django-admin startproject backend .
プロジェクトフォルダの下には、以下のファイルやフォルダが生成されているはずです。

6.2.3 Django REST frameworkをインストールする
次に、Django REST frameworkをインストールしておきます。以下を実行します。
> poetry add djangorestframework