top of page
レザーノート

BLOG

Salesforce独自の言語、Apexとは...

  • 吉田 知弘
  • 2023年9月21日
  • 読了時間: 6分

更新日:2024年12月12日

プログラミング言語の「Apex」を皆さんご存知でしょうか。

Salesforceを触らない開発者、IT技術者の方であればApexというプログラミング言語は聞く機会はほぼほぼ無いかと思います。かくいう私も、何年もIT業界で仕事を全うしてきましたが、プログラミング言語で「Apex」という言葉を聞いたことも文字を見たこともありませんでした。(最初はゲームのApexかと思いました)


Salesforceの仕事に携わる前に初めてApex言語の存在を知り、まだまだ自分が知らないことは沢山あるんだと思ったのを今でも覚えています。

今回は、Salesforce独自の言語であるApexとは何者なのか、どのようなものを実現できるプログラム言語なのか等を簡単にご紹介したいと思います。



1. Apexの概要

Apexとは、Salesforce上の機能を拡張する際に使用する、オブジェクト指向のプログラミング言語です。構文はJavaとかなり似ているため、Javaを知っている方であれば、敷居はそこまで高く無いかと思います。Apexを使用することにより、ボタンクリック、関連レコードの更新、Visualforceページなどのほとんどのシステムイベントに処理を追加することができます。Apexは、Webサービスのリクエスト、オブジェクトのトリガから開始することができます。


Salesforce上で、動かしたい処理があれば、大抵はApexを用いて実現することができます。ただ、Apexを用いることのメリットデメリットはありますので、簡単な処理であれば、標準機能であるフローなどを使用する方が良いと思います。メリットデメリットについては、後ほどご紹介いたします。



2. Apexの特徴

Apexはいくつかの特徴を持っています。下記はSalesforceの公式ページ抜粋です。

( 「>」をクリックすると、詳細が展開されます)


-----------------------------------------------------------------------------------------------

統合されている

  • INSERT、UPDATE、および DELETE など、組み込み DmlException 処理を含むデータ操作言語 (DML) コール

  • sObject レコードのリストを返す、インラインの Salesforce Object Query Language (SOQL) と Salesforce Object Search Language (SOSL) のクエリ

  • 複数のレコードの一括処理を可能にするループ

  • レコード更新の競合を回避するロック構文

  • 保存された Apex メソッドから構築できる、カスタムの公開 API コール

  • Apex が参照するカスタムオブジェクトまたはカスタム項目を編集または削除しようとすると発行される警告とエラー


使いやすい

 Apex は、変数および式の構文、ブロックおよび条件ステートメントの構文、ループ構文、オブジェクトおよび配列の表記など、よく知られた Java のイディオムに基づいています。Apex が新しい要素を導入する場合、理解しやすい構文およびセマンティックを使用して Lightning プラットフォームの効率的な使用を促進します。その結果、Apex は、簡潔で記述しやすいコードを作成します。

データ指向

 Apex は複数のクエリや DML ステートメントを Salesforce サーバ上の 1 つの作業単位にまとめるように設計されています。これは、開発者がデータベースのストアドプロシージャを使用して複数のトランザクションステートメントをデータベースサーバにまとめるのと同じ要領です。他のデータベースのストアドプロシージャと同様に、Apex は、ユーザインターフェースでの要素の実行はサポートしていません。

正確である

 Apex は、オブジェクト名や項目名などのスキーマオブジェクトを直接参照する、強力に定型化された言語です。参照が無効である場合は、コンパイル時にすぐにエラーが発生します。アクティブな Apex コードが要求しているときに削除されないように、メタデータのすべてのカスタム項目、オブジェクト、クラス連動関係を保存します。

ホストされている

 Apex は、すべて Lightning プラットフォームで解釈、実行、および制御されます。

マルチテナント型

 他の Lightning プラットフォームと同様、Apex はマルチテナント環境で実行されます。そのため、Apex ランタイムエンジンは、回避コードから保護されるよう設計されており、共有リソースが独占されないようになっています。制限事項に違反するコードは失敗し、わかりやすいエラーメッセージが表示されます。

テストが容易

 Apex には、単体テストの作成と実行のサポートが組み込まれています。コードがどれだけカバーされているか、コードのどの部分を効率化できるかを示すテスト結果が含まれます。Salesforce では、プラットフォームのアップグレードの前にすべての単体テストを実行することによって、すべてのカスタム Apex コードが期待どおりに動作することを確認しています。

バージョニングされている

Apex コードを異なるバージョンの API に保存できます。これにより、動作を維持できます。

-----------------------------------------------------------------------------------------------



公式からいろんな特徴が紹介されていますが、全体を通して、不便なく開発言語としてSalesforce上で使用できるかと思います。

なお、Apexは、「設定」 → 「開発者コンソール」から使用できます。



3. Apexを使用する場面

先ほど、ApexはSalesforce上のどのような処理でも実現することはできると述べましたが、実際にどういった場面で使用するのが良いのでしょうか。Salesforceには処理を自動化できる標準機能のフローといったものがあります。

フローは、コードを書く必要がなく、プロセスを可視化し、フローチャートのような処理の流れでSalesforce上のデータを操作することができます。フローを使用した方が工数が省けたり、ApexやJavaを触ったことがない人でも手軽に出来るといったこともメリットです。簡単な自動処理を実現したいのであれば、フローを使用していただく方が良いと思います。

逆にApexは、フローで実現できないような複雑な処理を自動化する際に使用すると良いとでしょう。どちらを使うべきかは、実現したい処理の内容やリソースなどを考慮した上で決定すべきかと思います。


例えば、以下のパターンではApexが必要です。

  • Visualforceページ(PDF帳票の出力等)で使用するクラスの作成

  • Apexトリガの作成

  • 外部システムとの連携

PDF帳票は、弊社でもしばしば開発することがあります。PDFのレイアウト(HTML)の作成と、Salesforceのデータのアウトプット(Apex)が必要になるので、開発を経験したことない人にとっては少し難易度が高いかもしれません。


下記、私の感覚ですが、フローとApexの比較を表でまとめるとこんなイメージです。

自動化機能の実現範囲

処理の見やすさ

メンテナンス性

工数

フロー

簡単な自動化は可能

プロセスが可視化されているので見やすい

編集 -> 保存でメンテが可能

Apex

大体なんでもできる

ソースを読む必要がある

本番用クラス/テストクラスの修正、リリースが必要

表を見るとフローがよく見えると思いますが、使い所はケースバイケースです。

互いのメリットデメリットがあるので、うまく使い分けることが大切だと思います。


4. まとめ

Apexについて少しでもご理解いただけましたでしょうか。最近ではSalesforceのフローもかなり充実してきています。大抵の処理はフローで自動化できますが、勿論、実現できないことも多々あります。そういった時に、Apexを使用すると良いと思います。実際に私は、リードオブジェクトの取引開始の自動化をApexを用いて行いました。これはフローでは実現できないことなので、Apexを実装した時に、本当になんでも出来そうだと感じましたね。同時にプログラミングの勉強にもなったので、触っていて損は無かったです。ただ、その分技術力も必要になってきますので、慣れていない方は工数がいくらかかかってしま雨と思いますので、プロジェクトの予算次第で実現していただければと思います。この記事を読んで少しでもApexについてご理解いただけると嬉しいです!

コメント


bottom of page