bm pull
Web管理のアクションと自動生成ファイルを、現在のリポジトリへ取り込むコマンドです。
bm pullは、ベースマキナ上に存在するアクションのうち、設定ファイルにまだ含まれていないWeb管理のアクションを対象にします。取り込んだ内容はローカルファイルとして生成されるだけで、ベースマキナの環境には反映されません。内容を確認してPRに含め、必要に応じてbm syncで反映してください。
ローカル端末で実行する場合は、事前にbm loginでログインしてください。bm pullは書き込み前に対話確認を行なうため、通常はローカル端末で実行します。
# Web管理の未取り込みアクションを取り込む
bm pull
# 設定ファイルのパスを指定する
bm pull --config apps/admin/basemachina.config.tsオプション
| オプション | デフォルト値 | 説明 |
|---|---|---|
--config <path> | basemachina.config.ts | 設定ファイルのパス |
取り込まれる内容
bm pullは、対象プロジェクトの現在の状態を読み取り、以下のファイルを生成または更新します。
| 対象 | 書き込み方法 | 説明 |
|---|---|---|
src/actions/<id>.ts | 新規作成のみ | Web管理アクションの定義ファイル。すでに同じパスが存在する場合は中断する |
| JavaScriptアクションコード | 新規作成のみ | JavaScriptアクションの場合、src/actions/js-action-codes/<id>.jsにコード本体を生成する |
src/bm-refs.ts | 自動更新 | レビュー設定、データソース、グループ、通知方法などを型安全に参照するための定数 |
type.d.ts | 自動更新 | @basemachina/actionの型登録ファイル |
| 設定ファイル | 追記 | 取り込んだアクションのimportとactions配列への追加 |
自動更新対象のsrc/bm-refs.tsとtype.d.tsは、内容に差分がある場合のみ書き換えられます。アクション定義ファイルとJavaScriptコードは新規作成のみで、既存ファイルは上書きされません。
対象になるアクション
bm pullの対象になるのは、次の条件を満たすアクションです。
- Web管理のアクションである
- 識別子が設定されている
- 設定ファイルの
actions配列に同じ識別子のアクションがまだ含まれていない - コード管理で生成できるアクション種別である
すでに設定ファイルに含まれているアクションは、Web UIで変更されていてもbm pullの取り込み対象にはなりません。設定ファイルの内容で戻したい場合はbm syncを実行し、Web UIでの変更を反映したい場合は設定ファイルを手動で更新してください。
識別子が未設定のアクションはスキップされます。取り込み後、識別子未設定のWeb管理アクションが残っている場合は、識別子の一括設定画面を開くかどうか確認されます。
実行結果の出力
実行すると、取り込み予定の件数が表示されます。
## bm pull 実行後、以下の変更が適用されます
コード管理のアクション: N 件
### Web 管理のアクション
- pull対象: N 件
- 識別子なしのためskip: N 件
- 生成非対応のためskip: N 件
自動生成ファイル: N 件内容を確認したあと、bm pull の変更を適用しますか?にyまたはyesで回答するとファイルが書き込まれます。nを選ぶか、対話入力できない環境で実行した場合は、変更は適用されません。
よくある使い方
Web UIで作成したアクションをコード管理に取り込む
- Web UIでアクションに識別子を設定する
- ローカルで
bm pullを実行する - 生成されたファイルと設定ファイルへの追記内容を確認する
- 必要に応じてリファクタリングや型チェックを行なう
- PRを作成し、レビュー後に
bm syncでコード管理へ移行する
参照IDの定数を更新する
レビュー設定、データソース、グループ、通知方法、マスターデータ取得設定、プロジェクトユーザーなどをWeb UIで追加・変更した場合は、bm pullを実行するとsrc/bm-refs.tsが再生成されます。
import { defineAction } from "@basemachina/sdk/oac";
import { dataSources, notificationMethods } from "../bm-refs";
export const action = defineAction({
id: "notify-users",
name: "ユーザー通知",
type: "grpc",
dataSource: dataSources["orders-service"],
fullMethodName: "orders.OrderService/NotifyUsers",
notificationSettings: {
onSuccess: {
notificationMethodId: notificationMethods["Slack"],
},
},
});