# Spaces Dev Mode: Spacesでのシームレスな開発

> [!WARNING]
> Spaces Dev Modeは、PROまたはTeam & Enterpriseプランの一部です。

## Spaces Dev Mode

Spaces Dev Modeは、アプリケーションのデバッグを容易にし、Spacesでの反復開発を高速化する機能です。

Space リポジトリに変更をコミットするたびに、基盤となる Docker イメージが再ビルドされ、その後、新しいコンテナをホストするために新しい仮想マシンがプロビジョニングされます。

Dev Modeでは、Dockerイメージを上書きすることで、Spaceをより迅速に更新できます。

Dev Mode の Docker イメージは、アプリケーションをサブプロセスとして起動します。これにより、Space コンテナ自体を停止せずにアプリケーションを再起動できます。また、バックグラウンドで SSH サーバー（ローカルエディターやターミナル用）と VS Code サーバー（製品内蔵の VS Code Web 用）も起動するため、Space に接続できます。

実行中のSpaceに接続できることで、いくつかの使用例が解放されます：

    - Spaceが毎回再ビルドされることなく、アプリコードに変更を加えることができます
    - 実行中のアプリケーションをデバッグし、リソースをライブで監視できます

全体として、Dockerイメージの再ビルドフェーズをスキップすることで、Spacesでの開発と実験を大幅に高速化します。

## インターフェース

SpaceでDev Modeを有効にすると、次のようなモーダルが表示されるはずです。

コードを変更しても、アプリケーションは自動的に再起動されません。変更をSpaceに反映するには、アプリを再起動する`Refresh`ボタンを使用する必要があります。

  Gradio SDK を使用している場合、またはアプリケーションが Python ベースの場合は、依存関係が自動的にインストールされない点にご注意ください。VS Code または SSH から `pip install` を手動で実行する必要があります。

### 接続

Dev Mode は、実行中の Space を標準の SSH ホストとして公開します。VS Code を含むその他のエディターは、同じ SSH エンドポイントを通じて接続します。

#### SSH

Dev Mode が実行されている状態で、以下のように接続します:

```shell
ssh <space-subdomain>@ssh.hf.space
```

サブドメインは、Dev Mode のコントロールモーダルに表示されます。プログラム的にも取得できます:

```python
from huggingface_hub import HfApi
print(HfApi().space_info("namespace/repo").subdomain)
```

Hugging Face CLI は、サブドメインを解決してセッションを開くことができます:

```shell
# SSH into the Space's Dev Mode container
hf spaces ssh username/my-space

# Print the SSH command instead of running it
hf spaces ssh username/my-space --dry-run

# Use a specific identity file
hf spaces ssh username/my-space -i ~/.ssh/id_ed25519
```

Dev Mode がまだ実行されていない場合に、プロンプトなしで有効にするには `--auto` を渡します。すべてのオプションについては、[`hf spaces ssh` CLI リファレンス](https://huggingface.co/docs/huggingface_hub/package_reference/cli#hf-spaces-ssh)を参照してください。

SSH を使用して Space に接続するには、お使いのコンピューターの SSH 公開鍵を[ユーザーアカウント](https://huggingface.co/settings/keys)に追加する必要があります。より詳細な手順については、[Git over SSH](./security-git-ssh#add-a-ssh-key-to-your-account)のドキュメントを参照してください。

#### VS Code

VS Codeのローカルインストール版を使用して、Spaceのコンテナに接続することもできます。そのためには、[Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh)拡張機能をインストールし、同じ`<space-subdomain>@ssh.hf.space`ホストに接続してください。

### 変更の永続化

Dev Mode が有効な間に適用した変更は、Space リポジトリに自動的に保存されません。デフォルトでは、Dev Mode が無効化された場合、または Space がスリープ状態に移行した場合、これらの変更は破棄されます。

Dev Mode が有効な間に適用した変更を永続化するには、Space コンテナ内から（VS Code または SSH を使用して）`git` を使用する必要があります。例:

```shell
# Add changes and commit them
git add .
git commit -m "Persist changes from Dev Mode"

# Push the commit to persist them in the repo
git push
```

Spaceに未コミットまたは未プッシュの変更がある場合、モーダルに警告が表示されます:

## 開発モードの有効化

WebインターフェースまたはAPIから、SpaceでDev Modeを有効にできます。

### API経由

Dev Modeはプログラムで切り替えることができます:

```
POST https://huggingface.co/api/spaces/{namespace}/{repo}/dev-mode
Content-Type: application/json
Authorization: Bearer {token}

{
  "enabled": true
}
```

### Webインターフェース経由

devモードを有効にしてSpaceを作成することもできます：

## 制限事項

Dev Mode は現在、静的な Spaces では利用できません。Docker Spaces には追加の要件もあります。

### Docker Spaces

Dev ModeはDocker Spacesでサポートされています。ただし、Dev Modeが正しく動作するには、Spaceが以下のルールに準拠している必要があります。

1. 以下のパッケージをインストールする必要があります:

- `bash`（SSH接続を確立するために必要）
- `curl`、`wget`、`procps`（VS Code サーバープロセスに必要）
- Dev Mode 環境から変更をコミットおよびプッシュできるように、`git` と `git-lfs`

2. Dev Mode デーモンが変更を検出できるようにするには、アプリケーションコードを`/app`フォルダに配置する必要があります。

3. コードの変更を許可するために、`/app` フォルダーは uid が `1000` のユーザーによって所有されている必要があります。

4. Dockerfileには、起動用の`CMD`インストラクションを含める必要があります。`CMD`インストラクションの詳細については、[Dockerのドキュメント](https://docs.docker.com/reference/dockerfile/#cmd)を参照してください。

Dev Modeは、ベースイメージがDebianベース（例: Ubuntu）の場合に正常に動作します。

より特殊なLinuxディストリビューション（例：alpine）はテストされておらず、それらでDev Modeが正常に動作する保証はありません。

### 互換性のあるDockerfileの例

これは、Spaces Dev Mode 互換の Dockerfile の例です。

`apt-get`を使用して必要なパッケージをインストールし、開発者の利便性のためにいくつか追加のパッケージ（具体的には`top`、`vim`、`nano`）もインストールします。その後、`/app`からNodeJSアプリケーションを起動します。

```Dockerfile
FROM node:19-slim

RUN apt-get update && \
    apt-get install -y \
      bash \
      git git-lfs \
      wget curl procps \
      htop vim nano && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --link ./ /app
RUN  npm i 

RUN chown 1000 /app
USER 1000
CMD ["node", "index.js"]
```

この組織には、Dev Mode 対応の Docker Spaces の例がいくつかあります。ご自身のネームスペースに複製してご利用ください。

Python アプリの例（FastAPI HTTP サーバー）: https://huggingface.co/spaces/dev-mode-explorers/dev-mode-python

JavaScript アプリの例（Express.js HTTP サーバー）: https://huggingface.co/spaces/dev-mode-explorers/dev-mode-javascript

## フィードバック

Spaces Dev Mode に関するフィードバックは、HF Hub 上で直接共有できます: https://huggingface.co/spaces/dev-mode-explorers/README/discussions

