バックエンド開発の基本を理解するために必要な10の知識 2022年版

2022/09/17に公開

はじめに

バックエンドエンジニアは、プログラミングの中で特にイメージがわきにくい分野である。簡単に言えば、バックエンドエンジニアはユーザから見えない部分にあるシステムである。(例えば、ユーザ認証やデータベース設計・操作・運用などが例として挙げられる)

例えば、ECサイトを運用する際に、ユーザから見えるUIだけを作っても作動しない。バックエンドになるシステムの構築も必要なのだ。

今回はバックエンド開発を理解する上で必要な10の知識を徹底解説する。その中で、個人の見解に過ぎないが初心者にオススメのバックエンドのフレームワークを3選紹介するあくまで一個人の見解に過ぎないが、今回の記事を通してバックエンドの学習方法またはその魅力を十分に理解していただければ非常に幸いである。

本題に入る前に、本記事における「バックエンド」はあくまで認証やデータベースなどシステムやソフトウェアの裏側で動作しているものと定義しているので、DockerやKubernetesなどのインフラの分野には言及しないことは断っておく。それでは早速、本題に入ろう。

バックエンド開発を習得するうえで必要な基礎知識 10選

バックエンド開発を習得する上で必要な基礎知識は次の10種類である。

  • Web
  • OSの操作方法
  • JavaScript
  • Node.js
  • Webフレームワーク
  • API
  • データベース
  • 認証・セキュリティ
  • テスト
  • デプロイ

それぞれ順番に解説する。

1.Web

Webの基本を学ぶのは、すべてのプログラマーにとっては必要条件である。

Webやインターネットの概念を十分に把握していれば、インターネットの機能や役割、プロトコルやメッセージの送受信などを理解する上では役立つ。

より具体的に言えば、主に以下のことについて十分に学習し、理解するべきだ。

  • HTTP(Hypertext Transfer Protocol)の概要と役割
  • HTTPリクエストの種類とその役割
  • クライアントとサーバの概要と役割
  • OSI(Open System Interconnection)参照モデルの概要
  • DNS(Domain Name System)の概要と仕組み

更に追加で、基本的なHTMLタグやCSSのスタイリング、DOM(Document Object Model)操作について学ぼう。特に学ぶべき内容は次の通りである。

  • HTMLタグを使用して簡単なWebページを作成する方法
  • CSSで様々なスタイルを追加する方法
  • DOMを使ってHTML要素のスタイルを変更する方法

Webを体系的に学ぶなら次の2冊がオススメである。両方とも買って損はないだろう。

https://direct.gihyo.jp/view/item/000000002447

https://gihyo.jp/book/2010/978-4-7741-4204-3

2.OSの操作方法

OS(Operating System)はコンピュータ上のすべてのソフトウェアとハードウェアを管理する。OSはメモリやプロセスの処理、入出力の処理などを中心に行う。

OSはWebアプリケーションを実行するサーバを実行する役割を果たす。パフォーマンスを最大化し、メモリを最適化するためにはOSの操作方法について深く学ばなければならない。

初心者の段階では、OSのアーキテクチャ、ファイルシステム、基本的なコマンド、メモリ、プロセス管理やOSのスレッドについて学習する必要がある。更に、以下のOSについて特徴や違いを簡潔に説明できるようにしておくこと。

  • macOS
  • Windows
  • Linux

特にLinuxコマンドはWeb開発を円滑に進める上では必須なので必ず暗記するべし。(WindowsではPowershell、macOSではbashの基本コマンドをを扱えるようにすること)

3.JavaScript

すべてのWebアプリケーションはJavaScriptで動作しているので、Web開発を学びたいなら最初はJavaScriptを学習しよう。

  • データ型
  • 繰り返し処理
  • 条件分岐
  • 関数
  • オブジェクト
  • クラス
  • 配列
  • 文字列
  • 正規表現

今挙げたJavaScriptに関するこれらの基本的な文法知識をマスターすること。

JavaScriptを学ぶ上で必ず押さえておきたい用語は次の2つである。

  • ECMAScript:JavaScriptのベースとなるプログラミング言語の仕様。アロー関数、非同期処理(asyncawait)やテンプレート文字列などJavaScriptの新しい機能を導入している。
  • DOM(Document Object Model):前述で紹介した。ざっくり言えば、JavaScriptを使ってWebページとやり取りする仕組みのこと。

4.Node.js

バックエンドに関係なく、JavaScriptでWeb開発を進めたいならNode.jsは必要不可欠である。Node.jsはオープンソースかつクロスプラットフォーム(様々なOSに対応していること)のJavaScript実行環境だ。

Node.jsをインストールしたあとは、以下のことについて学ぼう。

  • fsモジュールでファイルやフォルダを作成、削除および更新する方法
  • pathモジュールで静的なファイルやフォルダのパスを設定する方法
  • osモジュールでOSの統計情報を取得する方法
  • asyncawaitを使って非同期処理を実装する方法
  • npm(Node.js Package Manager)の概要とインストールする方法
  • npmとyarnの違い(発展内容)

