はじめに
Webシステムの開発に携わりたくて転職して9か月,知らない事ばかりで日々勉強しております。
自分の勉強用メモとして知っておくべき技術をまとめようと思いました。
(こちらの記事にインスパイアされたものです)
技術用語について,なるべく2~3行で概要を説明できる事を目指しています。
情報が多過ぎるので,主流な技術は見出しを赤字にしています。(主観強め)
また,今後需要が増えそうな技術は青字にしています。(かなり主観強め)
とはいえ,新しい技術が登場すれば,数年でトレンドが変わってしまう事も多々あると思います。
ほとんどはあくまでも初心者がネットで情報をかき集めた程度のものです。
誤りがあればご指摘,ご意見など頂きたいです。
※2023/2/6追記
不正確・不十分だと思った記載はひっそりと随時修正しています。
また,「そういえばこんなんあったな」という項目も追記しています。
あと,自分が読み方覚えたいものはルビを振っていきます。
【クラウドプラットフォーム】
IaaS, PaaS, SaaSを提供しています。
AWSとAzureでシェア50%を超えます。
オンプレ環境で数ヶ月かけて構築するようなインフラが,ワンクリックで用意できる時代になってしまいました。
(知識が必要な事に変わりはありませんが)
大企業ではAzureの採用が増えているように感じます。
AWS(Amazon Web Services)
2006年サービス開始。シェア31%(2022年)
IT業界に革命を起こしたクラウドサービスの先駆けです。
各サービスの名前が独特です。
主要なサービスはみんな知っている前提で話をされる事があります。
-
Amazon EC2: 仮想サーバーです。 -
Amazon EBS: 高可用性のストレージです。EC2インスタンスからローカルディスクとして認識されます。 -
Amazon S3: ストレージです。EBSより容量あたりの料金が安いので画像や動画などのコンテンツの格納に向いています。 -
Amazon RDS: データベースです。 -
Route53: DNSです。名前の由来はUDP53番ポートです。
Microsoft Azure
2010年にサービス開始。シェア24%(2022年)
Microsoftの様々な製品・サービスと連携しやすいです。
クラウド コンピューティング サービス | Microsoft Azure
※英語圏の発音をカタカナにすると「アジュア」(アジャーのリズムで)が一番近い気がしますが,
ほとんどの日本人は「アジュール」と呼んでいます。
GCP(Google Cloud Platform)
2008年にサービス開始。シェア8%(2022年)です。
採用例を見たことが無いので何とも言えません。
大規模なデータの処理が得意らしいです。
【プログラミング言語】
JavaScript
Webブラウザ上で動く言語です。
現在のWebシステムは確実に使用します。
ECMAScriptという仕様で規格化されています。
私はES5の時代にトラウマを植え付けられたのですが,
ES6以降は仕様も綺麗になって最も人気の高い言語の1つです。
TypeScript
Microsoftが開発しました。
JavaScriptに静的型付けとオブジェクト指向を加えたスーパーセットです。
コンパイルするとJavaScriptになります。
Java
とても幅広く使われている言語です。
JVM(Java Virtual Machine)上で動きます。
サーバーサイドで企業に広く使われている言語です。
Java関連の技術を知ろうとするだけで情報量に圧倒されます。
Setter/Getterをメソッドとして書かないといけないのが面倒臭いです。
(IDEが面倒臭さの大部分を吸収してくれますが……)
Kotlin
Javaプラットフォームの言語です。
Javaよりも簡潔で安全な構文のモダンな言語です。
Androidの開発で使われます。(AndroidもかつてはJavaで開発されていました)
サーバーサイドの開発でも使用できます。
Scala
Javaプラットフォームの言語です。
Javaをモダン化した言語です。
「オブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語」らしいです。
難しそうです……
Groovy
Javaプラットフォームのスクリプト言語です。
Gradleでお世話になります。
Swift
特にiOSやmacOSの開発で使われます。
Objective-Cの後継です。
PHP
Webに特化したスクリプト言語です。
Ruby
日本製のスクリプト言語です。
スタートアップ向きです。
Python
インタープリタ型言語です。
AIや機械学習の分野に強いです。
科学計算の分野でもFORTRANからPythonに移る例があるようです。
Go(Golang/Go言語)
Googleが開発した言語です。
軽量でシンプルなのが特徴です。
継承や例外処理が無いのが特徴的です。
Rust
C,C++の後継として開発された言語です。
モダン言語のように安全で書きやすく,C++のように速い……らしいです。
C#
Microsoftが開発した言語です。
主にWindowsアプリ(.NET Framework)やUnity(ゲームエンジン)の開発などに使われます。
個人的に一番好きで,文法が最も美しい言語の1つだと思います。
VB.NET(Visual Basic .NET)
Microsoftが開発した言語です。
見た目はVisual Basic風ですが,仕様はほとんどC#です。
個人的には絶対に関わりたくない言語No.1です。
VBA(Visual Basic for Applications)
Excelのマクロが作れます。
Webに関係無いのですが,これでゴリゴリツール作ってる職場もあります。
【サーバーサイドのフレームワークなど】
「サーバーサイド」「バックエンド」が何を指すかは人や文脈に依りますが,
私は以下のように解釈しました。
-
フロントエンド: ユーザーの目に見えるもの(ブラウザやクライアントアプリ) -
サーバーサイド: サーバー上で動くもの -
バックエンド: ユーザーから見えない処理をするもの
Spring
Javaプラットフォームのフレームワークです。
Spring Frameworkか,それを使いやすくするSpring Bootを指す事が多いです。
Java,Kotlin,Scala,Groovyなどで開発できます。
複数言語が選択肢って扱いが難しそう……と思いきや,
Spring Initializrで言語などを指定するとすぐにプロジェクトのテンプレートを用意してくれました。
Ruby on Rails
RubyのWebフレームワークです。
"Don't Repeat Yourself" という理念が素敵です。
Redmineの開発にも使われています。
Laravel
PHPのWebフレームワークです。
Laravel - The PHP Framework For Web Artisans
Flask
PythonのWebフレームワークです。
Welcome to Flask — Flask Documentation (2.2.x)
Django
PythonのWebフレームワークです。
The web framework for perfectionists with deadlines | Django
Gin
GoのWebフレームワークです。
Node.js
サーバーサイドのJavaScript実行環境です。
SSRを実現したり,JavaScriptでフルスタック開発したりと色々できるようです。
npm(Node Package Manager)というNode.js用のパッケージ管理ツールを使用します。
Express.js
Node.jsのWebアプリケーションフレームワークです。
Express - Node.js web application framework
【フロントエンドのフレームワークなど】
SPAを実現するJavaScript(TypeScript)フレームワーク(もしくはライブラリ)です。
Angular,React,Vue.jsが御三家です。
Angular (2.0以降)
Googleが開発しました。2016年リリース。
前身のAngularJS(Angular 1)は2010年リリースです。
React
Facebook(現Meta)が開発したJavaScriptライブラリです。2013年リリース。
レンダラーに依存しないという原則があり,Webに限らずスマホアプリなどにも適用できます。
React – ユーザインターフェース構築のための JavaScript ライブラリ
Next.js
Reactベースのフレームワークです。2016年リリース。
SSR,SSG,ISRが使えます。
フロント技術の中でも先進的なようです。
Next.js by Vercel - The React Framework
Vue.js
JavaScriptフレームワークです。2014年リリース。
日本では使用率が高いようです。
Vue.js - The Progressive JavaScript Framework | Vue.js
Nuxt.js
Vue.jsベースのフレームワークです。
Next.jsにインスパイアされたらしいです。
SSR,SSGが使えます。
Nuxt: The Intuitive Web Framework
その他,JavaScriptやReactで使われるライブラリ
jQuery
Redux
Recoil
SWR
【MPAとSPA】
現在,新規開発されるWebシステムはSPAが多いです。
MPA(Multiple Page Application)
従来から存在するWebの仕組みです。
ブラウザからのHTTPリクエストに対して,サーバーからHTMLが返って来て,レンダリングし,画面遷移します。
ユーザーが操作する度にこれを何度も繰り返します。
JSPなどで開発されます。
画面とビジネスロジックを分離しづらいという欠点がありました。
例えばWebデザイナーが納品したHTML/CSSからJSPを作る作業をエンジニアがしたり。
SPA(Single Page Application)
現在主流の仕組みです。
ブラウザはWebシステムにアクセスした初回のみHTMLを受け取ります。
以降はAPIへのHTTPリクエストに対してデータのみを受け取って差分のみ画面を更新します。
-
ユーザーのメリット
- 操作毎に読み込みを待たなくて良いので快適
-
開発者のメリット
- フロントエンドエンジニアは画面の開発に集中できる
- バックエンドエンジニアはビジネスロジックの開発に集中できる
- ブラウザ,スマホアプリ,デスクトップアプリでAPIを共用できる
-
デメリット
- ユーザーにとって初回の読み込みが長い
- API通信は少し知識のあるユーザーには丸見えなので
MPAでは起こらないセキュリティ問題が発生し得る
(TwitterのAPIに問題があって個人情報が大量流出した事件などは記憶に新しいです) -
SEO(検索エンジン最適化)がMPAより難しくなる - 画面遷移してもURLが変わらない(変える為に開発者は
Routerというものを書かないといけない)
【SPAのレンダリング方式】
ページのレンダリングをいつどこでするか,方式によって特徴が変わります。
使用できる方式はフレームワークによって変わります。
また,1つのシステムでも機能ごとに方式を使い分ける事もできます。
CSR(Client Side Rendering)
ブラウザでページをレンダリングします。
読み込みに時間がかかります。
特にスマホや低スペックなPCでは遅くなります。
SSR(Server Side Rendering)
CSRの欠点を解消するためにサーバー上でレンダリングを行います。
レンダリングがサーバーサイドで行われるという点ではMPAと同じですね。
サーバー上でJavaScriptを処理するためにNode.jsなどを使用します。
-
メリット
-
CSRより読み込みが早い -
SEOに有利
-
-
デメリット
- サーバーの負荷が増える
SSG(Static Site Generation)
SSRの欠点を解消するために,ビルド時にレンダリングを済ませておきます。
内容が更新されない静的なコンテンツ向けです。
-
メリット
-
CSR,SSRより読み込みが早い -
SEOに有利
-
-
デメリット
- APIで取得するような動的な情報に依存すると不都合が生まれる
ISR(Incremental Static Regeneration)
SSGの欠点を解消するために,サーバーで定期的にレンダリングを行います。
こちらもNode.jsなどを使用します。
-
メリット
-
SSGのメリットを享受しつつ,動的な情報に対応できる
-
-
デメリット
- タイミングによってはユーザーが最新の情報を得られない
【WebAPIアーキテクチャ】
クライアントとサーバー,あるいはサーバーとサーバーはWebAPIを介して通信することが多いです。
HTTPリクエストに対してレスポンスによってデータを送ります。
APIという言葉はカーネルなどWeb以外の分野でも使いますが,
Webシステム開発の文脈で単に「API」と言った場合はWebAPI(HTTPでアクセスするAPI)の事を指します。
SOAP
データをやり取りするためのプロトコルです。XMLを使用しています。
メッセージはSOAPヘッダーとSOAPボディから成るSOAPエンベロープという構造を持ちます。
WebAPIではHTTPリクエストにXMLを返すものですが,下位プロトコルはHTTPに限りません。
REST(Representational State Transfer)
アーキテクチャースタイルです。
RESTの制約に従ったシステムを「RESTfulである」などと言います。
Webの文脈ではHTTPリクエストに対してJSON,XML,HTML,プレーンテキストなどを返す実装を指します。
特にJSONがポピュラーです。
これをREST APIやRESTful APIと呼ぶことが多いです。
扱いが簡単な一方で,項目のボリュームが増えると管理が煩雑です。
とはいえ,最も広く使用されていてエコシステムが豊富なのでデフォルトの選択肢になります。
Architectural Styles and the Design of Network-based Software Architectures
OAS(OpenAPI Specification)/OpenAPI 仕様
Swaggerで定められて広まったRESTful Webサービスの仕様です。
主にYAMLでAPI仕様を記述します。
なお,一般(or 提携企業)に公開するAPIはOpen APIsと呼ぶようです。
日本語では「オープンAPI」と呼ばれています。(まぎらわしい……)
GraphQL
Facebook(現Meta)が開発しました
クエリーで必要な項目を指定してデータをJSONで取得します。
GraphQLではリクエストする側がレスポンスに必要な項目をPOSTします。
これにより,REST APIであった過剰なデータ取得やAPI開発の手間を削減できます。
GraphQL | A query language for your API
gRPC(Google Remote Procedure Calls)
Googleが開発しました。
RPCをモダン化したものです。
データをシリアライズするのでREST APIより軽量なAPIが実現されます。
【Ajax】(Asynchronous JavaScript And XML)
ブラウザから非同期で(=ページ遷移せず)HTTPリクエストを送る方法です。
これによってSPAが実現できます。
名前にXMLが入っていますが,もはやXMLに限りません。
XHR(XMLHttpRequest)
初期の技術です。
標準で使用できます。
jQuery.ajax
jQueryはJavaScriptライブラリです。
その中にAjax機能があります。
axios
Ajax送信のためのJavaScriptライブラリです。
Fetch API
XHRより新しく便利な仕組みです。
標準で使用できます。
【IDE(統合開発環境)】
ソースコードを書いたりデバッグしたりするためのソフトです。
構文が間違っているとすぐに指摘してくれたり,コードを補完してくれたり,
最近ではAIがコードをサジェストしてくれたりします。
IDEによって得意な言語が変わります。
Visual Studio
Microsoftの製品です。
主にC#の開発に用いられます。
個人,学習環境などであれば無償版のVisual Studio Communityが利用できます。
VSCode(Visual Studio Code)
Microsoftが開発したOSSのテキストエディタです。
拡張機能をインストールすることで様々な言語に対応できます。
優秀過ぎてAtomを開発終了に追い込んだと言われています。
Eclipse
OSSです。
主にJava系の開発で使われる開発環境です。
IntelliJ IDEA
JetBrainsの製品です。
主にJava系の開発で使われるIDEです。
有償ですが,教育目的や非営利など条件を満たせば無償で利用できます。
GoLand
JetBrainsの製品です。
主にGoの開発で使われるIDEです。
有償ですが,教育目的や非営利など条件を満たせば無償で利用できます。
Xcode
Apple公式のmacOS用IDEです。
Swift等の開発に使用されます。
【OS】(Operating System)
UNIX
1969年に開発されました。
現代人が「OS」と聞いて思い浮かべるもので最も古いです。
Linux
1991年にUNIXを真似して作られたOSです。
無数のディストリビューションがあります。
サーバーサイドのOSはLinuxが選ばれる事がほとんどだと思います。
有名なディストリビューション
-
Red Hat系-
Fedora: Red Hatが支援するコミュニティで開発されています。RHELの実験場のような位置付けです。 -
Red Hat Enterprise Linux(RHEL): 名前の通りエンタープライズ品質です。高いです。個人開発者は無料で16ノード使えます。 -
CentOS: RHELのクローンです。無料かつ高品質ですがサポート終了します。 -
Amazon Linux 2: AWSでお世話になります。
-
-
Debian系-
Ubuntu: 使いやすさを重視しています。 -
Linux mint: Ubuntuの派生です。
-
Windows
Microsoftのパソコン向けOSです。
大企業の業務環境は大抵Windowsです。
Windows Server
MicrosoftのサーバーOSです。
ADサーバーに使われる事が多いです。
Android
Googleが開発したスマートフォン向け汎用OSです。
iOS
AppleのiPhoneのOSです。
macOS
AppleのMacのOSです。
【RDBMS/データベース】(Relational Database Management System)
Webシステムでは必ずと言っていいほどRDB(Relational Database)を使用します。
SQL(Structured Query Language)を書けることはエンジニアを名乗るなら必須スキルです。
Oracle Database
OracleのRDBMS製品です。
高い信頼性を謳っています。
価格がとても高いです。大企業向けです。
IBM Db2
IBMのRDBMS製品です。
こちらも大企業向けなイメージです。
Microsoft SQL Server
MicrosoftのRDBMS製品です。
MySQL
OSSのRDBMSです。
Oracleが所有しています。
Maria DB
MySQLから派生したOSSのRDBMSです。
多くの点でMySQLより優れている
MariaDB Enterprise Open Source Database & SkySQL MariaDB Cloud | MariaDB
PostgreSQL
OSSのRDBMSです。
通称「ポスグレ」
Oracle Databaseと高い互換性があります。
Oracle Databaseが高いと感じた企業が移行先に選ぶ事がよくある気がします。
日本PostgreSQLユーザ会 | 日本PostgreSQLユーザ会
【データベース接続クライアント/SQLクライアント】
OracleだとOracle SQL Developer(開発環境),Oracle Database Client(アプリ用ライブラリ)などがありますが,
そんな事はきっと会社の手順書に書いてあるので,ここは汎用的なSQLクライアントのメモです。
A5:SQL Mk-2
フリーソフトです。
DBeaver
OSSです。
有償版もあります。
DBeaver Community | Free Universal Database Tool
【NoSQL】
RDBではない,SQLを使用しないデータベースです。
RDBに比べると整合性が担保されない代わりに,高速で大容量のデータを扱えます。
ビッグデータの分野などでも使われます。
HBase(Apache HBase)
列指向の非リレーショナル・データベース管理システムです。
Hadoop(Apache Hadoop)という分散技術を使用しています。
Solr(Apache Solr)というサーチエンジンが使えます。
SolrではクエリーをURIで表現でき,アプリはHTTPでデータを受け取る事ができます。
Apache HBase – Apache HBase™ Home
MongoDB
ドキュメント志向のデータベースです。
【コンテナ仮想化技術】
現在のWebシステム開発で必須となっているのがコンテナ仮想化に関する技術です。
アプリケーションやミドルウェアをまとめてパッケージ化し,1つのホストOSの中で複数の環境を運用することがきでます。
OSの仮想化に比べて,リソースが効率的に活用できます。
(仮想OSの中でコンテナを動かすこともできます)
Docker
コンテナ仮想化のオープンプラットフォームです。
Windows上で動くデスクトップ版もあります。
Docker: Accelerated, Containerized Application Development
Kubernetes(K8s)
コンテナ・オーケストレーション・プラットフォーム(コンテナを管理する仕組み)です。
多くの場合でDockerと共に使用されます。
Dockerは1つのノード(OS)内でコンテナを管理しますが,
Kubernetesは複数ノードにまたがってシステム全体を管理します。
【OS仮想化技術】
コンテナ化の技術が普及したことで,アプリ開発者は仮想OSを意識する事が減りました。
VMware vSphere
VMware社の製品です。
KVM
Red Hatの製品です。
Linuxがハイパーバイザーになります。
【バージョン管理システム(ソース管理ツール)】
ソースコードの参照,更新をする上でこれらのツールの操作は必須となります。
Git
現在,最も使用されているバージョン管理ツールです。
使うためにはリモートリポジトリとローカルリポジトリの概念を理解する必要があります。
主要なクラウドプラットフォームは標準的にGitを備えています。
GitHub
Gitを使用しているインターネット上の開発プラットフォームです。
2018年にMicrosoftが買収しました。
様々なプロジェクトのソースコードが見れます。
GitHubにリポジトリを持つ企業沢山もあります。
SVN(Apache Subversion)
Gitより昔からあるソース管理ツールです。
TortoiseSVNというクライアントソフトがよく使われます。
かつてはSVNでソースコードを管理していましたが,多くの現場はGitに移行しています。
【CI/CDパイプライン】
CI/CD(Continuous Integration/Continuous Delivery)とは,
ビルド -> テスト -> デプロイなどを自動化するアプローチです。
開発作業を効率化・高品質化します。
主要なクラウドプラットフォームはCI/CDサービスを備えています。
AWS CodePipeline
AWSのCI/CDサービスです。
Azure Pipelines
AzureのCI/CDサービスです。
Cloud Build
GCPのCI/CDサービスです。
Jenkins
オープンソースのCIツールです。
社内環境でも使えます。
GitLab
Gitのマネージャーです。
GitLab CI/CDというツールを備えています。
【Javaのビルドツール】
主にJava系言語のプロジェクトでお世話になります。
Maven(Apache Maven)
Java用プロジェクト管理ツールです。
Antの後継です。
pom.xmlを編集します
Gradle
現在Java系で主流となっているビルドツールです。
build.gradleを編集します。
Mavenとの最大の違いはスクリプトでビルドの手続きを記述することです。
【Webサーバー】
クライアントからのHTTPリクエストを処理するミドルウェアです。
(もしくはこの機能を担うサーバー装置を指す場合もあります)
Apache HTTP Server
OSSのWebサーバーです。
歴史的に,単に「Apache」というとこれを指す事が多いです。
IIS(Microsoft Internet Information Services)
Windowsサーバーが備えるWebサーバーです。
nginx
OSSのWebサーバーです。
リバースプロキシ機能があります。
性能が高く,大量のリクエストの処理や静的コンテンツが得意です。
【APサーバー】
Webサーバーから受けた要求によってビジネスロジックを実行したりDBアクセスをするJavaアプリケーションを動かすためのミドルウェアです。
(もしくはこの機能を担うサーバー装置を指す場合もあります)
2023/8/4 追記
ここに記載しているのはJavaのAPサーバーです。
Java以外の言語では、例えば、Webサーバーの拡張機能でアプリが動いていたり、その言語用のAPサーバー相当のものがあったりするようです。(Java以外でのAPサーバーという言葉の取扱はよくわかりませんでした)
Apache Tomcat
OSSのAPサーバーです。
Java ServletやJSP(JavaServer Pages)を実行するサーブレットコンテナです。
WARファイルをデプロイできます。
同等のミドルウェア: Jetty
WildFly(旧JBoss AS)
Red Hatが開発したOSSのAPサーバーです。
Jakarta EEに対応しており,Tomcatより高機能です。
WARファイルやEARファイルをデプロイできます。
同等のミドルウェア: WebSphere(IBM),WebLogic(Oracle),GlassFish(OSS)
JBoss EAP(JBoss Enterprise Application Platform)
WildFlyの商用版です。
商用利用のためにはサポート契約が必要です。
【API開発者向けツール】
APIの仕様を管理したり,実際にHTTPリクエストを送るためのツールです。
Swagger
YAMLでOpenAPIの仕様を定義し,管理できます。
API Documentation & Design Tools for Teams | Swagger
Postman
Postman Inc.の製品です。
変数などを扱えてSwaggerより使い勝手が良かったです。
無料で機能制限があるクライアント版を使用でき,設定ファイルの入出力も可能です。
有償版ではチームで設定を共有できます。
Postman API Platform | Sign Up for Free
cURL
ライブラリです。
Linuxに最初からインストールされていたりします。
手軽にコマンドでHTTPリクエストを実行できます。
【IaC】(Infrastructure as Code)
ネットワーク,サーバー,ミドルウェアなどのインフラをコードとして定義する技術です。
同じインフラ構成を別の場所で再現するのに便利です。
よく使われるAnsibleとTerraformはエージェントレスですが,エージェント型のものもあります。
Ansible
手続き型のIaCです。
構築の手順を記述します。
サーバー,ネットワークの環境構築によく使われます。
Ansible is Simple IT Automation
Terraform
宣言型のIaCです。
環境のあるべき姿を記述します。
クラウド上のサーバー,ネットワークの構築でよく使われます。
【認証技術】
OAuth 2.0
標準的に使われる認可プロトコルです。
複数のシステムの連携に使用できます。
認証の際に利用可能なリソースまで定義されるのが特徴です。
TwitterやFacebookのアプリ連携もこの仕組です。
OpenID Connect
SSOを実現する認証プロトコルです。
OAuth 2.0を拡張したものです。
Google,LINE,Yahoo! Japanなどが準拠しています。
SAML(Security Assertion Markup Language)
SSOを実現する認証プロトコルです。
HTTPとSOAPを使用します。
社内システムでよく使用されます。
Security Assertion Markup Language (SAML) V2.0 Technical Overview
【マークアップ言語】
単純なテキストと決められた構文で何かを表現する言語です。
HTML(HyperText Ma rkup Language)
Webページを表現するための言語です。
CSS(Cascading Style Sheets)
スタイルシート言語です。(マークアップ言語とは違うかもしれませんが)
XML(Extensible Markup Language)
コンピューターが理解しやすい構文です。
人間には見づらいです。
JSON(JavaScript Object Notation)
XMLと同等のデータを表現できますが,XMLよりも人間が読み書きしやすい構文です。
YAML
見た目はJSONに似ています。(JSONがYAMLのサブセットなので当たり前らしいですが)
設定ファイルなどでよく使用します。
Markdown
HTMLの書きづらさを解消した言語です。
簡単な記載でHTMLにレンダリングされます。
ソースコードと横並びのドキュメントの記載などで使用します。
Wikiなどでも使います。
Qiitaの記事もMarkdownで記載されます。(HTMLも使えますが)
PlantUML
UML図を記載する言語です。
Mermaid
UML図を記載する言語です。
Mermaid | Diagramming and charting tool
TeX
数式を記載する言語です。
【技術スタック】
完全なアプリケーションを実現するための技術(フレームワークやミドルウェアやDB)の集まりに対する呼称です。
アプリケーションを作るために絶対に必要という訳ではないですが,スタックを使えば必要な技術要素が揃う事が保証されます。
LAMP
- Linux
- Apache HTTP Server
- MySQL(or MariaDB)
-
PHP(, Perl or Python)
の頭文字です。
MEAN
- MongoDB
- Express
- AngularJS
-
Node.js
の頭文字です。
AngularをVue.jsに置き換えたMEVNや,
Reactに置き換えたMERNという言葉もあります。
JAM
- JavaScript
- APIs
-
Markup
の頭文字です。
【プロトコル】
HTTP(Hypertext Transfer Protocol)
Webシステム開発で最も重要な技術です。
API設計やトラブルシューティングをする上で必ず理解する必要があります。
-
HTTPリクエストの構造(HEADER, BODY) -
HTTPメソッド(GET, POST, PUT, DELETE, etc.) -
HTTPレスポンスの構造 -
HTTPステータスコード(200, 400, 401, 403, 404, 500, etc.)
実際の運用ではトランスポート層で暗号化されたHTTPSを使用します。
SSH(Secure Shell)
ノードにリモートアクセスするためのプロトコルです。
Telnetは認証を平文で行うため脆弱性がありますが,SSHはセキュアです。
【技術用語】
認証(Authentication)
「アクセスしている人が誰か」を確かめる仕組みです。
認証の要素はIDとパスワード,BASIC認証,ワンタイムパスワード,Twitter,クライアント証明書など。
認可(Authorization)
認証された人に対してリソースに対する権限を与えることです。
参照権限,更新権限,承認権限など。
SSO(Single Sign On)
シングルサインオンです。
例: 会社のWindowsにADアカウントでログインしたら社内の複数のシステムがそのまま使える
証明書/認証局
クライアントやサーバーが本物であることを証明するための仕組みです。
公開鍵と秘密鍵を使います。
ある認証局のルート証明書を信頼していると,認証局にアクセスせずにその認証局が発行したクライアント証明書・サーバー証明書を検証することができます。
FQDN(Fully Qualified Domain Name)
ドメインとサーバー名を組み合わせたものです。
このような関係です。
URL: https://www.microsoft.com/
ドメイン名: microsoft.com
ホスト名: www
FQDN: www.microsoft.com
大抵はDNSによってFQDNが1つのIPアドレスと紐付きます。
CDN(Content Delivery Network)
世界中のサーバーにコンテンツをミラーする仕組みです。
大量のユーザーがアクセスするサービスで使用されます。
アカマイ,Cloudflare,Amazon CloudFrontが有名です。
【おわりに】
ここでは取り上げていない技術や概念も無数にあります。
やっと何かを理解したと思ったら,別の新技術が流行っていたりもします。
同列に語られる技術でもカバーする範囲が微妙に違ったり,
言葉によっては厳密な意味が定義されていなかったり,
「実装までは言及していない仕様」と「よくある実装」を混同している記事が多かったり,
で調べるのが中々大変です。
(アプリを開発する上でそこまで細かい事を正確に知る意味はあまり無いかもしれませんが……)
【参考】
SPA(Single Page Application)と利用されるレンダリング技術まとめ | yutaro blog
本当にRESTは「4つの原則」?原文に当たって分かった驚きの事実 | 日経クロステック(xTECH)