It's a template for backend of FastAPI(Python) on Docker.
できません(色々試しましたが、満足がいく環境を構築できず、また、再現手順も複雑なので断念しました)。
検証環境は、ubuntu 20.04です。Mac、Windowsは動かないかもしれません。
開発を開始するために、次の作業が必要です。
git clone xxx
cd xxx
Dockerコンテナで開発する際、ホストOSのユーザーとコンテナのユーザーが異なる場合、ファイルを削除できない等の権限問題が生じます。 この問題を回避するため、コンテナにどのユーザーでログインするか伝える必要があります。
ここでは、次のように.env
を作成します。
# ホストOSのユーザーID・グループIDを取得
CONTAINER_USER_ID=`id -u`
CONTAINER_GROUP_ID=`id -g`
# ホストユーザーとコンテナユーザーの権限を共有するための変数を定義
cat << EOS > .env
CONTAINER_USER_ID=$CONTAINER_USER_ID
CONTAINER_GROUP_ID=$CONTAINER_GROUP_ID
EOS
ホストユーザーとコンテナユーザーの権限を気にしない場合は、CONTAINER_USER_ID=1000
CONTAINER_GROUP_ID=1000
を指定してください。
DBサーバと接続する場合など、予めコンテナを起動する必要があります。 本プロジェクトは、PostgreSQL + SqlAlchemyの構成でデータベースを取り扱います。
Crtl + Shift + P
でコマンドパレットを起動します。Remote-Containers: Reopen in Container
を選択します。main.pyを次のようなコードに修正し、保存してください。
from fastapi import FastAPI
import datetime
import asyncio
app = FastAPI()
isortが動作していれば、標準ライブラリ->サードパーティライブラリの順にインポート順が修正されます。
main.pyを次のようなコードに修正し、保存してください。
import asyncio
import datetime
from fastapi import FastAPI
app = FastAPI()
flake8が動作していれば、エディタ上にエラー(asyncioとdatetimeが未使用)が表示されます。 また、VSCodeの問題タブにもエラー箇所が出力され、クリックすると問題箇所にジャンプできます。
main.pyの最後に次のようなコードを追加し、保存してください。
def func1():
...
def func2():
...
blackが動作していれば、関数の間の空行を2行に統一してくれます。
main.pyの最後に次のようなコードを追加し、保存してください。
num = 1
def func(name: str):
...
func(name=num)
mypyが動作していれば、エラー(想定している型と異なる)が表示されます。
何かコードを入力し、インテリセンスにKiteの文字が出てくれば、Kiteが動作してます。
main.pyに次のようなコードを仕込んであります。
debugpy.listen(("0.0.0.0", 5678))
debugpy.wait_for_client()
debugpy
は、VSCodeでPythonをデバッグするためのモジュールです。
wait_for_client
でクライアントからの接続を待機し、VSCodeからデバッグ開始すると、debugpy
と接続され、デバッグ(ブレークポイントの利用)可能な状態になります。
コードにブレークポイントを設定し、openapiからapiを実行すれば、ブレークポイントでプログラムが停止するので、試してみましょう。
Kiteプラグイン自体には解析機能がついてないので、コンテナ上にKite Engineをインストールする必要がある。
公式サイトを参考に、コンテナ上にKite Engineをインストールする。
bash -c "$(wget -q -O - https://linux.kite.com/dls/linux/current)"
KiteのProfessional版を利用する場合は、ログインが必要。 CUIモードでKite Engineをインストールした場合は、次のメッセージが表示されているはずなので、メッセージに従いログイン用のコマンドを実行する。
アカウントを持っていなくとも、フリーの範囲でなら動作する、はず。
No X11 or Wayland session was found.
Kite Copilot UI won't be launched after the installation.
To login, run this command in a terminal:
~/.local/share/kite/login-user
難点は、コンテナをビルドし直したら、再度インストール、ログインが必要。 Dockerfileに組み込んでしまうのも気が引ける。
コード上のコメントに特定のタグを指定することで、TODOとして一覧表示することができます。
# TAG_NAME: このようにタグを入力することで一覧管理できます。
def func():
raise NotImplementedError()
標準で利用可能なタグは次のとおりです。
必要に応じてカスタムタグを追加もできます。
次のコマンドでシステムに関連するコマンドを利用することができます。
コマンドは、Typer
で実装してあります。
# コマンドのヘルプを表示する
python3 -m src
コマンドはツリー構造になっており、カテゴリ毎にコマンドが集約されています。
# configコマンドのヘルプを表示する
python3 -m src config
詳細なコマンドのヘルプやオプションは次のように確認できます。
# config initコマンドのヘルプを表示する
python3 -m src config init --help