Deta Cloud→Deta Space仕様変更後のPythonアプリのデプロイ方法

無料のクラウドサービスDeta Cloudが、Deta Spaceへと仕様変更されました。2023/2/14、バレンタインデーの日にアナウンスされています。
https://deta.space/from-cloud

この記事では、仕様変更後のPythonアプリのデプロイ方法について、簡素なサンプルアプリを例として説明します。

[![Image from Gyazo](https://i.gyazo.com/5ea82c57296a20c2f7adb68cad6ad277.png)](https://gyazo.com/5ea82c57296a20c2f7adb68cad6ad277)

## 初回デプロイ方法

### アカウント登録
公式サイト（[https://deta.space/](https://deta.space/)）でアカウントを作成します。

### Access Tokenの取得
作成したアカウントでログインしAccess Tokenを取得します。

まず、ログイン後のダッシュボード画面下方の検索ボックスからSettingをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/09a5a1db-3248-23a3-0a79-887016febaac.png)

Generate Tokenをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/1d310871-1fda-b0a4-1d0e-8a64360f3474.png)

表示されるランダムな英数文字列（青色部分）をコピーしておきます。このTokenはアプリを開発するための情報のため、他人には共有しないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/60d4b8de-854d-de9d-aed3-c218ed71f8f7.png)

補足：画面をCloseすると、Tokenは再確認できません。再度、Generate Tokenをクリックし、異なるTokenを再発行してください。

### デプロイするアプリの準備
今回はサンプルとして以下の2ファイルを準備します。

```main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def index():
    return {"Hello": "ahhhhh!"}
```

```requirements.txt
fastapi==0.70.0
```


### CLIのインストール
コマンドラインで、Spaceコマンドを利用するために、専用のCLIをインストールします。

Windowsの場合

```
iwr https://get.deta.dev/space-cli.ps1 -useb | iex
```

Macの場合

```
curl -fsSL https://get.deta.dev/space-cli.sh | sh
```

### space login
Spaceコマンドで、Deta Spaceへログインします。デプロイしたいアプリのディレクトリ（main.pyとrequirement.txtを格納しているディレクトリ）でspace loginを実行します。

```
space login
```

Access Tokenの入力を求められます。発行したAccess Tokenの入力してEnterします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/e4a92bb8-d2e5-f0fc-c304-795f6a87e9a2.png)

ログインに成功すると「👍 Login Successful!」が表示されます。


### space new
Spaceコマンドで、プロジェクトという単位（アプリごとに作成するもの）を作成します。デプロイしたいアプリのディレクトでspace newを実行します。

```
space new
```

アプリの名前を問われます。自由に入力してEnterします。デフォルトではフォルダ名が入力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/01a4d52c-56dd-b1e7-f323-2fb072270b6f.png)

この設定で実行しますか？と問われます。そのままEnterします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/76ea0e17-d2a7-bf94-1207-c40fd17eaa82.png)

### Spacefileを編集：公開設定
space newのあと、いくつかファイルが自動生成されます。
そのうちの「Spacefile」というファイルを編集します。
一番下に**public: true**を追加します。これが他の人でもアクセスできる設定です。

```Spacefile
# Spacefile Docs: https://go.deta.dev/docs/spacefile/v0
v: 0
micros:
  - name: testapp
    src: .
    engine: python3.9
    primary: true
    public: true
```


### space push：WEB公開
ソースコードをアップロードします。デプロイしたいアプリのディレクトでspace pushを実行します。

```
space push
```

成功すると、以下のような表示が出力されます。
[![Image from Gyazo](https://i.gyazo.com/02859d1be886c08e3f05315356f20dfa.png)](https://gyazo.com/02859d1be886c08e3f05315356f20dfa)

青文字の部分が発行されたURLです。
以上のステップで、だれもがアクセス可能な状態でWEB公開されます。

### space release：アプリのリリース
スマホアプリのような、インストール可能なアプリをリリースすることも可能です。
デプロイしたいアプリのディレクトでspace releaseを実行します。

```
space release
```

space pushしたバージョンの中で最新のものをリリースしますか？と問われます。そのままEnterします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/e61684f4-2526-0d0b-711d-218384a955b5.png)

成功すると、以下のような表示が出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/6afad7e1-817e-d43c-bce9-23091e859431.png)


### アプリへのアクセス
space releaseの出力結果に表示されている赤枠のURLにアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/6afad7e1-817e-d43c-bce9-23091e859431.png)

Install Appをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/892b3591-6b72-2052-5c9b-6c36d15cc7b5.png)

View on Canvasをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/2f7f71da-2b63-6b50-5e20-b5e496606c0c.png)

アプリのアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/05eb7dd7-4ab8-bf6f-f73b-f195a0c7a1fe.png)

表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/b1edb534-b131-ae30-f990-1cddd46a79bd.png)


## ソースコード修正時の再デプロイ方法
ソースコードを修正したのち、space pushを再度実施することで、修正版ソースコードをデプロイできます。
さらに、space releaseのプロセスを再度実施することで、修正版のアプリをデプロイできます。

## 一般ユーザーがアプリにアクセスする方法
一般ユーザーがアプリにアクセスするには、そのユーザーもDeta Spaceのアカウントを作成する必要があります。アプリ作成者は、一般ユーザーにspace releaseの出力結果に表示されている赤枠のURLを共有します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/6afad7e1-817e-d43c-bce9-23091e859431.png)

一般ユーザーが、提供されたURLにアクセスします。Install on Spaceをクリックすると、Deta Spaceのアカウント情報の入力を求められます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163239/f30552c3-bd9d-e755-b5af-b49c34ce8c91.png)

ログイン後、前述の「アプリへのアクセス」と同様の手順を実施します。

## 自著の内容変更に関するお知らせ
著書のブロックチェーン開発教本（私が制作したもの）もDetaを使っていたので、本番デプロイに関する情報を補足しました。著書の場合はDetaへAPIとしてデプロイしていたので、代替サービスとして[Render](https://render.com/)を推奨する形にしました。

書籍↓

https://www.amazon.co.jp/dp/B0B55XSBNZ

補足↓

https://note.com/moyattodataman/n/n120cd7b92a2b