Salesforceからエンジニアになった人が学ぶWebシステムの基礎 〜序〜

# はじめに

## Salesforceエンジニアというキャリア

Salesforceというサービスはなかなか興味深いバックグラウンドを持っています。もともとは単なるオンデマンド型CRMサービスとして生まれたものでありながら、その上で十分なカスタマイズができるという点を売りにして、インテグレータやISVを含め数々のサードパーティの参入を促し、結果としてB2B SaaSの世界では屈指の巨大なエコシステムを築きあげました。

もちろんそれまでもソフトウェアパッケージはそれなりに複雑化していましたので、そういったパッケージを導入するために専門化したエンジニアという職種も一般的ではありましたが、コンフィギュレーションの枠に留まるものも多く、そうでない場合にはアドオンという形での開発が行われていました。

Salesforceが特徴的だったのは、彼らはSalesforce自身が動作するその独自のプラットフォームを早い段階から公開し、アドオンなどに関してもそのプラットフォーム上での開発・提供をより推奨していた点です。その結果、初期には参入者の獲得に苦しんだものの、長年の地道な活動を通じてエコシステムを作り上げていき、今ではSalesforceエンジニアはキャリアの１つとして確立するようになりました。各社が提供する研修や教育プログラムも充実してきていますし、市場のリソースとしても（市場成長のほうが大きくなかなか十分とは言えないですが）かなりの数を確保しつつあります。

## Salesforceエンジニアの感じる限界とキャリアの選択肢

しかしその中で、今では**Salesforceのプラットフォームしか利用したことがない、あるいはその中でのみスキルを積んできているエンジニアが少なくない数になってきています**。

これはSalesforceがプラットフォームの性質を多く有したうえでそのエコシステムに特化してエンジニアを育ててきたことが原因だと思っています。ただのパッケージのコンフィギュレーションであればエンジニアといってもその範囲で収まっていたでしょうし、あるいはプラットフォームとしての性質を持っていなければ、アドオン開発のためにはパッケージよりもう少し下のレイヤーで開発のためのスキルを地道に獲得する必要がありました。

いわば、**Salesforceエンジニアは、単なるコンフィギュレータと言うにはあまりにもエンジニアリング的要素が多くありながら、そのエンジニアとしてのバックグラウンドが促成的になっている**ことが多いのです。

筆者としては、この状況について概ね致し方ないと思っており、殊更に否定する意図はありません。また、エンジニアへの登竜門としてSalesforceプラットフォームから入ることについて、筆者としてはぜひ応援していきたいと考えている立場です。ただ、筆者自身は元々非Salesforceの世界でエンジニアとしての経験を積んできたためか、Salesforceからエンジニアとしてのキャリアを始めた人の多くがある段階から限界・壁に当たっているように見えるようになりました。

Salesforceエンジニアに限った話ではありませんが、よく「業務理解とシステム知識、どっちがエンジニアにとって重要か？」という議論がなされることがあります。個人の意見ではありますが、これはどちらかしか選べないというようなものでもなく、本来は両方ともちゃんと育てられるものでしょう。ただおそらく多くのSalesforceエンジニアにおいて、**システムに関するスキルを積み重ねていく方向の伸びしろについてあまり実感できず、あるいはアーキテクトレベルのエンジニアとの埋めがたいように見えるギャップばかりが目に付き、業務理解を強化する方面へのエンジニア生存戦略の選択を余儀なくされている**人が多いのではないかと思っています。

## トップ人材を排出できるエコシステムへ

このような状況は、いわゆるエンジニアのキャリアとして選択肢があらかじめ奪われているようなもので、あまり健全なものではないと考えています。また長い目で見てエコシステムにとっても良くないものだと思っています。１つのエコシステムとしての完成のためには、トップの人材がその中から育成できなければいけません。もし他プラットフォームで経験を積んだエンジニアの中途参入によってのみ成り立っているのであれば、そのエコシステムはまだ強固とは言えません。強引ながら野球に例えれば、**いつまでもメジャーからの助っ人が主体のプロリーグはまだ三流のリーグ**ですし、一流のリーグならばむしろ**メジャーリーグに人材を送り出せるようになって然るべき**なのです。

そのような視点から、今のSalesforceエンジニアのキャリアをより魅力的にするためには、自らの得たエンジニアリング知識のバックグラウンドを深く学ぶことのできる機会が重要なのではないかと考えました。逆に言うと、残念ながらおそらくそのようなコンテンツが現在は圧倒的に不足しています。促成的であること自体は許容しつつ（むしろそのようにエンジニアを促成できる事自体がプラットフォームの価値ですらある）も、振り返ったときに足場を実感できること。これが現在のエコシステムにおいて次に必要なものであるように考えています。

## 魔法の種を知る

