ユーザーモジュール¶
機能説明
インターフェースのプレフィックスは http(s)://<your-domain>
に統一されています。
本番環境では、認証トークンを保証するために HTTPS を使用する必要があります。HTTP は開発環境でのみ推奨されます。
登録/ログイン、個人プロファイル、Token 管理、チャージ/支払い、プロモーションシステムなどの機能を含む、4段階の権限システム(公開/ユーザー/管理者/Root)と完全なユーザーライフサイクル管理を実現するコアユーザー管理システムです。2FA、メール認証、複数の OAuth ログイン方法をサポートしています。
アカウント登録/ログイン¶
🔐 認証不要¶
新規アカウント登録¶
- インターフェース名:新規アカウント登録
- HTTP メソッド:POST
- パス:
/api/user/register
- 認証要件:公開
- 機能概要:新規ユーザーアカウントを作成します。メール認証と紹介コード機能をサポートしています。
💡 リクエスト例:
const response = await fetch('/api/user/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: "newuser",
password: "password123",
email: "[email protected]",
verification_code: "123456",
aff_code: "INVITE123"
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
username
(文字列): ユーザー名、必須password
(文字列): パスワード、必須email
(文字列): メールアドレス。メール認証が有効な場合に必須verification_code
(文字列): メール認証コード。メール認証が有効な場合に必須aff_code
(文字列): 紹介コード、オプション
ユーザーログイン¶
- インターフェース名:ユーザーログイン
- HTTP メソッド:POST
- パス:
/api/user/login
- 認証要件:公開
- 機能概要:ユーザーアカウントにログインします。二要素認証(2FA)をサポートしています。
💡 リクエスト例:
const response = await fetch('/api/user/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: "testuser",
password: "password123"
})
});
const data = await response.json();
✅ 成功応答例(2FAなし):
{
"success": true,
"message": "登录成功",
"data": {
"token": "user_access_token",
"user": {
"id": 1,
"username": "testuser",
"role": 1,
"quota": 1000000
}
}
}
✅ 成功応答例(2FAが必要):
❗ 失敗応答例:
🧾 フィールド説明:
username
(文字列): ユーザー名、必須password
(文字列): パスワード、必須require_2fa
(ブール型): 二要素認証が必要かどうか
Epay 支払いコールバック¶
- インターフェース名:Epay 支払いコールバック
- HTTP メソッド:GET
- パス:
/api/user/epay/notify
- 認証要件:公開
- 機能概要:Epay(易支付)システムの支払いコールバック通知を処理します。
💡 リクエスト例:
_// 通常、支払いシステムによって自動的にコールバックされます。フロントエンドから手動で呼び出す必要はありません _
_// 示例URL: /api/user/epay/notify?trade_no=USR1NO123456&money=10.00&trade_status=TRADE_SUCCESS_
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
trade_no
(文字列): 取引注文番号money
(文字列): 支払い金額trade_status
(文字列): 取引ステータスsign
(文字列): 署名検証
全グループのリスト表示(認証不要版)¶
- インターフェース名:全グループのリスト表示
- HTTP メソッド:GET
- パス:
/api/user/groups
- 認証要件:公開
- 機能概要:システム内のすべてのユーザーグループ情報を取得します。ログインなしでアクセス可能です。
💡 リクエスト例:
const response = await fetch('/api/user/groups', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"default": {
"ratio": 1.0,
"desc": "默认分组"
},
"vip": {
"ratio": 0.8,
"desc": "VIP分组"
},
"auto": {
"ratio": "自动",
"desc": "自动选择最优分组"
}
}
}
❗ 失敗応答例:
🧾 フィールド説明:
data
(オブジェクト): グループ情報マッピング
- キー (文字列): グループ名
ratio
(数値/文字列): グループ比率 (Ratio)。"自動"は自動選択を意味しますdesc
(文字列): グループ説明
🔐 ユーザー認証¶
ログアウト¶
- インターフェース名:ログアウト
- HTTP メソッド:GET
- パス:
/api/user/logout
- 認証要件:ユーザー
- 機能概要:ユーザーセッションをクリアし、ログイン状態を終了します。
💡 リクエスト例:
const response = await fetch('/api/user/logout', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
リクエストパラメータなし
ユーザー自身の操作¶
🔐 ユーザー認証¶
自身の所属グループの取得¶
- インターフェース名:自身の所属グループの取得
- HTTP メソッド:GET
- パス:
/api/user/self/groups
- 認証要件:ユーザー
- 機能概要:現在ログインしているユーザーが利用可能なグループ情報を取得します。グループ比率と説明が含まれます。
💡 リクエスト例:
const response = await fetch('/api/user/self/groups', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"default": {
"ratio": 1.0,
"desc": "默认分组"
},
"vip": {
"ratio": 0.8,
"desc": "VIP分组"
},
"auto": {
"ratio": "自动",
"desc": "自动选择最优分组"
}
}
}
❗ 失敗応答例:
🧾 フィールド説明:
data
(オブジェクト): ユーザーが利用可能なグループ情報マッピング group.go:25-48
- キー (文字列): グループ名
ratio
(数値/文字列): グループ比率 (Ratio)。"自動"は最適なグループの自動選択を意味しますdesc
(文字列): グループ説明
個人プロファイルの取得¶
- インターフェース名:個人プロファイルの取得
- HTTP メソッド:GET
- パス:
/api/user/self
- 認証要件:ユーザー
- 機能概要:現在のユーザーの詳細情報を取得します。権限、クォータ、設定などが含まれます。
💡 リクエスト例:
const response = await fetch('/api/user/self', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "[email protected]",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100,
"aff_code": "ABC123",
"aff_count": 5,
"aff_quota": 10000,
"aff_history_quota": 50000,
"inviter_id": 0,
"linux_do_id": "",
"setting": "{}",
"stripe_customer": "",
"sidebar_modules": "{\"chat\":{\"enabled\":true}}",
"permissions": {
"can_view_logs": true,
"can_manage_tokens": true
}
}
}
❗ 失敗応答例:
🧾 フィールド説明:
id
(数値): ユーザー IDusername
(文字列): ユーザー名display_name
(文字列): 表示名role
(数値): ユーザーロール。1=一般ユーザー、10=管理者、100=Root ユーザーstatus
(数値): ユーザー状態。1=正常、2=無効email
(文字列): メールアドレスgroup
(文字列): 所属グループquota
(数値): 総クォータused_quota
(数値): 使用済みクォータrequest_count
(数値): リクエスト回数aff_code
(文字列): 紹介コードaff_count
(数値): 紹介人数aff_quota
(数値): 紹介報酬クォータaff_history_quota
(数値): 履歴紹介クォータinviter_id
(数値): 招待者 IDlinux_do_id
(文字列): LinuxDo アカウント IDsetting
(文字列): ユーザー設定 JSON 文字列stripe_customer
(文字列): Stripe 顧客 IDsidebar_modules
(文字列): サイドバーモジュール設定 JSON 文字列permissions
(オブジェクト): ユーザー権限情報
モデル可視性の取得¶
- インターフェース名:モデル可視性の取得
- HTTP メソッド:GET
- パス:
/api/user/models
- 認証要件:ユーザー
- 機能概要:現在のユーザーがアクセス可能な AI モデルのリストを取得します。
💡 リクエスト例:
const response = await fetch('/api/user/models', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": [
"gpt-3.5-turbo",
"gpt-4",
"claude-3-sonnet",
"claude-3-haiku"
]
}
❗ 失敗応答例:
🧾 フィールド説明:
data
(配列): ユーザーがアクセス可能なモデル名のリスト
個人プロファイルの変更¶
- インターフェース名:個人プロファイルの変更
- HTTP メソッド:PUT
- パス:
/api/user/self
- 認証要件:ユーザー
- 機能概要:ユーザーの個人情報またはサイドバー設定を更新します。
💡 リクエスト例(個人情報の更新):
const response = await fetch('/api/user/self', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
display_name: "New Display Name",
email: "[email protected]"
})
});
const data = await response.json();
💡 リクエスト例(サイドバー設定の更新):
const response = await fetch('/api/user/self', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
sidebar_modules: JSON.stringify({
chat: { enabled: true, playground: true },
console: { enabled: true, token: true }
})
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
display_name
(文字列): 表示名、オプションemail
(文字列): メールアドレス、オプションpassword
(文字列): 新しいパスワード、オプションsidebar_modules
(文字列): サイドバーモジュール設定 JSON 文字列、オプション
アカウントの削除¶
- インターフェース名:アカウントの削除
- HTTP メソッド:DELETE
- パス:
/api/user/self
- 認証要件:ユーザー
- 機能概要:現在のユーザーアカウントを削除します。Root ユーザーは削除できません。
💡 リクエスト例:
const response = await fetch('/api/user/self', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
リクエストパラメータなし
ユーザーレベルのアクセストークンの生成¶
- インターフェース名:ユーザーレベルのアクセストークンの生成
- HTTP メソッド:GET
- パス:
/api/user/token
- 認証要件:ユーザー
- 機能概要:現在のユーザー向けに、API呼び出しに使用する新しいアクセス**トークン**を生成します。
💡 リクエスト例:
const response = await fetch('/api/user/token', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
data
(文字列): 生成されたアクセス**トークン**
紹介コード情報の取得¶
- インターフェース名:紹介コード情報の取得
- HTTP メソッド:GET
- パス:
/api/user/aff
- 認証要件:ユーザー
- 機能概要:ユーザーの紹介コードを取得または生成します。新規ユーザーの招待に使用されます。
💡 リクエスト例:
const response = await fetch('/api/user/aff', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
data
(文字列): ユーザーの紹介コード。存在しない場合は4桁のランダムな文字列が自動生成されます。
クォータの直接チャージ¶
- インターフェース名:クォータの直接チャージ
- HTTP メソッド:POST
- パス:
/api/user/topup
- 認証要件:ユーザー
- 機能概要:交換コードを使用してアカウントに**クォータ**をチャージします。
💡 リクエスト例:
const response = await fetch('/api/user/topup', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
key: "REDEEM123456"
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
key
(文字列): 交換コード、必須data
(数値): 成功時に交換された**クォータ**数が返されます
支払い注文の送信¶
- インターフェース名:支払い注文の送信
- HTTP メソッド:POST
- パス:
/api/user/pay
- 認証要件:ユーザー
- 機能概要:オンライン支払い注文を作成します。複数の支払い方法をサポートしています。
💡 リクエスト例:
const response = await fetch('/api/user/pay', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
amount: 10000,
payment_method: "alipay",
top_up_code: ""
})
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "success",
"data": {
"pid": "12345",
"type": "alipay",
"out_trade_no": "USR1NO123456",
"notify_url": "https://example.com/notify",
"return_url": "https://example.com/return",
"name": "TUC10000",
"money": "10.00",
"sign": "abc123def456"
},
"url": "https://pay.example.com/submit"
}
❗ 失敗応答例:
🧾 フィールド説明:
amount
(数値): チャージ数量。最小チャージ**クォータ**以上である必要があります topup.go:133-136payment_method
(文字列): 支払い方法。例:「alipay」、「wxpay」などtop_up_code
(文字列): チャージコード、オプションdata
(オブジェクト): 支払いフォームパラメータurl
(文字列): 支払い送信先アドレス
クォータ支払い¶
- インターフェース名:クォータ支払い
- HTTP メソッド:POST
- パス:
/api/user/amount
- 認証要件:ユーザー
- 機能概要:指定されたチャージ数量に対応する実際の支払い金額を計算します。
💡 リクエスト例:
const response = await fetch('/api/user/amount', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
amount: 10000,
top_up_code: ""
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
amount
(数値): チャージ数量。最小チャージ**クォータ**以上である必要がありますtop_up_code
(文字列): チャージコード、オプションdata
(文字列): 実際に支払う必要のある金額(元)
紹介クォータの振替¶
- インターフェース名:紹介**クォータ**の振替
- HTTP メソッド:POST
- パス:
/api/user/aff_transfer
- 認証要件:ユーザー
- 機能概要:紹介報酬**クォータ**を使用可能な**クォータ**に変換します。
💡 リクエスト例:
const response = await fetch('/api/user/aff_transfer', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
quota: 50000
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
quota
(数値): 変換する**クォータ**数量。最小単位**クォータ**以上である必要があります
ユーザー設定の更新¶
- インターフェース名:ユーザー設定の更新
- HTTP メソッド:PUT
- パス:
/api/user/setting
- 認証要件:ユーザー
- 機能概要:ユーザーの個人設定構成を更新します。
💡 リクエスト例:
const response = await fetch('/api/user/setting', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_user_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
theme: "dark",
language: "zh-CN",
notifications: {
email: true,
browser: false
}
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
- リクエストボディには、任意のユーザー設定フィールドを JSON 形式で含めることができます
- 具体的なフィールドは、フロントエンドの設定ページの要件によって異なります
管理者によるユーザー管理¶
🔐 管理者認証¶
全ユーザーリストの取得¶
- インターフェース名:全ユーザーリストの取得
- HTTP メソッド:GET
- パス:
/api/user/
- 認証要件:管理者
- 機能概要:システム内の全ユーザーのリスト情報をページネーションで取得します。
💡 リクエスト例:
const response = await fetch('/api/user/?p=1&page_size=20', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "[email protected]",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100
}
],
"total": 50,
"page": 1,
"page_size": 20
}
}
❗ 失敗応答例:
🧾 フィールド説明:
p
(数値): ページ番号。デフォルトは 1page_size
(数値): ページあたりの数量。デフォルトは 20items
(配列): ユーザー情報リストtotal
(数値): ユーザー総数page
(数値): 現在のページ番号page_size
(数値): ページあたりの数量
ユーザー検索¶
- インターフェース名:ユーザー検索
- HTTP メソッド:GET
- パス:
/api/user/search
- 認証要件:管理者
- 機能概要:キーワードと**グループ**に基づいてユーザーを検索します。
💡 リクエスト例:
const response = await fetch('/api/user/search?keyword=test&group=default&p=1&page_size=20', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"items": [
{
"id": 1,
"username": "testuser",
"display_name": "Test User",
"role": 1,
"status": 1,
"email": "[email protected]",
"group": "default"
}
],
"total": 1,
"page": 1,
"page_size": 20
}
}
❗ 失敗応答例:
🧾 フィールド説明:
keyword
(文字列): 検索キーワード。ユーザー名、表示名、メールアドレスに一致しますgroup
(文字列): ユーザー**グループ**のフィルタリング条件p
(数値): ページ番号。デフォルトは 1page_size
(数値): ページあたりの数量。デフォルトは 20
単一ユーザー情報の取得¶
- インターフェース名:単一ユーザー情報の取得
- HTTP メソッド:GET
- パス:
/api/user/:id
- 認証要件:管理者
- 機能概要:指定されたユーザーの詳細情報を取得します。権限チェックが含まれます。
💡 リクエスト例:
const response = await fetch('/api/user/123', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
{
"success": true,
"message": "",
"data": {
"id": 123,
"username": "targetuser",
"display_name": "Target User",
"role": 1,
"status": 1,
"email": "[email protected]",
"group": "default",
"quota": 1000000,
"used_quota": 50000,
"request_count": 100,
"aff_code": "ABC123",
"aff_count": 5
}
}
❗ 失敗応答例:
🧾 フィールド説明:
id
(数値): ユーザー ID。URL パス経由で渡されます- 完全なユーザー情報が返されますが、管理者は同等またはそれ以上の権限を持つユーザーの情報を表示できません
ユーザーの作成¶
- インターフェース名:ユーザーの作成
- HTTP メソッド:POST
- パス:
/api/user/
- 認証要件:管理者
- 機能概要:新規ユーザーアカウントを作成します。管理者は自身以上の権限を持つユーザーを作成することはできません。
💡 リクエスト例:
const response = await fetch('/api/user/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
username: "newuser",
password: "password123",
display_name: "New User",
role: 1
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
username
(文字列): ユーザー名、必須password
(文字列): パスワード、必須display_name
(文字列): 表示名、オプション。デフォルトはユーザー名role
(数値): ユーザーロール。現在の管理者ロールよりも低い必要があります
凍結/リセットなどの管理操作¶
- インターフェース名:凍結/リセットなどの管理操作
- HTTP メソッド:POST
- パス:
/api/user/manage
- 認証要件:管理者
- 機能概要:ユーザーに対して、有効化、無効化、削除、昇格、降格などの管理操作を実行します。
💡 リクエスト例:
const response = await fetch('/api/user/manage', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
id: 123,
action: "disable"
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
id
(数値): ターゲットユーザー ID、必須-
action
(文字列): 操作タイプ、必須、選択可能な値:disable
: ユーザーを無効化enable
: ユーザーを有効化delete
: ユーザーを削除promote
: 管理者に昇格(Root ユーザーのみ操作可能)demote
: 一般ユーザーに降格
ユーザーの更新¶
- インターフェース名:ユーザーの更新
- HTTP メソッド:PUT
- パス:
/api/user/
- 認証要件:管理者
- 機能概要:ユーザー情報を更新します。権限チェックと**クォータ**変更履歴が含まれます。
💡 リクエスト例:
const response = await fetch('/api/user/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
},
body: JSON.stringify({
id: 123,
username: "updateduser",
display_name: "Updated User",
email: "[email protected]",
quota: 2000000,
role: 1,
status: 1
})
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
id
(数値): ユーザー ID、必須username
(文字列): ユーザー名、オプションdisplay_name
(文字列): 表示名、オプションemail
(文字列): メールアドレス、オプションpassword
(文字列): 新しいパスワード、オプション。空の場合はパスワードを更新しませんquota
(数値): ユーザーの**クォータ**、オプションrole
(数値): ユーザーロール。現在の管理者ロールよりも低い必要がありますstatus
(数値): ユーザー状態、オプション
ユーザーの削除¶
- インターフェース名:ユーザーの削除
- HTTP メソッド:DELETE
- パス:
/api/user/:id
- 認証要件:管理者
- 機能概要:指定されたユーザーを物理削除します。管理者は同等またはそれ以上の権限を持つユーザーを削除することはできません。
💡 リクエスト例:
const response = await fetch('/api/user/123', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_admin_token',
'New-Api-User': 'Bearer your_user_id'
}
});
const data = await response.json();
✅ 成功応答例:
❗ 失敗応答例:
🧾 フィールド説明:
id
(数値): ユーザー ID。URL パス経由で渡されます- 物理削除操作を実行します。回復できません