Dockerコースの最終レベルへようこそ!
このレベルでは、これまで習得してきた知識とスキルを全部まとめます。
講義の中では、知らないプログラミング言語や技術が出てくるかもしれません。ポートを設定したり、メソッド名を追加する必要があるかもしれませんが、それはすでに99%完成しているコードを基に行います。
知らないことが出てきても心配しないでね。それは意図的に「知らないけど、すぐに理解できる」というスキルを向上させるために設計されています。
1.1 課題設定
ちょっとしたマルチコンテナアプリを作って、課題設定から完成品のデモまで、開発プロセスを1つずつ進めていこうね。
目標: タスク管理用のマルチコンテナアプリを作成することで、ユーザーがタスクを作成、編集、削除し、他のユーザーに割り当てられるようにする。アプリは主に3つのコンポーネントから構成されるよ: ReactJSのフロントエンド、Python (Flask)のバックエンド、そしてPostgreSQLのデータベース。
主な課題:
- アプリの各コンポーネントの機能要件を特定すること。
- 使用する技術とツールを選択すること。
- 開発環境を準備すること。
1.2 機能要件の定義
タスク管理アプリの機能要件:
- ユーザー登録と認証:
- ユーザーはシステムに登録できる。
- ユーザーはシステムにログインできる。
- タスク管理:
- ユーザーはタスクを作成できる。
- ユーザーはタスクを編集できる。
- ユーザーはタスクを削除できる。
- ユーザーはタスクリストを表示できる。
- ユーザーは他のユーザーにタスクを割り当てることができる。
- タスクの表示とフィルタリング:
- ユーザーはステータス(完了/未完了)でタスクをフィルタリングできる。
- ユーザーは他のユーザーに割り当てられたタスクを表示できる。
1.3 使用する技術とツールの定義
このアプリケーションを実装するために、以下の技術とツールが使用されます:
- Frontend:
- ReactJS: ユーザーインターフェースを作成するためのライブラリ。
- Axios: HTTPリクエストを実行するためのライブラリ。
- Backend:
- Python: サーバーサイドを作成するためのプログラミング言語。
- Flask: REST APIを作成するためのウェブフレームワーク。
- SQLAlchemy: データベースとやり取りするためのORM。
- Database:
- PostgreSQL: ユーザーとタスクの情報を保存するリレーショナルデータベース。
- コンテナ化とオーケストレーション:
- Docker: アプリケーションをコンテナ化するためのプラットフォーム。
- Docker Compose: 複数コンテナアプリケーションを管理するためのツール。
1.4 開発環境の準備
プロジェクトを成功させるためには、開発環境を設定し、必要なツールがすべてインストールされていることを確認する必要があるよ。
開発環境準備のステップ:
- Dockerのインストール:
- まだインストールしてない場合は、レベル1の講義4に戻るか、Dockerの公式サイトの手順に従ってね。
- Docker Composeのインストール:
- Docker Composeがまだインストールされていない場合は、レベル4の講義2を参照するか、Docker Composeの公式サイトの手順に従ってね。
- プロジェクト構造の作成:
- プロジェクト用のディレクトリと各サービス用の基本的なサブディレクトリを作成してね:
mkdir task_management_app
cd task_management_app
mkdir frontend backend database
- プロジェクトの初期化:
- frontendディレクトリ内で新しいReactJSプロジェクトを初期化してね:
cd frontend
npx create-react-app .
cd ..
• backendディレクトリ内でPython/Flaskアプリケーションの構造を作成してね:
cd backend
mkdir app
touch app/__init__.py
touch app/models.py
touch app/routes.py
touch run.py
touch requirements.txt
cd ..
• databaseディレクトリ内でPostgreSQL用のDockerfileを作成してね(必要なら):
cd database
touch Dockerfile
cd ..
1.5 ファイルの内容の例:
ファイル backend/app/__init__.py
:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://taskuser:taskpassword@database:5432/taskdb'
db = SQLAlchemy(app)
from app import routes
ファイル backend/app/models.py
:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
tasks = db.relationship('Task', backref='owner', lazy=True)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(120), nullable=False)
description = db.Column(db.Text, nullable=True)
owner_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
ファイル backend/app/routes.py
:
from app import app
@app.route('/')
def index():
return "こんにちは、タスク管理アプリ!"
ファイル backend/run.py
:
from app import app
if __name__ == '__main__':
app.run(host='0.0.0.0')
ファイル backend/requirements.txt
:
Flask
Flask-SQLAlchemy
psycopg2-binary
GO TO FULL VERSION