Salesforceというサービスは魔法でいきなりできたわけでもなんでもなく、**結局は単なるクラウド上のWebシステムです**。そのサービスのほとんどが従来のWebシステムを作るときの方法や考え方で構成されていますし、またそのプラットフォームも同様です。そういう意味では、現代のWebシステムがどのような仕組みとなっているのか、またどのような考え方で作られることが多いのか、知っているのといないのとでは、Salesforceというサービスの解像度にかなり差が出ます。

みなさんが会社の先輩やアーキテクト的なスタープレイヤーに対してもしかしたら感じているかもしれない手の届かなさというのは、案外、単にそれをあらかじめ知っていたか否かだけだったりするかもしれません。

ただ、今から彼らの積んできた経験をトレースすることは、あまりにも遥かな道のりに見えてしまうのも事実でしょう。実際に彼らはそれなりの時間をかけて経験を積んできたわけですが、それを１からたどるのは今の時代には少しナンセンスです。**今はSalesforceという高速道路があり、その道を今まで走ってきたのですから、その道にあったアプローチがあるはず**です。

# 本記事の内容について

序論が長くなってしまいましたが、これから複数回に分けて、今のSalesforceエンジニアがよく直面している物事が、一般的なWebシステムにおいてどのようなもの・考え方がベースとなっているのかという観点から、いくつか記事を書いていきます。

このような切り口のコンテンツはあまりなかったのではないかと考えていますが、もしかしたら各企業内の教育プログラムで似たような取り組みはしているかもしれません。実際この記事も元々そのような目的（社内エンジニア向けの教育）ではあるのですが、オープンにしたいと考えています。これは、そもそもクローズドにすることで何かプラスになるわけでもないのと、先に述べた通り、このエコシステムを強化するためにはこのようなコンテンツを増やす必要があると考えたからです。

もちろん本記事内容については色々な不備（たとえば不明な省略・行き過ぎた簡略化・個人的な勘違い・不見識による錯誤）があるかもしれません。それもオープンにすることによって指摘を受けられる可能性があるのもオープンにすることのメリットであると考えます。ただもちろん、徒に困惑させるようなレベルの品質にはしたくないなという思いは持って公開していく予定です。


## 本記事で「主張していない」こと

本記事およびこれから記載される一連の記事では、以下のようなことが言いたいわけでは**ない**です。

### Salesforceエンジニアのキャリアは将来性がなく問題だ

将来性がないと言っているわけではもちろんないです。しかしながら将来性に不安を感じている人はもしかしたら結構いるのでは、という仮説から、そのような不安の一部でも取り除けるようにこのような記事を書いています。

ただ、このキャリアを選べば順風満帆で全く問題ないと言いたいわけでもないのです。このキャリアにおいて本来目指せるものはもっと幅広く高くできるはずなのにもったいないな、という問題意識はあります。

### Salesforceエンジニアは一般的なWebシステムの作り方をちゃんと学んで１から作れるようにするべきだ

むしろ真逆で、１から作れる必要はほぼない（少なくとも必要でなくなるべき）と考えています。これは現代の多くのプログラマが機械語を使ってプログラムを書く必要がないのと同様で、上のレイヤーにおいては下のレイヤーの知識を必須としないで済むように進化してきたのであり、それが正しいものだと信じています。

しかし時にそのレイヤー間の関係がどのようになっているのかを知っていることが役に立つケースはあります。今回の記事はそういう話ではあるのですが、Salesforceの場合は一般的なWebシステムと完璧にレイヤーとして分離されているわけでもなく、実際のところかなり絡み合っています。なので関係性の理解というのはより重要になってきます。

### Salesforceエンジニアは業務知識にスキルを偏重するのをやめるべきだ

先に述べたように、業務知識とシステム知識はエンジニアのスキルとして排他なものではありません。もちろんその比率として業務に多くの比率を置きたいと思う人は多くいるかも知れません。筆者が感じているのは、そこにおいてシステムに関する知識・理解をより深めて求めていくというキャリアの選択が取れない状況になっているのでは、ということであり、もしそうなのであればそれは不健全だろうというものです。

### SalesforceエンジニアはIPAの基本情報／応用情報資格くらいは取るべきだ

そのような資格を必ず取るべき、とは思いません。ただ、もしかしたらそれらの資格あるいはいくつかの上級資格に出てくるような話にピンとくるくらいの感覚を（結果的に）得られることを期待している向きはあります。少なくともSalesforceエンジニアが現在対面している世界と、これらの資格が対象としている世界とをまったく別世界の話にならないように繋げることはできると考えています。

# 各記事へのリンク

- [Salesforceからエンジニアになった人が学ぶWebシステムの基礎 〜データベースのインデックスと実行計画〜](https://qiita.com/stomita/items/b8e2e1927cc29686f214)
- Salesforceからエンジニアになった人が学ぶWebシステムの基礎 〜排他制御とロック〜 (11月予定)
- Salesforceからエンジニアになった人が学ぶWebシステムの基礎 〜アクセス制御〜 (12月予定)