フルスタックエンジニアは目指すものではない。
フルスタックエンジニアは目指すものではなく、自然となっているものだと思っています。フルスタックエンジニアを目指すのもやはり精神を消耗させていきます。
フルスタックエンジニアというのは響きはすごく良いのですが、落とし穴がありまくりです。未経験からエンジニアになる人も、すでにエンジニアで他の企業に転職するヒトも気をつけてください。
フルスタックエンジニアになりたいと思ってたけど、だめなの?
これははっきりいいますが、フルスタックエンジニアに憧れるのは間違っていると思います。ほとんど例外なくフルスタックエンジニアは目指すものではなく、自然となっているものです。
私もフルスタックエンジニアを目指すスキルマップを会社が推奨していて、苦労した経験があります。
フルスタックエンジニアとは?
フルスタックエンジニアは高いレベルで、何でもできるヒトという印象ですが、、、
こちら引用してきたものも確認しておきましょう。
フルスタックエンジニアとは、通常はそれぞれに専門の技術者がいて分業されるような複数の技術分野についての知識や技能に精通し、一人でシステム開発や運用を行なうことができる技術者のこと。対象分野によって求められる技能の組み合わせ(スキルセット)は異なる。
なので、フルスタックエンジニアをもう少しわかりやすくまとめます。
- 保守運用する事が可能なスキルの組み合わせを持っている。
- 機能開発することが可能なスキルの組み合わせを持っている。
もう少し、具体的に掘り下げていきます。
保守運用することが可能なスキルの組み合わせ
例えば、WordPressをレンタルサーバーでホストしているメディア系のシステムの運用であれば、
- WordPressのセキュリティ面の知識
- プラグインやWordPressの脆弱性の情報をキャッチして更新する
- ユーザーのアクセス状況に応じてサーバーの増強や負荷軽減対策
このようなことが要求されると思います。
例えば、AWSで運用しているような止まったら困るようなシステムの運用であれば
- システムのネットワークレベルでのセキュリティ面への対応
- AWSのサービスのバージョンアップへの追随。
- WebApplicationFirewallなど、SQLインジェクションなどのアプリケーションの脆弱性への対応
- ユーザーのアクセス状況に応じてサーバーの増強や負荷軽減対策
- データセンターの障害が起きたとき用に複数のデータセンターへのデプロイやFailOver
この他にも、継続的に改善を続けていくなら、自動テストやアプリケーションを変更したときに自動的にサーバーに反映などもあります。
機能開発が可能なスキルの組み合わせ
例えば、WordPressをレンタルサーバーでホストしているメディア系のシステムの機能開発であれば
- WordPressをカスタマイズできるようなWordPressの知識
- ブロックエディターを開発できるReactやJavascriptの知識
- HTMLとCSSの知識
- MySQLの知識
この辺がわかると、基本的な機能開発ができると思います。
例えば、AWSで運用しているような止まったら困るようなシステムの機能開発であれば
- 対象システムのデータベースに関する知識
- フレームワークを使っていたらその知識
- APIを使用していたらそのAPIに関する知識
- HTMLとCSSとJavascriptの知識
- ログインなどがあれば、認証などに関する知識
このように、フロントからデータベースとその中間にあるものに関する知識ですね。
フルスタックエンジニアまとめ
フロントからデータベースまでの間に関する知識を持っていること。
サーバーを稼働させているインフラについて理解していること。
ユーザーのアクセス数に合わせてスケールできる。
最低限のセキュリティは必ず対応する。
なぜフルスタックエンジニアを目指してはいけないのか?
フルスタックエンジニアは、一人でサービスを機能開発して運用をするためのエンジニアです。フルスタックエンジニアを目指すという目標を立てた場合、いろんな技術を広く学んでいく必要があります。
スキル | 目標 |
---|---|
HTML、CSS | デザインを反映できるくらいのHTML、CSSの理解力 |
Javascript | UXを向上させるためのJavasscriptのインタラクションを実装できる |
データベース | 要件を抽出してテーブルに表現できる |
... | |
React, AWS, WordPress, Vue, tailwind |
全部学びますか?無理でしょう。。。
エンジニアは次々に出てくる技術の特徴を捉えてそのときに最適なものを選び取れたら十分です。フロントだけでも、React, Next.js, GraphQLとかあるのにAWS、GCPも次々とサービスも出てくるし、データベースもポンポン出てきます。
もう無理な感はしてきたのでないでしょうか?でも一応ちゃんと考えてみました。
ヒトとは忘れる生き物
まずは、HTML、CSSを一ヶ月かけて学びました。そのあとJavascriptを一ヶ月かけて学びました。その後にデータベース周りやAPIを2ヶ月学んだとします。そのような開発を4,5回繰り返したとします。期間があくことによって、覚えては忘れて覚えては忘れて、ドキュメントを見て実装はできるけれどの状況が繰り返されます。その状態では、動くけれど専門性はかなり薄い状態になってしまうでしょう。
専門性とは、たとえばHTMLやCSSではその中のSEOに良い書き方や、画像をレスポンシブに対応させるための画像セットの属性や、何度も参照されるsvgの効率の良い読み込みや、遅延ロード、リソースの先読み、ターゲット属性、最近のWEB技術はユーザーへの体験を向上させるために様々な機能が追加されています。それを効果的に使うことで、CVR向上や効率よく開発ができます。そして、チーム開発をしているのであれば、そのヒトに聞けばOKという状況が生まれるので、それぞれが得意なところを持って強いしなやかなチームができるでしょう。
逆に言うと専門性のないチームは、なにか専門的なことをやろうとしたときにみんな同程度の知識しかなく調べるのにもじっそうするのにも時間がかかったりします。そして誤った実装をすることもしばしばあります。
フルスタックエンジニアとは、とりあえずできるけど細部には手が届かないエンジニアであると思います。すくなくとも、4,5年ではそこそこ実装できるが関の山だと思います。
エンジニアにはここまでできたら完璧というものはない
CSSにしても、CSSのアニメーションや、ResetCSS、CSSフレームワーク、PostCSS、Sass、Less、CSS設計(FLOCSS、SMACS、etc)などメンテナンス性やより良い書き方ををまなぼうとするとその分野だけで、半年から年単位で時間かかるでしょう。
Javascriptであればブラウザで使うJavascriptや、ESM、WebPack、UIフレームワーク(React、Vue、AngularJS、jQuery)とこちらは2,3年かかっても常に新しいものが出てくるので完全に学び終えることなどできません。
では、エンジニアにできることは何かというと、自分のもっている知識の中でメンテンナンス性に気をつけて、要件を満たせる実装をするということです。
エンジニアとして複数の技術を身につけようというのは非常に難しい
・複数の技術をローテーションして学んだり、並行して学ぼうとしてもどっちつかずになりがちだし非効率
・特定の技術に着目して学んでだとしても、どの領域も専門職ができるくらいには深い
なので、何も考えずにフルスタックエンジニアを目指す道をあるきだすと、気づいたら器用貧乏になっていて、誇れるものが何も無いエンジニアになってしまうことがあります。事実私の周りにはそんなエンジニアが多くて、転職活動に困っていたり、強みがないので転職したいけど躊躇するヒトが本当に多かったです。
フルスタックエンジニアを目指してもなんとかなる技術スタックと環境
これは、一言でいうとフルスタックフレームワークを使用しているような職場では、フルスタックエンジニアを目指してもいいと思います。
フルスタックフレームワークの代表格といえば、Rails(Ruby)、Laravel(PHP)、Django(Python)ですね。このフレームワークとそこに内包されているシステムをそのまま使っているようなところでは、フルスタックエンジニアを目指せる環境だと思います。Railsに詳しくなる=(DB設計ができる、フロントの最適化ができる、アプリケーショのセキュリティ)が担保できている状態になるためです。この環境であれば短いスパンでフロント、DB設計、認証や、セキュリティをイテレーションできるのでマーケティング分野などにも手が出せるでしょう。
ただ、フルスタックフレームワークをつかってても、APIが変に分離されてたりすると、またAPI周辺の知識やHTTPの知識なども増えるので辛い道のりでしょう。
フルスタックエンジニアを目指してキャリアにならない技術スタック
ちなみに一番過酷な道のりは、フルスタックフレームワークを使っておらず、マイクロサービス化されているサービスが一番つらいと思います。
例えば、フロントは一つのサーバーでBackendForFrontendのAPIが1つ、そして、裏に決済用のAPI、商品取得用のAPIと別れていた場合、この場合の開発速度はどうなるでしょうか?
一つの機能開発するのに、この分野の全てに関わる開発をする場合、商品取得用のAPIのデータベースのテーブルの確認と開発、定義書の更新。商品取得用のAPIの確認と開発、定義書の更新。決済取得用のDBの確認、定義書の更新。決済取得用のAPIの開発、定義書の更新。そして、BackendForFrontEndのAPIの開発。APIの定義書があればそれぞれの更新。レビューフローを必ず通さなければいけない開発組織であればレビューフローを通す。各分野にテストが必要であれば、はい。地獄ですね。これで成長できるところがあるかというと、技術的に学べるところはなにもないでしょう。だってただのAPI開発ですもの。これを永遠と繰り返すても、似たようなことを時間をかけるだけなので全く成長できませんし、なんちゃって器用貧乏エンジニアの出来上がりです。何かを深めようと思ったらプライベートを犠牲にして成長することを望みましょう。
転職する際に気をつけるべき求人
RailsやLaravelやDjangoなど、フルスタックフレームワークを使わずにフルスタックエンジニアを募集している求人はちょっと怖い。
フルスタックエンジニアに自然となる環境
新規事業開発や請負系のフリーランスですね。
新規事業開発は常に仮設と検証の繰り返しで高速な開発が求められます。そういうときはコミュニケーションコストも最小限にするべきですし、大抵の場合はリソース不足で一人でやらざるを得ません。
あとは、請負のフリーランスは自信でどんな技術を使うかまで一任されているので、こちらも見積もりに見合うシステム開発をしなければいけません。なので、要件によってはワードプレスを使ってシステム構築したり、なれているフルスタックフレームをもっておいて高速に開発する必要があります。ほかにも最近は、ローコードやNoCodeのウェブ開発の選択肢が増えているのでそちらで対応する方も多いです。
まとめ
フルスタックエンジニアは、かっこいい称号でもなんでもありません。望んでなるようなものでもないですし、泥臭さのはてに自然とならざるを得なかったものです。企業の採用者はそこらへんを勘違いして求人を募集しているので、フルスタックフレームワークをちゃんと使っている現場でない限り、何でもできるヒトを使い潰そうとしているだけなので就職は遠慮しておいたほうが良いでしょう。どこから目線で言ってるんだろ。
Discussion