Integration Architecture デザイナー進め方のポイント

# この記事の思い　　 
日本では情報が非常に少ないArchitecture系の資格で皆さん試行錯誤して学んでいる方が多いと思います。
海外サイト行けばまだ情報があるのですがね・・・。
1カ月程度勉強して、ようやく合格しましたので、折角なので私なりの進め方を公開して
スキルを習得する人や資格取得が増えてくれればと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577032/89d7419c-e75c-edbf-99fb-3ec1913d890e.png)


別途知識のポイントはアップしますが、この記事では情報が少なかった進め方のポイントをまとめました！

今後、１年をかけて他のArchitectureも取得していくつもりです。
随時更新していきたいと思います。

# Integration Architecture デザイナーの知識体系を学ぶ為の基本方針

### 大前提
公式から[インテグレーションのパターンと実践](https://developer.salesforce.com/docs/atlas.ja-jp.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_intro_overview.htm)という素晴らしいドキュメントが公開されています！
設計パターンや採用する際のポイント、注意点が細かく書いてあり、こちらを読み進めて理解するのが近道かと思います。

### 基礎知識編
しかし、このドキュメントを理解するのに各種APIの仕組み、インテグレーションの各機能を
理解しないと正直何を言っているのかさっぱり分かりませんでした・・・。
その為、Trailheadや開発者ドキュメント等を活用して基礎知識をしっかりと確立させる必要があります。

### 応用編
基礎知識を理解した所で[インテグレーションのパターンと実践](https://developer.salesforce.com/docs/atlas.ja-jp.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_intro_overview.htm)を読みます。
１つ１つの単語の意味を理解している分、点と点が繋がって線として読みやすくなっているはずです。

### 発展編
その後、他にも知らない知識など無いか先人達のブログなどを読み進めて、自分の理解や知識を補いましょう。

### 余談
[アーキテクチャTrailmix](
https://trailhead.salesforce.com/ja/users/welcome4/trailmixes/architect-integration-architecture-jp)も日本語版が用意されています。
ただ、英語版動画やドキュメントがチェックだけなのでモチベーション的にやった感が出なく
今回は私なりのやり方で進めました。公式の方、すみません・・・。

# 基礎知識編：インテグレーションに使用されるAPIや標準機能を理解しよう
どんな応用も基礎がしっかりしていないと意味がありません！
まずは地道にインテグレーションに使用される各種API、機能の１つ１つしっかりと抑えましょう。

漏れているかもしれませんが、以下のAPIや機能をまずは把握しました。
まずはTrailheadを実施して概要把握しましょう。分からない所はHelpで。

|API及び機能|TrailheadまたはHelp|
|:-----------------|:------------------|
|SOAP API|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/api_basics/api_basics_soap)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.api.meta/api/)<br/>[詳細記事](https://qiita.com/y2-07/items/a3971581e77b85a5a1bb)|
|REST API|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/api_basics/api_basics_rest)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/intro_what_is_rest_api.htm)<br/>[詳細記事](https://qiita.com/y2-07/items/952e9d90d4dcfd666cf9)|
|BULK API|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/api_basics/api_basics_bulk)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.api_asynch.meta/api_asynch/asynch_api_intro.htm)<br/>[詳細記事](https://qiita.com/y2-07/items/6ba1b573b5644edc2bdc)|
|ストリーミングAPI|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/api_basics/api_basics_streaming)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.api_streaming.meta/api_streaming/intro_stream.htm)<br/>[詳細記事](https://qiita.com/y2-07/items/5079447975982c4cc279)|
|コールアウト|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/apex_integration_services)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_callouts.htm)|
|カスタムApexサービス|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/apex_integration_services/apex_integration_webservices)<br/>[Help(SOAP)](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_web_services.htm) [Help(REST)](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_rest.htm)|
|プラットフォームイベント|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/platform_events_basics)<br/>[Help](https://help.salesforce.com/articleView?id=platform_events.htm&type=5)[詳細記事](https://qiita.com/y2-07/items/5079447975982c4cc279)|
|ワークフロー／アウトバウンドメッセージ|[Help](https://help.salesforce.com/articleView?id=customize_wf.htm&type=5)|
|トリガー／@futureメソッド|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/asynchronous_apex/async_apex_future_methods)<br/>[Help](https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_invoking_future_methods.htm)|
|Canvas|[Help](https://developer.salesforce.com/docs/atlas.ja-jp.platform_connect.meta/platform_connect/canvas_framework_intro.htm)|
|Salesforce to Salesforce|[Help](https://help.salesforce.com/articleView?id=business_network_intro.htm&type=5)|
|Salesforce Connect（Lightning Connect）|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/modules/lightning_connect)<br/> [Help](https://help.salesforce.com/articleView?id=salesforce_connect.htm&type=5)|
|データローダ|[Trailhead](https://trailhead.salesforce.com/ja/content/learn/projects/import-and-export-with-data-management-tools)<br/>[Help](https://help.salesforce.com/articleView?id=data_loader.htm&type=5)|
|ETL（ミドルウェア）|[参考ページ](http://iot-jp.com/iotsummary/iottech/bigdataanalysistool/%E3%83%93%E3%83%83%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%83%84%E3%83%BC%E3%83%AB-etl%E3%80%81esb%E3%81%AE%E4%BA%8B%E4%BE%8B/.html)|
|ESB（ミドルウェア）|[参考ページ](http://iot-jp.com/iotsummary/iottech/bigdataanalysistool/%E3%83%93%E3%83%83%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%83%84%E3%83%BC%E3%83%AB-etl%E3%80%81esb%E3%81%AE%E4%BA%8B%E4%BE%8B/.html)|

何となく把握するだけではなく、以下のポイントを覚えておきましょう。
これらを把握するだけでも次に読む[インテグレーションのパターンと実践](https://developer.salesforce.com/docs/atlas.ja-jp.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_intro_overview.htm)の内容とリンクするので整理し易いです。

- [ ]  インバウンド連携／アウトバウンド連携なのか？
- [ ]  同期／非同期処理なのか？
- [ ]  通信プロトコル（SOAP／REST／BAYEUX）は？
- [ ]  扱うデータ量はどの程度なのか？

これらの機能が**どのような仕組み**で、**どのような場面**で使用するのか、**何が出来るのか**を叩きこみましょう。

# 応用編：「インテグレーションのパターンと実践」を理解しよう

基礎知識が出来た所でいよいよ応用です。
[インテグレーションのパターンと実践](https://developer.salesforce.com/docs/atlas.ja-jp.integration_patterns_and_practices.meta/integration_patterns_and_practices/integ_pat_intro_overview.htm)を一度読んでみましょう。

ここで重要なのは以下のポイントに留意しつつ、知識を以下のポイントで**カテゴライズ**しながら読み進める事です。
**カテゴライズ**する事でアーキテクチャを**選択**する際にどの**カテゴライズ**が適しているのか
自分の頭の中から引き出しやすくなりますよ。
また、読み進める中で基礎知識を曖昧に記憶していたりする所が出てくるので、
戻りながらまた進めるという感じで繰り返しやりました。

- [ ]  基礎知識で覚えたAPIや機能がどのパターンに該当するのか？
 - リモートプロセスの呼び出し―要求と返信
 - リモートプロセスの呼び出し―ファイアアンドフォーゲット
 - バッチデータの同期
 - リモートコールイン
 - データの変更に基づくUIの更新
 - データ仮想化

- [ ]  推奨ソリューションの適合度は？
　最適、良い、準最適で記載されている箇所と理由。
　稀に選択肢に複数正解があり、どれが最適か考えて回答する場合もあります。
　ある程度、公式の適合度を把握していると安心ですよ。

- [ ]  エラー処理と回復方法は？
　アウトバウンドメッセージは再送処理があったり、ストリーミングAPIはアトミックIDで再取得、
　同期処理は呼び出し元がエラー回復を行うといった事を把握します。

- [ ]  考慮事項は？
　留意すべきガバナ制限を知っておく。
　例えば、SOAP APIで取得できるレコード件数は最大2000件、更新は200件とか。

- [ ]  セキュリティ関連の考慮は？
　双方向SSLやコールアウト時はApexCryptoで暗号化するとか。
　アウトバウンドメッセージはSalesforceのIPアドレスをホワイトリストに含めるとか。

- [ ]  各パターンでミドルウェアを利用する際に重要な要素は？
　リモートプロセスの呼び出しーファイアアンドフォーゲットはキューイングとバッファリングが重要とか。
　他にもイベント処理、同期伝送プロトコル、非同期伝送プロトコル、抽出・加工・読み込み等、どのパターンでどれが重要か。把握しましょう。

このフェーズでは、そのアーキテクチャで出来る事だけではなく、最も重要な事は**何が出来ないかを把握する事！**
世の中には万能なアーキテクチャは存在しません。常に**トレードオフ**の関係性があります。
実際に業務でアーキテクチャ設計する際にも**トレードオフ**を意識した**選択**が必要となります。
実際の試験も出来ない事を理解しておくことで選択肢から外せますからね。

# 発展編：先人達のブログを読み漁ろう

その後、Integratoin Architectureを取得した国内、国外のアーキテクチャの方々のブログを読みました。

- [Gemmaさんのブログ](http://www.alwaysablezard.com/salesforce/salesforce-certified-integration-architecture-designer-exam-tips/)
- [Maciejさんのブログ](http://www.alwaysablezard.com/salesforce/salesforce-certified-integration-architecture-designer-exam-tips/)
- [Chrisさんのブログ](http://www.salesforcechris.com/integration-architecture-designer-study-guide/)

ここでポイントなのは、先人達が記載した**ポイント**と自分の理解が一致しているか、体系化した知識に漏れがないか確認しましょう。
知らない箇所があれば基礎知識、応用に戻りポイントを抑えましょう。
私の場合、例えば差分データバックアップのインテグレーション方法などは先人達のブログから新たな方法を知る事が出来ました。

海外記事はGoogle先生に任せて日本語訳すればそこそこ読めますよ。
ファイアアンドフォーゲット＝発火と忘れ、Apex＝頂点なんて翻訳になりますが笑。
一部原文の方が理解しやすいでそこは臨機応変に切り分けましょう。
情報を入手しようとした場合、やはり圧倒的に海外の方が情報量が多いので情報入手源として外さないようにしましょう。

# 終わりに

これらの事を繰り返し行い、合格出来ました！（コンサルタントの方が難しかったかな）

試験としては難しい問題もありますが、出来る事、出来ない事を理解していれば
すぐ解答できる問題もたくさんあります。
その手の問題を逃さないよう、しっかり基礎知識はつけておきましょう。

また、実務においても、何となくの理解から確実な理解に繋がり
このスキルが今後の提案や構築にも活きてくるかと思います。