Docker学習とWebアプリ構築をChatGPTでやってみた

目標:Webアプリを作成したい

要求事項:

タブレット端末でブラウザから特定の情報を1-2秒更新で表示する
Dockerを活用(学習機会として良いと思ったので)

基本設計

フロントエンド

20秒ごとにバックエンドからデータを取得して、表示する

バックエンド/DB

APIで外部からデータを取得し、DBに格納する(API側の機能制限で20秒に1回)
フロントエンドにDBの情報を渡す

学習してわかったこと

Dockerの構成

ダッシュボードの構成として、Dockerを利用する場合はフロントエンド・バックエンド・DBという3つのDockerコンテナの構成が望ましい

DockerはDocker用のフォルダの下に各コンテナのフォルダを作成し、Docker-composeを利用する場合は
Docker用のフォルダのルートフォルダに1つのファイルに全てのコンテナ情報をまとめたdocker-compose.ymlファイルを作成する(ファイル名は固定)

Tokenは安全のためDockerコンテナ起動時に環境変数またはsecret?に組み込むと良い
例:docker run -it --env API_TOKEN=your_token または enviroment.txtに書くなど

DBについて

DBについて、軽量をうたっているものは外部との通信機能が無い(ローカル内で動作を想定)ものが多い

TinyDBは軽量だが一度壊れるとDBの再作成が必要だった。
TinyDBは排他制御(読み込みと書き込みが同時に起こる可能性のある場合)が必要な場合は不適切だと分かった。

今回採用したのはSQLiteで、書き込みと読み込みはAPIを作成してそれを稼働させた。が、連続稼働すると止まってしまう。
コンテナの再起動で直るので、運用しながら原因を調べる

フロントエンドについて

CSSはスタイルを宣言して文字やコンテンツに対してスタイルを適用する

ChatGPTについて

やはり長文(おそらく10-20行)以上のコードは一貫性がないものになりやすい。

多くの要件や相互の関係性について一度に大量に考慮するのは苦手なようなので、要件を分解してコードも短くなるようにする必要がある。
つまり要件や仕様についてはシステム的に理解していて都度細かく伝える必要がある。

いくつかのQAを通じて仕様を固めていき、その仕様をつど伝えるようにするとある程度仕様が収束する。
コードのタブや閉じるコードの未記入については理解できない場合があるので、前述の注意が必要