Salesforceでカスタムメタデータ型を大量INSERTする方法

# はじめに
カスタムメタデータ型は、Salesforceの非常に便利な機能です。
各種機能で使う設定値を、カスタムオブジェクトのレコードのように設定・管理できます。
リリースセットにも含めることができるので、
『開発環境で作成→リリースセットで本番環境に移行』
も簡単にできます。
当然、カスタムオブジェクトのように、データローダーを使用してCSV投入ができると思っていましたが、
***標準機能ではできないようです…（Summer '19時点）***
ここでは、公式でもお墨付きをいただいているパッケージを使用して、カスタムメタデータ型レコードをCSVファイルから投入する方法を書きます。

# 環境
- 組織のエディション：Enterprise Edition
- API:Version 46.0 (Summer '19)

# Custom Metadata Loader
Salesforceのパッケージ「Custom Metadata Loader」を使用すると、
カスタムメタデータ型のINSERTや、カスタムオブジェクトからカスタムメタデータ型への移行ができるようになります。
[Communityヘルプにも記載があります。](https://help.salesforce.com/articleView?id=custommetadatatypes_dataloader.htm&type=5)
ぶっちゃけこれを読めば大体分かるのですが、環境へのインストールの仕方などが明瞭でなかったので、書きます。

# インストール
1.「Custom Metadata Loader」の[GitHub](https://github.com/forcedotcom/CustomMetadataLoader)にアクセスします。

2.「Deploy to Salesforce」ボタンをクリックします
![2019-08-23_11h07_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/c91916af-45c1-c980-5bf4-4c695374e49d.png)

3.「Deploy to:」でデプロイ先を選びます（最初は「Sandbox」を選択して、開発環境で検証することを推奨します）
![2019-08-23_11h17_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/a67e29c9-5ecb-92ca-c330-7e6aca3c3187.png)

4.同画面で「Login to Salesforce」を押下

5.アクセスを許可します
![2019-08-23_11h17_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/ae46c0c0-e473-937a-1128-fb42f44f8a9a.png)

6.デプロイ先が表示されていることを確認して、「Deploy」を押下
![2019-08-23_11h17_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/e77661cb-56da-42bb-eda3-bd03ce4006fe.png)

7.画面に進捗状況が出ます。「Completed」が出ればOK
![2019-08-23_11h50_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/3bbf931b-643e-407c-9685-c5dcb8be174e.png)


# インストール後の設定
1.設定 > ビルド > 作成 > アプリケーション で「Custom Metadata Loader」が表示されていることを確認。
![2019-08-23_14h26_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/e4f13c3a-9ed3-b7a9-3cab-fc8b5cbe295d.png)

2.操作するSalesforceユーザに「Custom Metadata Loader」の参照権限を与えます。

例：設定 > ユーザの管理 > プロファイル > (操作するSalesforceユーザのプロファイル) > 割り当てられたアプリケーション > 「Custom_Metadata_Loader」の「参照可能」にチェック

3.同様に、「Custom Metadata Loader」のタブの参照権限を与えます。

例：設定 > ユーザの管理 > プロファイル > (操作するSalesforceユーザのプロファイル) > オブジェクト設定 > 「Custom Metadata Loader」「Custom Metadata Migrator」の「タブの設定」を「デフォルトで表示」に変更

4.設定 > セキュリティのコントロール > リモートサイトの設定 でリモートサイトの設定を新規作成
- リモートサイトの URL:「https://mydomain--c.visualforce.com」
（※mydomainの部分は適時変更）
と入力して保存。
（すでに作成済みの場合は必要ありません）

# CSVファイルの作成
下記のフォーマットで作成します。
- 文字コード：UTF-8
- 改行コード：CRLF
- BOM：不要
- 1行目はカラムヘッダー、2行目から実レコード（データローダのときと同様です）
-  ヘッダーには下記の必須項目を含めます
    -  Description,DeveloperName,Label
    -  カスタムメタデータ型に作成されたカスタム項目API名

例
> Description,DeveloperName,Label,CustomField1__c,CustomField2__c
AAA1,BBB1,CCC1,DDD1,EEE1
AAA2,BBB2,CCC2,DDD2,EEE2

# 実際にCSVファイルからインポートしてみる
1.操作するユーザでログインし、アプリケーションピッカーから [カスタムメタデータローダ] を選択

2.「Custom Metadata Loader」タブをクリック

3.ファイル・カスタムメタデータ型名を選択した後、「Create/Update custom metadata」ボタンを押下
![2019-08-23_11h45_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/3aa7b19b-aa2b-eeba-7797-6cddac8a0e53.png)

4.成功すると、画面下部に、レコードの一覧が表示されます
![2019-08-23_10h34_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/16ad70c3-0272-79ab-3433-5b50a66567e5.png)

# エラーハンドリング
## Header must contain the api names of the fields
投入したCSVファイルにカラムが不足していると出ます。
![2019-08-23_10h16_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/53dedb32-f7e7-2ba3-09b7-ae2668a23012.png)

ただし、カラムがすべて合致していてもこれにあたってしまうときがあります。
どうやら、CSVファイルの形式、改行コード、BOMなどが誤っていてもぶつかるようです。
上記のフォーマットで作成すると、直りました。

## Unable to connect to the Salesforce Metadata API.
リモートサイトの設定がされていないと出ます。上記設定を完了すればOKです。
![2019-08-23_14h45_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167339/424e9d1f-dbbd-f400-353f-cfbb9d20239d.png)