Webアプリケーションの開発現場にて、ユーザーからは見えない裏側部分を構築するのがサーバーサイドエンジニアです。ですが、一口に「裏側部分」といっても、具体的にどのようなことを行なう技術者なのか、イメージしづらいという人が多いでしょう。
今回はサーバーサイドエンジニアについて、様々な観点から紹介します。
1. サーバーサイドエンジニアとは?
まず、サーバーサイドエンジニアとはどのような職業なのか、仕事内容や他のエンジニアとの違いといった観点から見ていきます。
1.1 サーバーサイドエンジニアの定義
システムの裏側、つまりサーバー側で動作する処理の部分を開発するエンジニアが、サーバーサイドエンジニアです。
ユーザーが画面上で入力したデータは、データベースに連携されます。データベースではデータの保存や検索が行なわれ、実行結果は再びユーザーが見える形となります。サーバーサイドエンジニアの担当範囲は、データベース、そしてデータベースとフロントエンドの連携部分です。
なお、小規模の開発案件だと、インフラエンジニアの役割も兼ねて、サーバーやネットワーク機器の設定を行なうこともあります。
1.2 サーバーサイドエンジニアの仕事内容
サーバーサイドエンジニアの仕事は、ソフトウェアの設定やデータベース構築、サービス管理など、多岐に渡ります。以下で仕事内容についてひとつずつ紹介していきます。
1.2.1 各種ソフトウェア、フレームワークや外部サービスの設定
スタートアップなどで求められるスピーディーな開発においては、共通部分の開発を、各種ソフトウェアやフレームワーク、ライブラリ、APIを介した外部サービスとの連携によって可能な限り簡略化し、ゼロから開発しなければならない部分を減らすケースが多く見られます。それを実現するためのソフトウェアやフレームワークなどの見積もりや各種設定などを行うのは、サーバーサイドエンジニアです。
1.2.2 Webサイト・Webアプリとデータベースの連携
ショッピングサイトを例に挙げると、ユーザーから見える買い物画面はフロントエンドで、商品の情報が格納されているデータベースなど、目に見えない部分がサーバーサイドです。
サーバーサイド側に格納されているデータは、フロントエンドから呼び出されます。フロントエンドとサーバーサイドの両者を連携させないと、正しい処理ができません。連携部分の構築は、サーバーサイドエンジニアが担います。
1.2.3 データベースの設計・検索・保存・変更・管理
商品情報が格納されたデータベースを例に挙げると、サーバーサイドエンジニアは、商品の「価格」や「サイズ」、「色」などの情報をどのように管理するか、そしてどのような設計にすれば検索性が高く、保存や変更が容易か等を踏まえて、最適なデータベースを構築しなければなりません。
また、項目の増減が発生することを考慮し、どのようにデータを管理すれば、保守性が高いのかといった点についても考える必要があります。
1.2.4 バグ修正
サービスのリリース後、想定以上のアクセスがあったり、想定していない用途でサービスを利用するユーザーがいると、サイトがダウンしたり、エラーが発生することがあります。この場合、サーバーサイドエンジニアがバグの修正を行わなければなりません。
バグの発生を未然に防ぐためにも、サーバーサイドエンジニアには保守性が高く明確なコードを記述する技術が必要とされます。
1.2.5 サービス改善
稼働しているシステムに問題が発生した場合のトラブルシューティングや顧客からの問い合わせ、社内で出た改善案などをベースにサービス改善に取り組むのも、サーバーサイドエンジニアが主体となります。
快適なサービス提供のため、ソフトウェアのアップグレードやパッチ適用なども、サーバーサイドエンジニアの重要な職務の一つです。
1.3 サーバーサイド・フロントエンド・インフラの関係
「サーバーサイドエンジニア」と「フロントエンジニア」、「インフラエンジニア」は、全てWebアプリケーション開発の現場での役割を指します。それぞれがどのようなエンジニアなのか、混同されやすいため、今回はECサイトを例に挙げて、違いについて説明します。
1.3.1 サーバーサイドは「動的な処理の記述」
ユーザーから入力された商品情報をもとに、プログラムの内部では、データベースへのアクセスや各種ファイルへのアクセス、その他目には見えない様々な処理が次々と行われます。そのような部分の仕組みを構築するのが、サーバーサイドエンジニアです。
1.3.2 フロントエンドは「目に見える部分を作る」
ユーザーからの商品情報の入力は、ビュー上で行なわれ、データベースへと情報が送られて処理されます。そして、データベースでの処理が完了すると、データベースから処理結果を受け取り、データがビューに反映されます。HTMLやCSSなどのコードを駆使し、ビューの部分を構築するのが、フロントエンドエンジニアの役割です。
1.3.3 インフラは「サーバ環境の整備」
ECサイトに限らず、あらゆるアプリケーションは、サーバーやネットワークが正しく動作することで、初めて稼働します。インフラエンジニアは、サーバー環境、つまりシステム全体の枠組みの構築や管理を担当します。
サーバーの構築やパラメータ管理は、インフラエンジニアの代表的な職務です。また、ロードバランサや監視の仕組みを検討し、構築するのも、インフラエンジニアです。
2. サーバーサイドエンジニアに必要な知識
続いて、サーバーサイドエンジニアにはどのような知識が求められるのか、紹介していきます。
2.1 プログラミング
データべースの参照といった、サイトやアプリの裏側で処理する一連の動作を記述するのは、サーバーサイドエンジニアの役割です。
最近では、フロントエンドとデータベースの懸け橋として、サーバーサイドでWeb API(REST API)を構築するケースも多く見られます。
2.1.1 主に使用されるプログラミング言語
サーバーサイドエンジニアが主に使用する言語として、RubyやPHP、Node.js、Javaなどが挙げられます。
Rubyは国産の言語として幅広く知られています。
PHPはWordPressで使用されていることで有名です。どちらもデータを柔軟に扱える「動的型付け言語」であり、素早い開発でのプロダクトの迅速なリリースが得意です。
Node.jsはサーバーサイドのJavaScriptです。クライアントサイドをJavaScript、サーバーサイドをNode.jsで記述することもでき、一人の技術者がサーバー側とクライアント側の両方を開発することも可能です。
Javaはデータの「型」を明示しながらコーディングが必要な「静的型付け言語」です。コンパイル段階でのエラー検出の精度が高く、堅牢性の高い開発で採用されます。ちなみに、Android開発もできるため、最近ではスマホアプリの開発現場でも採用されるケースが多く見られます。
2.2 データベース
ユーザーが入力したデータを格納し、保管するのがデータベースです。データベースの整理や操作には、SQLなどのデータベース言語が使用されます。想定したデータ操作を実現するため、サーバーサイドエンジニアには、データベース言語に関する知識が求められます。
サーバーサイドの言語とセットで使うと、例えば、Node.jsとSQLでMySQLに接続し、データを取得するといった使い方ができます。
2.3 OS・仮想環境
小規模~中規模の開発では、本来インフラエンジニアの役割である部分も、サーバーサイドエンジニアが兼任するケースがあります。オンプレミスでもクラウドでも、サーバーのOSインストールや各種設定を行なったり、スイッチなどのネットワーク機器の設定等を行なったりという必要性も発生します。
そのため、サーバーサイドエンジニアには、OSや仮想環境、クラウドの知識もあった方がよいとされます。
3. サーバーサイドエンジニアに必要なスキル・適正
幅広い知識が求められるサーバーサイドエンジニアですが、それでは、一体どのようなスキルが求められるのでしょうか。リストアップしていきます。
3.1 プログラミングスキル
JavaやPHP、Ruby、Node.jsなど、サーバーサイドの言語を扱うプログラミングスキルが求められます。それに加えて、SQLなどのデータベース言語を扱うスキルも必要です。
また、フロントエンドとの連携部分を担当するにあたり、HTMLやCSSなど、フロントエンドエンジニアが扱う言語についての知識があると尚良いでしょう。
3.2 ロジカルシンキング
データベースに個人情報が格納されているシステムもあり、サーバーサイドエンジニアが担当する部分は、言わばWebアプリケーションの根幹の機能です。そのため、開発への貢献度が高い一方で、責任も重い職種だと言えます。そのため、安全性や効率の面で、どのような構成がそのサイトに適しているのかを論理的に考えられなければなりません。
また、トラブル発生時の課題解決を担当することも多いため、エラーが発生した際の影響範囲が大きいシステムでは、特に責任が重くのしかかります。問題発生個所の速やかな発見と迅速な対応が求められるため、高い問題解決能力とロジカルシンキングのスキルは、サーバーサイドエンジニアに必要不可欠です。
3.3 学習意欲
ビッグデータの活用などIT業界の進歩が著しい昨今では、IT業界の市場規模も拡大しています。矢野経済研究所の調査によると、IT市場は2021年度に13兆3,200億円となることが予測されています。
その一方で少子高齢化が進み、新卒採用人数が減少傾向にあることから、必然的にIT業界では人材の需要と供給の乖離が生じています。その状況下でサーバーサイドエンジニアが担う役割は広がっており、フロントやインフラ、セキュリティやクラウドの知識など、広範な技術を要されるケースも増えつつあります。
またIT業界はトレンドの変化も激しく、より先進的なフレームワークや新しい開発手法などが次々と登場します。最新技術のキャッチアップを怠らず、継続的に学習する意欲が大切です。
参照:国内企業のIT投資に関する調査を実施(2019年)|矢野経済研究所
3.4 コミュニケーションスキル
サーバーサイドエンジニアは、フロントエンドエンジニアとインフラエンジニアの中間に位置しており、各エンジニアとの密な連携が必要となる場面が多く見られます。開発の仕事はチームで行なうケースが多く、成果を挙げるには、高いコミュニケ―ションスキルが必須です。
4. サーバーサイドエンジニアのやりがいは何?
やりがいとしてはまず、責任が重い分、他社や顧客の業務効率化に直接つながるという、社会貢献性の高さが挙げられます。成果を挙げるには多くのエンジニアとのコミュニケーションも必要となり、大きな達成感を得られるでしょう。
また、システム構成を考える役割を担うため、自分で考えた具体的な機能を形にできるというクリエイティビティも、やりがいを感じる点の一つだと言えます。
そして、一度スキルを身に付ければ、個人開発などにスキルを活かしやすい点も挙げられます。リモートワークなどを導入している企業も多く、時間や場所に囚われない働き方もしやすく、効率よくスキルアップを目指すことが可能です。
4.1 サーバーサイドエンジニアの将来性
近年はFirebaseなど、バックエンドの機能を提供してくれるフレームワークを使った開発も普及しており、サーバーレスで開発を進めることも容易になっています。
ただし、そのような技術は手軽に使うことができる分、慎重に扱わなければセキュリティ事故に繋がる恐れもあり、サーバーについての知識が全くない状態でサーバーレスでの開発を行なうのは危険とされています。そのため、サーバーサイドエンジニアの需要が今すぐ無くなるということはありません。
4.1.1 「サーバーサイドエンジニア不要説」は本当?
クックパッドは「Komerco」というアプリを、Firebaseを利用し、サーバーサイドエンジニア不在で開発しました。開発のスピードが上がったことを大きな効果として挙げる一方で、データベースの利用やセキュリティといった面でデメリットを感じたと、開発者は振り返っています。
スタートアップでのテストプロダクト開発など、堅牢性よりもスピードが求められる場では、今後サーバーサイドエンジニア不在で開発するケースが増えていくと見られます。
参照:Firebaseでバックエンドエンジニア不在のアプリ開発 クックパッドが体感した、メリットと課題|エンジニアHub
5. サーバーサイドエンジニアの給与の目安
インディードが公開しているデータによると、サーバーサイドエンジニアの平均年収は585万円です。フロントエンドエンジニアが549万円、インフラエンジニアが492万円であることを踏まえると、サーバーサイドエンジニアの給与は比較的高めの傾向にあります。
専門性が高く、幅広い知識とスキルが求められる職種であることが理由と推測できます。
6. サーバーサイドエンジニアになるには?勉強法
勉強方法は主に3つです。
- スクールを活用すること
- プログラミングの学習サイトの利用
- 書籍の購入
お金のかかる勉強方法ですが、講師が直接教えてくれるため、疑問点もその場ですぐ解決でき、効果的に学習できます。プログラミング未経験者は、まずはスクールに通うのがおすすめです。
講義を直接受けることができるものではありませんが、リアルタイムではないものの、疑問点に応えてくれるサイトもあります。費用を抑えつつ、効率よく勉強できる方法です。
完全に独学となってしまうため、プログラミング未経験者には、書籍だけで学習するのはおすすめできません。スクールに通いつつ、知識の定着のために書籍を活用するといった学習方法を取ると効果的です。
6.1 サーバーサイドエンジニアは未経験からでもなれる?
未経験者がサーバーサイドエンジニアを目指すことも可能ですが、20代後半以降になってくると狭き門であるのが現実です。
RubyとRuby on Rails、PHPとLaravel、JavaとSpringなど、一つ以上の言語+フレームワークの組み合わせを学んだ上で、一つ以上のWebアプリケーションを自作するなどの経験を積んだ上で、未経験者歓迎の求人を出す企業に積極的に応募すると良いでしょう。
入社後は、積極的なキャッチアップが必要です。応用情報技術者試験やLinuCなどの資格は早めに取得しておきたいものです。
7. まとめ
サーバー側で動作するデータベース等の処理、つまりシステムの根幹とも言える部分を構築するサーバーサイドエンジニアの役割は、Webアプリケーションの開発現場では非常に重要です。
幅広い知識や高いコミュニケーション力が求められ、責任も重い職種ですが、その分やりがいは十分にあると言えます。長きに渡って安定したニーズのある職種のため、興味のある人は、学習を始めてみるとよいでしょう。