1 - 1.OS/システム用語
1.1. OS/Systemの用語
1.1.1. OSの処理能力(32bit/64bit)
OSのエディションには32bit/64bitがあり、それぞれ処理速度、扱えるメモリ量が異なる。
扱えるメモリ容量 | 扱えるHDD容量 | |
---|---|---|
32bit版 | 2~4GB | 2TBまで |
64bit版 | 8GB~2TB | 2TB以上 |
1.1.2. CPUのアーキテクチャ(x86, x64, arm)
x86(32bit)
x86はインテル(Intel)およびAMDなどのCPUアーキテクチャに関連する用語。 x86アーキテクチャは32bitプロセッサを指す。
32bitプロセッサは、32bitのデータ幅を持ち、通常、32bitの命令を処理する。
x64(64bit)
x64は64bitプロセッサアーキテクチャを指す。 x86の拡張バージョンであり、インテルおよびAMDの64bitプロセッサに関連する。
64bitプロセッサは、64bitのデータ幅とアドレッシングをサポートし、大容量のメモリと高性能処理を可能にする。
arm
ARM(Advanced RISC Machines)は、ARMホールディングスが開発した低電力のRISC(Reduced Instruction Set Computer)アーキテクチャ。 arm64で64bit、arm32で32bitの動作となる。
1.2. 言語特性/仕様の用語
1.2.1. GC(ガベージコレクション)
コンピュータプログラムの実行環境などが備える機能の1つであり、実行中のプログラムが占有していたメモリ領域のうち不要になったものを自動的に解放し、空き領域として再利用できるようにするもののことを言う。
1.2.2. クロージャ
あるコードブロック内で定義された関数などが、そのブロックをスコープとする変数などを参照できること。
また、そのような機能を利用してブロック内部で定義された関数のこと。
1.2.3. カリー化
複数の引数をとる関数を、1引数関数の連続した呼び出しに置き換えること.
JavaScriptの例
function greet (name, age) {
console.log('My name is ' + name + '. I am ' + age + ' years old.');
}
greet('taro', 27); // 引数を2つ渡す
// ↓↓↓
function greet (name) {
return function (age) {
console.log('My name is ' + name + '. I am ' + age + ' years old.');
}
}
greet('taro')(27); // 引数の渡し方が変わる
1.2.4. 高階関数
関数を引数や戻り値とする関数。
1.2.6. デコレータ
デコレータは関数やクラスの前後に特定の処理を追加できる機能。
1.2.7. サブルーチン
コンピュータプログラムの中で特定の機能や処理をひとまとまりの集合として定義し、他の箇所から呼び出して実行できるようにしたもの。
1.3. 開発言語の用語
1.3.1. WebAssembly
WebAssemblyは仮想マシン上で動作するバイナリ形式の命令のこと。 WebAssemblyには2つのフォーマットがあり、「Binary Format(WASM)」と「Teaxt Format(WAT)」がある。
公式ドキュメント:https://webassembly.org/getting-started/developers-guide/
WebAssemblyはCやC++、Rust、Goなどの様々な言語から上記のWebAssemblyの命令形式へコンパイルして利用する。
WebAssemblyを用いることにより得られるメリットは以下の3つ。
- JavaScriptではできなかった負荷の大きな処理をブラウザで実行可能
- C/C++など既存のソースコードをブラウザで実行可能
- フロントとバックの処理を同じ言語で記述できる
WebAssemblyが適用できる場面(ユースケース)としては負荷の大きな処理をブラウザで実装したいときに役に立つ。
- 動画、画像編集
- 画像認識
- 低遅延のVR・AR
- CAD
- ゲーム開発
- 圧縮や暗号化など
Qiitaの解説記事:https://qiita.com/t_katsumura/items/ff379aaaba6931aad1c4
1.3.2. JVM言語
処理系がJVM(Java仮想マシン)上で動作する言語の総称。 OS環境に実行が依存しない特徴がある。
Scala, Kotlinなどがある。
1.3.3. SSML
音声マークアップ言語。
2 - 2.システム開発用語
2.1. 開発系全般の用語
2.1.1. バージョン管理ツール
ファイルやデータのバージョンを管理する仕組みやツール。
リビジョン管理システムとも呼ばれる。
集中型と分散型の2種類がある。
集中型バージョン管理ツール
集中型バージョン管理ツールで1つのリポジトリのみを使用する。
リポジトリへの反映にはリポジトリと端末がネットワークで繋がっている必要があり、繋がっていなければファイルの変更履歴をリポジトリに反映することができない。
代表的な集中型のバージョン管理ツールにはSVNやCVSがある。
分散型バージョン管理ツール
分散型バージョン管理ツールは各ローカル環境にリポジトリの複製を作成し、ローカルごとにバージョン管理を行える特徴がある。
ローカルごとにバージョン管理を行い、そのあとで中心のリポジトリとバージョン管理の情報を共有する。
代表的な分散型のバージョン管理ツールにはGitがある。
2.1.2. コーディング・実装原則
YAGNI原則
後で使うと設計した機能は後から使わないという原則。
DRY原則
重複管理を避けて1か所で管理するというルール。
KISSの原則
複雑にせず単純にするという原則。
2.1.3. CMS/HeadlessCMS
CMS
WordPressやEC-CUBE、Drupalなどの従来のCMS。
HeadlessCMS
ヘッドレスCMSはコンテンツ管理機能に特化したCMS。
ヘッドレスCMSと従来のCMSは、管理機能であるバックエンドのみか、表示機能であるフロントエンド・バックエンド機能を同時に持つかに違いがある。
ヘッドレスCMSでは管理機能のみになるため、別に表示画面の用意と専門知識が必要となっている。その分表示画面の自由度が高まり、APIの受け取り先が格段に増えることから、さまざまなデバイス・チャネルに対応が可能と言える。
具体的なサービスにはStrapi、microCMS、GraphCMSなどがある。
2.2. フロントエンドの用語
2.2.1. SPA/MPA
SPA
SPA(Single Page Application)は単一のWebページで構成するアプリケーション。
ページ遷移を行わずにページやコンテンツの切り替えが可能なのが特徴。
言い換えると、他のページへ移動せずにコンテンツの切り替えができる技術。
具体的にはユーザーがひとつのサービスを通じて得られる体験であるUXの向上に効果があり、ブラウザの挙動に縛られることがないUIの実現が可能となっている。
SPAの開発はJavaScriptにより実現される。
またOSSで提供されているSPAを構築可能なフレームワークは以下のようなものがある.
- React ・・・ Facebook主導のフレームワーク、UIデザインの知識がなくても最先端のフロントエンドが作れる、スマホアプリにも拡張可能
- Vue ・・・ シンプルなフレームワークで使いやすい、日本語のドキュメントが充実している、学習コストが低い
- Angular ・・・ Google主導のフレームワーク、動作端末を考慮する必要がなく汎用性が高い、機能が多いため大規模開発に向いている
MPA
MPA(Multiple Page Application)は複数のページで構成されるアプリケーションです。
HTTP GETが来たら、リクエストに応じたHTMLを1つ1つ組み上げてブラウザに返すオーソドックスで昔ながらの特徴となっている。
Railsやlaravelなどのサーバサイドフレームワークを公式ドキュメント通り作るとこの設計になる。
またWordPressなどのCMSもMPA構成となっている。
2.2.2. SSR/CSR/SSG
SSR
SSR(Server Side Rendering)はページ遷移のたびサーバーにリクエストが走り、そのままサーバー側でAPIと連携をしてレンダリングが行われ、生成されたHTMLをブラウザに返すアーキテクチャのこと。
サーバー側でレンダリングが行われる特徴がある。
サーバーサイドレンダリング(SSR)は、その名の通りサーバー側でアプリケーションの HTML を生成しレスポンスとして返すことを言う。 一般的に利用されている MPA(Multiple Page Application)では言うまでもなく行われていることなので、SSR というワードは自ずと SPA(Single Page Application)を構築する際のオプション機能を指すことが多い。
SSRのメリットを整理すると、まず一番に挙がるのはレンダリングをサーバー側で行えるので、通常のSPAと比べて初回読み込みに時間がかからないということである。 厄介なレンダリング処理をサーバー側で行えるので、ブラウザの負担が減り、すなわちブラウザのスペックの高くない機器(スマホなど)でも安定した表示速度を保つことが可能となっている。
CSR
CSR(Client Side Rendering)は、クライアント側のJavaScriptを使用し直接ブラウザでページをレンダリングすることを言う。
大きいアプリケーションの場合クライアントで処理するJavascriptの量も増える(クライアントで処理する情報量が増加する)。
SEO的には弱い。
SSG
SSG(Static Site Generation)はビルド時に、サーバー側で、APIからのデータ取得とそれに伴ったHTMLの構築を終わらせておき、ユーザーからリクエストされた際にこの事前につくっておいたHTMLを渡すアーキテクチャ。
Next.jsやNuxt.jsなどを利用することで構築できる。
SEO対策が可能。
2.2.3. Cookie
Cookieは簡単に言うとサイト訪問者のユーザ情報をブラウザに一時保存(キャッシュ)する仕組み。
ファストパーティCookieとサードパーティCookieの2種類がある。
ファストパーティCookie
通常のログインに関する情報やショッピングカートの中身などの1つのサイト用のCookie。
サードパーティCookie
サードパーティクッキーは訪れたサイト以外のドメインから(第三者)から発行されたクッキーであり、ドメインを横断したトラッキングができるのでWEB広告で広く活用されている。
Googleにより、2024年に廃止が決定された。 個人情報保護の観点からクッキーへの規制を強める動きがあるため廃止される可能性が高い。
2.3. バックエンドの用語
2.3.1. モノリス/マイクロサービス
モノリスアーキテクチャ
モノリスアーキテクチャは1つのサービスや機能で構築される従来型のアーキテクチャである。
マイクロサービスアーキテクチャ
マイクロサービスアーキテクチャは複数のサービスや機能を疎結合させて構築されるアーキテクチャ。
メリットとしてはマイクロサービスのアーキテクチャでは、大規模で複雑なアプリケーションを提供する際のスピードと信頼性が向上することが上げられる。
マイクロサービスをWeb系システムで組むための関連技術としては、Go言語やKubernetesなどが注目されている。
2.3.2. サーバレスアーキテクチャ
サーバーレスアーキテクチャーは常時稼働する物理サーバーや仮想化基盤上の仮想マシンを極力使わずにアプリを構築するアーキテクチャーのこと。
具体的にはクラウドであるIaaSやPaaSの登場によりシステム開発側がサーバを意識する必要がなくなったことから登場した概念といえる。
AWSで言うと、ECSやEKS基盤、Amplifyなどで構成されるようなアプリケーションはサーバレスアーキテクチャと言える。
2.3.3. NoSQL
NoSQL(Not Only SQL)は非リレーショナルデータベース(RDB)なデータベースの総称のこと。 近年RDBでは対応できないケースが増えてきたことから、昨今ではNoSQLが注目されている。
特徴としてはNoSQLでは音声や画像など、Excelのセルに入らないデータも扱える。 速度を優先する構造であるためビッグデータなど大量データの処理に向くことも注目を集める大きな要因である。
NoSQLは4種類に分類される。
- キーバリュー型
- ワイドカラムストア型
- ドキュメント型
- グラフ型
NoSQLが適するケースは以下の通り。
- 非構造化データや半構造化データを扱うとき
- スピードが第一に要求されるシステム
- 拡張する可能性が高いシステム
2.3.4. ORM
ORM(Object-Relational Mapping)はオブジェクトと関係(RDB)とのマッピングを行うもの。 内部的にはORMがSQLをラッピングした構成となっている。
ORMを使うとSQLを直接書くことなく、オブジェクトのメソッドでDB操作ができると言う特徴がある。
フレームワークごとのORMは以下の通り。
言語 | ORM | 説明 |
---|---|---|
Ruby | ActiveRecord | RailsのORM |
Python | Django ORM | DjangoのORM |
Node.js | Prisma, TypeORM |
2.3.5. RPC
RPC(遠隔手続き呼出し)はコンピュータで動作するソフトウェアから、通信回線やコンピュータネットワークを通じて別のコンピュータ上で動作するための規格であり、互いに互換性がない場合があることからプロトコルというほどの堅い規約というよりも分類である。
有名どころ: XML-RPC, JSON-RPC, tRPC, gRPC
tRPC
簡単に言うと、server側で定義したInterfaceをそのままclient側で取り込んで繋ぎ込みができるもの。
Node.js(Type Script)向きのRPC実装。
公式ドキュメント:https://trpc.io/
関連するパッケージyarn add @trpc/server zod
gRPC
Googleが開発したRPC実装。 マイクロサービスアーキテクチャと相性が良い。
公式ドキュメント:https://grpc.io/
2.3.6. Open API
言語に依存しない標準の RESTful API へのインターフェイス仕様。 関連するものにswaggerがある。
API設計が巨大化したときに使える。
swagger: Open API Specific を記述するための、OSSのツール https://swagger.io/docs/specification/about/
3 - 3.インフラ/セキュリティの用語
3.1. インフラストラクチャの用語
3.1.1. CI/CD
CI(継続的インテグレーション)
テストや静的コード解析などの作業を自動化し、継続的に実行する手法。
CD(継続的デリバリー)
各環境へのデプロイ作業を自動化し継続的に実行する手法。
CI/CD
CIとCDを合わせたもの。 以下のことを実行できる。
- ビルドの自動化 ソースコードから実行可能なアプリケーションを構築する。 具体的には、Dockerイメージのpull、依存パッケージのインストール、コンパイルなど。
- テストの自動化 UTなどのテストコードを実行して動作確認をしたり、Rubocop(Ruby)などのコードスタイルチェックなどを行う。
- デプロイの自動化 ビルドしてテストが通ったものを本番環境や検証環境などに自動デプロイする。
代表的なCI/CDツールにはCircleCI、GitHub Actions、PipeCDなどがある。
3.1.2. CDN
CDN(コンテンツデリバリネットワーク)はユーザーになるべく近い場所でコンテンツを配信することにより、高速かつ信頼性の高いサービス提供するというもの。
CDNは分散されたキャッシュサーバー群によるネットワークとも言うことができる。 具体的にはWebアプリケーションで表示する画像や文章を世界中のサーバにキャッシュすることで実現する。
また以下の問題を解決できる。
- 世界中からアクセスのあるWEBアプリケーションやWEBサイトのレスポンスの改善
- Webサーバがダウンした際でもWebアプリケーションの機能の一部が提供できる
- ユーザが直接サーバにアクセスしないのでDDos攻撃やWebサイト改竄の被害をほとんど押さえることができる
代表的なCDNを提供するサービスにはCloudFlareやAWSのCloudFront、Akanamiなどがある。
3.2. セキュリティの用語
3.2.1. SSO
シングルサインオン(Single Sign-On)は「シングル 」と「サインオン」を組み合わせたもの。
「1度システム利用開始のユーザー認証 (ログイン) を行うと複数のシステムを利用開始する際に、都度認証を行う必要がない仕組み」や「1度の認証で、以後その認証に紐づけられている複数のシステムやアプリ・サービスにも、追加の認証なしで利用できる製品・システム・ツール」を指す。
3.2.2. ハニーポット
ハニーポットは、不正な攻撃者の行動・手法などを観察/分析する受動的な目的で設置される罠システム。
ハニーポットには以下のような種類がある。
- 高対話型ハニーポット … 実際のOSやアプリケーションを利用し、そこに残存している脆弱性などをそのまま不正攻撃者に対して弱点として見せる形式のハニーポット
- 低対話型ハニーポット … 特定のOSやアプリケーションをエミュレーションして監視する形式のハニーポット
3.2.3. ピボッティング
ピボッティングは侵入したマシンをルータとして利用して他のネットワークにアクセスする技法のことをいう。
ピボッティングでは攻撃者側から直接アク セスできないネットワークに対し侵入したマシンを足掛かりにアクセスすることを可能にする。
3.2.4. SIEM
SIEM(Security Information and Event Management:セキュリティ情報イベント管理)はシステムを構成する機器から自動的にログを収集・分析したり、異常時に通知したりできるソリューション。
具体的にファイアウォールやIDS/IPS、プロキシーなどから出力されるログやデータを一元的に集約し、それらのデータを組み合わせて相関分析を行うことで、ネットワークの監視やサイバー攻撃やマルウェア感染などのインシデントを検知することを目的とした仕組み。
3.2.5. C&Cサーバ(C2サーバ)
C&Cサーバは外部から侵入して乗っ取ったコンピュータを利用したサイバー攻撃を行う際に踏み台のコンピュータを制御したり命令を出したりする役割を担うサーバのこと。
主に防弾ホスティング上で展開される。
3.2.6. UTM
UTM(Unified Threat Management)は統合脅威管理とも呼ばれる1つのハードウェアに複数の異なるセキュリティ機能を統合し、ハッキングやコンピュータウイルスなどの脅威から、ネットワークを包括的かつ効率的に保護する手法のこと。
UTM機器は、ファイアウォール、IDS/IPS、アンチスパム、Webフィルタリング、アンチウイルス、アプリケーション制御などでネットワーク全体を保護する。 UTMはファイヤーウォールと異なり、ファイアウォールや複数の脅威検知機能を組み合わせ、ネットワークを包括的に防御する。
3.2.7. HSTS
RFC 6797で定義されるWebサイトがWebブラウザーにHTTPSでのアクセスを指示することで中間者攻撃を防止するための技術のこと。
3.2.8. SOC
SOC(Security Operation Center)はシステム・ネットワークの状態を監視し、サイバー攻撃の検知や分析・対策を行うことで企業の情報資産を守るための組織のこと。 セキュリティ専門の部署またはサービスとして、24時間365日体制で以下のような対応を行う。
- サイバー攻撃の検知や分析
- システム・ネットワークの状態を監視
- ネットワーク機器やセキュリティ装置・サーバーの監視
- ログ情報の解析や分析
3.2.9. CSIRT
CSIRT(Computer Security Incident Response Team)はセキュリティインシデントが発生した場合に対応する組織のこと。
インシデントが発生した際に行う対応は以下の通り。
- システムの停止から復旧の対応
- SOCが解析した情報を基に再発させないための防止策導入
セキュリティインシデントが発生していない際に行う対応は以下の通り。
- インシデント防止のため脆弱性に関連する情報収集から対策の導入
- インシデント発生時に対応するための社員教育
- CSIRTメンバー内での情報共有
3.2.10. IoC
IoC(Indicator of Compromise)はセキュリティ侵害インジケータなどとも呼ばれる、攻撃発生やどのようなツールが使われたかなどを明らかにする手掛かりとなる情報のこと。
IoCで掲載される情報には以下のようなものがある。
- 攻撃者が使用するマルウェアのファイル名
- 攻撃によって変更されるレジストリ
- 使用されるプロセスの名称
- 通信先のURIやIPアドレス
3.2.11. SCAP
SCAPは脆弱性管理・測定・評価を自動化するための基準のこと。 代表的なものにはCVSSやCVEなどがある。
4 - 4.ネットワーク/無線の用語
4.1. ネットワークの用語
4.1.1. IPマスカレード
NAPT(PAT)と同じ意味。
詳しくはコチラ
4.1.2. ポートフォワーディング
ポートフォワーディングはインターネットから特定のポート番号宛に通信が届いたときにあらかじめ設定しておいたLAN側の機器にパケットを転送する機能のこと。静的IPマスカレードとも呼ばれる。
この設定は外部からの通信を内部で処理するのに必須の設定と言える。
4.1.3. ダイナミックDNS(DDNS)
DDNSはIPアドレスが変更されたときに DNSレコードを自動的に更新できるサービスのこと。
4.1.4. VPNパススル
VPNを実現するための機能。
PPTPパススル
PPTPパススルはPPTP(Point-to-Point トンネリング プロトコル)によるVPN接続を許可する機能。
IPsecパススル
IPsecパススルーはNAT機器配下にあるIPsec端末が、NAT機器の先にあるIPsec端末とIPsec通信ができるようにするための機能。
4.1.5. PPPoEパススル
PPPoEパススルはLAN・WANインターフェース間でPPPoEパケットを転送することにより、LAN側インターフェース配下の端末が直接PPPoE接続できるようにするための機能。
4.1.6. 透過型プロキシ
透過型プロキシはクライアントにプロキシの設定をしていない状態でもプロキシサーバ経由によるWebアクセスをさせる方法。
Squidなどで実現可能
特徴
- ブラウザにプロキシの設定を入れる必要がない
- そのままではhttpsで警告が出てしまう
- 回避策:プロキシサーバでの動的な証明書作成およびクライアントでのプロキシサーバルート証明書インストール
- PBR(Policy Base Routing)などのNW設計が必要
4.1.7. PBR(Policy Base Routing)
PBRはルーティングテーブルに従ってパケットを転送するのではなく,管理者が設定した「送信元アドレス、プロトコル、ポート番号、パケットサイズ、入力I/F」の情報に基づきルーティングを行える技術のこと。