Web開発の技術スタックに関するキュレーション
フロントエンド
Javascriptフレームワーク
AngularJS
AngularJSは、Googleが中心となって開発していたJavaScriptのWebアプリケーションフレームワークである。
2009年にリリースされ、2022年にサポートが終了した。
MVW(Model-View-Whatever)パターンを採用し、データと画面とそれ以外の部分を分離して設計する。
MEANスタックにおけるAの部分であり、フロントエンド部分である。
DOM操作をアプリケーションロジックから分離することや、クライアントサイドとサーバサイドを分離することを目標としていた。
React
Reactは、Meta(旧Facebook)社が開発しているJavaScriptのUIフレームワークである。
UIを再利用可能な小さな部品に分割するコンポーネントベースのアーキテクチャを提供する。
シングルページアプリケーションやモバイルアプリケーション開発におけるUIデザインのベースとして使用される。
単方向データフローを採用しており、データは親コンポーネントから子コンポーネントへ一方向に流れるためデバッグが容易になる。
仮想DOMにより、変更部分の差分を計算し実際のDOMの変更部分を最小限にすることができる。
Vue.js
Vue.jsは、JavaScriptで書かれたUIフレームワークである。
部分的に導入できるプログレッシブフレームワークであり、コンポーネントベースのアーキテクチによりでアプリケーションを再利用可能な部品に分割する。
単一ファイルコンポーネントをサポートしており、HTML, CSS, JavaScriptを単一のファイルにまとめることができる。
仮想DOMを使用し、変更がある部分の差分のみを更新するためパフォーマンスの向上が期待できる。
Next.js
Next.jsは、ReactベースのオープンソースJavaScriptフレームワークであり、静的サイト生成やサーバサイドレンダリングなどの機能を提供する。
Next.jsは、Reactの機能を拡張しより強力に扱うためのフレームワークであり、近年人気のフロントエンドフレームワークの1つである。
サーバサイドでレンダリングを行うため、サイトの最初の表示画面の生成が早くなりSEO対策の観点で優れている。
Nuxt.js
Nuxt.jsは、Vue.jsベースのWebアプリケーションフレームワークである。
サーバサイドレンダリングと静的サイト生成の機能をサポートしており、SEO対策やパフォーマンス向上を実現することができる。
コンポーネント指向の設計手法により、コードの再利用性を高めることができる。またアプリケーションの保守性が向上する。
Nuxt.jsは、Vue.jsのエコシステムを活かしながら高度なWebアプリケーションの開発を実現できる、近年人気のフロントエンドフレームワークである。
CSSフレームワーク
Tailwind CSS
Tailwind CSSは、2017年にAdam Wathanによって開発されたオープンソースのCSSフレームワークである。
ユーティリティファーストなCSSフレームワークであり、HTMLのクラスにユーティリティクラスを指定することでスタイルを適用することができる。
低レベルのユーティリティクラスによってスタイリングを行うため、柔軟性が高いデザインを実現できる。
レスポンシブデザインを強力にサポートし、ディスプレイサイズごとに異なるスタイルを適用するためのクラスを提供する。
バックエンド
PHPフレームワーク
Laravel
Laravelは、PHPで書かれたオープンソースのWebアプリケーションフレームワークである。
MVCアーキテクチャ(Model, View, Controller)を採用しており、アプリケーション構造を簡素化し効率的な開発が可能である。
PythonのDjango, RubyのRuby on Railsと並んで三大バックエンドフレームワークと呼ばれる。
Webアプリケーションフレームワークとしては後発であったが、それゆえに設計がモダンでありPHPの人気の再燃にも繋がった。PHPのフレームワークの中で最も人気が高く、活発に開発が行われている。
CakePHP
CakePHPは、MVCアーキテクチャを採用したPHPのオープンソースWebアプリケーションフレームワークである。
Ruby on Railsに影響を受けて開発された。
Laravelに首位を奪われるまでは、PHPで最も人気なフレームワークであった。
コード生成機能や、オブジェクトリレーショナルマッピング(ORM)の機能を提供する。
Symfony
Symfonyは、PHPで開発されたWebアプリケーションフレームワークであり、堅牢性と拡張性に焦点を当てている。
MVCアーキテクチャを採用しており、コードの再利用性が高い。
オブジェクトリレーショナルマッピング(ORM)としては、PropelとDoctrineをサポートしている。
Pythonフレームワーク
Django
Djangoは、Pythonで開発されたオープンソースのWebサプリケーションフレームワークである。
MVCアーキテクチャに基づいており、アプリケーション構造を簡素化し効率的な開発を行うことができる。
強力なオブジェクトリレーショナルマッピング(ORM)をサポートしており、データベースのテーブルやクエリをPythonのクラスやメソッドとして扱うことができる。
URLルーティングをサポートし、URLパターンに対するビューを定義しリクエストに対する処理をマッピングできる。
YouTube, Instagram, Spotifyといったサービスで採用されている。
Flask
Flaskは、Pythonで開発された軽量なWebアプリケーションフレームワークである。
標準で提供する機能が最小限であることから、自身を「マイクロフレームワーク」と呼んでいる。
Flaskは、WarkzergとJinja2といった他のPythonライブラリを使用しており、WarkzergはWebアプリケーションフレームワーク用のユーティリティを提供し、Jinja2はテンプレートエンジンを提供する。
URLパターンに対するビューを定義し、リクエストに対する処理を実装できる。
Rubyフレームワーク
Ruby on Rails
Ruby on Railsは、Ruby開発されたオープンソースのWebアプリケーションフレームワークである。
MVCアーキテクチャに基づいてアプリケーションを作成していく。
「同じことを繰り返さない: DRY(Don't Repeat Yourself)」ことや「設定より規約: CoC(Convention over Configuration)」を基本理念としており、開発者は生産性を向上させることができる。
Ruby on Railsは他のフレームワークに大きな影響を与えており、CakePHP, Symfony, Catalystはその例である。
データベースマネジメントシステム
リレーショナルデータベース(RDB)
MySQL
MySQLは、オープンソースのリレーショナルデータベース管理システムであり、クロスプラットフォーム(Linux, Windows, macOS)で動作する。
LAMP環境におけるMの部分であり、多くのWebアプリケーションやサーバサイドの開発で広く利用されている。
最も人気なRDBMSの1つである。
Facebook, MediaWiki, Twitter, YouTubeなどの多くの人気サービスで採用されている。
InnoDBおよびNDB Cluster Storage Engineまたはソフトウェアモジュールで使用する場合のみACIDコンプライアンスに準拠する。
MariaDB
MariaDBは、MySQLから派生したオープンソースのリレーショナルデータベース管理システムである。
MySQLとの互換性を保ちながら、拡張や改善を加えている。
InnoDB, MyRocks, Ariaなどの複数のストレージエンジンを利用できる。
SQLite
SQLiteは、軽量な埋め込み型のリレーショナルデータベース管理システムである。
サーバを必要とせず、単一のファイルにデータを格納することができる。
トランザクションをサポートしており、スレッドセーフである。
Androidの標準ライブラリとして採用されており、モバイルアプリケーションのデータベースとして広く利用されている。
オブジェクトリレーショナルデータベース(ORDB)
PostgreSQL
PostgreSQLは、フリーでオープンソースのリレーショナルデータベース管理システムである。
近年、RDBMSの中でシェアを伸ばしている。
すべての設定でACIDプロパティを持つトランザクションをサポートしており、データベースの整合性を確保している。
PostgreSQLは、オブジェクトリレーショナルデータベースであり、データをプロパティ付きのオブジェクトとして保存することができる。
MySQLのデータ型のほかに、列挙型、配列、複合型などのデータ型もサポートしている。
NoSQL
MongoDB
MongoDBは、オープンソースのNoSQLデータベース管理システムである。
ドキュメント指向のデータベースであり、JSONライクな形式のドキュメントを使用してデータを管理する。
スキーマレスであり、事前にデータ構造を指定する必要がない。
JSONはJavaScriptでよく使用されるデータ形式であるため、JavaScriptで開発されたアプリケーションでの連携が簡単である。
ドキュメント形式であるため、高度な結合操作を効率的に行うことはできないが、データの追加・更新・削除を高速に行うことができる。
Redis
Redisは、NoSQLデータベースの1つであり、オープンソースなインメモリデータベースである。
データをすべてメモリに保存するため、高速にデータを処理することが可能である。
非同期でデータをディスクへ保存する機能があり、再起動をしてもデータが失われないという永続性を確保する。
データの永続性が必要ない場合にはメモリ上のみで動作する。
サーバ
Webサーバ
Apache HTTP Server
Apache HTTP ServerはオープンソースのWebサーバソフトウェアであり、Apacheソフトウェア財団によって開発・維持されている。主にWWW上で静的・動的コンテンツを提供するために広く利用されている。
Apacheはクロスプラットフォームであり、Windows, Linux, macOSで動作する。
Apacheはモジュールアーキテクチャを採用しており、モジュールを追加することで機能を拡張できる。
LAMP環境におけるAの部分であり、Webサイトの構築における主要なオープンソースソフトウェアである。
nginx
nginxは、オープンソースで開発されているWebサーバソフトウェアであり、Apacheと並んで人気のあるWebサーバソフトウェアである。nginxは、処理性能・並行性・省メモリ使用量に焦点を当てて開発されており、Apacheと比較して高速で高負荷に強いという特徴がある。
リバースプロキシの機能も有しており、メインサーバの負荷を軽減することができる。
プロキシサーバ
Apache Traffic Server
Apache Traffic Serverは、Apache Software Foundationのもとで開発されているオープンソースなキャッシュプロキシサーバである。
Traffic Serverは、キャッシュされたURLへのリクエストについてはメインサーバへ転送せず、キャッシュされたコンテンツをレスポンスとして返す。これにより、メインサーバの負荷を軽減し高速なレスポンスが期待できる。
検索エンジン
Apache Solr
Apache Solrは、Apache Luceneを基盤に作られたオープンソースの全文検索システムである。
Luceneのサブプロジェクトとして開発されている。
Javaで開発されており、分散型検索、全文検索をサポートする。また、RESTfulなAPIを提供する。
Solrの特徴は以下のとおりである。
- 分散型検索: 複数のノードにデータを分散することで、大規模なデータセットに対しても高いパフォーマンスを発揮できる。
- 全文検索: Luceneベースであり、形態素解析やトークナイザのカスタマイズ、スコアリング制御など高度な検索オプションが利用可能。
- データの統合: リレーショナルデータベースの統合やインポートをサポートしている。また、JSON, XML, CSVなどの多くの形式をサポートしている。
- 柔軟なスキーマ設計: 異なる種類のドキュメントを同じインデックス内で処理できる。
- 豊富な拡張性: プラグインアーキテクチャを採用しているため、拡張機能を統合できる。
Elasticsearch
Elasticsearchは、Apache Luceneを基盤として構築された分散型検索エンジンである。
大量のテキストデータの全文検索に特化しており、Webサイトの検索エンジンやログ分析、データ分析に利用される。ElasticsearchではJSON形式でデータを格納する。RESTfulなAPIを提供する。
かつてはオープンソースソフトウェア(OSS)であったが、現在はElastic社が提供するプロプライエタリソフトウェアである。
OpenSearch
OpenSearchは、OSSで提供されていたElesticsearchの最後のバージョンをフォークしてスタートした分散型検索エンジンである。主にアマゾンウェブサービス(AWS)によって開発・維持されている。
Elasticsearchのフォークであるため、APIやクエリ言語がほぼ同一であり互換性を維持していることからElasticsearchからスムーズな移行が可能である。
OS
Linux
Ubuntu
Ubuntuは、Debian GNU/Linuxを母体としたフリーのLinuxディストリビューションの1つであり、最も広く普及しているLinuxディストリビューションである。
GUIを採用しており、CUIに慣れていない人でも扱いやすい。
安定性と信頼性から、Webサービスのサーバとして選ばれることも多い。
LAMP環境のスタックをサポートしており、Apache, nginx, MySQL, Perl, PHP, Pythonなどが統合されている。
セキュリティにも重点をおいており、標準でrootログインは無効であり、ポートはすべて閉じている。
CentOS
CentOSは、Red Hat Enterprise Linux(RHEL)との互換性を持たせることを目的としたフリーのLinuxディストリビューションである。
CentOS Linuxは開発終了しており、現在はRHELのアップストリーム版であるCentOS Streamが開発中である。
名前は「Community ENTerprise Operating System」の略から。
CentOSは、サーバ用途で活用される場面が多く、安定性と信頼性から多くの企業で採用されている。
クラウドサービス
Amazon Web Service(AWS)
Amazon Web Service(AWS)は、Amazonが提供するクラウドコンピューティングサービスであり、Infrastructure as a Service(IaaS)のシェアトップ。
仮想サーバを提供するEC2や、オブジェクトストレージのS3など、200を超える多くのアーキテクチャを提供している。需要に応じてリソースを柔軟に割り当てることができるため、スケールアップ・ダウンが容易である。
従量課金制を採用しているため、リソースの無駄な使用を最小限に抑え、コスト効率を高めることができる。
セキュリティに重点を置いており、物理的なデータセンターのセキュリティから論理的なネットワークの暗号化、アクセスコントロールまで包括的なセキュリティ機能を提供する。
Microsoft Azure
Microsoft Aruzeは、Microsoftが提供するクラウドコンピューティングサービスであり、IaaSにおけるシェアはAWSに次いで2位。
コンピューティング、アクティブディレクトリ、データベース、機械学習、ブロックチェーンなど100を超えるサービスを提供している。
Google Cloud Platform(GCP)
Google Cloud Platform(GCP)は、Googleが提供しているクラウドコンピューティングサービスであり、IaaSにおけるシェアはAWS, Azureに次いで3位。Google Cloudサービスの1つとして提供されている。
コンピューティング、ストレージ、データベース、機械学習などの分野でサービスを提供している。
BigQueryやDataprocを利用したビッグデータの分析や、AIプロジェクトの開発を行うことができる。
Discussion