開発中の機能
コード管理
CLIコマンド
bm pull

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.tstype.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で作成したアクションをコード管理に取り込む

  1. Web UIでアクションに識別子を設定する
  2. ローカルでbm pullを実行する
  3. 生成されたファイルと設定ファイルへの追記内容を確認する
  4. 必要に応じてリファクタリングや型チェックを行なう
  5. 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"],
    },
  },
});