PostgreSQL、FastAPI、TypeScriptで作る出退勤管理アプリ - 概要と環境構築

学生時代は、ReactやPython、Flutterでの開発をしていましたが、新しく入った会社では仕事の関係でビジュアルプログラミング言語を使うことが多くなりました。そこで、リハビリがてらにQRコードを読み取る形の出退勤アプリを作成することにしました。
その際、PostgreSQL（データベース）、FastAPI（バックエンド）、TypeScript（フロントエンド）を組み合わせた初心者向けの記事が意外と少ないと感じたので、自分で書いてみることにしました。
初心者の方を対象として、環境構築から完成まで、連載形式で解説していきます。シンプルな出退勤管理アプリを作成することで、バックエンドからフロントエンドまでの全体像を簡単に理解することができるようにするつもりです。また、これを通して簡単なwebアプリの作成方法を学ぶことができると思います。この活動を通してアプリの作成などに興味を持っていただくなど、興味を持った方の入り口になればいいなと思っています。
それでは第一回として、環境構築から始めていきます。
# 1.機能の概要
基本的な機能としては
- メンバーの登録と管理
- 出退勤の時刻の記録
- QRコードの読み取り
これらの機能を基として、余裕があれば勤務時間の計算と表示などの機能を付け足していこうと思います。
# 2.使用技術の紹介
### React(※TypeScript)
React(※TypeScript)は、は、ユーザインターフェース（UI）を表示するための JavaScript ライブラリです。なのでフロントエンド開発に使用します。
※「TypeScriptは、JavaScriptに静的型付けを追加した言語で、コードの安全性を高め、開発時のエラーを減らす効果があります。最近はTypeScriptが主流になりつつあるため、こちらを採用しています。
### FastAPI
pythonでAPIサーバーを構築するためのWebフレームワークです。こちらはいわゆるバックエンドです。
### PostgreSQL
PostgreSQLは、オープンソースのリレーショナルデータベース管理システム（RDBMS）です。高度な機能と優れた性能を持ち、大規模なアプリケーションにも適しています。
# 3.開発環境のセットアップ
前提として今回のOSはWindows11です。
### Visual Studio Code(VSCode)
まず、Visual Studio Code（以下VSCode）をインストールします。VSCodeはMicrosoft社が開発した無料のコードエディタで、以下の特徴があります：

- 豊富な拡張機能
- 軽量かつ高速
- 高機能

#### インストール手順