5.Webフレームワーク

原則、バックエンドはWebフレームワークを活用して開発される。Webフレームワークの主要の役割は、データベースを統合して、フロントエンドとバックエンドをつなげることである。

バックエンドを習得するためにWebフレームワークを使って実装するべきことは次の通り。オススメのバックエンドフレームワークは後述する。

  • 基本的なサーバ
  • レスポンスとリクエストの対話
  • 簡単なHTMLを表示する関数
  • 異なるHTTPリクエスト(GETPOSTDELETEPUT/PATCH)

まずはNode.jsを使ってこちらのHTMLを出力するアプリを開発することから始めよう。

<h1>Hello World</h1>

6.API

上述で紹介したWebフレームワークを使って簡単なAPIを作成し、CRUD(Create、Read、Update、Delete)操作を実装しよう。APIをテストする際にはPostmanをオススメする。更に、OpenAPI(Swagger)でAPIのドキュメントを作成できるようにしておきたい。

個人の見解になるが、API開発でできるようにしておきたいことは次の通り。

  • API用のディレクトリを作ること
  • ルートとデータを別のフォルダで管理すること
  • 入力するデータをフィルタリングすること
  • リクエストごとに適切なステータスコードやエラーメッセージを表示すること

7.データベース

データベースは、バックエンド開発において最も重要な役割を果たす。アプリケーション内のデータを構造化して保存し、データにアクセスして維持するために使われる。

開発で使われているデータベースは大きく2種類に分けられる。

  • SQL:SQLというデータベースを操作する言語を使ってデータベースを設計・操作するデータベース。2022年9月時点におけるデータベースの主流ジャンルである。MySQLSQLiteなど。
  • NoSQLSQLを使わないで操作するデータベース。MongoDBFirestoreRedisNeo4jなど。例えば、MongoDBに格納されているデータベースはJavaScriptで操作できる。データはJSONで管理される。

JavaScript(Node.js)の場合、バックエンドは上記のデータベースのnpmパッケージを使ってデータベースに問い合わせることで、直接データベースと対話できる。

個人的に学んでおいて損はないデータベースは次の3つ。

  • SQLite:言語によっては環境構築いらずで操作できる軽量のデータベース。SQLの操作方法を学ぶ上では最も最適。Pythonであれば環境構築がいらない。
  • MySQL:世界の有名な企業で活用されているデータベース。公式ドキュメントが非常に読みにくいので、最初は参考書で学習することを強くオススメする。動かすには別途環境構築が必要だ。
  • MongoDB:NoSQLの代表格。公式ドキュメントやチュートリアルが充実している。NoSQLで開発を進めたいなら避けて通れない。私の推しのデータベース。

データベース関連で学んでおきたいことは次の通り。本書では詳細な説明は割愛するものの、これらすべての専門用語を自分の言葉で説明できるようになろう。

  • ACID(Atomicity, Consistency, Isolation, Durability)特性
  • バックアップ
  • マイグレーション
  • 正規化
  • インデックスの適用
  • データレプリケーション
  • シャーディング
  • ORM(Object-relational Mapping)
  • ODM(Object Document Mapping)

8.認証・セキュリティ

認証はWebアプリケーションを開発する上では必要不可欠な概念である絶対に理解しておくこと。認証に欠陥があると、データが流出したりアプリケーションに障害が発生したりする。下手するとアプリケーションだけではなく開発したプログラマー、企業の信頼も失うことに繋がる。

Webアプリケーションを開発する上で、適切な認証を実装する必要がある。この分野は曖昧にしてはならない。何度も復習することを強く推奨する。

Webアプリケーションでよく利用される認証方法は主に以下の通り。どれも自分の言葉で説明できるようにしておこう。

  • JWT(JSON Web Token)認証
  • Cookie認証
  • Basic認証
  • ワンタイム認証
  • SSL(Secure Sockets Layer)認証
  • OAuth

これらに加えて、次の専門用語について理解を十分に深めておくこと。

  • 公開鍵と秘密鍵
  • 暗号化と復号化
  • CORS(Cross-Origin Resource Sharing)
  • CSRF(Cross-Site Request Forgeries)
  • XSS(Cross-Site Scripting)
  • SQLインジェクション

9.テスト

テストはWebアプリケーションをサーバにデプロイする上では非常に重要だ。たった1つの間違った入力やデータの欠陥が、稼働中のサーバの故障の原因になる。テストは、複数の基準に基づいて複数のレベルで行うことができる。例えば、Webアプリケーションが適切なステータスコード、エラーメッセージやデータを返すかどうかをチェックできる。

JavaScriptの場合、テストフレームワークとしてJestが有名である。JestはWebアプリケーションとAPIの両方をテストできるテストフレームワークだ。

