# FastAPI CLI { #fastapi-cli }
**FastAPI CLI** は、FastAPI アプリの提供、FastAPI プロジェクトの管理などに使用できるコマンドラインプログラムです。
FastAPI をインストールすると(例: `pip install "fastapi[standard]"`)、ターミナルで実行できるコマンドラインプログラムが付属します。
開発用に FastAPI アプリを起動するには、`fastapi dev` コマンドを使用できます:
```console
$ fastapi dev
FastAPI Starting development server 🚀
Searching for package file structure from directories with
__init__.py files
Importing from /home/user/code/awesomeapp
module 🐍 main.py
code Importing the FastAPI app object from the module with the
following code:
from main import app
app Using import string: main:app
server Server started at http://127.0.0.1:8000
server Documentation at http://127.0.0.1:8000/docs
tip Running in development mode, for production use:
fastapi run
Logs:
INFO Will watch for changes in these directories:
['/home/user/code/awesomeapp']
INFO Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to
quit)
INFO Started reloader process [383138] using WatchFiles
INFO Started server process [383153]
INFO Waiting for application startup.
INFO Application startup complete.
```
/// tip
本番では `fastapi dev` の代わりに `fastapi run` を使用します。🚀
///
内部的には、**FastAPI CLI** は [Uvicorn](https://www.uvicorn.dev)(高性能で本番運用向けの ASGI サーバー)を使用します。😎
`fastapi` CLI は、実行する FastAPI アプリを自動検出しようとします。既定では、`main.py` の中にある `app` という名前のオブジェクト(ほかにもいくつかの変種)であると仮定します。
ただし、使用するアプリを明示的に設定することもできます。
## `pyproject.toml` でアプリの `entrypoint` を設定 { #configure-the-app-entrypoint-in-pyproject-toml }
`pyproject.toml` に次のように、アプリの場所を設定できます:
```toml
[tool.fastapi]
entrypoint = "main:app"
```
この `entrypoint` により、`fastapi` コマンドは次のようにアプリを import する必要があると認識します:
```python
from main import app
```
もしコード構成が次のような場合:
```
.
├── backend
│ ├── main.py
│ ├── __init__.py
```
`entrypoint` は次のように設定します:
```toml
[tool.fastapi]
entrypoint = "backend.main:app"
```
これは次と同等です:
```python
from backend.main import app
```
### パス指定での `fastapi dev` { #fastapi-dev-with-path }
`fastapi dev` コマンドにファイルパスを渡すこともでき、使用する FastAPI アプリオブジェクトを推測します:
```console
$ fastapi dev main.py
```
ただし、そのたびに `fastapi` コマンドを呼び出す際に正しいパスを渡す必要があります。
さらに、[VS Code 拡張機能](editor-support.md) や [FastAPI Cloud](https://fastapicloud.com) など、ほかのツールがそれを見つけられない場合があります。そのため、`pyproject.toml` の `entrypoint` を使用することを推奨します。
## `fastapi dev` { #fastapi-dev }
`fastapi dev` を実行すると、開発モードが有効になります。
デフォルトでは、**auto-reload** が有効です。コードを変更するとサーバーが自動で再読み込みされます。これはリソースを多く消費し、無効時より安定性が低くなる可能性があります。開発時のみに使用してください。また、IP アドレス `127.0.0.1`(マシン自身のみと通信するための IP、`localhost`)で待ち受けます。
## `fastapi run` { #fastapi-run }
`fastapi run` を実行すると、デフォルトで本番モードで起動します。
デフォルトでは、**auto-reload** は無効です。また、IP アドレス `0.0.0.0`(利用可能なすべての IP アドレスを意味します)で待ち受けるため、そのマシンと通信できる任意のクライアントから公開アクセスが可能になります。これは、たとえばコンテナ内など、本番環境で一般的な実行方法です。
多くの場合(そして推奨されるのは)、上位に HTTPS を終端する「termination proxy」を置きます。これはアプリのデプロイ方法に依存し、プロバイダが代行する場合もあれば、自分で設定する必要がある場合もあります。
/// tip
詳しくは、[デプロイのドキュメント](deployment/index.md)を参照してください。
///