CumulusCIのコマンドまとめ

# 超概要
[参考文献](#参考文献)に記載しているSalesforceのTrailMix内で説明されているコマンドを整理

# 前準備
## DevHub有効化した組織の準備
Salesforceの組織にログインして以下操作を実行
1. 左上のギアアイコンから設定をクリック
1. SetUp(設定)画面のホーム画面の検索画面から`Dev Hub`を検索
1. Dev Hub を有効化を有効化に変更(デフォルトは無効化になっている)  
一度有効化したら元に戻せないので注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242808/31a43e71-199b-b3c7-86f1-cb38133e1082.png)

## Salesforce組織との接続
### Salesforce コマンドラインインターフェースをインストール
[リンク先](https://developer.salesforce.com/tools/sfdxcli)からインストールして実行
### Salesforce組織との接続・別名設定
```
sfdx auth:web:login -a <alias>
```
### 接続した組織を起動
```
sfdx force:org:open -u <alias>
```

## CumulusCIのインストール
HomeBrewをインストールしたあと
以下2インストールを実行
``` bash
brew install python3
brew tap SFDO-Tooling/homebrew-sfdo && brew install cumulusci
```

### インストール確認
`cci` コマンドを実行してエラーが出ないことを確認する

# CCIコマンド一覧
## サービスとの連携
```
cci service connect <service_type> <service_name>
```
### GitHubとの連携
```
cci service connect github github.com
```
### DevHubとの接続
```
cci service connect devhub --project
```
* ユーザ名
[Salesforce組織との接続・別名設定](#Salesforce組織との接続・別名設定)で指定した別名を指定

### 接続可能なサービス一覧取得
```
cci service list
```
## Projectの初期化
```
cci project init
```
* Package Name (パッケージ名)  
今回の作成対象とするパッケージ名を指定する
* We’re not extending another project (別のプロジェクトの拡張ではない)  
   * 初回構築の場合は`n`
   * すでに構築済のパッケージのカスタマイズの場合は`y` 
### 参照プロジェクトの設定
必要に応じて参照(拡張対象)プロジェクトを設定する
``` yml
project:
    dependencies:
        - github: '<拡張対象のパッケージのGitHubUrl>'
```
以下例
``` yml
project:
    dependencies:
        - github: 'https://github.com/GitHubUsername/XXXX'
```
## スクラッチ組織の作成/接続(起動)
### 作成
現状ローカルで設定している内容で作成する
```
cci flow run <dev_org or qa_org> --org <作成するスクラッチ組織名称>
```
### 接続(起動)
```
cci org browser <スクラッチ組織名称>
```
`<スクラッチ組織名称>`には[作成](#作成)で指定して作成したスクラッチ組織名称を指定
### 起動時にデータも入れるための方法
`cumulusci.yml`の最終行に以下行を追加する  
(`load_dataset`のタスクを追加)

``` yml
flows:
    config_dev:
         steps:
             3:
                task: load_dataset
    config_qa:
         steps:
             3:
                task: load_dataset
```

## スクラッチ組織に入れた変更内容の取得/ローカル反映
### メタデータの取得/反映
#### 変更内容のローカル取得
```
cci task run list_changes --org <スクラッチ組織名称>
```
プロファイルを除外する場合は
```
cci task run list_changes --org <スクラッチ組織名称> -o exclude "Profile:"
```
#### 変更内容のローカル反映
```
cci task run retrieve_changes --org <スクラッチ組織名称>"
```
プロファイルを除外する場合は[変更内容のローカル取得](#変更内容のローカル取得)と同様
### データセットの取得/反映
#### データマッピングの取得
```
cci task run generate_dataset_mapping --org <スクラッチ組織名称>
```
#### データセットの取得
スクラッチ環境で作成下データの取得
```
cci task run extract_dataset --org <スクラッチ組織名称>
``` 
`datasets/sample.sql`に内容を出力する

## 管理パッケージの作成
### 準備
#### パッケージ化組織の準備
1. `Developer Edition`を作成
1. パッケージマネージャにてパッケージを作成
   * パッケージ名  
   `cumulusci.yml`の中に記載されているパッケージ名を指定する  
   以下参照
   ``` yml
   project:
       package:
           name: <パッケージ名>
   ```
1. 名前空間プレフィックス
   1. パッケージマネージャの[名前空間設定]で[編集] をクリック   
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/242808/897d7294-d009-ce5d-39f5-833e449a102c.png)
   1. 名前空間の設定  
ここで指定した名前空間を`対象名前空間`として今後扱う
   1. 対象とするパッケージを選択
先程作成したパッケージ名を選択する
   1. `確認`ボタンをクリック
#### パッケージ名前空間の設定
`cumulusci.yml`の中に`namespace`の項目を追記する(追加場所は下記参照)
   以下参照
   ``` yml
   project:
       package:
           name: <パッケージ名>
           namespace: <対象名前空間>
   ```

### パッケージ組織への接続
```
cci org connect packaging
```
### パッケージ組織へのリリース
```
cci flow run ci_master --org packaging
```
### パッケージ組織の起動
下記コマンドで組織を起動して、パッケージ配下にパッケージの内容が反映されていることを確認できる
```
cci org browser packaging
```

### ベータバージョンのテスト/削除
#### テスト
```
cci flow run ci_beta --org beta
```
#### 削除
```
cci org scratch_delete beta
```
### 最終版リリース
```
cci flow run release_production --org packaging
```

### パッケージのインストール
#### Sandbox環境
1. Sandboxに接続
   ```
   cci org connect sandbox --sandbox
   ```
1. インストール
   ```
   cci flow run install_prod --org sandbox
   ```
#### 本番環境
1. 本番環境に接続
   ```
   cci org connect production
   ```
1. リリース
   ```
   cci flow run install_prod --org production
   ```

# 参考文献
https://cumulusci.readthedocs.io/en/stable/

https://trailhead.salesforce.com/ja/content/learn/trails/build-applications-with-cumulusci