IT業界と関わっている人や開発現場で働く人は「フルスタック」という言葉をよく聞くと思います。「フルスタック(full-stack)」という言葉の意味とフルスタックエンジニアになる方法について軽く説明いたします。
フルスタック開発者(フルスタックエンジニア)とは
フルスタック開発者は一般的に、フロントエンドからバックエンドまですべてのソフトウエアスタックを理解している開発者のことを言います。フロントエンド開発は、クライアントサイド、一般的にhtmlとJavaScript等を使ってWebブラウザで動作する機能と外観(UI、Webやモバイルアプリケーション)を開発することを言います。そしてバックエンド開発は、JavaやSQLなどを使用しサーバーサイドで動作する機能(アプリケーションで必要なDBやビジネスロジックなど)を開発することです。
そしてSI業界ではフロントエンドとバックエンドの両方を開発します。以前は、開発者と言えばフロントエンドとバックエンドを両方やっていましたが、ユーザーの求める要求事項の期待値が高り、フロントエンド機能がより専門的になったことで、スキル難易度が高まり2つのポジションが分離されました。
SI業界ではフロントエンドとバックエンドの区分があまりされない
ただし、一般的なフロントとバックの区分とSI業界での区分は少し考え方が異なります。一般的にバックエンドとフロントエンドを分けるという意味は、フロントエンドがバックエンドと完全に独立されていることを意味します。
フロントエンドは、フロントエンドのフレームワークであるangular、react、vuejsなどを利用してDOM(Document Object Model)を制御し、バックエンドとはJSON(JavaScript Object Notation)でデータを交換します。つまり、HTMLをフロントエンドで作成します。バックエンドはデータを送受信する役割のみになります。このような方法をクライアントサイド レンダリング(CSR)と言います。
クライアントサイドレンダリング方式では、バックエンドは同じJSONデータフォーマットを使用するため、フロントエンドだけでなく、他のアプリやサーバーとも通信しやすくなり、システムの拡張が容易になるというメリットがあります。
その一方でSI業界では、未だフロントとバックが互いに強く結びついている過去のシステムアーキテキチャーが多いです。サーバーが最終的にWebブラウザで表示するHTMLを作成し、クライアントが表現する方式です。このような方式をサーバーサイドレンダリングと言います。一部の項目はjQueryなどで表示制御したりやデータを受け取りますが、基本的にはサーバーがhtmlを作成するサーバーレンダリングになります。
サーバーレンダリング方式が多い理由は、システムを拡張することがあまりないからです。もちろん要件の追加等はありますが、いきなり「アプリ化してください」などとんでもない拡張はSI業者には要求できないです。アプリが必要な場合は、アプリ開発として別発注になります。
SI業界でフロントとバックを区別しない理由
さらに、バックエンドとクライアントを完全に分離して一般ユーザーに見せる画面をクライアントサイドで制御する場合は①性能的な問題②SEO問題③セキュリティ問題も解決しなければいけないです。
- 性能的な問題とは、HTMLレンダリングをクライアント側で行うため、画面の応答速度がユーザー端末の仕様に依存してしまうことです。
- SEO(検索エンジン最適化)問題は、基本的に検索エンジンは静的html構造はよく拾いますが、JavaScriptが動的に作り出す構造をきれいに拾うという保証がなく、コンテンツがあるのに検索エンジンで検索ができななくなります。
- セキュリティ問題は、クライアントに露出された機密情報の場合、情報漏洩の可能性があるという問題です。単純にクッキーだけを開いても、クッキー内の値はすべて確認できるし、上書いてサーバーに転送することもできます。クライアントサイドレンダリング方式の場合、サーバとの通信に必要な情報だけでなく、レンダリングに必要な情報までクライアント側で保持するからです。
だから、未だSIではサーバーレンダリング方式を使用することが多いです。
本当のフルスタック開発者になるために必要なスキル
このような理由で、(開発を知らない)企業や人はフルスタック開発者と言えば、「フロントからバックまですべて一人でできる人」と思う人も多いです。しかし、本当にすべて一人でできる フロントからバックまですべて一人でできる開発者を育てるにはすごく費用が掛かりますし、なかなかいないのが現状です。そして実際には広く浅く知ってる人(フロントもバックも知ってるけどちゃんとしたものは作れない)がフルスタック開発者として働いていることが多いです。
現実的には、スタック全体をマスタしている神レベルのフルスタック開発者ではなく、「企画から配布まで製品やサービスの開発プロセスを理解しており、各プロセスでの基本的なスキルを持っている人」という意味ではないかと思います。具体的には以下のようなスキルを幅広く理解し、少なくとも一つ以上は専門的なスキルを持っているような開発者を目指すのが良いです。
- HTML/CSS
- JavaScript
- バックエンド(Node.jp、Python、Ruby、Javaなど)
- DB(MySQL、Oracle、MongoDBなど)
- Webアプリケーションアーキテキチャー
技術的なスキルと汎用的なスキルである、バージョン管理、アルゴリズム、データ構造等の知識も必要です。