feishu-bitable
飞书多维表格操作。记录 CRUD、字段管理、视图、权限、公式、关联。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o feishu-bitable.zip https://jpskill.com/download/21596.zip && unzip -o feishu-bitable.zip && rm feishu-bitable.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/21596.zip -OutFile "$d\feishu-bitable.zip"; Expand-Archive "$d\feishu-bitable.zip" -DestinationPath $d -Force; ri "$d\feishu-bitable.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
feishu-bitable.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
feishu-bitableフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
飛書多維表格
Bitable API を通じてデータ、フィールド、ビュー、および権限を操作します。
ベース URL: https://open.feishu.cn/open-apis/bitable/v1
認証とトークン取得
feishu_skills ルートディレクトリから共有スクリプトを実行します。
TOKEN="$(./scripts/get_feishu_token.sh)"
リクエストヘッダーはすべて Authorization: Bearer ${TOKEN} を使用します。
ビジネスインターフェースがトークン無効、期限切れ、または 401 を返した場合、強制的に更新した後、元のリクエストを一度だけ再試行します。
TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"
環境変数:
FEISHU_APP_IDFEISHU_APP_SECRET
ローカルキャッシュ: ./.feishu_token_cache.json(期限切れでなければ直接再利用、デフォルトでは 5 分前に更新)
主要パラメータ:
app_token: 多次元テーブルの URL の/base/の後の文字列table_id: リスト API を呼び出して取得
レコード操作
| API | エンドポイント | 説明 |
|---|---|---|
| 単一レコードの追加 | POST /apps/{app_token}/tables/{table_id}/records |
- |
| バッチ追加 | POST .../records/batch_create |
最大 500 件、Upsert をサポート |
| 更新 | PUT .../records/{record_id} |
- |
| バッチ更新 | POST .../records/batch_update |
最大 500 件 |
| バッチ削除 | POST .../records/batch_delete |
最大 500 件 |
| 検索 | POST .../records/search |
filter/sort/ページネーションをサポート |
全レコードのページネーション検索(1 回につき最大 500 件、has_more: false になるまでループ):
page_token = None
all_records = []
while True:
body = {"page_size": 500}
if page_token:
body["page_token"] = page_token
resp = post(".../records/search", json=body)
all_records.extend(resp["data"]["items"])
if not resp["data"].get("has_more"):
break
page_token = resp["data"]["page_token"]
リクエスト例:
{
"fields": {
"名称": "テスト",
"金額": 100,
"進捗": 0.75,
"評価": 4,
"日付": 1770508800000,
"ステータス": "進行中",
"タグ": ["重要", "緊急"],
"完了": true,
"担当者": [{"id": "ou_xxx"}],
"電話": "13800138000",
"リンク": {"text": "公式サイト", "link": "https://example.com"}
}
}
⚠️ 数値は文字列で渡さないでください。日付は 13 桁のミリ秒タイムスタンプである必要があります。
フィールドタイプ形式
| type | ui_type | 日本語名 | 書き込み形式 | 例 |
|---|---|---|---|---|
| 1 | Text | 複数行テキスト | 文字列 | "事務用品" |
| 1 | メールアドレス | 文字列 | "test@example.com" |
|
| 2 | Number | 数値 | 数値 | 100 |
| 2 | Currency | 通貨 | 数値 | 1280.50 |
| 2 | Progress | 進捗 | 数値(0~1) | 0.25 (25%) |
| 2 | Rating | 評価 | 数値(1~5) | 3 |
| 3 | SingleSelect | 単一選択 | 文字列 | "支出" (オプションを自動作成) |
| 4 | MultiSelect | 複数選択 | 文字列配列 | ["飲食","交通"] |
| 5 | DateTime | 日付 | ミリ秒タイムスタンプ | 1770508800000 |
| 7 | Checkbox | チェックボックス | ブール値 | true |
| 11 | User | ユーザー | オブジェクト配列 | [{"id":"ou_xxx"}] |
| 13 | Phone | 電話 | 文字列 | "13800138000" |
| 15 | Url | ハイパーリンク | オブジェクト | {"text":"名称","link":"https://..."} |
| 17 | Attachment | 添付ファイル | オブジェクト配列 | [{"file_token":"xxx"}] |
| 18 | SingleLink | 単方向リンク | 文字列配列 | ["recuxxx"] |
| 21 | DuplexLink | 双方向リンク | 文字列配列 | ["recuxxx"] |
| 22 | Location | 位置情報 | 文字列 | "116.397,39.903" |
API 書き込み非対応: 数式、ルックアップ、作成時間、更新者、自動採番
日付形式変換:
import datetime
ts = int(datetime.datetime(2026, 2, 9).timestamp() * 1000)
# → 1770508800000
フィールド管理
| API | エンドポイント | 説明 |
|---|---|---|
| フィールドリストの取得 | GET .../fields |
type と ui_name を返します |
| フィールドの追加 | POST .../fields |
{"field_name":"新フィールド","type":1} |
| フィールドの更新 | PUT .../fields/{field_id} |
単一選択の変更には完全な property を提供する必要があります |
| フィールドの削除 | DELETE .../fields/{field_id} |
- |
数式フィールドの例:
{
"type": 20,
"field_name": "利益",
"property": {"formula_expression": "[売上]-[コスト]"}
}
関連フィールドの例:
{
"type": 18,
"field_name": "関連顧客",
"property": {"table_id": "tblXXX", "multiple": true}
}
データテーブル管理
| API | エンドポイント | 説明 |
|---|---|---|
| 多次元テーブルの作成 | POST /apps |
{"name":"データベース名"} |
| データテーブルのリスト表示 | GET /apps/{app_token}/tables |
- |
| データテーブルの追加 | POST /apps/{app_token}/tables |
{"table":{"name":"テーブル名"}} |
| テーブルのバッチ追加 | POST .../tables/batch_create |
最大 10 テーブル |
| データテーブルの削除 | DELETE .../tables/{table_id} |
- |
| データテーブルのコピー | POST .../tables/{table_id}/copy |
- |
⚠️ 権限管理(重要):
- API で作成されたテーブルは、デフォルトではボットのみに表示されます。
- 作成後、ユーザーを共同作業者として追加する必要があります。
POST /permissions/{app_token}/members { "member_type": "user", "member_id": "ou_xxx", "perm": "full_access" } - 権限タイプ:
view/edit/full_access
ビュー管理
| API | エンドポイント | 説明 |
|---|---|---|
| ビューのリスト表示 | GET .../tables/{table_id}/views |
- |
| ビューの作成 | POST .../tables/{table_id}/views |
{"view_name":"新ビュー","view_type":"grid"} |
| ビューの削除 | DELETE .../views/{view_id} |
- |
ビュータイプ: grid(テーブル) / kanban(カンバン) / gallery(ギャラリー) / gantt(ガントチャート)
権限管理
| API | エンドポイント | 説明 |
|---|---|---|
| 共同作業者の作成 | POST /apps/{app_token}/roles/{role_id}/members/batch_create |
- |
| 共同作業者の削除 | POST .../members/batch_delete |
- |
| 権限の更新 | PUT /apps/{app_token}/roles/{role_id} |
- |
ロールタイプ: owner / editor / reader
⚠️ 存在しないインターフェース
/apps/:app_token/tables/:table_id/statistics このインターフェースは存在しません。飛書公式ドキュメントには統計集計 API は提供されていません。
データ(合計、カウントなど)を統計する必要がある場合は、以下をお勧めします。
POST .../records/searchを使用して全レコードを取得し、クライアント側で計算します。- 多次元テーブルに数式フィールド(例:
SUM、COUNT)を作成し、API を介してフィールド値を読み取ります。
ベストプラクティス
- バッチ操作を優先(API 呼び出しを減らすため)
- フィールドタイプを厳密に一致させる(書き込み失敗を避けるため)
- 日付はミリ秒タイムスタンプを使用(Python:
int(datetime.timestamp() * 1000)) - 関連フィールドでリレーショナル機能を実現
- テーブル作成後すぐにユーザーを共同作業者として追加(非表示を避けるため)
- 単一選択フィールドはオプションを自動作成(オプションテキストを直接書き込むだけでよい)
テスト検証
実測で検証済みの 15 種類のフィールドタイプ:
- テキスト、進捗、複数選択、単一選択、日付、チェックボックス、電話、ユーザー、ハイパーリンク
- メールアドレス、通貨、評価、位置情報、単方向リンク、双方向リンク
テストテーブル:https://jvbmlo28x0.feishu.cn/base/YdOpb47PvalSbQsHPyXc7LrNnUh
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
飞书多维表格
通过 Bitable API 操作数据、字段、视图和权限。
Base URL: https://open.feishu.cn/open-apis/bitable/v1
认证与 Token 获取
从 feishu_skills 根目录执行共享脚本:
TOKEN="$(./scripts/get_feishu_token.sh)"
请求头统一使用 Authorization: Bearer ${TOKEN}。
如果业务接口返回 token 无效、过期或 401,强制刷新后仅重试一次原请求:
TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"
环境变量:
FEISHU_APP_IDFEISHU_APP_SECRET
本地缓存: ./.feishu_token_cache.json(未过期直接复用,默认提前 5 分钟刷新)
关键参数:
app_token: 多维表格 URL 中/base/后的字符串table_id: 调用列表 API 获取
记录操作
| API | 端点 | 说明 |
|---|---|---|
| 新增单条 | POST /apps/{app_token}/tables/{table_id}/records |
- |
| 批量新增 | POST .../records/batch_create |
最多 500 条,支持 Upsert |
| 更新 | PUT .../records/{record_id} |
- |
| 批量更新 | POST .../records/batch_update |
最多 500 条 |
| 批量删除 | POST .../records/batch_delete |
最多 500 条 |
| 查询 | POST .../records/search |
支持 filter/sort/分页 |
分页查询全部记录(单次最多 500 条,循环直到 has_more: false):
page_token = None
all_records = []
while True:
body = {"page_size": 500}
if page_token:
body["page_token"] = page_token
resp = post(".../records/search", json=body)
all_records.extend(resp["data"]["items"])
if not resp["data"].get("has_more"):
break
page_token = resp["data"]["page_token"]
请求示例:
{
"fields": {
"名称": "测试",
"金额": 100,
"进度": 0.75,
"评分": 4,
"日期": 1770508800000,
"状态": "进行中",
"标签": ["重要", "紧急"],
"完成": true,
"负责人": [{"id": "ou_xxx"}],
"电话": "13800138000",
"链接": {"text": "官网", "link": "https://example.com"}
}
}
⚠️ 数值不要传字符串,日期必须是 13 位毫秒时间戳。
字段类型格式
| type | ui_type | 中文名 | 写入格式 | 示例 |
|---|---|---|---|---|
| 1 | Text | 多行文本 | 字符串 | "办公用品" |
| 1 | 邮箱 | 字符串 | "test@example.com" |
|
| 2 | Number | 数字 | 数值 | 100 |
| 2 | Currency | 货币 | 数值 | 1280.50 |
| 2 | Progress | 进度 | 数值(0~1) | 0.25 (25%) |
| 2 | Rating | 评分 | 数值(1~5) | 3 |
| 3 | SingleSelect | 单选 | 字符串 | "支出" (自动创建选项) |
| 4 | MultiSelect | 多选 | 字符串数组 | ["餐饮","交通"] |
| 5 | DateTime | 日期 | 毫秒时间戳 | 1770508800000 |
| 7 | Checkbox | 复选框 | 布尔值 | true |
| 11 | User | 人员 | 对象数组 | [{"id":"ou_xxx"}] |
| 13 | Phone | 电话 | 字符串 | "13800138000" |
| 15 | Url | 超链接 | 对象 | {"text":"名称","link":"https://..."} |
| 17 | Attachment | 附件 | 对象数组 | [{"file_token":"xxx"}] |
| 18 | SingleLink | 单向关联 | 字符串数组 | ["recuxxx"] |
| 21 | DuplexLink | 双向关联 | 字符串数组 | ["recuxxx"] |
| 22 | Location | 地理位置 | 字符串 | "116.397,39.903" |
不支持 API 写入: 公式、查找引用、创建时间、修改人、自动编号
日期格式转换:
import datetime
ts = int(datetime.datetime(2026, 2, 9).timestamp() * 1000)
# → 1770508800000
字段管理
| API | 端点 | 说明 |
|---|---|---|
| 获取字段列表 | GET .../fields |
返回 type 和 ui_name |
| 新增字段 | POST .../fields |
{"field_name":"新字段","type":1} |
| 更新字段 | PUT .../fields/{field_id} |
修改单选需提供完整 property |
| 删除字段 | DELETE .../fields/{field_id} |
- |
公式字段示例:
{
"type": 20,
"field_name": "利润",
"property": {"formula_expression": "[营收]-[成本]"}
}
关联字段示例:
{
"type": 18,
"field_name": "关联客户",
"property": {"table_id": "tblXXX", "multiple": true}
}
数据表管理
| API | 端点 | 说明 |
|---|---|---|
| 创建多维表格 | POST /apps |
{"name":"数据库名称"} |
| 列出数据表 | GET /apps/{app_token}/tables |
- |
| 新增数据表 | POST /apps/{app_token}/tables |
{"table":{"name":"表名"}} |
| 批量新增表 | POST .../tables/batch_create |
最多 10 张表 |
| 删除数据表 | DELETE .../tables/{table_id} |
- |
| 复制数据表 | POST .../tables/{table_id}/copy |
- |
⚠️ 权限管理(重要):
- 通过 API 创建的表格默认只对机器人可见
- 创建后需添加用户为协作者:
POST /permissions/{app_token}/members { "member_type": "user", "member_id": "ou_xxx", "perm": "full_access" } - 权限类型:
view/edit/full_access
视图管理
| API | 端点 | 说明 |
|---|---|---|
| 列出视图 | GET .../tables/{table_id}/views |
- |
| 创建视图 | POST .../tables/{table_id}/views |
{"view_name":"新视图","view_type":"grid"} |
| 删除视图 | DELETE .../views/{view_id} |
- |
视图类型: grid(表格) / kanban(看板) / gallery(画册) / gantt(甘特图)
权限管理
| API | 端点 | 说明 |
|---|---|---|
| 创建协作者 | POST /apps/{app_token}/roles/{role_id}/members/batch_create |
- |
| 删除协作者 | POST .../members/batch_delete |
- |
| 更新权限 | PUT /apps/{app_token}/roles/{role_id} |
- |
角色类型: owner / editor / reader
⚠️ 不存在的接口
/apps/:app_token/tables/:table_id/statistics 该接口不存在,飞书官方文档中未提供统计汇总 API。
如需统计数据(如求和、计数),建议:
- 用
POST .../records/search拉取全量记录后在客户端计算 - 在多维表格中创建公式字段(如
SUM、COUNT)后通过 API 读取字段值
最佳实践
- 批量操作优先(减少 API 调用)
- 字段类型严格匹配(避免写入失败)
- 日期用毫秒时间戳(Python:
int(datetime.timestamp() * 1000)) - 关联字段实现关系型能力
- 创建表格后立即添加用户为协作者(避免不可见)
- 单选字段自动创建选项(直接写入选项文本即可)
测试验证
已通过实测验证的 15 种字段类型:
- 文本、进度、多选、单选、日期、复选框、电话、人员、超链接
- 邮箱、货币、评分、地理位置、单向关联、双向关联
测试表格:https://jvbmlo28x0.feishu.cn/base/YdOpb47PvalSbQsHPyXc7LrNnUh