一口に「Webアプリケーションエンジニア」と言っても、その内部構造は複数の要素から成り立っています。
業務系やWebサービス系のWebアプリケーションであれば、一人でアプリケーション全てを作り上げることはまれで、複数の担当者もしくはチームで開発業務を進めていくのが通常の形です。
Webアプリケーションは大きく分けて、
・ユーザが利用する画面など、アプリケーションの外観に関する「フロントエンド」
・ユーザの目に触れる以外の部分で、サーバ上で動作する処理のメイン部分およびデータベース部分の「バックエンド」
に分かれます。
そして、所謂「バックエンド」と呼ばれる構成要素を担当するのがバックエンドエンジニアです。
今回は、バックエンドエンジニアとして活躍していくには、どのようなスキルや知識が必要なのかご紹介します。
【目次】
プログラミング言語<コンパイル形式>
Webアプリケーションの特性によって採用されるプログラミング言語は異なるため、一概に「これを抑えておけば大丈夫」とは言えませんが、バックエンドで使われる代表的なプログラミング言語を紹介していきます。
主に、コンパイルしたモジュールをサーバ上に配置する「コンパイル形式」のプログラミング言語と、プログラム記述したファイルをサーバ上に配置し、実行時に1行ずつ機械語に翻訳して実行する「インタプリタ形式」のプログラミング言語に分かれます。
コンパイル形式は、プログラム全体をあらかじめ機械語に変換しておくため実行速度は早く、比較的規模の大きな業務系システムで利用されていることが多いです。
Java
Webアプリケーションでいまだ高い人気を誇るプログラミング言語はJavaでしょう。
オブジェクト指向言語として比較的歴史も長く、ある意味枯れた技術ではありますが、Java言語にて構築されているシステムも多いため、リプレースの際も再びJava言語が採用されるケースもよく見られます。まだまだ現役のプログラミング言語であることは間違いありません。
文字列型やガベージコレクタなどを採用し、言語仕様としてポインタやメモリ操作を排除することでメモリ関連の不具合を発生しにくくしている特徴がある一方、C言語などの低次元言語と比較すると処理速度は遅めとなります。
近年ではSpring Batchなどのフレームワークの台頭により、バッチ処理でも利用されるケースも増えてきてはいますが、主にオンライン処理などのWebアプリケーションで使われるプログラミング言語の代表格と言えるでしょう。
技術者の調達のしやすさや、デザインパターンなど設計手法の情報の多さからも、システム構築の際に最適解を得やすいプログラミング言語です。
Java言語の開発環境としては、Eclipseが使われることも多く、JDKとEclipseが一緒になったPleiades All in Oneがよく使われています。
C#
Javaと同じくオブジェクト指向言語であり、Microsoft社が開発しているプログラミング言語です。
.NETなど、Microsoft社のフレームワークと合わせて使われることが多くなっています。
Microsoft社開発のプログラミング言語であるがゆえに、WindowsサーバやMicrosoft AzureなどMicrosoft社が提供する製品やクラウドサービスとの相性が良く、サポートやマニュアルも充実しています。
Microsoft社の製品やサービスを利用する際には、検討すべきプログラミング言語といえるでしょう。
ただし、技術者の多さ、調達のしやすさという面からも、Java言語の人気が高いのが実情です
(TIOBE Programming Community Index (PCI):https://www.tiobe.com/tiobe-index/)。
なお、C#の開発環境としては、Microsoft社の提供するVisual Studioが使われることが多くなっています。
プログラミング言語<インタプリタ形式>
インタプリタ形式は、コンパイル作業が不要で手軽に動作させることができることから、比較的軽量なシステムで利用されることの方が多いという特徴があります。
PHP
サーバサイドで動作するインタプリタ言語の中で、高い人気を誇るプログラミング言語がPHPです。
時代遅れと言われることも多いPHPですが、他の言語と比較して仕様や文法が簡単であり、習得しやすいのが特徴です。
WordPressなどのCMSでよく使われることからもわかる通り、比較的簡易なWebアプリケーション、Webサービスで選択されるプログラミング言語となっています。
しかし、習得しやすいとはいえ、データベースとの連携が容易であったり、ライブラリも充実していたりと、機能に不足があるというわけではありません。
FacebookやWikipediaなど、広く使われているサービスでも採用されているプログラミング言語ですので、今後もまだまだ使われていくことでしょう。
Python
統計処理や数値計算を得意とするインタプリタ形式のオブジェクト指向プログラミング言語であり、機械学習などの処理でよく用いられることから、近年脚光を浴びている言語です。
標準ライブラリだけでも、数学関連、データの永続化、データ圧縮・アーカイブ、並列処理、ネットワーク処理など様々な処理が用意されていることに加え、少ないコードで高度な処理を簡潔に記述することが可能になっています。
さらに、Pythonには、幅広い用途に使える外部ライブラリが豊富に存在しています。
代表的なものは、機械学習で使われるTensorFlow、PyTorch、NumPyなどのライブラリです。また、Webアプリケーション開発のためには、Djangoというフレームワークも存在します。
多くのエンジニアが機械学習プログラムを開発するためにPython(および外部ライブラリ)を利用していることから、今後さらなる進歩をしていくことが期待されているプログラミング言語です。
また、Pythonと言えば機械学習と思われがちですが、Instagram、YouTube、Evernote、DropBoxなどのWebサービスがPythonによって開発されています。
他にも、組み込みアプリケーション、デスクトップアプリケーションなど様々な分野のプログラムを作ることができる汎用性の高い言語となっていることから、将来性の高いプログラミング言語と言えるでしょう。
Ruby
Pythonと同じくインタプリタ形式のオブジェクト指向プログラミング語です。WebアプリケーションフレームワークであるRuby on Railsを利用することで、効率よく開発作業を進められます。
比較的小規模かつスピードを求められる開発が向いているプログラミング言語と言われていますが、Ruby on RailsフレームワークではMVCアーキテクチャを採用しており、データベースとの連携やWebAPIとの連携などを駆使し、様々なWebアプリケーションを構築できるプログラミング言語です。
多くのECサイトやクックパッド、GitHubなど広く使われているWebサービスのプログラミング言語でRubyが採用されています。
フレームワーク
今やWebアプリケーションの構築にはフレームワークは欠かせません。
しかし、採用されたプログラミング言語によっては、いくつものフレームワークが存在し、どれを選べば良いのか迷ってしまう場合もあります。
フレームワークにもトレンドがありますので、プログラミング言語が決定すれば、ある程度選択肢は限られてきます。
下記では、プログラミング言語に対応する代表的なフレームワークを紹介していきます。
Java:Spring Boot
Java言語のフレームワークとして、代表的なものはSpring Bootが挙げられるでしょう。
Spring BootのベースとなっているSpring Frameworkは、各種設定にXMLファイルを使用していましたが、設定が複雑になってしまうのがデメリットでした。
Spring BootではXMLによる設定を排除し、最小限の設定のみでWebアプリケーションを実行することが可能となっています。
また、jarファイル内にTomcatなどアプリケーションサーバを含めて実行することができるため、より簡単にWebアプリケーションが実行できます。
C#:ASP.Net Core
C#アプリケーションの開発といえば、.Net FrameworkおよびASP.Netでしたが、近年のWebアプリケーションの開発ではアプリケーション基盤に.NET Core、Web基盤にASP.Net Coreが使われることが多くなっています。
ASP.Net Coreでは、WindowsだけではなくMacやLinuxといったマルチプラットフォームで動作することが大きな変更点となっています。
それらOS共通で利用できる「dotnetコマンド」を使用し、リポジトリから取得したソースコードを環境を意識することなく依存解決を行い、実行することができます。
PHP:Laravel
PHPのフレームワークであるLaravelでは、MVCモデルを採用しています。
プログラム言語としては比較的小規模なシステムで使われがちなPHPですが、MVCモデルを採用することで規模の大きいWebアプリケーションの開発にも対応できるようになっています。
Eloquent ORM(Eloquent Object Relational Mapping)と呼ばれる、Laravel独自のO/Rマッパー機能を持ち、柔軟なデータ操作が可能となっているのも特徴です。
Python:Django
Pythonの代表的なフレームワークであるDjangoは、Webアプリケーションの実装に必要なユーザ認証、管理画面、サイト案内、RSSフィードの機能があらかじめ含まれています。
分散型のキャッシュシステムであるmemcachedが標準で備えられており、高速な動作が可能となっています。
また、DjangoについてもWindows、Mac、Linuxで動作するマルチプラットフォームのフレームワークとなっているのも特徴です。
Ruby on Rails:Ruby
Rubyを利用する際のフレームワークといえば、一番有名なものはRuby on Railsでしょう。
Ruby on RailsもMVCモデルが採用されており、規模の大きなWebアプリケーション開発にも対応できるようになっています。
プログラムの書きやすさに加えて、RSpecを利用したテスト自動化を行うこともでき、開発効率を高めることができる機能を多く有しています。
データベース
バックエンドの重要な要素として、データベースは大きな割合を占めます。データベースを操作するためのSQLに加え、RDBMSやデータベース設計についても理解しておく必要があるでしょう。
SQL
SQLについては、WebアプリケーションからDBMSを操作するためのDML(SELECT, INSERT, UPDATE, DELETE文など)についてはもちろんのこと、テーブルを作成するためのDDL(CREATE文など)、権限定義を行うDCL(GRANT文など)についても身につけておきたいところです。
O/Rマッパーなどにより、SQL文自体を書かないケースも増えてきていますが、性能面に問題がある場合はカスタムクエリを利用するケースも多々あります。
特に複数のテーブルをJOINするSELECT文などでは、SQLの構文をきちんと理解しておかなければ非効率な検索処理が実行されてしまう可能性があります。
SQL文には、それほど多くの種類があるわけではありませんので、ひと通りの命令については理解しておくことにしましょう。
RDBMS
Webアプリケーションからデータベースを扱うには、SQLによるデータ操作だけではなくRDBMSを利用する上での特性、
・トランザクション
・ロールバック
・ロック
・インデックス
・統計情報
・バッファプール
・ログバッファ
などについての知識も必要です。
特にロック、バッファプール、ログバッファ等については、RDBMS製品によって動作が異なる場合があります。
全ての製品やサービスについて理解しておく必要はないものの、RDBMSの中でもメジャーな製品(Oracle, SQL Server, My SQL等)や、主要クラウドのマネージドサービスについては、その特性を理解しておくことは必要でしょう。
データベース設計
開発作業においては、SQLやRDBMSだけではなく、データモデルを作成するためのデータベース設計の知識も重要です。
新規開発でなければ、一からデータベース設計を行う機会は少ないかもしれませんが、概念データモデル、論理設計、物理設計、および正規化・非正規化の知識は大切です。
データ構造はアプリケーションの保守性に大いに関係してきますし、性能面で問題が発生した場合、データ構造の見直しによって改善される場合も多いためです。
マイクロサービスやO/Rマッパーの広まりにより、昔ほどデータベース設計(特に正規化)についての知識がなくともシステム構築ができてしまうような傾向がありますが、データベース設計ができる程度の知識・スキルは身に付けておいた方が良いでしょう。
CI/CD
アプリケーションの改善およびリリースサイクルを継続的かつ迅速に行う仕組みであるCI/CD(Continuous Integration/Continuous Delivery)は、Webアプリケーション開発とは切り離せないものとなっています。
ツールとしてはJenkinsやCircleCIが有名ですが、他にも様々な製品、サービスが登場しています。
ビルド・自動テストの設定や、パイプライン設定の方法はツールによって異なりますので、開発業務で利用するCI/CDツールの使用方法は把握しておく必要があるでしょう。
また、CI/CDを行う対象として、従来のアプリケーションモジュールではなく、Dockerなどのコンテナや、Kubernetesなどのオーケストレーションツールを利用する例も増えてきています。
コンテナ技術は、環境面の差異を吸収できるため、開発・テストしたアプリケーションを本番環境で同じように動作させることを保証できるため、CI/CDとも非常に相性が良いのです。
CI/CDに加えて、コンテナ(Docker)、オーケストレーションツール(Kubernetes)についても理解しておくようにしておきましょう。
=================
>プログラミングスキル関連記事
【実例】コンサルの採用ではどのプログラミング言語が求められるのか?
https://www.axc.ne.jp/media/careertips/programminglanguage
=================
Webアプリケーションは様々な構成要素の組み合わせで成り立っているため、様々な技術を使いこなせることはもちろん、どんなアーキテクチャを採用するかを選択・提案できることがバックエンドエンジニアに必要な資質となってきます。
各種クラウドサービスの広まりにより、新規にWebアプリケーションを構築するハードルはどんどん下がり続けています。
しかし、手軽にアプリケーションが構築できるようになっている反面、それぞれの技術を深く知らないけれども、何となく開発ができてしまっているというエンジニアも多いのではないでしょうか。
もちろん最初はそれでもかまいませんが、バックエンドエンジニアとして長く活躍するためには、アーキテクチャやそれぞれの技術要素について、きちんと学んでおく機会は設けたいものです。
キャリアでお悩みの方は、ぜひアクシスコンサルティングにご相談ください。
アクシスの求人のうち、
約77%は非公開。
平均サポート期間は3年です。
各ファームのパートナー、事業会社のCxOに定期的にご来社いただき、新組織立ち上げ等の情報交換を行なっています。中長期でのキャリアを含め、ぜひご相談ください。