公式CLIでは足りなかった。DevCycleの管理操作を補完するdvcx

に公開

はじめに

DevCycleを使っていて、こんな経験はありませんか?

  • 機能フラグが100個を超えて、どれがどの用途だったか分からなくなった
  • 複数環境のターゲティング設定を一括で変更したいけど、ダッシュボードで1つずつ操作するのが面倒
  • 監査ログを確認したいけど、APIを直接叩くのは手間がかかる
  • CIパイプラインで機能フラグの操作を自動化したい

これらの課題を解決するため、DevCycle Management API を CLI から操作できるツール dvcx を作りました。

https://github.com/135yshr/devcycle-cli

公式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 クレデンシャルを取得します。

  1. DevCycle Dashboard にログイン
  2. Settings → API Credentials へ移動
  3. 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出力でデータの加工が簡単

機能フラグの管理に困っている方は、ぜひ試してみてください。

https://github.com/135yshr/devcycle-cli

フィードバックやプルリクエストは大歓迎です!

参考リンク

Discussion