> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# workspace

> workspace を作成し、メンバーを招待し、ロールを管理し、チーム全体でアプリケーションを共有します。

<Info>
  workspace は、`rest.Rest` に埋め込まれた `Workspaces` インターフェースによって公開されます。**Standard、Pro、Enterprise** プランで利用できます。
</Info>

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

## workspace の作成

```go theme={null}
workspace, err := api.CreateWorkspace("Acme")
if err != nil {
	panic(err)
}

fmt.Println(workspace.ID)
```

名前は 1–32 文字で、workspace の作成にはアクティブな有料プランが必要です。

## workspace の一覧取得

`api.GetWorkspaces()` は、認証済みユーザーがオーナーまたはメンバーであるすべての workspace を返します。

```go theme={null}
workspaces, err := api.GetWorkspaces()
if err != nil {
	panic(err)
}

for _, ws := range workspaces {
	fmt.Println(ws.Name, ws.ID)
}
```

## 単一の workspace の取得

workspace ID は、ハイフンなしの UUID v4 値（32 文字の 16 進数）です。

```go theme={null}
workspace, err := api.GetWorkspace("1234567890abcdef1234567890abcdef")
if err != nil {
	panic(err)
}

fmt.Println(workspace.Name)
fmt.Println(workspace.Owner)
fmt.Println(workspace.Members)
fmt.Println(workspace.Applications)
```

## メンバーの招待

メンバーの招待は 2 段階のハンドシェイクです — 招待される側が **自分の** クライアントから短命なコードを生成して同意を示し、オーナーがそれを消費します。

```go theme={null}
// 1. 招待される側の SDK クライアントから
otherClient := rest.NewClient(os.Getenv("OTHER_USER_API_KEY"))
defer otherClient.Close()
otherAPI := rest.New(otherClient)

code, err := otherAPI.GetWorkspaceInviteCode()
if err != nil {
	panic(err)
}

// 2. workspace オーナーのクライアントから
err = api.AddWorkspaceMember("1234567890abcdef1234567890abcdef", code, "maintain")
if err != nil {
	panic(err)
}
```

<Note>
  招待コードは、workspace に **参加する** ユーザーが生成するものであり、オーナーが生成するものではありません。コードは使い捨てで、**5 分** で失効します — 生成したらオーナー/管理者に渡し、速やかに消費してください。
</Note>

### ロール

| Role              | Description                       |
| ----------------- | --------------------------------- |
| `owner` / `admin` | workspace の完全な管理                  |
| `maintain`        | 共有アプリケーションへの運用アクセス                |
| `manager`         | 監視に加えてアプリケーションのライフサイクル（起動、停止、再起動） |
| `view`            | 読み取り専用アクセス                        |

## メンバーのロールの変更

```go theme={null}
err := api.UpdateWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01", "admin")
if err != nil {
	panic(err)
}
```

## メンバーの削除

```go theme={null}
err := api.RemoveWorkspaceMember("1234567890abcdef1234567890abcdef", "abcdef0123456789abcdef01")
if err != nil {
	panic(err)
}
```

## アプリケーションの共有

```go theme={null}
err := api.AddWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
if err != nil {
	panic(err)
}

err = api.RemoveWorkspaceApplication("1234567890abcdef1234567890abcdef", "abc123def456abc123def456")
```

## workspace からの退出または削除

<Warning>
  workspace の削除は取り消せず、オーナーのみが実行できます。
</Warning>

```go theme={null}
// メンバーとして
err := api.LeaveWorkspace("1234567890abcdef1234567890abcdef")

// オーナーとして（取り消し不可）
err = api.DeleteWorkspace("1234567890abcdef1234567890abcdef")
```
