この記事はCalendar for Akerun | Advent Calendar 2021 - Qiita の25日目の記事です。
開発部VPoEのNonです。
エンジニアの採用が難しい時代になってきましたが、良い組織を作るためには、求めるエンジニアの採用基準を明確にし、ミスマッチのない採用をしていかなければなりません。
ベンチャー企業の多くは、Webエンジニアを採用する際に、フルスタックエンジニアを求めることが多いと思います。
フルスタックエンジニアを採用する際に、どのような観点でスキルを見抜けば良いかお話したいと思います。
フルスタックエンジニアとは?
まず、フルスタックエンジニアという言葉から、皆さんはどんなエンジニアを想像しますか?
「フロントエンド、バックエンド、インフラを一通りできる人」でしょうか?
もしくは、 「 なんでもできる優秀なエンジニア?」でしょうか?
多くの人が、フルスタックエンジニアという言葉を使いながら、あまり具体的な定義をすることなく使っているケースが多いように感じます。
基準が曖昧なままですと表面的なスキルだけ見て、必要なスキルが備わってない人を採用してしまうことになってしまいます。
フルスタックという言葉の意味で考えると
「フルスタック = 複数の技術分野についての知識や技能に精通していること」
となります。
ただ、採用側が期待することは、どんな技術を持っているかよりも
「一人でスクラッチでWebシステムを構築できる」
ということの意味合いの方が強いのではないでしょうか?
Webシステム開発に必要な要素
Webシステムを構築するためには、いくつかの工程を経ていく必要があります。
- 要件定義
- 設計
- 実装
- テスト
- リリース
また、忘れてはならないのが、リリース後の運用保守です。
システムは、作って終わりではなく、最初にリリースした後は、利用者の要望に応えるために追加開発したり、不具合やインフラの問題で起きる障害対応なども必要となります。
システム開発における一連の要素を絵にすると下記な感でしょうか。

これをもっと細かく分類していくと
| カテゴリ | 項目 |
|---|---|
| 開発スタイル | ウォータフォール |
| アジャイル | |
| プロジェクト管理 | 進捗管理 |
| タスク管理 | |
| 見積管理 | |
| 外注管理 | |
| 予算管理 | |
| 契約管理 | |
| 要件定義 | 業務分析 |
| ユースケース | |
| システム構成図 | |
| 機能要件 | |
| 非機能要件 | |
| 概要設計 | |
| 設計 | 設計手法 |
| 基本設計 | |
| 詳細設計 | |
| アーキテクチャ設計 | |
| DB設計 | |
| インフラ設計 | |
| 運用設計 | |
| 実装 | CRUD |
| モジュール化 | |
| コードレビュー | |
| セキュリティコーディング | |
| 非同期処理 | |
| ファイルアップロード | |
| インポート・エキスポート | |
| 認証・認可 | |
| メール送信 | |
| キャッシュ | |
| キュー | |
| 外部API連携 | |
| バージョンアップ | |
| バッチ | |
| テスト | テストメソッド |
| セキュリティ監査 | |
| リリース | リリース手順 |
| 運用 | 情報セキュリティ管理 |
| バグ管理 | |
| トラブルシューティング | |
| 障害エスカレーションフロー | |
| インシデント管理 | |
| 構成管理 |
技術よりの観点で見ていくと
| カテゴリ | 項目 |
|---|---|
| 言語 | フロントエンド |
| バックエンド | |
| DB | |
| OS | Linux |
| ミドルウェア | Webサーバー |
| DB | |
| NoSQL | |
| Cache | |
| キュー | |
| 検索エンジン | |
| メールサーバー | |
| ファイルサーバー | |
| コンテナ | |
| ストレージ | |
| インフラ | ネットワーク |
| SSL | |
| DNS | |
| 負荷分散 | |
| 攻撃対策 | |
| 障害対策 | |
| プロキシ | |
| CI/CD | ビルド |
| CI/CD | |
| イメージ管理 | |
| バージョン管理 | ソース管理 |
| ブランチモデル | |
| Pull Request | |
| Merge | |
| パフォーマンスチューニング | プログラム |
| クエリ | |
| ミドルウェア | |
| ディスクIO | |
| スケールアップ | |
| スケールアウト | |
| プロビジョニング | ansible |
| Terraform | |
| webpack | |
| npm | |
| サーバー運用 | 死活監視 |
| リソース監視 | |
| プロセス監視 | |
| トラフィック監視 | |
| ネットワーク監視 | |
| ログ監視・ログ管理 | |
| パフォーマンス監視 | |
| テスト | ユニットテスト |
| E2Eテスト | |
| 負荷テスト | |
| セキュリティ | |
| 開発環境 | Docker |
| IDE・エディタ | |
| Lint | |
| git | |
| ターミナル |
これ以外にももっと要素はあるかもしれませんが、ここに挙げたようなことを面接で確認することで、その人のスキルレベルが見えてくると思います。
全ての分野で高いスキルを持っている人は、少ないと思いますし、人によって、スキルのバラつきも違ってきますので、現在の組織の状態に合わせて、どの分野でどの程度のスキルが必要かチームメンバーと意識合わせをしておくことが大切です。
ビジネスマンとしての仕事力
先に、「一人でスクラッチでWebシステムを構築できる」フルスタックエンジニアを採用することについてお話しましたが、実際、一人でシステム開発をすることはほとんどありません。
企業で開発するシステムは、一人で構築するにはボリュームが多く時間がかかりすぎるため、チームで開発することが求められます。
これまでは、開発に求められるスキルについて見てきましたが、チームで仕事を円滑に進めるための「仕事力」もとても重要です。
主体性、計画力、実行力など、仕事力を生み出すための要素も確認しましょう。
(参考)社会人基礎力とは?その必要性や鍛え方などを解説 www.i-learning.jp
まとめ
- Webエンジニアを採用する際には、技術要素を細かく分解し、自社に必要なスキルを持っているかを確認すること。
- 技術だけではなく、チームでワークするための仕事力も備わっているか確認すること。
エンジニア側もこういった観点で見られているということを意識すると、自身のスキルアップも効率的に行えるのではないでしょうか。
株式会社フォトシンスでは、一緒にプロダクトを成長させる様々なレイヤのエンジニアを募集しています。 hrmos.co
Akerun Proの購入はこちらから akerun.com