Web開発のテストには主に以下のようなものがある。それらの概要や違いを簡潔に説明できるようにすること。

  • 単体テスト(ユニットテスト)
  • 結合テスト
  • 機能テスト
  • システムテスト
  • ホワイトボックステスト
  • ブラックボックステスト

特に、JavaScriptの場合はJestを使った簡単なユニットテストを実装できるようするとベターだ

10.デプロイ

Webアプリケーションを開発する上での最終段階は、Webアプリケーションをサーバやクラウドにデプロイすることだ。Webアプリケーションをデプロイする前に、git、GitHubやGitHub Actionsなどのバージョン管理を習得して、柔軟かつスケーラブルにデプロイしなければならない。

  • git:バージョン管理で最も使われるソフトウェア。ソースコードの変更を追跡し、複数の開発者が同時に作業できるようにするためのバージョン管理として使われる。
  • GitHub:バージョン管理やプロジェクトのソースコードを確認するためのWebサイト。GitHubアカウントを持っていれば、どこからでもプロジェクトに参加できる。
  • GitHub Actions:ソフトウェア開発のワークフローを自動化するために役立つ。GitHub上でプロジェクトのビルド、テスト、パッケージ化やデプロイを行える。また、ワークフローのあらゆるステップを自動化するために使える。

Webアプリケーションをデプロイするには、HTTPリクエストに応答し、オンラインデータベースと連動するための専用のサーバが必要だ。そこで有名なPaaS(Platform as a Service)を紹介する。

  • Heroku:PaaSの代表格。無料プランが2022/11/28に廃止される。引き続きHerokuでデプロイ・運営するには最低でも月額$7が必要。(サブスク形式)
  • Railway:無料枠で活用できるPaaS。GitHubアカウントさえあれば誰でも始められる。
  • Fly.io:Railway同様に無料枠で活用できるPaaS。多種多様な言語・フレームワークに対応している。
  • Firebase:Googleが開発したデータベースサービスと認証サービスがついたホスティングサービス。
  • Vercel:Next.js(ReactベースのWebフレームワーク)で開発されたプロジェクトをデプロイできるPaaS。HTML/CSS、JavaScriptで制作されたWebサイトのホスティングもできる。

オススメのバックエンドフレームワーク3選

本記事でオススメするバックエンドフレームワークは次の3種である。すべて公式ドキュメントが充実していて情報量が豊富であり、学習コストが低い。

  • Django
  • FastAPI
  • NestJS

それぞれ順番に解説する。

1.Django

DjangoはPythonで開発されたWebフレームワークである。フルスタックフレームワークを自称しているので、デフォルトで認証など様々な機能があることが最大の特徴だ。あの有名なPinterestやInstagramはこれで開発されている。公式ドキュメントとチュートリアルが豊富であり、初心者でも簡単にWebアプリケーションを開発できる

https://www.djangoproject.com/

Django REST Frameworkを使えば、DjangoでWeb APIを開発できる。こちらのDjangoの公式ドキュメントと同様にチュートリアルや内容が充実しており、初心者でも簡単なプロダクトを開発できる。

https://www.django-rest-framework.org/

2.FastAPI

FastAPIはDjangoと同様にPythonで開発されたWebフレームワークである。柔軟性が高く、自分好みのWebアプリケーションを開発できるのが最大の特徴だ。GraphQL APIの開発やMongoDBの連携など様々な分野に対応しているのが強み。公式ドキュメントが充実していて、Djangoと同様に初心者でも簡単なWebアプリケーションを開発できる。

初心者がPythonで簡単なバックエンドを開発するなら、FastAPIとDjangoを強く推奨する。これはDjangoにも言えることだが、Pythonで開発されているので機械学習やデータ分析との相性が抜群である

https://fastapi.tiangolo.com/

3.NestJS

NestJSはTypeScriptで開発されたNode.jsフレームワークである。公式ドキュメントが見やすい。WebSocketやGraphQL、MongoDBなど様々なソフトウェアと連携できるのが強み。設計思想がAngularに影響を受けている。TypeScriptで開発されているので、バックエンドとフロントエンドをTypeScriptで統一できるというメリットがある。(例えばReactあるいはNext.jsをフロントエンドに使う時)

https://docs.nestjs.com/

まとめ

今回の記事では、バックエンド開発を習得するために必要な10種類の知識を徹底解説した。本記事で紹介したものは次の通り。

  • Web
  • OSの基本操作
  • JavaScript
  • Node.js
  • Webフレームワーク
  • API
  • データベース
  • 認証・セキュリティ
  • テスト
  • デプロイ

あと、本記事で個人的にオススメするバックエンドフレームワークを3つ紹介した。

  • Django
  • FastAPI
  • NestJS

本記事はあくまで私の独断と偏見に基づいたロードマップなので、一個人の見解や意見として参考にしていただければ幸いだ。

参考サイト

GitHubで編集を提案

Discussion