はじめに
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)