インストールとエクスポート(packages)
busabase-cli export で space の一部を GitHub URL からインストールできる git リポジトリにし、ダッシュボードまたは busabase-cli で他人のパッケージをレビュー優先で取り込む。
インストールとエクスポート(packages)
パッケージとは、Busabase の space のサブツリーを git リポジトリ上の普通のファイルとして表現したものです。busabase.json マニフェストと、content/ ツリー — 本物の markdown ドキュメント、本物の Base 定義、そして 1 行 1 レコードの JSON — で構成されます。busabase-cli export がパッケージを書き出し、ダッシュボードの GitHub からインストール… ダイアログ、または busabase-cli install が GitHub URL から space に取り込みます。テンプレート、スキル、ナレッジベースまるごとを誰かに渡すための仕組みであり、パッケージは単なるファイルなので、相手は space に触れる前に中身を読み、diff を取り、pull request でレビューできます。
install はデフォルトで承認優先であり、パッケージを 2 つに分けて扱います。構造 — フォルダ、Base とそのフィールド・ビュー — は即座に作成されます。未マージの Base には id がなく、id がなければビューもフィールドもレコードもぶら下げる先がないからです。コンテンツ — レコード、ドキュメント、スキル、AirApp — はレビュー待ちの Change Request として届きます(install は待機件数を表示し、busabase-cli change-requests list で一覧できます)。つまり、見知らぬリポジトリが自分の space にできるのは空のテーブルを並べることまでで、そこに書き込まれた中身は、あなたが読んでマージするまで一切有効になりません。
ダッシュボードからインストールする
パッケージのインストールに CLI は必須ではありません。サイドバーの アクティビティ と並ぶショートカット群のなか、お気に入りと Base ツリーの上に GitHub からインストール… があります。開くとダイアログが 3 ステップで進みます。URL を貼る、何が作成されるかを読む、確定する。
インストールは space の owner/admin の操作です。 プレビューとインストールの両方でサーバーが検証します。パッケージにはスキルや AirApp — つまりこの space のエージェントが実行するコード — を含められるからです。サイドバーの項目は、それを使えるロールにのみ表示されます。メンバーが施錠された扉を見せられることはありません。いずれにせよ、最終的な判断はサーバー側の検証です。セルフホストのシングルユーザーサーバーでは検証すべきロールがないため、全員が通ります。
ステップ 1 — URL
リポジトリ URL という入力欄が 1 つだけあり、CLI と同じ URL を受け付けます(https://github.com/owner/repo、必要なら /tree/<ref>[/<subdir>] を続ける)。ブラウザ側で確認するのは空でないことだけで、残りはすべてサーバーの判断です。GitHub のホストのみを受け付け、ホスト名を解決し直してプライベートアドレスやループバックを指すものを拒否し、そのうえでダウンロードしたものが本当にパッケージかを確認します。URL を編集すると下のプレビューは消えるので、画面に残っているものが別のリポジトリについての答えになることはありません。
ステップ 2 — プレビュー
プレビュー はパッケージを取得し、インストールすると何が起きるかを見せます。リポジトリを取りに行くのはブラウザではなくサーバーで、返ってくるのは概要です。
- パッケージ自身の情報 — 名前、説明、そして
busabase.jsonが宣言していればバージョン・作者・ライセンス — に加えて、実際に解決された取得元がowner/repo <ref> 時点 <subdir> 内の形で示されます。 - 作成される内容 — ノードツリー。各行にアイコン・名前・slug が並び、Base には
フィールド N 件 · レコード N 件、スキル・AirApp・drive にはファイル N 件が付きます。その下に合計が出ます。フォルダ · ドキュメント · Base · レコード · ファイル。 - すでに使われている名前 — 既存の内容と衝突する slug のすべて。リネームが有効なら、実際にどの slug でインストールされるかも表示されます。
- 確認しておくこと — CLI が表示するのと同じ警告(スキップされたバイナリ、破棄された添付の値など)。
プレビューの下に 3 つのオプションがあります。
| コントロール | 効果 | 対応する CLI フラグ |
|---|---|---|
| インストール先フォルダ | 取り込み先フォルダの slug。パッケージ自身の名前を slug 化したものが最初から入ります。変更するとプレビューを再実行します。取り込み先フォルダによってどの slug が衝突するかが決まるためです | --into-folder <name> |
| 衝突した項目を別名でインストールする | 失敗させる代わりに -2、-3 のサフィックスを付けます。衝突が実際にあるときだけ表示され、チェックした瞬間にプレビューを再実行します | --rename |
| レビューせずにそのままインストールする | change request を残さず、パッケージの内容をその場でマージします。常に表示され、デフォルトはオフ | --auto-merge |
プレビューを飛ばす方法はありません。プレビューが画面に出るまで インストール ボタンは存在しません。CLI では --dry-run は任意ですが、ダッシュボードではこれが唯一の入口です。
未解決の衝突が残っている間、またはレビューなしでしかインストールできないパッケージでチェックが外れている間、インストール ボタンは無効のままです。後者の場合は赤い このパッケージはレビューなしでしかインストールできません という通知が理由を説明し、行き止まりにせずチェックボックスを指し示します。
ステップ 3 — 結果
実行中はスピナーと「少し時間がかかることがあります。項目は 1 つずつ作成されます。」が表示されます。プログレスバーはなく、項目は 1 つずつ作成されます。
終わるとダイアログは <フォルダ> にインストールしました と、作成された件数 — フォルダ · Base · ビュー · ドキュメント · レコード · ファイル — に置き換わります。そして肝心なのはここからです。
- 保留があれば 「N 件の変更リクエストが待っています」 と、受信トレイへ直接飛ぶ 今すぐレビューする リンクが出ます。パッケージの内容は提案された状態で、まだ反映されていません。
- レビューせずにそのままインストールする にチェックしていた場合は 「すべてマージされました。パッケージはスペースで有効になっています。」 と表示されます。
完了 でダイアログを閉じ、ダッシュボードを再読み込みします。構造は即座に作成されるため、レコードがすべてレビュー待ちであってもツリーは変わっています。
うまくいかなかった場合、ダイアログは汎用のエラーではなくサーバー自身のメッセージをそのまま表示します — 「Not a Busabase package — expected busabase.json at …」、ホスト拒否のメッセージ、ロール不足のメッセージ。役に立つのはまさにその文言なので、そのまま見せています(これらはサーバーのメッセージで、UI の言語に合わせて翻訳されることはありません)。
コマンドラインからインストールする
npx busabase-cli install https://github.com/acme/support-kb-template| フラグ | 効果 |
|---|---|
--into-folder <name> | 取り込み先フォルダの slug(デフォルト:パッケージのマニフェスト名) |
--dry-run | 実行計画(ツリー、レコード件数、衝突)を表示し、何も作成しない |
--auto-merge | パッケージのレコードとドキュメントをレビュー待ちの change request にせず、その場でマージする — 下記参照 |
--rename | 衝突した項目を、失敗させる代わりにサフィックス付き slug(-2、-3、…)でインストール |
まず --dry-run から始めてください。正確なノードツリー、Base ごとのレコード件数、すべての衝突を表示し、何も作成しません。プライベートリポジトリからインストールする場合は GITHUB_TOKEN を設定します。
ダッシュボードか CLI か
どちらも同じインストールを実行します。同じパッケージ形式、同じ計画、同じ 5 パスの apply、同じ承認優先の分割です。違いは選ぶ前に知っておく価値があります。
| ダッシュボード | busabase-cli install | |
|---|---|---|
| プレビュー | 必須 — プレビューなしではインストールできない | 任意、--dry-run で |
| リポジトリをダウンロードするのは | サーバー | 自分のマシン |
| プライベートリポジトリ | ホストを運用する人が設定したサーバーの GITHUB_TOKEN。自分のものではない | 自分の GITHUB_TOKEN |
| 必要な権限 | space の owner/admin | 通常の書き込み権限 — どのクライアントも使う同じノード単位のエンドポイントを叩くため、owner/admin のインストールゲートは通らない |
| エクスポート | 利用不可 | busabase-cli export |
実際上の影響はこうです。Busabase Cloud では、運用者がトークンを設定していない限りプライベートリポジトリをダッシュボードからインストールできません。その場合は自分のトークンを使う CLI を使ってください。また export にはダッシュボードの対応機能がまったくありません。これは CLI コマンドです。
URL がバージョンの固定になる
| URL | インストールされるもの |
|---|---|
https://github.com/acme/kb | リポジトリのデフォルトブランチの、現時点の内容 |
https://github.com/acme/kb/tree/v1.2.0 | v1.2.0 タグ — ブランチが先に進んだ後も、そのタグの内容のまま |
https://github.com/acme/packages/tree/v1.2.0/skills/pdf-summarizer | 多数のパッケージを抱えるリポジトリから 1 つだけ |
任意の git ref が使えます — ブランチ、タグ、コミット SHA のいずれでも。再インストールする予定のもの、チームメイトに渡すものにはタグを使ってください。知らないうちに中身が変わらない唯一の形式です。
ノードをパッケージとしてエクスポートする
エクスポートは CLI のみで、ダッシュボードに対応機能はありません。
npx busabase-cli export support-kb -o ./support-kb-template指定したノード自身がパッケージになり、その子ノードが content/ 配下に置かれます:
busabase.json
content/getting-started.md
content/cms/_folder.json
content/cms/blog/base.json
content/cms/blog/records.ndjson
content/cms/agent-integrations/base.json
content/pdf-summarizer/_node.json
content/pdf-summarizer/SKILL.mdどのファイルも人が読むためのものです。ドキュメントは YAML frontmatter 付きの本物の .md、base.json は Base のフィールドとビュー、records.ndjson は 1 行 1 つの JSON オブジェクト(値は slug をキーとする)、スキルや AirApp 自身のファイルはそのまま格納されます。push すればインストール可能になります:
cd ./support-kb-template
git init && git add . && git commit -m "Add support-kb package"
git remote add origin https://github.com/acme/support-kb-template.git && git push -u origin main| フラグ | 効果 |
|---|---|
-o, --out-dir <dir> | パッケージの出力ディレクトリ(必須) |
--name <name> | パッケージ名(デフォルト:既存の busabase.json を再利用、なければノードの slug) |
--dry-run | 書き込まれるファイルを一覧表示し、何も書き込まない |
出力は決定的です。space が変わっていなければ 2 回エクスポートしてもバイト単位で同一のファイルが得られるため、GitHub の diff は変更点を正確に示します — レコードを 1 件編集すれば、変わるのは 1 行だけです。再エクスポート時はまず content/ をクリーンにするので、削除したノードのファイルがリポジトリに残り続けることはありません。busabase.json に手で追記した内容(version、author、license、tags)は再エクスポートしても保持されます。
このフォーマットには、ノードの権限、変更履歴、Vault のシークレット、webhook のルールを入れる場所がそもそもありません — フォーマットが表現できないものは漏れようがないのです。添付ファイルの値も含まれません。添付フィールドの定義は保持され、export はいくつの値を除外したかを警告します。
レビューを飛ばすのは作者を信頼するということ
--auto-merge — およびダッシュボードでの双子である レビューせずにそのままインストールする — はレビューを放棄し、パッケージのレコードとドキュメントをその場でマージします。スキルや AirApp には、あなたのエージェントが実行するコードが含まれます — 自分で中身を読んだリポジトリか、コミット権限を渡してもよいと思える作者のものにだけレビューを飛ばしてください。
事前に知っておくべき制限
- レコードが relation の値を持つパッケージは、レビューなしでしかインストールできません。 CLI は理由を示して事前に拒否し、
--auto-mergeを付けて再実行するよう促します。ダッシュボードは同じ判断を、チェックボックスを指し示す通知として表示します。理由はどちらも同じです:relation は自分が指すレコードの id を保持しますが、その id はレコードがマージされて初めて存在するため、承認優先のままインストールすると relation がすべて空になってしまうからです。これを引き起こすのは実際の値だけです。relation フィールドを定義しているだけで、まだ何も紐づいていない Base は、ほかの内容と同じく承認優先でインストールできます。 - 絶対 URL でないアップロード URL を返すホストでは、バイナリファイルはスキップされます — 典型的にはローカルファイルシステムストレージを使う自己ホスト環境で、そのアップロード URL は自身の Web UI しか扱い方を知りません。install は警告してファイル名を示し、それ以外はすべてインストールします。S3/R2/MinIO を使うホスト(Cloud を含む)では通常どおりアップロードされます。また、スキル・AirApp・drive の内部に含まれるテキスト(markdown、JSON、SVG)はアップロードではなくインライン展開されるため、どちらのホストでも影響を受けません。
- 同じパッケージを 1 つの space に 2 回インストールすることはできません。 Base の slug は space 内で一意、ノードの slug はフォルダ内で一意なので、2 回目は計画段階で衝突した slug を列挙して失敗します。
--rename— ダッシュボードでは 衝突した項目を別名でインストールする — が逃げ道です —-2、-3としてインストールし、すべての relation をリネーム後の Base に向け直します。
設定
これは busabase-cli にのみ関係します。ダッシュボードはどのホストのどの space にいるかをすでに把握しており、あなた自身として認証されます。busabase-cli の他の場面と同じ優先順位です:
| 項目 | フラグ | 環境変数 | 保存先 |
|---|---|---|---|
| ホスト | --base-url <url> | BUSABASE_BASE_URL | ~/.busabase/.env |
| API キー | --api-key <token> | BUSABASE_API_KEY | ~/.busabase/.env |
| Space | --space-id <id> | BUSABASE_SPACE_ID | ~/.busabase/.env |
install/export がホストに接続できない、または 401/403 が返る場合はトラブルシューティングを参照してください。
関連ページ:ノードタイプ · Change Requests · バックアップと復元 · トラブルシューティング