2019年4月

JavaのアプリからSalesforceのREST APIをコールする方法

API
  • 2019.04.30

概要 Javaのアプリケーション等の外部システムからSalesforceのREST APIをコールするには、事前にSalesforceの対象組織に対してログイン認証をする必要があります。本記事ではその部分をJavaのSpring Bootのフレームワークでどのように実装するかについて、サンプルコードを交えて整理しております。また、そのアプリでSalesforceとのOAuthでの認証を実現する方法、Herokuへのデプロイする方法も簡単に記載しております。 構成 今回は下記のような構成で外部システムにあたる部分を実装します。 アプリ:Spring Boot(Java) 基盤:Heroku Javaアプリの作成 最初にSpring Initializr(https://start.spring.io/)からスケルトンを作成します。今回は、ビルドツールはMavenを使用します。 pom.xmlファイルの作成 今回使用するライブラリをpom.xmlファイルに定義します。 ポイントは下記を使用する点となります。spring-security-oauth2・・・SpringにおいてOAuthの認証を実現するために使用します。spring-security-oauth2-autoconfigure・・・Spring Security OAuth2の設定をシンプルに実現するために使用します。 SSOでのOAuth認証を実装 OAuth2 コンシューマがアクセストークンを取得するためには、OAuth2 コンシューマが動作するアプリケーションを利用するユーザーによる OAuth2 プロバイダ認証がとおる必要があります。そのため、取得したアクセストークンで OAuth2 プロバイダのリソースサーバから確かにユーザーの情報が取得できることを確認することを、現在 OAuth2 コンシューマが動作するアプリケーションを利用しているユーザーの Sign On 処理に代えることができます。ユーザーは OAuth2 コンシューマが動作するアプリケーションではログイン処理を行わず、OAuth2 プロバイダでのみログイン認証を行えばよいため、これは Single Sign On の実現方法のひとつです。この Single Sign On を実現するために OAuth2 コンシューマとして必要な処理は、Spring Security OAuth の@EnableOAuth2Sso アノテーション設定で実現できます。 設定ファイルを読み込みREST APIをコール application.propertiesに定義した設定を読み込み、SalesforceのREST APIをコールします。コンシューマ鍵とコンシューマの秘密鍵はHerokuの環境変数で設定するようにします。 REST APIのレスポンスを変換 REST APIのレスポンスのJSON文字列を変換するために下記のクラスを定義しておきます。 Salesforceで接続アプリケーションを作成 設定メニューのクイック検索で”アプリケーションマネージャ”を検索します。※”接続アプリケーションを管理する”のメニューからは新規での作成ができないので注意が必要です。 接続アプリケーション名、API参照名、メールアドレスを入力します。 OAuthを有効化して、スコープとコールバックURLを入力します。なお、コールバックURLには、Herokuにデプロイ後に決まる下記のURLを設定します。https://YOUR_HEROKU_APP_NAME.herokuapp.com/login これでコンシューマ鍵とコンシューマの秘密が発番されるので、後ほどHerokuの環境変数に設定します。 Herokuへアプリをデプロイ まずはHerokuでアプリケーションを作成します。ここで入力したアプリ名がデフォルトのURLに含まれます。 アプリケーションを作成すると下記のようなHeroku Gitが作成されるので、こちらにアプリをPushします。https://git.heroku.com/YOUR_HEROKU_APP_NAME.git デモ アプリケーションのURLへアクセス→Salesforceのログイン画面へ遷移→OAuthの認可→REST APIのコール結果を表示となります。 参考 Spring Boot and OAuth2https://spring.io/guides/tutorials/spring-boot-oauth2/ Deploying Spring Boot Applications to Herokuhttps://devcenter.heroku.com/articles/deploying-spring-boot-apps-to-heroku 最後に 今回のサンプルコードは、下記にありますのでよかったら確認してください。こちらから直接Herokuへデプロイすることもできます。https://github.com/yhayashi30/restapi-salesforce-sso

【JavaScript】値型と参照型 (Value Types and Reference Types)

  • 2019.04.23

概要 本記事ではJavaScriptにおける値型(Value Types)と参照型(Reference Types)の違いを簡単に整理します。 値型(Value Types) Number,Boolean,String,null,undefined,Symbolはプリミティブ型であり関数へは全て値型で渡されます。ここでのポイントは、Stringが値型で渡させるということとなります。他の言語では、Stringは一般的に参照型である場合が多いですが、JavaScriptでは値型なので注意が必要となります。値型で関数(fucntion)に渡させると、関数の中での変更は影響しないような挙動となります。下記が簡単な例です。 参照型(Reference Types) Object,Array,Functionの型は、参照型で渡さます。ちなみに、ArrayやFunctionも大きく捉えるとObjectに含まれると考えられます。参照型で関数(fucntion)に渡させると、関数の中での変更は呼び出し元の変数にも影響するような挙動となります。下記が簡単な例です。 まとめ JavaScriptでは明示的に型を宣言しないので、他の言語ほど型を意識しないことが多いですがいわゆる値型と参照型での動作の違いが出てくるので、考慮した上で実装する必要はあります。 参考 Understand Value and Reference Types in JavaScripthttps://www.zsoltnagy.eu/understand-value-and-reference-types-in-javascript/ Value types, reference types and scope in JavaScripthttps://medium.com/@benastontweet/lesson-1b-javascript-fundamentals-380f601ba851

WordPressにreCAPTCHAを導入

  • 2019.04.22

概要 本ブログはWordPressで運用しているのですが、プラグインのJetpackを導入してからダッシュボードで「悪意のあるログイン試行のブロック数」が表示されるようになり、毎日結構な数になっていたことから、Google社のreCAPTCHA(リキャプチャ)を導入してみました。その際の手順を簡単にまとめます。なお、reCAPTCHAのバージョンはv3、WordPressのプラグインはGoogle Captcha (reCAPTCHA) by BestWebSoftを使用しております。 GoogleへWEBサイトの登録&APIキー取得 下記のGoogle社のページで右上にあるAdmin ConsoleからWordPressのWebサイトを登録します。https://www.google.com/recaptcha/intro/v3.html まずは登録するサイトのドメインとラベルを適切に入力します。また、reCAPTCHAのタイプは今回、v3を使用します。こちらは、reCAPTCHAの最新版であり以前のようなチェックボックス押下も不要で、どういうロジックかはわかりませんが自動でGoogle社がスコアを出して、人間かBotかを判断してくれるようです。 WordPressにプラグインを導入 reCAPTCHAをログイン画面やコメント画面のフォームへ簡単に導入してくれるプラグインを使用します。今回は、v3にも対応していたGoogle Captcha (reCAPTCHA) by BestWebSoftを使用することにしました。プラグインのURLは、こちらになります。https://ja.wordpress.org/plugins/google-captcha/設定に関する手順書もしっかり整理されており、こちらから参照可能です。https://docs.google.com/document/d/1yTDdMSLqvgATbo5lPzuNn4QRF0EyEPFuLoFB15beMww/edit プラグインの設定 プラグインを有効化するとサイドバーに”Google Captcha”が現れます。ここで、上記の手順においてGoogleの登録ページで取得したAPIキー(サイトキーとシークレットキー)を正しく入力します。 APIキーを入力すると”Test Captcha”のボタンが表示されるので、正しく認証が実施できるかを確認します。 reCAPTCHAのバージョンと、有効化するフォームの箇所を選択します。 reCAPTCHAを隠すユーザと肝心の人間かBotかを判定するスコアを選択します。とりあえず、デフォルトの設定の0.5のままにして様子を見ようと思いますが、Google社曰く0.5が閾値に最適のようです。 まとめ 冒頭に記載した通りスパムによるログインアタックが多かったのが導入した一番の理由ですが、reCAPTCHAのv3で運用してみたかったのも実は結構あります。実際にどのようなスコアが出ているかを定期的に管理コンソールから確認してみたいと思います。

VisualforceでreCAPTCHAを実装

  • 2019.04.21

概要 SalesforceのCommunityやSites等で外部へ公開するページをVisualforceで実装する場合にBotによる標準型攻撃を受けないようにするための対策としてGoogle社が提供するreCAPTCHA(リキャプチャ)を使用して認証を実装するサンプルコードと手順を紹介します。 Googleへサイトの登録とAPIキーを発行 まず、下記のURLからGoogleへサイトの登録とAPIキーの発行を行います。右上のAdmin Consoleから登録できます。https://www.google.com/recaptcha/intro/v3.html 現在、Google社が提供しているreCAPTCHAには最新のv3と旧のv2がありますが、v2も引き続き使用できるようですので、そちらを使用したいと思います。また、ドメインには、公開サイトとなるCommunityやSitesのドメインを指定するようにしてください。今回は、テストで動作確認するのみなので、force.comを指定しておきます。 ここまでの入力が完了すると、Public KeyとSecret Keyが発行されます。こちらを実装するときに使用します。 Salesforceでリモートサイトへ登録 Apexでサーバー側で認証する際に、Googleのサーバーへリクエストする必要があるので、SalesforceのリモートサイトへURLを登録しておく必要があります。 Visualforceの実装 Visualforceでの実装サンプルは下記の通りとなります。チェックボックスの押下により発行されたトークンをhiddenの項目に保持しておき、サーバー送信時にPostします。 サーバー側(Apex)の実装 サーバー側(Apex)の実装サンプルは下記の通りとなります。クライアントからポストされたトークンとSecret Keyをパラメーターにして、所定のGoogle社のURLへPOSTして認証を実施して、レスポンスで結果を確認します。 デモ 下記のようの動作となりました。 参考 Adding CAPTCHA to Force.com Siteshttps://developer.salesforce.com/index.php?title=Adding_CAPTCHA_to_Force.com_Sites&oldid=27283 reCAPTCHA v2https://developers.google.com/recaptcha/docs/display Verifying the user’s responsehttps://developers.google.com/recaptcha/docs/verify 最後に 下記に今回のサンプルコードは格納しておりますので、よければ参考にしてください。https://github.com/yhayashi30/reCAPTCHA-salesforce-visualforce

SalesforceのメールをSendGrid経由で送信する

  • 2019.04.20

概要 Salesforceから送信するメールは、Salesoforceのメールサーバから送られます。スパムや迷惑メールの対策のためにSalesforce外のメールサーバーを経由して送信する為には、メールリレーの機能を使用することで実現可能となります。本記事では、メールリレーを使用してクラウドでメール送信のサービスを提供しているSendGridを経由するように設定する方法を紹介します。メールリレーを使用するよくあるシチュエーションは、なりすましメールの対策として自社のメールサーバーを経由させることで、送信元のメールアドレスのドメインと一致させるような場合となります。SendGridを経由させることのメリットとしては、SendGridはメールのBlockやバウンス、送達率などが管理コンソールで確認する機能がSalesforceよりも優れているという点が考えられます。 SendGridのアカウント作成 SendGridは、テスト用であれば本家でこちらから登録できます。https://sendgrid.com/実際に運用で使用する場合は、構造計画研究所が正規代理店となっている下記から登録が必要となります。https://sendgrid.kke.co.jp/ メールリレーの設定 設定の[クイック検索]ボックスからメールリレーで検索します。 メールリレーを作成します。SendGridのホスト名とポートは下記の通りに指定します。 https://support.sendgrid.kke.co.jp/hc/ja/articles/204187885-SMTP%E3%81%AE%E6%8E%A5%E7%B6%9A%E6%83%85%E5%A0%B1%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-ホスト名:smtp.sendgrid.netポート番号:25TLS設定:検証して必須SMTP認証を必須:チェックユーザ名:SendGridのアカウントを入力 メールドメイン検索条件の設定 設定の[クイック検索]ボックスからメールドメイン検索条件の指定で検索します。 この設定では、メールリレーを使用する送信者と受信者のドメインを指定することができます。 以上で設定は完了です。これで試しにSalesforceからメールを送信するとSendGrid経由でメールが送信されているはずです。 メールログで送信履歴を確認 設定で[クイック検索]ボックスからメールログファイルを検索します。 ダウンロードしたCSVファイルにテストで送信したメールがメールリレーでSendGrid経由で送信されていることを確認できます。 SendGridの管理画面で確認 SendGridの管理画面にアクセスして送信履歴を確認することもできます。 https://app.sendgrid.com 参考 メールリレーの設定https://help.salesforce.com/articleView?id=email_relay.htm&type=5 メールドメイン検索条件の指定https://help.salesforce.com/articleView?id=emailadmin_email_domain_filter.htm&type=5 メールログのリクエストhttps://help.salesforce.com/articleView?id=email_logs_edit.htm&type=

WordPressにプラグインなしでTwitterのタイムラインを埋め込み

  • 2019.04.10

概要 本記事は、WordPressにプラグインを使用せずにTwitterのタイムラインをサイドバーに埋め込み、表示する方法を記載します。WordPressではプラグインをインストールすることで簡単に設定することができますが、プラグインはたくさん入れると重くなったり、プラグイン同士が競合したりすることがあるので極力少ない方が好ましいです。なので、今回はプラグインを使用しないで実現する方法を紹介します。 手順 早速手順を記載したいと思います。意外と簡単に設定することができ、下記の大きく2ステップでできてしまいます。 Twitter Publishでコードを作成 WordPressのウィジェットでサイドバーに設置 Twitter Publishでコードを作成 Twitter Publishにアクセス URL入力(自分のTwitterアカウントのプロフィールページ)でエンター オプションを選択(Embedded Optionを選択) set customization options.でHightを設定(600pxと入力) コードをコピー WordPressのウィジェットでサイドバーに設置 ウィジェットでサイドバーに設置 テキストのタイトルと内容(先ほどコピーしたコード)を入力 以上で設定完了となります。 ちなみに、本サイトも上記の手順にて設定しております。

【JavaScript】プリミティブ型

  • 2019.04.09

概要 本記事は、JavaScriptにおけるプリミティブ型にはどのようなものがあるかを整理したものとなります。 プリミティブ型とは プリミティブ型とは、プログラミング言語の仕様に用意されている最も基本的なデータ型となります。 JavaScriptにおけるプリミティブ型 JavaScriptにおけるプリミティブ型には、下記の種類があります。 Boolean type Null type Undefined type Number type String type Symbol type Boolean type Booleanは論理エンティティを表し、trueとfalseの2つの値を持つ。 Null type Null型は、厳密に1つの値(null)を持つ。 Undefined type 値が割り当てられていない変数は、undefined値を持つ。 Number type ECMAScript規格によると、数値型は1つだけである。整数には特別な型はなく、浮動小数点数を表すことができることに加えて、数値型は3つの記号的な値を持つ。 + Infinity -Infinity NaN(not-a-number) String type JavaScriptのString型はテキストデータを表すために使用される。C言語とは異なり、JavaScriptの文字列は不変(イミュータブル)である。つまり、いったん文字列が作成されると、それを変更することはできません。ただし、元の文字列に対する操作に基づいて別の文字列を作成することは可能である。 Symbol type Symbol型はECMAScript 2015のJavaScriptの新機能である。シンボルは一意で不変のプリミティブ値であり、Objectプロパティのキーとして使用できる。 参考 JavaScript data types and data structures — MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Primitive_values Primitive Types — Flow https://flow.org/en/docs/types/primitives/

Salesforceのメールサービスを実装する方法

  • 2019.04.02

概要 本記事は、Salesforceのメールサービスを実装する方法を簡単に記載します。 ちなみにメールサービスとは、「Apexクラスを使用して受信メールを処理する自動化されたプロセス」という機能となります。 具体的には、Webサイトやフォームで受け付けた内容をSalesforceへメールとして送信することで、メールの情報を元にApexのプログラムでオブジェクトにレコードを作成したりすることができるものとなります。 作成手順 Messaging.InboundEmailHandlerインターフェースを実装したApexクラスを作成 まずは、メールサービスに必要となるInboundEmailHandlerの実装クラスを作成します。このクラスでhandleInboundEmailメソッドを使用して、InboundEmail オブジェクトにアクセスし、受信メールメッセージの内容、ヘッダー、および添付ファイルの取得と、その他多数の機能を実行します。 下記のサンプルコードでは、受信したメールの内容を元にケースを作成しております。また、受信メールアドレスが一致する取引先責任者があれば、リレーションをはるような考慮もいれております。 メールサービスの作成 メール受信時に呼び出すApexを指定してメールサービスを作成します。 メールアドレスを追加 作成したメールサービスに対して、送信先となるメールアドレスを作成します。 設定するメールアドレスの部分が@より前の部分になり、ドメインは作成時に自動で生成されます。 ■注意点 「コンテキストユーザ」に設定するユーザが、Apexの実行ユーザとなるのでApex内でアクセスするオブジェクト(今回はケースオブジェクト)を更新する権限がないと、オブジェクト登録のApexがエラーになります。 設定完了、メールアドレスの確認 作成したメールアドレスを確認します。 実際にメールを送信して確認 今回のサンプルプログラムでは正常に動作した場合は、メールの件名、本文でケースが作成されているはずです。エラーが発生した場合は、送信元のメールアドレスにメールが届きます。 ガバナ制限 1日に処理できるガバナの制限値は、ユーザライセンス数 x 1,000 で算出され、最大値は 1,000,000 です。たとえば、ライセンス数が 10 の場合、1 日最大 10,000 件のメールメッセージとなるようです。 参考 メールサービス https://help.salesforce.com/articleView?id=code_email_services.htm&type=5 Apex メールサービス https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_email_inbound_what_is.htm

【JavaScript】コールスタックとは

  • 2019.04.01

概要 本記事では、JavaScriptのコンセプトであるコールスタックについて整理します。 コールスタックとは コールスタックは、JavaScirptを実行するインタプリタ(WebブラウザのJavaScriptインタプリタなど)が複数の関数を呼び出すスクリプト内の場所を追跡するためのメカニズムです。 JavaScriptの実行は、基本的にはシングルスレッドによるヒープと単一のスタック呼び出しから構成されます。 基本原則は以下となります 1. シングルスレッド。つまり、一度に一つのことしかできないということ。 2. コード実行は同期的。 3. 関数呼び出しは一時メモリを占有するスタックフレームを作成。 4. LIFO – 後入れ先出しデータ構造として機能。 処理の流れ スクリプトが関数を呼び出すと、インタプリタはそれを呼び出しスタックに追加してから、その関数の実行を開始します。 ↓ その関数によって呼び出されたすべての関数は、さらに呼び出しスタックに追加され、それらの呼び出しに到達した場所で実行されます。 ↓ 現在の関数が終了すると、インタプリタはそれをスタックから取り除き、最後のコードリストで中断したところから実行を再開します。 スタックオーバーフロー スタックが割り当てられていたよりも多くのスペースを占有すると、「スタックオーバーフロー」エラーが発生します。 下記のように、自身の関数を再帰的に呼び出すことが原因となります。 参考 Call Stack https://developer.mozilla.org/en-US/docs/Glossary/Call_stack Understanding the JavaScript call stack https://medium.freecodecamp.org/understanding-the-javascript-call-stack-861e41ae61d4