【Salesforce】Sandboxから本番環境にApexクラスをアップロードする

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

先日Salesforceにて、Apexクラスを作成しようとしたのですが、
**Salesforceの仕様で、いきなり本番環境にApexクラスを作ることはできず、
Sandboxで作成・テストをし、本番環境へアップロードすることが必要でした。**

[前回の記事](https://qiita.com/Aichi_Lover/items/c0886ea353dd4d6dcc20)ではSandboxの作成方法について記載したので、
**今回はSandboxから本番環境にApexクラスをアップロードする手順を記事にしたいと思います。**

この記事がSalesforceについて勉強中の方の参考になれば幸いです♪
(*^^)v

# 2.用語の説明
## 2.1.Sandboxとは
Sandboxとは本番環境にアップロードするApexクラスやApexトリガを作成・テストするための環境のことです。
ちなみに、外部サービス（AWSのLambda等）との連携を試すことはできないため、
外部サービスの代わりにレスポンスを返すMockというコンポーネントを使用してテストをします。
（この辺りについてもいつか、記事投稿したいと考えてます・・・）

## 2.2.Apexとは
Apexとは、JavaベースのSalesforce独自のプログラム言語です。

Salesforce内のオブジェクトの検索や作成をするメソッド等が提供されており、
それらを組み合わせて処理を記述することができます。

Apexクラスとは、オブジェクト指向におけるクラスと同様のものとなります。

# 3.前提条件
以下に前提条件を示します。

* Sandboxが作成済であること

# 4.概要
今回は例として「HelloWorld!」をログに出力するApexクラスをSandboxから本番環境へアップロードしたいと思います。
SandboxにてApexクラスを作成し、ApexクラスをテストするためのApexクラスを作成し、テストを実施し、本番環境へアップロードします。

# 5.本番環境での事前設定
まず初めに、Sandboxから本番環境へApexクラスをアップロードするための設定をします。

5.1.本番環境にログインします。
**※ログインする環境を間違えないようにしてください**

5.2.画面右上の歯車を選択し、「設定」を選択します。

|![1905_設定を選択_本番環境.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/c29649d9-3e33-8a7f-c169-34ef51e058b7.png)|
|:--|

5.3.検索欄に「リリース」を入力し、「リリース設定」を選択します。

|![191_リリース設定を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/7676083d-3b96-22f7-db1e-602cc834b40e.png)|
|:--|

5.4.この後、作業をするSandboxの左側にある「編集」を選択します。

|![192_リリース設定の編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/4dfca968-9273-79ec-286e-833818c6f501.png)|
|:--|

5.5.アップロード認証方向の「変更着信を許可」にチェックを入れ、「保存」を選択します。

|![193_アップロード認証設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/2f9fae4c-824d-51e3-f3a2-0f72ed90cc86.png)|
|:--|

# 6.Sandboxでの作業
Sandboxでは以下の4つの作業を実施します。
* Apexクラスの作成
* テスト用Apexクラスの作成
* テストの実施
* 本番環境へアップロードのリクエストを送信

## 6.1.Apexクラスの作成
まずは、Apexクラスの作成およびテストを実施します。

6.1.1.Sandboxにログインします。
**※ログインする環境を間違えないようにしてください**

6.1.2.画面右上の歯車を選択し、「設定」を選択します。

|![090_設定を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/bf313a23-d4e1-4d8a-91a0-10dcb5f9ce93.png)|
|:--|

6.1.3.検索欄に「apex」を入力し、「Apexクラス」を選択します。

|![100_apexクラスを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/eda7ff5c-3f95-e95c-5b51-63ece122f2b1.png)|
|:--|

6.1.4.「新規」を選択します。

|![110_新規を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cde797fb-6c1b-33a5-c917-5bdec42ab2c8.png)|
|:--|

6.1.5.Apexのコードを書き、「Save」を選択します。
今回は例として以下のコードを使用しました。


```
global class HelloWorld {
    public String helloworld() {
        return 'HelloWorld!';
    }
}
```

|![120_apexクラス作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/385d2ba6-401a-34c9-5817-a2e088deba57.png)|
|:--|

## 6.2.テスト用Apexクラスの作成
6.2.1.Apexクラスの画面にて、再度「新規」を選択します。

6.2.2.Apexのコードを書き、「Save」を選択します。
今回は例として以下のコードを使用しました。

```
@isTest
private class HelloWorldTest {

    @isTest static void hello() {
        HelloWorld hello_world = new HelloWorld();
        String result = hello_world.helloworld();
        System.debug('結果=' + result);
    }
}
```

|![130_apexテストクラス作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/2c84e5d4-d9a0-7bf9-4cb5-3a4545342426.png)|
|:--|

## 6.3.テストの実施
6.3.1.Apexクラスの画面にて、「開発者コンソール」を選択します。

|![140_開発者コンソールを開く.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/d3f2eb95-fbc2-c2ca-f82b-2422133e73f2.png)|
|:--|

6.3.2.「Test」を選択し、「New Run」を選択します。

|![150_NewRunを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/62baec10-d0a1-552a-a52a-cfc2916f2c9a.png)|
|:--|

6.3.3.実行するテストを選択し、「Run」を選択します。

|![160_テストを実行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/2c5011a2-337d-3c67-9a2d-28dac52f82e5.png)|
|:--|

6.3.4.開発者コンソール下部にテスト結果が表示されることを確認し、行のどこかをダブルクリックします。

|![170_テスト結果を確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/239a533e-abed-df9e-5d77-e8323898a579.png)|
|:--|


6.3.5.ログを確認します。
例で赤枠になっている行は「HelloWorldTest」クラスの「System.debug('結果=' + result);」に対応しており、
プログラムが問題なく動いたことが確認できます。

|![180_テスト結果を確認_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/e858b7c0-a6a4-0d28-790d-ac244ef480cd.png)|
|:--|

6.3.6.Apexクラスのページに戻り、コードカバー率が75%以上であることを確認します。
**コードカバー率が75%未満の場合は本番環境にアップロードする時にエラーになります。**

コードカバー率が75%未満の時は以下を確認してください
if文を入れている場合　→　各分岐に流れるようにテストが実行できているか
try-catch分を入れている場合　→　エラーが起きる場合のテストが実行できているか

|![190_コードカバー率を確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/e0fc53ba-09ea-946a-be46-1a1038be365b.png)|
|:--|

## 6.4.本番環境へアップロードのリクエストを送信
6.4.1.設定の検索欄に「送信」を入力し、「送信変更セット」を選択します。

|![200_送信変更セットを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cf73aa52-2d5b-31f0-8812-e0b46f14fda5.png)|
|:--|

6.4.2.「新規」を選択します。

|![210_新規を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/553bd814-00e8-8d09-fca9-73ed56a4c48f.png)|
|:--|

6.4.3.「名前」と「説明」を入力し、「保存」を選択します。
どちらの項目も入力する内容は任意です。

|![220_送信変更セットの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/f25d1446-a2b3-adeb-c361-803e4fae23b2.png)|
|:--|

6.4.4.変更セットコンポーネントの部分にある「追加」を選択します。

|![230_コンポーネントを追加.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/a65fca74-55d7-6f26-1a3d-f5bf4fed2f11.png)|
|:--|

6.4.5.以下を選択し、「変更セットに追加」を選択します。

|項目|設定内容|
|---|---|
|コンポーネントの種類 | Apexクラス |
|チェックボックス |本番環境にアップロードするApexクラスを選択|

|![240_コンポーネントを追加_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/fd1e6939-8ad0-4d85-045f-ffbc0c73bebb.png)|
|:--|

6.4.6.「アップロード」を選択します。

|![250_アップロードを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/fead23ca-fac1-c3c6-d233-f07e991832f6.png)|
|:--|

6.4.7.本番環境にチェックをし、「アップロード」を選択します。

|![260_アップロードを選択_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/08e7b545-2206-88c0-88db-b3152bdba485.png)|
|:--|

# 7.本番環境での作業

最後に、本番環境で以下の作業を実施します。
* Apexクラスをリリース

## 7.1.Apexクラスをリリース
7.1.1.本番環境にログインします。
**※ログインする環境を間違えないようにしてください**

7.1.2.設定の検索欄に「受信」を入力し、「受信変更セット」を選択します。

|![270_受信変更セットを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/69962f9a-ac39-58c1-84f6-5e6ac2247912.png)|
|:--|

7.1.3.手順6.4.3.で入力した「名前」の左にある「リリース」を選択します。

|![280_リリースを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/791de8dd-7775-11f2-4fa2-51eafa669bcb.png)|
|:--|

7.1.4.「リリース」を選択します。

|![290_リリースを選択_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/d834d236-9756-63c1-9d69-ec404718c678.png)|
|:--|

7.1.5.「リリース状況」を選択します。

|![300_リリース状況を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/13828236-c55f-8a09-ee23-36e6dd9cfc65.png)|
|:--|

7.1.6.リリース状況を確認します。

|![310_リリース中.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/877a6d65-0b6f-81d1-8cf8-4c36d5615366.png)|
|:--|

7.1.7.画面に「成功したリリース」と表示されることを確認します。

|![320_リリース後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/2b49cdfb-1f0d-6fb9-c644-ec5e3967f344.png)|
|:--|

7.1.8.最後に、Apexクラスの画面を開き、本番環境にアップロードされていることを確認します。

|![330_Apexクラス最終確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b11a8558-024f-ec7c-567b-b256d34aa8a9.png)|
|:--|

# 8.おわりに
ここまで読んで下さり、ありがとうございます！！！
(^^)

Apexクラスをアップロードする際にはテスト用クラスの作成が必要なことや、
コードカバー率が75%以上必要なことが学びになりました。

次はCTIフローか、VisualforceからApexクラスを呼び出す方法について書く・・・かもしれません。
(:3_ヽ)_