1. [VS Codeの公式サイト](https://code.visualstudio.com/)にアクセスし、Windowsのインストーラーをダウンロードします。
![スクリーンショット 2024-09-22 182858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/45def003-37ae-67cc-08e8-27574e10a325.png)
2. ダウンロードしたらこのようにダウンロードフォルダーにインストーラーがあります。
![スクリーンショット 2024-09-22 194602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/f3196100-ee15-c5e0-e371-b7af845de9d4.png)


インストーラーを実行し、画面の指示に従ってインストールを完了します。
3. インストールが完了したら、VS Codeを起動して確認しましょう。

詳細な設定方法については、以下のリソースが参考になります：

- [主にVSCodeではじめるPython開発環境構築ガイド](https://dev.classmethod.jp/articles/python-vscode-plugin/)
pythonとともにVScodeの環境構築の方法が詳しく書かれています。Python開発で必須の拡張機能一覧などがありそこは良いと思います。
- [Visual Studio Codeのインストール・設定手順](https://webst8.com/code/vscode-install/)
- 紹介している3つの中では、起動しやすくするための設定方法など、VScodeの環境構築の方法について一番詳しく説明されているのではないかと思います
- [【初心者必見】VScodeインストール方法や日本語化の流れをバッチリ解説！](https://pengi-n.co.jp/column/design/vscode-install/)
こちらはVScodeの環境構築の方法ほかに、インタフェースを日本語化する方法についてかなり詳し目に書かれています。

拡張機能については、「VScode 拡張機能 初心者」や「VScode 拡張機能 [言語名]」などで検索すると、役立つ情報が見つかります。
おすすめの拡張機能について書かれたサイトは[Visual Studio Codeに入れるべき拡張機能【2023年最新版】](https://qiita.com/midiambear/items/f38686bd4d139e0cd46c)です。個人的にこれで一通りの拡張機能はそろうかなと思います。

### React(TypeScript)
#### Node.js
Node.jsとは、JavaScriptのランタイム環境(プログラムが実行される際に必要な環境)です。
#### Node.jsのインストール手順
[公式サイト](https://nodejs.org/en)から
![スクリーンショット 2024-09-22 184256.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/c8ddf9ac-2fb9-f065-6014-31dc28056937.png)
最新のLTS版をダウンロードし、インストールします。ダウンロードした後は基本的にダウンロードフォルダーにあるインストーラーを実行し、デフォルトの設定でインストールを進めれば問題ないと思います。


インストール後、コマンドプロントに以下のコマンドを打ち込みNode.jsとnpmのバージョンを確認します。
※使っている環境によってバージョンは異なる場合があります。多分v20.16.0とかになっていると思います。なのでここはこんな感じの数字が出てくればOKです
```
$ node --version
v18.17.0
```
```
$ npm --version
9.6.7
```
わからない場合は
- [Node.jsのインストールについて](https://re-vite.com/blog/node-js%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
- [Node.js のインストール方法](https://qiita.com/YurimyMiyu/items/d4fe132fc9bc8189eff4)
これらのサイトに詳しく書いてくださっているので参考にしてください
#### Reactのインストール手順
では今度こそReactのインストールを始めましょう
##### 1.yarnのインストール手順
コマンドプロンプトに以下のコマンドを打ち込みましょう。yarnはnpmの代替品で依存関係の管理や実行速度において利点があります。まぁ代替品なので無理に入れなくても良いのですが、筆者の環境設定に合わせるために入れておいてください
```
$ npm install -g yarn
```
yarnのインストールが完了したら、バージョンを確認しましょう。
※使っている環境によってバージョンは異なる場合があります。
```
$ yarn --version
```
##### 2.TypeScriptを使用したReactプロジェクトの作成
TypeScriptを使用したReactプロジェクトを作成します。以下のコマンドを打ち込んでください
※このコマンドの実行には数分かかる場合があります。少し待ってみて下さい
```
$ npx create-react-app my-app --template typescript
```
このコマンドは以下のことを行います：
- create-react-app というReactの公式ツールを使用して新しいプロジェクトを作成します。
- my-app という名前のフォルダにプロジェクトを作成します（この名前はフォルダの名前なのでもちろん変更可能です。例としてはmyappやapp,出退勤なのでattendanseなどでもいいかもしれません）。
- --template typescript オプションにより、TypeScriptを使用するReactプロジェクトが作成されます。
プロジェクトの作成が完了したら、作成されたプロジェクトフォルダに移動します。それでは以下のコマンドを打ち込んでください。
```
$ cd my-app
``` 
`cd`はChange Directoryの略で、指定したフォルダに移動するコマンドです。`my-app`は先ほど作成したプロジェクトフォルダの名前です。Windows環境では、エクスプローラーでプロジェクトフォルダを右クリックし、「パスのコピー」を選択して、そのパスをコマンドプロンプトに貼り付けることもできます。
そして、開発サーバーを起動します
```
$ yarn start
``` 
このコマンドにより、ローカル開発サーバーが起動します。通常、ブラウザが自動で開き、Reactアプリケーションが表示されます。
もしブラウザが自動で開かない場合は、手動でブラウザを開いて`http://localhost:3000`と入力してアクセスしてください。すると、以下のような画面が表示されます：

![Reactの初期の画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/a398d701-3d3b-1dab-4145-8a6a70373c35.png)

これで、TypeScriptを使用したReact開発環境の準備が整いました。この環境で、フロントエンドの開発を進めていくことができます。
### FastAPI
#### 1.pythonのインストール方法
FastAPIはPythonをベースに動作するため、まずはPythonのインストールから始めましょう。
1.[Pythonの公式サイト](https://www.python.org/downloads/)から最新版をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/ee0829d2-2187-bde4-694e-d5bd2a6d987a.png)
ダウンロードした後は基本的にダウンロードフォルダーにあるインストーラーを実行しインストールします。

コマンドラインで以下を実行し、Pythonとpipのバージョンと正しくインストールされていることを確認します。
※pipは、Pythonのパッケージ管理ツールで、通常はPythonをインストールするとpipも一緒にインストールされます。Pythonのパッケージ（ライブラリやモジュール）のインストール、アップグレード、アンインストールなどに使用します。
※こちらも、使っている環境によってバージョンは異なる場合があります。なのでここはこんな感じの数字が出てくればOKです
```
$ python --version
Python 3.12.6

$ pip --version
pip 21.1.3
``` 
#### 2.Fastapiのインストール方法
以下のコマンドを実行して、FastAPIと必要なライブラリをインストールします。
```
pip install fastapi uvicorn
``` 
### PostgreSQL
1.PostgreSQLの[サイト](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)から
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/b412d3e9-697c-fa62-9b3a-0f9c6474bed4.png)
お使いのOSに適したバージョン(RC1とは、リリース候補版のことで、正式リリース前の最終テスト段階のものです。)をダウンロードし、ダウンロードフォルダーからインストールします。
このようにスタート画面にPostgresqlのフォルダーが確認できればOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841466/751a98ed-9d76-3631-0cdd-75994957a61c.png)
個人的にはこれらのサイトが詳しく書かれていて参考になると思います。
- [WindowsでPostgreSQLを使ってみよう](https://lets.postgresql.jp/documents/tutorial/windows/)
- [PostgreSQL を Windows にインストールするには](https://qiita.com/tom-sato/items/037b8f8cb4b326710f71)

-------
以上で、基本的な開発環境のセットアップは完了です。次回は、pythonとPostgreSQLを使用して、データベースの設計と構築、操作を行います。