サーバーエンジニアとは何だろう、仕事内容や将来性、需要、年収が知りたいといった悩みを解決します。サーバーエンジニアは、どちらかというとミスが許されなく職人気質性が求められ、人によってはきついと感じることも。今回は、サーバーエンジニアについて網羅的に詳しく解説していきます。
1. サーバーエンジニアとは
サーバーエンジニアとは何を指すのか、どんな仕事内容なのかを解説します。
今回は、
- サーバーエンジニアの定義
- サーバーエンジニアの仕事内容
それぞれ見ていきましょう。
1.1 サーバーエンジニアの定義
サーバーエンジニアとは、サーバー側で動作するシステムの構築や管理を担当するエンジニアです。例えば、Webアプリケーションや各種システムで「ユーザーの目に見えない裏側の処理」を担当します。
Webアプリケーション開発などWeb系開発の現場では、HTML/CSS/JavaScriptの開発を担当するエンジニアが「フロントエンドエンジニア」、裏側の処理を担当するエンジニアが「バックエンドエンジニア」と呼ばれます。
また、サーバーサイドエンジニアと呼ばれるエンジニアもおり、会社によって呼ばれ方が異なりますが、サーバーサイドエンジニア=バックエンドエンジニアと同義に扱われることがあります。詳しく述べると、バックエンドエンジニア=Web系開発の裏側を担当し、サーバーサイドエンジニア=サーバー側で動作するシステムの構築・管理を担当します。
サーバーサイドの方がより広義になります。
バックエンドはWEB系企業に使われることが多く、フロントエンドに対して使われています。
一方で、サーバーサイドは基幹系企業に使われることが多いです。
フロントエンドとバックエンドエンジニアの違いについては、こちらの記事を参照してください。
1.1.1 サーバーエンジニアとネットワークエンジニアとの違い
ネットワークエンジニアの仕事は、ネットワークの設計、構築、運用、保守で、サーバー同士をつなげるネットワークを構築することが主な仕事で、ルーターやスイッチといった機器を扱います。ネットワークエンジニアがつなぐサーバーの構築・保守・管理がサーバーエンジニアの仕事になります。
1.1.2 サーバーエンジニアとインフラエンジニアの違い
インフラエンジニアを語る前にインフラとは何かについて解説します。
インフラとは、ネットワーク、パソコン、サーバーなどのハードウェア、そのハードウェア上で動くOS、ミドルウェアのソフトウェアなどを総称してITインフラと呼びます。
インフラを扱うエンジニアが「インフラエンジニア」で、業務範囲はサーバーエンジニアよりも広義です。ネットワークエンジニアとサーバーエンジニアを合わせて「インフラエンジニア」と呼ぶこともあり、インフラエンジニアの役割はネットワークとサーバー、ハードウェアなど様々なものにまたがってきます。
1.2 サーバーエンジニアの仕事内容
サーバーエンジニアの仕事内容は主に以下の4分野に分かれています。
- サーバーの設計
- サーバーの構築
- サーバーの運用・保守
- システム開発・運用
それぞれ詳しくみていきましょう。
1.2.1 サーバーの設計
設計フェーズでは、サーバー上で動かすシステムの要件に合わせて下記の事項を決定します。
- サーバー等の機器(CPUや記憶領域、メモリの選定含む)
- OS・ソフトウェア
- ユーザーやディスク領域、OSパラメータ値などの設定値
- サーバー利用における運用方法、手順
サーバー環境に合わせて、動作スペックや処理能力、運用・保守性能、設置場所の通信速度や電源容量などを検討してサーバー台数を決め、最適なものを選定します。
特に大規模システムの場合、サーバーへの要求仕様やシステムを安定稼働させるための環境のハードルも高い傾向があります。
また、設計時には運用コストを考慮する必要もあり、例えば、システム規模に対してオーバースペックなサーバーを構築すれば予算と乖離する問題も起こりえるため注意が必要です。
1.2.2 サーバーの構築
構築フェーズでは、設計に基づいて実際にサーバーを作り上げていきます。
- サーバーの組み立て、設置
物理サーバーの場合、ラックへの取付やLAN等のケーブル結線など、実際の組み立て・据え付け作業を行います。クラウドや仮想サーバーの場合にはこの作業は発生しません。
- OSインストール・設定
空の状態のサーバーにOSをインストールしてから、ユーザ・領域・権限管理の設定をします。
- ソフトウェア・ミドルウェアのインストールと設定
Webサーバーやデータベースをはじめ、各種ソフトウェアのインストールと設定、チューニング作業をします。
- テスト
サーバーの起動・停止、想定どおりの動作をするかなどの動作確認をし、続いて、負荷テスト、障害時の切替テスト、バックアップ・リストアのテストなどを実施します。
運用時のシステム停止を未然に防ぐためテストの段階で厳しいチェックを行い、24時間365日のシステムの連続稼働に対応します。
1.2.3 サーバーの運用・保守
運用・保守フェーズでは下記の2つの業務がメインとなります。
- 監視業務
アプリケーション側のエンジニアと連携を取りながらサーバー上で稼働中のシステム監視を実施します。
- 障害対応
トラブル発生時の原因解明と処置
上記以外にも、次のような業務があり、日々実施するものもあれば必要に応じて行うものもあります。
- システムの動作環境を最適化するためのパフォーマンスチューニング
- セキュリティチェック、ウイルス対策
- ファイルやアプリのバックアップといった日々のメンテナンス作業
- サーバー等の機器・OS・ファームウェア・ソフトウェアに脆弱性が発見された場合の更新作業や故障発生時の部品交換
- 一定期間が過ぎた機器・部品のチェックや交換
サーバーダウンを回避するため、運用・保守作業は通常24時間365日休まず対応する事が多いです。オンプレミスの環境では交代勤務での監視業務や、障害時の対応では昼夜を問わない復旧作業が必要なケースもあります。
1.2.4 システム開発・運用
基幹系企業ではオンプレミスのサーバー構築や管理、保守がメインとなることも多いですが、Web系企業ではサーバーサイド=バックエンドとしてサーバーの設計・構築・保守だけでなく、データベース構築やWebアプリケーション開発のサーバーサイドのプログラミングなどを担当することも多いです。
2. サーバーエンジニアに必要なスキル・適正
サーバーエンジニアに必要なスキル・適正は多岐に渡ります。
主に必要とされるスキルは以下の通りです。
- サーバー関連の基礎知識
- プログラミングの知識
- ヒューマンスキル
それぞれ見ていきましょう。
2.1 【基礎編】必要なスキル・適正
サーバーエンジニアを名乗るためには、まずサーバー関連の基礎知識は欠かせません。
今回は、
- サーバーOS
- ミドルウェア
- サーバー仮想化
- クラウド
それぞれ見ていきましょう。
また、最近ではAWSやGCPなどのクラウドサービスの普及により、影響力は薄れてきましたが、古い参考書などではLAMP環境の構築がスタンダードとなっており、AWSでLAMP環境を組むこともあるので、LAMP環境について理解をしておくことは、AWSやGCPなどのクラウドサービスの理解にも繋がります。
LAMP環境について詳しく知りたい方は以下の記事も参考にしてください。
2.1.1 サーバーOS
サーバーOSは大きく3つに分けられています。
- Windows
- Unix系
- Linux系
Unix系であればAIXやSoarisなど、Linux系であればRedHat Linux、Ubuntuなどが挙げられます。
サーバーエンジニアを目指すのであれば、業務系サーバーで多く利用されているLinux系のOSについて深く勉強しておくと良いでしょう。その際はLinuC(Linux技術者認定)など資格の取得を目指すことで、知識も同時に身に着けることができます。
2.1.2 ミドルウェア
ミドルウェアとは、コンピュータを構成する要素の一つで、処理を行うアプリケーションと制御をするOSの中間部分のソフトウェアのことです。ミドルウェアは商用ミドルウェアやオープンソース問わず、幅広い知識が必要となります。
具体的には
- Webサーバー(Apacheやnginxなど)
- アプリケーションサーバ(Java EEやIISなど)
- データベース管理サーバ(OracleやMySQLなど)
上記の知識は学習するようにしましょう。
2.1.3 サーバー仮想化
サーバー仮想化とは、物理的な1台のサーバー上で、複数の仮想的なサーバーを運用することを言います。具体的には、物理的なサーバーのプロセッサ・メモリを分割して、仮想サーバーに割り当てて運用します。
サーバー仮想化の手法としては2種類あり、
- ホストOS型
- ハイパーバイザー型
ホストOS型は、ホストとなるOS上で仮想化ソフトウェアを使い、別のゲストOSを運用する方法です。ハイパーバイザー型は、ハードウェア上にハイパーバイザーと呼ばれる仮想化ソフトウェアを動かして、ハイパーバイザー上で複数のゲストOSを運用する方法になります。
2.1.4 クラウド
現在では、AWSやGCPのようなクラウドサービスが普及してきました。クラウドとは、「ユーザーがインフラやソフトウェアを持たなくても、インターネットを通して、サービスを必要な時だけリソースとして使えるサービス」のことです。クラウドはクラウド・コンピューティングとも呼ばれます。クラウドサービスの普及で、オンプレミスに比べて自前でサーバー構築などが不要、維持コストもかからないといった点がメリットになります。
2.2 【システム開発編】必要なスキル・適正
サーバーエンジニアには、システム開発に必要なプログラミング言語の知識も必要です。
2.2.1 Ruby
Rubyはオブジェクト指向型のプログラミング言語です。Rubyがサーバーサイド開発に適している理由としては以下の3つです。
- コードがシンプルかつ高機能
- 「Ruby on Rails」を初めとするフレームワークやライブラリが豊富
- 日本人が開発した言語ということで、ドキュメントが豊富
Rubyは便利なライブラリ・フレームワークが豊富で、例えばDeviseというライブラリを用いることでログインや新規登録に関する機能を簡単に実装することが可能です。また、日本人が開発した言語であり、日本語の資料が豊富です。そのため、疑問点やエラーが生じてもインターネットで検索するだけですぐに解決できる可能性が高いです。
Rubyについて詳しく知り方は以下の記事も参考にしてください。
2.2.2 Java
JavaもRubyと同様にオブジェクト指向型のプログラミング言語で、サーバーサイド開発に適した言語です。 適している理由は以下の通りです。
- 高い堅牢性を持つ言語で、大規模なシステムや業務システムなどの開発に適している
- コンパイラ言語であるため、実行速度が早い
- ライブラリやAPIが充実している
Javaは開発当初からセキュリティを考慮された設計がされており、安定性が高く銀行や証券会社など特に堅牢性が求められるシステム開発に向いています。また、コンパイラ言語であるJavaは処理速度がトップクラスに早いのが特徴です。
ライブラリやAPIも充実しており、画像編集なら「OpenCV」、グラフィックなら「JavaFX」、APIなら「日付処理」「データベース処理」など目的に応じたライブラリやAPIを活用することで、効率良く開発することができます。
Javaの開発環境に必要なものは、JDKと統合開発環境(IDE)の2つになります。
実際に開発環境の準備から、簡単なコードの作成までの手順を以下の記事に示してあります。参考にしてください。
2.3 【ヒューマンスキル編】必要なスキル・適正
サーバーエンジニアになるために必要なヒューマンスキルは主に2つです。
- 絶対的な正確さ
- 職人気質
基幹系の業務システムやアプリケーションを手がけるサーバーエンジニアは、どんなミスも許さないといった完璧主義の人に向いています。セキュリティが重視されるため正確性が求められるでしょう。
スタートアップ系であれば、少数精鋭のメンバーで構築されているためスピード感のある開発が求められます。そのため、何ごとにも素早く臨機応変に対応できる力が必要になります。
3. サーバーエンジニアはきつい?辛い仕事?
サーバーエンジニアはきつい、辛い仕事なのでしょうか。
結論から言うと、与えられた環境次第と言えます。
今回は以下の3つのケースについて解説します。
3.1 上流工程か下流工程かで異なる
上流工程のサーバの設計や構築をしているか、下流工程でサーバーの運用・保守を担当するかで「きつい」と感じるかは異なります。上流はクライアントからのヒアリングをもとにサーバーの設計に携わるという魅力がある一方で、下流は運用・保守で監視が中心です。サーバーの監視業務は障害が発生しない限り、業務量が少ないです。一方で障害発生には早急に対応する必要があるため「いつサーバーが停止するかわからない」という不安と隣り合わせで、きついと感じやすいです。
3.2 クラウドかオンプレミスかで異なる
オンプレミスでは24時間365日稼働するサーバーの障害に迅速に対応するためには、常に監視をおこない、障害対応する必要があります。夜間・休日を問わない障害対応によってオンとオフの区別がつけづらく、夜勤対応も必要です。サーバーは常に熱を放つため、それを冷却する必要があり、常に寒いため体調も崩しやすいです。
こうしたデメリットを解消する手段の1つとして、クラウドに人気が集まっています。
代表格はAWSで、オンプレミス環境よりも拡張性や可用性が高くなりやすく、イニシャルコストも抑えやすいです。また、AWSは何か障害が起きても、システムのパフォーマンスを落とすことなく、安定して稼働し続けられる冗長構成が可能で、耐障害性を高くすることができます。さらには、AWSにはIAMという「認証」と「認可」の設定を行うことができるサービスがあり、アクセス権限の管理を行うことができて、セキュリティ面も安全と言えます。
上記のことから、誰がどのサービスにアクセスできる状態になっているかの管理もできて、万が一障害発生した際の原因調査も、権限から逆算することで対処しやすいです。
3.3 基幹系企業かWeb系企業かで異なる
基幹システムは大企業や官公庁など大手や社会インフラと関わっていることが多く、障害発生時の損失や影響範囲が非常に広いです。一方でWeb系企業は、アジャイル開発で機能単位でサービスを次々リリースし、PDCAサイクルを回す文化があります。障害は発生しないに越したことは無いですが、リスクの許容度が高く、トライ&エラーを比較的繰り返しやすい環境ではあります。また直接的に機能開発に携わることも多く、できることが多いです。スピード感を持った開発に携わりたい場合は、基幹システムのサーバーエンジニアよりもWeb系企業の方が適性があり、自分の適性と合わない環境でサーバーエンジニアになるときついと感じることも多いです。
4. サーバーエンジニアの年収
システムの重要な役割を担うサーバー関連業務に携わるサーバーエンジニア。どれくらいの収入を得られるのでしょうか。
プロエンジニアの正社員求人およびフリーランス案件よりサーバーエンジニアの平均年収を算出してみました。
出典:
2021年2月25日調査 ※プロエンジニア自社保有正社員案件の一部より算出|プロエンジニア
2021年2月25日調査 ※プロエンジニア自社保有フリーランス案件の一部より算出|プロエンジニア
◆ 正社員の場合
平均年収:473万円
◆ フリーランスの場合
平均月単価:720万円
サーバーエンジニアはITエンジニアの中でも比較的高い年収が見込める職種ですが、収入は雇用形態やスキルによって変動します。
近年急増している企業のクラウド化に対応できるクラウドサーバーの知見を持っていたり、要求仕様の高いサーバの構築経験があれば、より高い収入に繋がるでしょう。
※ フリーランスエンジニアは、年金・保険・税金など福利厚生、賞与などの点で正社員とは異なってきます。
5. サーバーエンジニアの将来性・需要
サーバーエンジニアの将来性・需要はあるのでしょうか。詳しく見ていきましょう。
5.1 スタートアップの小規模開発やモックはサーバーサイド不在が広がる可能性
実は、スタートアップの小規模開発やモックはサーバーサイド不在が広がる可能性があります。
2011年にFirebase社がサービスを開始(※2014年にGoogleに買収され、現在はGoogle運営)したFirebaseがあります。Firebaseは、開発者が作成したアプリやWebサイト・Webサービスのインフラ部分を任せることができます。Firebase自体に、データの受け渡しやログイン機能の実装などの機能が用意されているほか、静的サイトジェネレータとしてデータベースを使用しないサイトなどを作ることが出来ます。
そのため、サーバーサイド・バックエンド不要開発の試みが広がってきています。ただしセキュリティ面や保守性に課題もあり、完全にサーバーサイドの知識がない状態での開発には、個人開発を超えるレベルだと危険性もあります。しかし、スタートアップのモック開発(投資家などに見せて出資を受けるためのモック)や、小規模なベータ版開発などであればサーバーサイド不在での開発が広がっていく可能性もあるでしょう。
5.2 中規模~大規模開発では今後も継続的に需要が発生
堅牢性が求められる案件やクラウドに移行していない企業の案件、セキュリティ重視の案件などではバックエンドの役割は非常に大きいです。
特に世界中にユーザーを抱える巨大なクラウドサービスの運営企業などでは、パブリッククラウドからオンプレミスへの回帰の流れも見られています。思わぬ形で料金が加算されたり、料金が複雑でトータルコストが算出しにくいといったデメリットがあるためです。
サービスのインフラを担う業務であり、インフラはセキュアさが求められます。
よってスタートアップではサーバレスが進む可能性があるものの、中規模~大規模案件においてはサーバーエンジニアは中長期にわたって安定的なニーズがある職種と言えます。
6. サーバーエンジニアになるには?
まずは、IT全般の知識とサーバーOSを扱うスキルを習得しましょう。
未経験から学習をスタートする場合、サーバーOSとして主流のLinuxの知識・使用経験がないことが多いです。そのため、LinuC(Linux技術者認定資格)の受験などもおすすめです。特にLinuxはクラウドでも、サーバーOSのスタンダードで、アプリケーションの開発や運用においてもコマンドラインを用いる場合は、Linux/Unix環境を準拠したものであることが多いです。
またLinuxなどのIT技術はもちろん、工数管理や法務などシステムエンジニアに求められるスキルを習得できる応用情報技術者試験の受験もおすすめします。
LinuCについては以下の記事を参考にしてください。
応用情報技術者試験については以下の記事を参考にしてください。
7. まとめ
今回は、サーバーエンジニアの定義、仕事内容や将来性、需要、年収などを解説しました。
未経験からサーバーエンジニアを目指す場合は、Linuxの知識を重点的に学習すると良いでしょう。クラウドサービスの普及により、サーバレスが進みつつありますが、まだまだ中長期に渡って安定的なニーズがあります。本記事を読んで、サーバーエンジニアについて理解を深めて頂けると嬉しいです。