【Salesforce】"ApexSandbox.io"の紹介

Salesforceのプログラミング言語"Apex"を楽しく学べるサイト"ApexSandbox.io"を紹介します。
[ApexSandbox.io](https://www.apexsandbox.io)
環境構築が不要で自動テストできるので初学者にもおすすめです。
![スクリーンショット 2025-05-05 095846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/db93204f-7ea0-478b-abf3-9ff24b86f9f4.png)


## 1."ApexSandbox.io"とは
Salesforceのプログラミング言語であるApexを学習するためのサイトです。
Salesorceの開発環境を使って、サイトにログインします。
練習問題が用意されていて、実際にコードを書いて実行します。
問題に挑戦することでApexのスキルが効率的に身につきます。
単体テストが用意されていて、実行するとAssert結果を即座に確認できます。
練習問題は103問あり、8つのセクションに分かれています。
![スクリーンショット 2025-05-05 111108.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/ec9e7cbd-a10c-496f-99e5-ce62333f3ebe.png)




## 2."ApexSandbox.io"の楽しみ方
### ①Google翻訳を活用する
![スクリーンショット 2025-05-05 111019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/742acb54-dad6-4582-bb5b-9f1be09446c9.png)


### ②"Apex 開発者ガイド"や"Trailblazerコミュニティ"を活用する
実装方法がわからないときは、どんどん調べましょう。
 ･Apex 開発者ガイド : [Stringクラス](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_string.htm)
 ･Trailblazerコミュニティ : [#109 - Two Sum II [Spoiler alert - code included]](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MYDgq0AH)

### ③別解を探す
問題によっては複数の実装方法があります。
リファクタリングしてパフォーマンスや可読性を高めましょう。
![スクリーンショット 2025-05-05 112018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/7eb65ce5-2da2-413f-8a1d-ded4753455e1.png)

### ④"開発者コンソール"や"VS Code"でデバッグする
処理が複雑になったら"System.debug()"でトレースしましょう。
![スクリーンショット 2025-05-04 202857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/0a5c5a5c-4ab4-497a-8122-f77449defc52.png)


## 3.練習問題の紹介
お気に入りの問題をひとつ紹介します。
### ･122 - Same String
2つの文字列を修正して比較する問題です。
'#'をバックスペースに見立てています。
2つ以上繋がった'#'の処理が難しいです。
Javaと違いchar型や関連メソッドが使えないので文字の取得に工夫が必要です。
ApexのcharAtメソッドは、文字ではなく文字の値を返します。
※"'a'.charAt(0)"なら'a'ではなく'97'を返す
"str.split('')"で文字をひとつずつ取得しました。

```Apex
// 回答例(122 - Same String)
public static Boolean sameString(String str1, String str2){
    // solution
    str1 = modifiedString(str1);
    str2 = modifiedString(str2);       
    return str1.equals(str2);
}

/**
 * 文字列からハッシュタグ（#）でマークされた部分を除外し、残りの文字を返す
 * 
 * @param str 処理対象の文字列
 * @return ハッシュタグとその前の文字を除いた文字列
 */
private String modifiedString (String str){
    List<String> chars = str.split(''); // 入力文字列を個々の文字に分割するリスト
    Integer currPosition = chars.size() - 1; // 文字列の末尾からのカーソル位置
    Integer hashTagCount = 0; // 現在処理中のハッシュタグの数
    String result = ''; // 出力される文字列
    // 文字列を末尾から先頭に向かって走査
    while (currPosition >= 0){
        // 現在の位置がハッシュタグの場合、カウンターを増加
        if (chars.get(currPosition).equals('#'))
            hashTagCount++;
        // 現在の位置がハッシュタグでなくカウンターがあれば、カウンターを減少
        else if (hashTagCount > 0)
            hashTagCount--;
        // 結果に文字を追加
        else 
            result = result + chars.get(currPosition);
        currPosition--;
    }
    return result;
}
```


## 4.各セクションの概要
### ①Apex 101
Apexの基礎を学ぶための入門セクションです。
以下の内容が含まれます。
･制御構造（ループ、条件分岐）
･標準関数（Listクラス、Mathクラス、Stringクラス）
･コレクションの基礎（List、Map）
･アルゴリズムの基礎(フィボナッチ数列、偶数･奇数、うるう年)

### ②Database 101
Salesforceのデータベース操作を学ぶセクションです。
Salesforceの開発環境に管理パッケージをインストールします。
>[引用]
Note: This problem requires installation of a packaged data model. [Install package in your org](https://kcs6-dev-ed.my.salesforce.com/?ec=302&startURL=%2Fpackaging%2FinstallPackage.apexp%3Fp0%3D04t5f000000Gx6CAAS) and [read up on the data model](https://gist.github.com/maujood/9bca1e95a9fe39b1cb881a116873d83e)

以下の内容が含まれます。
･クエリ言語の基礎（SOQL）
･DML操作（insert）
･データの検索とフィルタリング
･例外処理


### ③Apex Language Features
Apex固有の言語機能について学ぶセクションです。
以下の内容が含まれます。
･型チェック（instanceof）
･標準関数（Jsonクラス、Listクラス、Stringクラス）
･例外処理


### ④SObjects
Salesforceの標準オブジェクトとカスタムオブジェクトの操作方法を学びます。
以下の内容が含まれます。
･sObjectの基本的な操作
･標準関数（Systemクラス、Listクラス、Stringクラス、Systemクラス）
･参照関係


### ⑤Lists
リストコレクションの操作方法を学びます。
以下の内容が含まれます。
･Listクラスの操作
･リストのソート
･インデックスによるアクセス
･実践的な使用パターン


### ⑥Sets
セットコレクションの特徴と使用方法を学びます。
以下の内容が含まれます。
･Setクラスの操作
･重複しない要素の管理
･実践的な使用パターン


### ⑦Maps
マップコレクションの特徴と使用方法を学びます。
以下の内容が含まれます。
･Mapクラスの操作
･キーと値のペア管理
･効率的な検索と更新
･実践的な使用パターン


### ⑧Data Structures & Algorithms
より高度なデータ構造とアルゴリズムについて学びます。
以下の内容が含まれます。
･スタックとキューの実装
･ソートアルゴリズムの実装
･検索アルゴリズムの実装
･その他アルゴリズムの応用(文字処理、配列操作)


## 4.まとめ
"ApexSandbox.io"でApexを楽しく学んで実践的な技術を身につけましょう。


## 5.参考リンク
･[ApexSandbox.io](https://www.apexsandbox.io)
･[Apex 開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_dev_guide.htm)
･[Apex Practice Problems - ApexSandbox.io](https://trailhead.salesforce.com/trailblazer-community/groups/0F94S000000kJb2SAE?tab=discussion&sort=LAST_MODIFIED_DATE_DESC)