基本(2ブランチ運用)
mainブランチとprdブランチの2つで、開発環境と本番環境を管理する運用例です。
検証環境を使わないシンプルな構成で、小規模なプロジェクトに適しています。
ブランチと環境の対応
| ブランチ | ベースマキナの環境 | 説明 |
|---|---|---|
main | 開発環境 | 日常的な開発を行なうブランチ |
prd | 本番環境 | 本番環境用のブランチ |
開発環境への変更
1. featureブランチで開発
mainからfeature/xxxブランチを作成し、アクションやビューの設定を編集してPRを作成します。
例えば、「ユーザー一覧ビューのテーブルにユーザーの有効/無効状態を表示する」場合、以下のように変更します。
list-usersアクションのJavaScriptコードを編集して、statusを返すようにするuser-listビューのTSXコードを編集して、テーブルに稼働状態列を追加する- 2ファイルを変更したPRを作成する
2. CIで差分を確認
PRが作成されると、CIでbm sync --dryが実行され、設定の差分がPRにコメントされます。
3. マージして開発環境に反映
PRをマージすると、CDでbm syncが実行され、アクションの変更がベースマキナの開発環境に反映されます。新しいバージョンが作成され、開発環境では常に最新バージョンが使用されるため即時反映されます。設定ファイルから削除されたアクションは、--with-disable指定時のみ開発環境で無効化されます。
ビューのコードを同じリポジトリで管理している場合は、ワークフローにビューのビルド・アップロード処理を追加します。詳細はコード取得設定との連携をご参照ください。レビュー設定やデータソースなど、コード管理対象外の設定は引き続きベースマキナの画面から設定してください。
本番環境への変更
開発環境で確認が取れたら、本番環境に同期します。
1. PRの作成
prdブランチにmainをマージするPRを作成します。
2. マージして本番環境に同期
PRをマージすると、CDでbm sync <本番環境のID>が実行され、本番環境のすべてのアクションのバージョンと有効化設定が開発環境の状態に合わせて同期されます。
ビューのコードも同じリポジトリで管理している場合は、同じワークフローで本番環境用のストレージへのアップロードも行なえます。詳細はコード取得設定との連携をご参照ください。
コード管理した設定のWeb上での変更
コード管理している設定は、引き続きWeb上(ベースマキナの管理画面)からも変更できます。
Web上で変更すると、そのアクションの管理方法は一時的に「Web管理」に戻ります。次回のbm syncで、設定ファイルに差分があれば「コード管理に移行(設定変更あり)」として設定を上書きし、差分がなければ「コード管理に移行(設定変更なし)」として管理方法だけを戻します。
コード管理を開始した後は、設定の変更はコードで行なうことを推奨します。
Web上での変更時には、コード管理されている設定であることを示す警告が表示されます。
CI/CDの設定例
| トリガー | 対象ブランチ | 実行内容 | 説明 |
|---|---|---|---|
| PR作成時 | main | bm sync --dry | 設定の差分をPRにコメント |
| PRマージ時 | main | bm sync | 設定の差分を開発環境に反映 |
| PR作成時 | prd | bm sync --dry <prd環境ID> | 本番への同期の差分をコメント |
| PRマージ時 | prd | bm sync <prd環境ID> | 開発環境のバージョンを本番に同期 |
GitHub Actionsの設定ファイル例
以下は.github/workflows/に配置するワークフローファイルの例です。認証の詳細はCI/CDの設定をご参照ください。
開発環境への反映(.github/workflows/sync-dev.yml)
name: Sync to dev
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Fetch OIDC ID Token
id: oidc
uses: actions/github-script@v7
with:
script: |
const token = await core.getIDToken("https://basemachina.com")
core.setSecret(token)
core.setOutput("token", token)
- name: Dry run
if: github.event_name == 'pull_request'
run: npx bm sync --dry
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}
- name: Sync
if: github.event_name == 'push'
run: npx bm sync
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}本番環境への同期(.github/workflows/sync-prd.yml)
name: Sync to prd
on:
pull_request:
branches: [prd]
push:
branches: [prd]
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Fetch OIDC ID Token
id: oidc
uses: actions/github-script@v7
with:
script: |
const token = await core.getIDToken("https://basemachina.com")
core.setSecret(token)
core.setOutput("token", token)
- name: Dry run
if: github.event_name == 'pull_request'
run: npx bm sync --dry <prd環境ID>
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}
- name: Sync
if: github.event_name == 'push'
run: npx bm sync <prd環境ID>
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}