⛳
公式CLIでは足りなかった。DevCycleの管理操作を補完するdvcx
はじめに
DevCycleを使っていて、こんな経験はありませんか?
- 機能フラグが100個を超えて、どれがどの用途だったか分からなくなった
- 複数環境のターゲティング設定を一括で変更したいけど、ダッシュボードで1つずつ操作するのが面倒
- 監査ログを確認したいけど、APIを直接叩くのは手間がかかる
- CIパイプラインで機能フラグの操作を自動化したい
これらの課題を解決するため、DevCycle Management API を CLI から操作できるツール dvcx を作りました。
公式CLIとの違い
DevCycleには公式CLIが存在します。公式CLIも素晴らしいツールですが、以下のような制限があります。
| 機能 | 公式CLI | dvcx |
|---|---|---|
| 機能フラグの参照・作成 | ✅ | ✅ |
| コード内の変数使用箇所検出 | ✅ | ❌ |
| 型定義ファイル生成 | ✅ | ❌ |
| プロジェクトの作成・更新 | ❌ | ✅ |
| 環境の作成・更新・削除 | ❌ | ✅ |
| オーディエンスの管理 | ❌ | ✅ |
| メトリクスの管理 | ❌ | ✅ |
| Webhookの管理 | ❌ | ✅ |
| カスタムプロパティの管理 | ❌ | ✅ |
| 監査ログの参照 | ❌ | ✅ |
| SDKキーのローテーション | ❌ | ✅ |
dvcx は公式CLIの代替ではなく、補完的なツールとして設計されています。コード分析や型定義生成は公式CLI、管理操作は dvcx という使い分けがおすすめです。
インストール
Go Install(推奨)
go install github.com/135yshr/devcycle-cli@latest
ソースからビルド
git clone https://github.com/135yshr/devcycle-cli.git
cd devcycle-cli
make build
# バイナリは bin/dvcx に生成されます
初期設定
1. DevCycle API クレデンシャルの取得
DevCycle ダッシュボードから、API クレデンシャルを取得します。
- DevCycle Dashboard にログイン
- Settings → API Credentials へ移動
- Client ID と Client Secret をコピー
2. 設定ファイルの作成
プロジェクトルートに .devcycle/config.yaml を作成します。
client_id: your-client-id
client_secret: your-client-secret
project: your-default-project-key # デフォルトで使用するプロジェクト
3. 認証
dvcx auth login
成功すると、トークンが .devcycle/token.json に保存されます。
基本的な使い方
プロジェクト一覧の確認
# テーブル形式で表示(デフォルト)
dvcx projects list
# JSON形式で出力
dvcx projects list -o json
# YAML形式で出力
dvcx projects list -o yaml
機能フラグの管理
# 機能フラグ一覧
dvcx features list -p my-project
# 特定の機能フラグの詳細
dvcx features get my-feature -p my-project
# 新しい機能フラグを作成
dvcx features create -p my-project \
--key new-feature \
--name "新機能" \
--description "新機能の説明" \
--type release
ターゲティングの操作
機能フラグの有効化・無効化を簡単に行えます。
# 開発環境で機能を有効化
dvcx targeting enable -p my-project -f my-feature -e development
# 本番環境で機能を無効化
dvcx targeting disable -p my-project -f my-feature -e production
# ターゲティング設定の確認
dvcx targeting get -p my-project -f my-feature -e development
実践的なユースケース
ユースケース1: 機能フラグの棚卸し
大量の機能フラグを管理していると、不要になったフラグが残っていることがあります。dvcx を使って棚卸しを行いましょう。
# 全機能フラグをJSON形式で出力し、jqで加工
dvcx features list -p my-project -o json | jq '.[] | {key, name, status, createdAt}'
ユースケース2: 監査ログの確認
誰がいつどの設定を変更したか確認できます。
# プロジェクト全体の監査ログ
dvcx audit list -p my-project
# 特定の機能フラグの変更履歴
dvcx audit feature my-feature -p my-project
ユースケース3: オーバーライド(セルフターゲティング)
開発中に自分だけ特定のバリエーションを見たい場合に便利です。
# 自分用のオーバーライドを設定
dvcx overrides set -p my-project -f my-feature -e development \
--variation variation-on
# 設定したオーバーライドを確認
dvcx overrides list-mine -p my-project
# オーバーライドを削除
dvcx overrides delete-mine -p my-project
ユースケース4: CIパイプラインでの自動化
GitHub Actions などで機能フラグの操作を自動化できます。
# .github/workflows/feature-flag.yml
name: Feature Flag Automation
on:
workflow_dispatch:
inputs:
feature_key:
description: 'Feature key to enable'
required: true
environment:
description: 'Target environment'
required: true
default: 'staging'
jobs:
enable-feature:
runs-on: ubuntu-latest
steps:
- name: Install dvcx
run: go install github.com/135yshr/devcycle-cli@latest
- name: Configure credentials
run: |
mkdir -p .devcycle
cat << EOF > .devcycle/config.yaml
client_id: ${{ secrets.DEVCYCLE_CLIENT_ID }}
client_secret: ${{ secrets.DEVCYCLE_CLIENT_SECRET }}
project: my-project
EOF
- name: Login
run: dvcx auth login
- name: Enable feature
run: |
dvcx targeting enable \
-p my-project \
-f ${{ inputs.feature_key }} \
-e ${{ inputs.environment }}
ユースケース5: SDKキーのローテーション
セキュリティ上の理由でSDKキーを更新する必要がある場合:
# 現在のキーを確認
dvcx keys list -p my-project -e production
# クライアントSDKキーをローテーション
dvcx keys rotate -p my-project -e production --type client
# サーバーSDKキーをローテーション
dvcx keys rotate -p my-project -e production --type server
全コマンド一覧
dvcx が提供する全コマンドの一覧です。
| カテゴリ | コマンド | 説明 |
|---|---|---|
| 認証 | auth login/logout |
OAuth2認証の管理 |
| プロジェクト | projects list/get/create/update |
プロジェクトの管理 |
| 機能フラグ | features list/get/create/update/delete |
機能フラグのCRUD |
| 変数 | variables list/get/create/update/delete |
変数のCRUD |
| 環境 | environments list/get/create/update/delete |
環境のCRUD |
| ターゲティング | targeting get/update/enable/disable |
ターゲティング設定 |
| バリエーション | variations list/get/create/update/delete |
バリエーションのCRUD |
| オーディエンス | audiences list/get/create/update/delete |
オーディエンスのCRUD |
| オーバーライド | overrides list/get/set/delete |
セルフターゲティング |
| 監査ログ | audit list/feature |
変更履歴の参照 |
| メトリクス | metrics list/get/create/update/delete/results |
メトリクスのCRUD |
| Webhook | webhooks list/get/create/update/delete |
WebhookのCRUD |
| カスタムプロパティ | custom-properties list/get/create/update/delete |
プロパティのCRUD |
| SDKキー | keys list/rotate |
SDKキーの管理 |
出力形式
すべてのコマンドで --output フラグを使って出力形式を変更できます。
# テーブル形式(デフォルト、人間が読みやすい)
dvcx features list -p my-project
# JSON形式(スクリプトやjqとの連携に便利)
dvcx features list -p my-project -o json
# YAML形式(設定ファイルとして保存する場合に便利)
dvcx features list -p my-project -o yaml
まとめ
dvcx は、DevCycle Management API への包括的なCLIアクセスを提供します。
- 公式CLIでは対応していない管理操作が可能
- シェルスクリプトやCIパイプラインとの連携が容易
- JSON/YAML出力でデータの加工が簡単
機能フラグの管理に困っている方は、ぜひ試してみてください。
フィードバックやプルリクエストは大歓迎です!
Discussion