Skip to content

Commit

Permalink
Makefileを導入した (#86)
Browse files Browse the repository at this point in the history
* Makefiles作成

s Makefileにphonyを追加

* README修正

* Update CONTRIBUTING.md
  • Loading branch information
shun-harutaro committed Sep 23, 2024
1 parent 5f6fcb6 commit 178edd2
Show file tree
Hide file tree
Showing 3 changed files with 127 additions and 55 deletions.
13 changes: 6 additions & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ echo "OPENAI_API_KEY=[openAI api key]" >> .env
```
環境変数を設定してください。詳しくは[README](https://github.com/futaringoto/futarin-api/blob/main/README.md)
```
sudo docker compose build
sudo make build
```
> [!IMPORTANT]
> Dockerfileを更新した際は、キャッシュが使われないよう、`build --no-cache`でビルドしましょう
> Dockerfileを更新した際は、キャッシュが使われないよう、`sudo docker compose build --no-cache`でビルドしましょう
## コード実行
```
sudo docker compose -f docker-compose.yml -f docker-compose.dev.yml up
sudo make run-dev
```
> [!TIP]
> ホットリロードを採用しています。pythonファイルの変更が保存されると再度自動でビルドが走ります
Expand All @@ -87,20 +87,19 @@ docker compose run --entrypoint "poetry update" api
### リント
安全性の向上のため、リンターの`flake8`を導入しています。
```
docker compose run --entrypoint "flake8" api
sudo make lint
```
### 整形
可読性の向上のため、フォーマッタの`black``isort`を導入しています。
```
docker compose run --entrypoint "black ." api
docker compose run --entrypoint "isort ." api
sudo make format
```

## テスト
自動テストを採用しています。テストランナーは`pytest`です。
### コードをテストする
```
docker compose run --entrypoint "pytest" api
sudo make test
```

## GitHub Actions
Expand Down
52 changes: 52 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# コンテナ名
CONTAINER_NAME=api

# "api"が立ち上がっているか否かを判定
CHECK_CONTAINER=$(shell docker-compose ps -q $(CONTAINER_NAME) | xargs docker inspect -f '{{.State.Running}}' 2>/dev/null)

.PHONY: build
build: ## ビルド
docker compose -f docker-compose.yml -f docker-compose.dev.yml build

.PHONY: run-dev
run-dev: ## コンテナ起動
docker compose -f docker-compose.yml -f docker-compose.dev.yml up

.PHONY: run-dev-d
run-dev-d: ## コンテナ起動(デタッチ)
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d

.PHONY: stop
stop: ## コンテナ停止
docker compose down

.PHONY: test
test: ## テスト
@if [ "$(CHECK_CONTAINER)" = "true" ]; then \
echo "Container $(CONTAINER_NAME) is running. Running your command..."; \
docker compose run --entrypoint "pytest" api; \
else \
echo "Container $(CONTAINER_NAME) is not running."; \
fi

.PHONY: lint
lint: ## リント
@if [ "$(CHECK_CONTAINER)" = "true" ]; then \
echo "Container $(CONTAINER_NAME) is running. Running your command..."; \
docker compose run --entrypoint "flake8" api; \
else \
echo "Container $(CONTAINER_NAME) is not running."; \
fi

.PHONY: format
format: ## フォーマット
@if [ "$(CHECK_CONTAINER)" = "true" ]; then \
echo "Container $(CONTAINER_NAME) is running. Running your command..."; \
docker compose run --entrypoint "black ." api; \
docker compose run --entrypoint "flake8 " api; \
else \
echo "Container $(CONTAINER_NAME) is not running."; \
fi

.PHONY: pre-commit
pre-commit: format lint test
117 changes: 69 additions & 48 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,34 +33,27 @@ cd futarin-api
touch .env
echo "VOICEVOX_API_KEY=[voicevox api key]" >> .env
echo "OPENAI_API_KEY=[openAI api key]" >> .env
# Only production mode(開発環境用)
echo "STORAGE_ACCOUNT_NAME=[azure storage-account-name]" >> .env
echo "SAS_TOKEN=[azure storage-account SAS token]" >> .env
```
`VOICEVOX_API_KEY`https://su-shiki.com/api/ から、
`OPENAI_API_KEY`https://platform.openai.com/docs/overview から取得します

3. Dockerイメージのビルド
```
sudo docker compose build
sudo make build
```

4. コンテナ起動
```
# Production(本番環境)
sudo docker compose up
# Development(開発環境)
sudo docker compose -f docker-compose.yml -f docker-compose.dev.yml up
sudo make run-dev
# Detachモード
sudo docker compose up -d
sudo make run-dev-d
```
5. localhost でドキュメントを開いてみましょう
http://localhost/docs

6. コンテナの停止
```
docker compose down
sudo make stop
```

## APIエンドポイント(v1)
Expand All @@ -74,51 +67,79 @@ docker compose down
> [!WARNING]
> 従来の`/raspi/xxx`系のエンドポイントはdeprecated(非推奨)となりました。
## `make`コマンドについて
本リポジトリは`Makefile`を採用しています。
| Make | 実行する処理 | 元のコマンド |
| :--- | :-------- | :-------- |
| `make build` | コンテナのビルド | `docker compose -f docker-compose.yml -f docker-compose.dev.yml build` |
| `make run-dev` | コンテナの起動 | `docker compose -f docker-compose.yml -f docker-compose.dev.yml up` |
| `make run-dev-d` | コンテナの起動(デタッチ) | `docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d` |
| `make stop` | コンテナの停止 | `docker compose down` |
| `make lint` | リントの実行 | `docker compose run --entrypoint "flake8" api` |
| `make format` | フォーマットの実行 | `docker compose run --entrypoint "black ." api` |
| `make test` | テストの実行 | `docker compose run --entrypoint "pytest" api` |


## ディレクトリ構成
- api (application - FastAPI)
- nginx (web-server)
```
.
├── main.py
├── poetry.lock
├── pyproject.toml
├── tests
│   ├── __init__.py
│   ├── audio1.wav
│   └── test_v1_raspi.py
├── v0
│   ├── __init__.py
│   ├── routers
├── CONTRIBUTING.md
├── LICENSE
├── Makefile
├── README.md
├── _docker
│   ├── api
│   │   └── Dockerfile
│   └── nginx
│   └── conf.d
│   └── app.conf
├── api
│   ├── main.py
│   ├── poetry.lock
│   ├── pyproject.toml
│   ├── tests
│   │   ├── __init__.py
│   │   └── raspi.py
│   ├── services
│   │   ├── audio1.wav
│   │   └── test_v1_raspi.py
│   ├── uploads
│   ├── v0
│   │   ├── __init__.py
│   │   ├── gpt.py
│   │   ├── tts.py
│   │   ├── voicevox.py
│   │   ├── voicevox_api.py
│   │   └── whisper.py
│   └── utils
│   │   ├── routers
│   │   │   ├── __init__.py
│   │   │   └── raspi.py
│   │   ├── services
│   │   │   ├── __init__.py
│   │   │   ├── gpt.py
│   │   │   ├── tts.py
│   │   │   ├── voicevox.py
│   │   │   ├── voicevox_api.py
│   │   │   └── whisper.py
│   │   └── utils
│   │   ├── __init__.py
│   │   ├── config.py
│   │   └── log.py
│   └── v1
│   ├── __init__.py
│   ├── config.py
│   └── log.py
└── v1
├── __init__.py
├── routers
│   ├── __init__.py
│   ├── raspi.py
│   └── sandbox.py
├── schemas
│   ├── __init__.py
│   └── sandbox.py
├── services
│   ├── __init__.py
│   ├── gpt.py
│   ├── voicevox_api.py
│   └── whisper.py
└── utils
├── __init__.py
└── config.py
│   ├── routers
│   │   ├── __init__.py
│   │   ├── raspi.py
│   │   └── sandbox.py
│   ├── schemas
│   │   ├── __init__.py
│   │   └── sandbox.py
│   ├── services
│   │   ├── __init__.py
│   │   ├── gpt.py
│   │   ├── voicevox_api.py
│   │   └── whisper.py
│   └── utils
│   ├── __init__.py
│   ├── config.py
│   └── logging.py
├── docker-compose.dev.yml
└── docker-compose.yml
```

## VOICEVOX
Expand Down

0 comments on commit 178edd2

Please sign in to comment.