Webアプリを作る

gray concrete road Uncategorized
Photo by Nextvoyage on Pexels.com

仕事でawsを使ってWebアプリを開発しています。

Webアプリの構成や作り方を概念的に理解できるように、重要な用語や構成をまとめてみました。

インフラ

Webアプリの開発には、まずサーバーを用意する必要があります。サーバーや周辺のネットワーク環境を含めて、インフラと呼ばれることが多いようです。

サーバーは多くの場合OSはLinuxで動いていて、そのうえでWebサーバーに相当するアプリケーションを動かします。

サーバーは、自社のデータセンタや、レンタルサーバを使用するほか、最近ではawsなどのクラウド上に用意することも多いです。awsの場合はEC2インスタンスとよばれる仮想的なサーバー使用することができます。

サーバーを立ち上げたら、SSHなどのリモート接続でサーバーにアクセスして操作することができます。SSHは、暗号化によりセキュアにリモートログインできる仕組みです。

Webアプリを実装する場合、Webアプリをクラウド上のサーバーに搭載して動かすことを「デプロイ」すると呼びます。Webアプリをデプロイするための仕組みとして、awsであればElasticBeanstalkのように、負荷に応じてサーバーの数を自動的に増減してくれるためのロードバランサー、ネットワーク、サーバーなどをひとまとめにしてセットアップしてくれるサービスがあり、このような仕組みはawsのマネージドサービスと呼ばれます。使ったことはありませんがHEROKUも同じような形のサービスのようですね。

個別のサーバーに自前で必要なツール類をインストール・アップデートするよりも、このようなサービスを使うとサーバーの準備が格段に楽になるので、これをIaaS(Infrastructure as a Service)と呼びます。よくインフラ、インフラといわれるのがこの部分で、インフラエンジニアとか、インフラの知識、とか言われるとこの辺のことを指しているのかなと思っています。

バックエンド(サーバーサイド)開発

Webアプリは、アクセスするWebブラウザで動いている部分と、Webブラウザから送信されたリクエストをサーバーで処理してデータを返す部分に分かれます。前者をフロントエンド部、後者をバックエンド(サーバーサイド)と呼びます。両者の境目はHTTPリクエストで、サーバーサイドでは、特定のURLに対して送信されたHTTPリクエストを解析して処理し、適切なデータで応答します。データは、HTMLファイルであったり、画像ファイルであったり、json形式のようなテキストデータであったりします。送り返すデータは、多くの場合データベースやストレージに格納されていて、それを取り出してHTML形式に加工して、送り返されます。

このようなサーバーサイドの開発を効率よく行うために、ユーザー認証や、データーベースへのアクセス、それらのテストなどを統合したフレームワークと呼ばれるソフトウエア群が用意されています。RubyであればRuby on Rail、PythonであればDjangoやFlask、JavascriptであればNode.jsがこれにあたります。

最初は正直サーバーサイドってなんやねんと思っていましたが、HTTPとURIの勉強をしてからだいぶ理解が進んだように思っています。サーバーサイドエンジニア、バックエンドエンジニアといえばこの辺りを作る人、と理解しています。

フロントエンド開発

Webブラウザ側で動く部分がフロントエンドで、HTML、CSS、Javascriptで構成されることが多いのかなと思います。Node.js以外のXXXX.jsは、Webブラウザ上のグラフィックやデータ表示を容易に扱うためのJavascriptのライブラリやフレームワークであると認識しています。Webブラウザ上で動作するユーザインタフェースや、アプリやWebページの構成をワイヤーフレームから実装するなど、デザインに係る点を扱うのもフロントエンドになりますね。

表示されるHTMLはバックエンドで生成されたものを受け取って表示するほか、Javascriptで表示を制御したり、最近のReact.jsなどでは、Javascript内に生成するHTMLを定義しておいて実際に表示されるHTMLが生成されるようです。このため、個人的にはフロントエンド開発とサーバーサイド開発というのはHTTPリクエストだけを境界として切り離せるものでもないように感じています。フロントエンドからバックエンド、インフラまで全体の開発ができる人は、フルスタックエンジニアと呼ばれます。

フルスタックで開発をするという点では、フロントエンドとバックエンドが同じ言語で開発できるというのは利点で、Javascriptを使用してバックエンドはNode.jsを使ってJavascriptに統一して開発するスタイルもあるようですが、どの程度の現場がそうなっているのかはわたしにはわかりません。

終わりに

Webアプリを作るために必要な開発を一通りまとめてみました。まだまだ勉強が必要です。

タイトルとURLをコピーしました