recursal/MDN huggingface dataset:
Router (ルーター)
=============

ウェブでは**ルーター**には 3 つの定義があります。

1. ネットワーク層において、ルーターはデータパケットの方向を決めるネットワーク機器です。これらは、ユーザーがインターネットに接続できるように小売店で販売されています。
2. アプリケーション層の SPA においては、ルーターは指定された URL に対してどのようなウェブページを提供するかを決定するライブラリーです。このミドルウェアモジュールは、次のページを開くためにレンダリングされるファイルへのパスが与えられるため、すべての URL 関数に使用されます。
3. サービスレイヤーにおける API の実装では、ルーターは、リクエストを解析し、プログラム内のさまざまなハンドラーにリクエストを指示またはルーティングするソフトウェアコンポーネントです。ルーターのコードは通常、ハンドラーからのレスポンスを受け取り、そのレスポンスをリクエスト元に返すことを容易にします。
関連情報
----

ネットワーク層の文脈:

* ルーター (ウィキペディア)

アプリケーション層の SPA の文脈 (主要な SPA フレームワークのライブラリー):

* Angular router
* React router
* Vue router
Nullish value
=============

JavaScript では Nullish value は `null` または `undefined` のいずれかの値です。Nullish values は常に falsy です。
IRC
===

**IRC** (*Internet Relay Chat*) は、インターネット接続と IRC サーバーを介してメッセージを送受信する IRC クライアントを必要とする世界的なチャットシステムです。

1980 年代後半に Jarrko Oikarinen によって設計された IRC は、TCP を使用し、オープンプロトコルです。 IRC サーバーは、多数の IRC チャネル（各自が独自の ID を持つ）の 1 つに接続されているすべての人にメッセージをブロードキャストします。
CIA（Confidentiality, Integrity, Availability）
=============================================

CIA（CIA トライアド、または AIC トライアドとも呼ばれます）は、秘匿性（Confidentiality）、完全性（Integrity）、可用性（Availability）からなり、情報セキュリティに関する組織の方針のガイドとなるモデルです。

関連項目
----

### 一般知識

* Wikipedia の 情報セキュリティの定義
LGPL
====

LGPL (GNU Lesser General Public License) は、フリーソフトウェア財団が発行したフリーソフトウェアライセンスです。 LGPL は、厳密にコピーレフトされた GPL に対して、より許容された選択肢を提供します。 GPL ライセンスプログラムを使用する派生作品は、同じ条件（自由に使用、共有、研究、変更）で公開する必要がありますが、LGPL では、派生プログラムの LGPL ライセンスコンポーネントが LGPL を引き続き使用することを要求しますが、プログラム全体ではありません。 LGPL は、通常、ライブラリ（`.dll`、`.so`、`.jar` など）などの共有コンポーネントをライセンスするために使用されます。

より詳しく知る
-------

### 一般知識

* GNU LGPL on Wikipedia
* gnu.org の LGPL ライセンスのテキスト
Table Grid Box (表グリッドボックス)
==========================

**表グリッドボックス** (Table Grid Box) は、キャプションを除くすべての表の内部のブロックレベルボックスです。キャプションを含むボックスは表ラッパーボックスと呼ばれます。
Synthetic monitoring (合成モニタリング)
===============================

**合成モニタリング**は、可能な限り一貫性のある環境で、通常は自動化ツールを使用して、「実験室」環境でページの性能をモニタリングすることです。一貫性のあるベースラインがあれば、合成モニタリングはコード変更が性能に及ぼす影響を測定するのに適しています。しかし、必ずしもユーザーが体験していることを反映しているとは限りません。

合成モニタリングでは、エンドユーザがウェブアプリケーションを介して進む経路をシミュレートするためのスクリプトを展開し、シミュレーターが体験した性能をレポートします。一般的な合成モニタリングツールの例としては、 WebPageTest や Lighthouse などがあります。測定されるトラフィックは、実際のユーザーのものではなく、ページの性能に関するデータを収集するために合成して生成されたトラフィックです。

RUM とは異なり、合成モニタリングはユーザーの違いを考慮せず、性能の狭い範囲のビューを提供するため、アプリケーションの性能に関する基本的なデータを取得したり、開発環境で性能をスポットチェックしたりするのに役立ちます。ネットワークスロットリングなどの他のツールと組み合わせることで、潜在的な問題領域についての優れた洞察を提供することができます。

関連情報
----

* 実ユーザーモニタリング (RUM) (en-US)
* 実ユーザーモニタリング (RUM) と合成モニタリング (en-US)
* ビーコン
ATAG
====

ATAG (Authoring Tool Accessibility Guidelines の略、オーサリング・ツール・アクセシビリティ・ガイドライン) は 利用しやすいコンテンツを生産する、アクセシブル・オーサリングツールをビルドするための W3C 勧告です。

関連項目
----

### 一般知識

* Wikipedia 上の Web Accessibility Initiative 記事内の ATAG
### 技術リファレンス

* Authoring Tool Accessibility Guidelines (ATAG) Overview
* The ATAG 2.0 recommendation
XSLT
====

*eXtensible Stylesheet Language Transformations* (**XSLT**) は、XML 文書を他の XML 文書に変換するために使用される宣言的言語であり、HTML、PDF、プレーンテキストなどが含まれます。

XSLT には XML 入力、または XQuery および XPath データモデルに変換可能な任意のフォーマットを受け入れる独自のプロセッサーがあります。XSLT プロセッサは XML ドキュメントと XSLT スタイルシートに基づいて新しいドキュメントを作成し、プロセス内の元のファイルに変更を加えません。

関連情報
----

* ウィキペディアの「XSLT」
* MDN の XSLT のドキュメント
Character set (文字コード)
=====================

**文字コード**は、コンピューターに文字 (文字、数字、区切り記号、空白文字などを含む) を理解させるための符号化システムです。

各国では個別の言語が使用されているため、日本語の漢字 JIS コード (例えば Shift-JIS, EUC-JP など)、繁体字中国語の Big5、ロシア語の KOI8-R などのように独自の文字コードを開発しました。しかし、全世界の言語に対応するために、次第に Unicode が最も利用される文字コードになりました。

文字コードが誤って使用すると (例えば、Big5 でエンコードされた記事に Unicode を使用すると)、壊れた文字ばかりが表示されることがあり、これは文字化けと呼ばれます。

1. Wikipedia の記事
    1. 文字コード
    2. 文字化け
2. 用語集
    1. 文字
    2. Unicode
Null
====

コンピュータサイエンス分野において、一般的に **`null`** という値は、存在しないまたは無効なオブジェクトやアドレスへのポインター参照を表します。 null による参照が持つ意味は、言語実装によって様々です。

JavaScript では、 `null` は動作がプリミティブらしく見えるので、プリミティブ値の一つであるとされています。

しかし、場合によっては、 `null` はそれらしく見えても「プリミティブ」ではありません。あらゆるオブジェクトが `null` 値から派生しており、そのため `typeof` で検査すると `object` が返るという一面もあります。


```js
typeof null === "object"; // true
```


* **用語集**
    + JavaScript
    + 文字列
    + number
    + bigint
    + boolean
    + null
    + undefined
    + symbol
* JavaScript のデータ型
* JavaScript のグローバルオブジェクト: `null`
* Wikipedia 上の記事「Null」
Shim (シム)
=========

**シム** (shim) とは、すでに存在するコードの動作を修正するために使用されるコードの一部で、通常は問題を回避する新しいAPIを追加することで動作します。古いブラウザーにサポートされていない新しい API を実装するポリフィルとは異なります。

関連情報
----

* ウィキペディア(英) Shim
Endianness (エンディアン)
===================

**エンディアン** (もしくは**バイト順**) は、コンピューターが数字を表現するために各バイトを構成する方法を説明するものです。

メモリの個々の領域にはインデックス、もしくはアドレスが付与されています。各バイトには 8 ビット (つまり `0x00` から `0xff` まで) の数値しか保存できないため、それ以上大きな値を保存するには 1 バイトよりも大きな領域を予約しなければなりません。1 つの数値における複数のバイトの*順序*で断然最もよく使われているものは**リトルエンディアン**で、インテルのすべてのプロセッサーで使用されています。リトルエンディアンは小さいバイトから大きいバイトの順で (つまり、もっとも小さなバイトを最初または最下位のアドレスに) 格納するので、ちょうどヨーロッパの日付の書き方 (例えば 31 December 2050) と同様です。

当然、**ビッグエンディアン**は逆の順序で、 ISO 日付形式 (2050-12-31) と同様です。ビッグエンディアンはよく「ネットワークバイトオーダー」と呼ばれますが、これはインターネット標準では通常、標準 UNIX ソケットレベルからウェブバイナリデータ構造に至るまですべて、データをビッグエンディアンで格納することを要求しているためです。また、 68000 系や PowerPC のマイクロプロセッサーを使用した古い Mac では、ビッグエンディアンを使用していました。

例えば `0x12345678` (十進法では 305 419 896) は、それぞれ次のように表現されます

* *リトルエンディアン*: `0x78 0x56 0x34 0x12`
* *ビッグエンディアン*: `0x12 0x34 0x56 0x78`
* *ミックスドエンディアン* (古く非常に稀): `0x34 0x12 0x78 0x56`

1. 関連情報
    1. `ArrayBuffer`
    2. `DataView`
    3. 型付き配列
2. Wikipedia 記事
    1. エンディアン
3. 用語集
    1. データ構造
SISD
====

SISD はコンピュータ・アーキテクチャの分類（フリンの分類）の一つである **Single Instruction/SIngle Data** （単一命令/単一データ）を略したものです。SISD アーキテクチャでは単一のプロセッサが単一の命令を実行し、メモリ内の単一データ列を演算します。

1 回の演算で多重データ列を処理可能な並列アーキテクチャの SIMD についても参照ください。

詳細情報
----

### 基礎知識

* Wikipedia 上の記事 「SISD」
Block-level content (ブロックレベルコンテンツ)
==================================

CSS において、ブロックレイアウトに関係するコンテンツは**ブロックレベルコンテンツ**と呼ばれます。

ブロックレイアウトでは、ボックスは次々と垂直に、包含ブロックの上からレイアウトされます。各ボックスの左の外辺は、格納するブロックの左の辺に接します。ブロックレベル要素は常に新しい行から始まります。英語やアラビア語のような横書きでは、親要素（コンテナー）の水平空間全体と、コンテンツを含む高さに等しい垂直空間を占めるため、「ブロック」を作成することになります。

**メモ:** 上記のブロックレイアウトの動作は、包含ブロックの書字方向 (`writing-mode`) が既定値と異なる場合には変わります。

**メモ:** HTML (*HyperText Markup Language*) の要素は従来、「ブロックレベル」要素または「インライン要素」の何れかに分類されてきました。これは表示特性であることから、現在は CSS において定義されています。

例
-

この例では、2 つの段落 (`<p>`) 要素が `<div>` の中に収められています。


```html
<div>
  <p>
    これは最初の段落です。これらの段落の背景色は、親要素と区別できるよう色付けされています。
  </p>
  <p>これが 2 番目の段落です。</p>
</div>
```


段落 (`<p>`) 要素は既定ではブロックレベルです。このためブロックレイアウトで表示されます。
```

p {
  background-color: #8abb55;
}
```

関連情報
----

* インラインレベルコンテンツ
* ブロック整形コンテキスト
* `display`
* `writing-mode`
Visual Viewport (視覚的ビューポート)
===========================

ビューポート のうち、現在表示されている部分は視覚的ビューポートと呼ばれています。これは、ユーザーがピンチ操作で拡大をした場合などに、レイアウトビューポートよりも小さくなることがあります。視覚的ビューポートは画面の視覚的な部分であり、これは画面上のキーボード、ピンチ操作で拡大したことにより画面外に出た領域、その他のページの寸法に合わせて拡大縮小されない画面上の部分を除いたものです。

詳細情報
----

### 一般知識

* Visual Viewport API (en-US)
* Viewport (Wikipedia)
* A tale of two viewports (Quirksmode)
* ビューポート (MDN 用語集)
* レイアウトビューポート (en-US) (MDN 用語集)
Media
=====

**メディア**という用語は、ウェブについて話すときに複数の意味で使われます。これは文脈によって異なる意味を取ります。

Media (CSS)
CSS (Cascading Style Sheets) の文脈において、***メディア***という用語はrendering engineによって描画される文書の出力先を参照します。これはふつうは端末の画面ですが、プリンターや読み上げ装置、点字ディスプレイ、あるいはそのほかの装置の可能性もあります。
関連情報
----

* Wikipedia 上のメディア
ISO (国際標準化機構)
=============

**ISO**（International Organization for Standardization、国際標準化機構）は、各主要産業の企業を調整する統一基準を開発する世界的な協会です。

より詳しく知る
-------

### 一般知識

* 公式ウェブサイト
* Wikipedia 上の 国際標準化機構
Safe (安全)
=========

**安全**という用語は、文脈によって意味が異なることがあります。以下の可能性があります。

Safe (安全) (HTTP メソッド)
HTTP メソッドが**安全**であるとは、その HTTP メソッドがサーバーの状態を変更しないということです。言い換えれば、読み取り専用操作につながる場合、メソッドは安全です。一般的な HTTP メソッドのうちでは `GET`, `HEAD`, `OPTIONS` が安全です。安全な HTTP メソッドはすべてidempotentでもあります。しかし、すべてのべき等なメソッドが安全とは限りません。例えば、 `PUT` や `DELETE` はべき等ですが、安全ではありません。
Encryption (暗号化)
================

暗号学 において**暗号化**とは、 平文を暗号文に変換することを意味します。暗号文とは、認証されていない読み手にとって解読不能な文章のことです。

暗号化は、暗号プリミティブ ( サイファーと呼ばれる暗号化アルゴリズムを用いて、平文を暗号文へと変換する方法) です。現代的なサイファーによる暗号化は、特定の暗号化アルゴリズムと、暗号鍵と呼ばれる秘密の値を用いて行われます。アルゴリズムはだいたい公開されるので、暗号化が安全なままであれば、暗号鍵は秘密のままにしておかなければなりません。

![How encryption works.](/ja/docs/Glossary/Encryption/encryption.png)

秘密の値が知られない限り、暗号化の逆操作である復号を行うことは数学的に困難です。どれほど困難になるかは、選択した暗号化アルゴリズムと暗号解析法の進歩に依存します。
Main Axis (主軸)
==============

flexbox における主軸は、`flex-direction` プロパティの設定方向によって定義されます。`flex-direction` が取り得る値は以下の 4 つです。

* `row`
* `row-reverse`
* `column`
* `column-reverse`

`row` または `row-reverse` を選んだ場合は、主軸はインライン要素の並ぶ方向に伸びる軸となります。

![flex-direction が row の場合の主軸](/ja/docs/Glossary/Main_Axis/basics1.png)

`column` または `column-reverse` を選んだ場合は、ページの上から下に向かってブロック要素の並ぶ方向に伸びる軸となります。

![](/ja/docs/Glossary/Main_Axis/basics2.png)

アイテムの `flex` プロパティを使って、フレックスアイテム自体が使える幅を指定することで、主軸に沿ったサイズを制御することができます。また、アイテム間そしてアイテムの周囲の空間については、`justify-content` プロパティを使って制御することができます。

関連情報
----

### プロパティリファレンス

* `flex-basis`
* `flex-direction`
* `flex-grow`
* `flex-shrink`
* `justify-content`
* `flex`
### 参考文献

* CSS フレックスボックスガイド: *フレックスボックスの基本概念*
* CSS フレックスボックスガイド: *フレックスコンテナー内のアイテムの配置*
* CSS フレックスボックスガイド: *主軸方向のフレックスアイテムの比率の制御*
Texel (テクセル)
============

3D グラフィックにおいて、**テクセル** (texel) はテクスチャ内の 1 ピクセルのことです。テクスチャは、 3D レンダリング画像内のポリゴンの表面に表示される画像です。テクスチャは、テクセルの集まりによって特徴付けられます。これは、画像がピクセルの集まりによって特徴付けられるのと似ています。

ラスター画像ファイルのピクセルは、カラーデータ、場合によっては不透明度データを含む一連のビットで、コンピュータのモニターなどの出力デバイス上の表示ピクセルにマッピングされます。ピクセルがテクスチャリソースとして使用される画像に属する場合、それは「テクスチャピクセル」と呼ばれ、「テクセル」と短縮されます。テクセルデータは、画面のピクセルに直接マッピングされるのではなく、モデル化される 3D オブジェクトの座標空間の位置にマッピングされます。テクスチャは、色や、深さや反射率などの表面の性質を伝えるために使用することができます。複数のテクスチャを重ねて、複雑な表面のオーバーレイを作成することもできます。

適切なテクセルをポリゴン上の対応する点にマッピングするプロセスは、**テクスチャマッピング**と呼ばれます。テクスチャマッピングは、ディスプレイ用に 3D 画像をレンダリングするプロセスの一段階です。入力元と出力先のピクセルグリッドが揃っていない場合、さらに**テクスチャフィルタリング**を適用して、テクスチャマッピングされたピクセルを滑らかにします（テクスチャのマグニフィケーションまたはミニフィケーション）。レンダリングプロセスの最終的な出力は、 3D モデルの平坦化された 2D 投影で、テクスチャはモデルに「ラップ」されます。

レンダリングのパイプラインでは、テクスチャマッピングは通常、シーンを照明する前に行われますが、 WebGL では、照明はテクスチャマッピング処理の一部として実行されます。

関連情報
----

* テクセル （ウィキペディア）
* テクスチャマッピング （ウィキペディア）
* テクスチャフィルタリング （ウィキペディア）
* WebGL でのテクスチャの使用
* WebGL でのライティング
* WebGL におけるテクスチャのアニメーション
Cipher (サイファー)
==============

暗号学では、**サイファー**は平文を暗号化して読めなくし、それを復号するアルゴリズムです。

サイファーは、情報化時代のかなり前から一般的でしたが（例えば、換字式暗号、転置式暗号）、それらはワンタイムパッドを除いて、どれも暗号的に安全ではありませんでした。

現代のサイファーは、暗号解読者が発見した攻撃 に耐えるように設計されています。すべての攻撃方法が検出されたという保証はありませんが、各アルゴリズムは既知の種類の攻撃に対して判断されます。

サイファーは、データの連続したブロックまたはバッファのブロック暗号と、連続的なデータフロー（多くの場合、音声または動画）のストリーム暗号の 2 つの方法で動作します。

それらはまた、暗号鍵がどのように扱われるかによって分類されています。

* 共通鍵暗号は、メッセージの暗号化と復号に同じ鍵を使用します。メッセージを秘密のままにする場合は、鍵を安全に送信する必要があります。
* 公開鍵暗号は、暗号化と復号に異なる鍵を使用します。

1. 一般知識
    1. Wikipedia 上の Cipher (英語)
    2. Wikipedia 上の 暗号
    3. 暗号化と復号
2. MDN Web Docs 用語集
    1. 暗号利用モード
    2. サイファー
    3. 暗号文
    4. 暗号スイート
    5. 暗号解読
    6. 暗号学
    7. 復号
    8. 暗号化
    9. 暗号鍵
    10. 平文
    11. 公開鍵暗号
    12. 共通鍵暗号
Grid Axis (グリッド軸)
=================

CSS グリッドレイアウトはコンテンツを**行**と**列**でレイアウトできるようにする 2 次元レイアウトです。したがって、すべてのグリッドには、**ブロックもしくは列の軸**と、**インラインもしくは行の列**という、 2 つの軸があります。

各アイテムはこれら 2 つの軸に沿って、ボックス配置仕様書で定義されているプロパティを使って配置されます。

CSS では、ブロックもしくは行の軸がテキストのブロックをレイアウトするのに使用する軸となります。右から左、上から下に書く言語で 2 つの段落があるばあい、ブロック軸に沿って一方が他方の下にレイアウトされます。

![CSS グリッドレイアウトのブロック軸を示す図。](/ja/docs/Glossary/Grid_Axis/7_block_axis.png)

インラインもしくは行の軸はブロック軸と交差し、通常のテキストが流れる方向沿った軸です。 CSS グリッドレイアウトでは次のような行の軸となります。

![CSSグリッドレイアウトのインライン軸を示す図。](/ja/docs/Glossary/Grid_Axis/7_inline_axis.png)

これらの軸の物理的な方向は文書の書字方向によって変更可能です。

関連情報
----

* CSS グリッドレイアウトガイド: *グリッドレイアウトの基本概念*
* CSS グリッドレイアウトガイド: *グリッドレイアウトのボックス配置*
* CSS グリッドレイアウトガイド: *グリッド、論理的な値、書字方向*
JSON
====

*JavaScript Object Notation* (**JSON**) はデータ交換フォーマットです。厳密なサブセットではありませんが、JSON は JavaScript のサブセットに似ています。多くのプログラミング言語が JSON をサポートしていますが、JSON はウェブサイトやブラウザの拡張機能を含む JavaScript ベースのアプリケーションに特に便利です。

JSON は数値、真偽値、文字列、`null`、配列 (順序付けられた値のシーケンス)、およびこれらの値 (または他の配列やオブジェクト) で構成されるオブジェクト (文字列値マッピング) を表すことができます。 JSON は関数、正規表現、日付などのより複雑なデータ型はネイティブに表現できません。(Date オブジェクトはデフォルトで ISO 形式の日付を含む文字列にシリアライズされるため、情報は完全に失われません。) JSON で追加のデータ型を表す必要がある場合は、シリアライズされる時やデシリアライズされる前に値の変換を行ってください。

JSON は伝統的な CSV 形式とは異なり、XML のような階層データを格納することができます。多くのツールが、オンライン上の JSON to CSV Converter や他の JSON to CSV Converter のように、これらのフォーマット間の変換する機能を提供しています。

関連項目
----

### 一般知識

* Wikipedia の JSON の記事
### 技術リファレンス

* MDN の JSON
XML
===

eXtensible Markup Language (XML) は W3C によって規定された汎用マークアップ言語です。情報技術 (IT) 産業では、データ記述言語として多くの XML を基にした言語を使用しています。

XML タグは HTML タグに似ていますが、XML はユーザーが独自のタグを定義することができるため、はるかに柔軟です。このようにして XML はメタ言語のように振る舞う――すなわち RSS のような他の言語を定義することができるのです。それに加えて、HTML はプレゼンテーション言語であるのに対し、XML はデータ記述言語です。つまり、XML には ウェブだけにとどまらないとても広い応用範囲があるということを意味します。例として、ウェブサービスは XML をリクエストとレスポンスの交換に使用することができます。

関連項目
----

* XML のイントロダクション
Viewport (ビューポート)
=================

ビューポートは、現在表示されているコンピューター画像の中の、多角形 (通常は長方形) の領域を表します。ウェブブラウザーの用語としては、閲覧中の文書のうち、ウィンドウ (または、文書が全画面モードで表示されている場合は画面) の中で現在見えている部分を指します。ビューポートの外にあるコンテンツは、スクロールによってビューの中に移動するまで画面上では見えません。

ビューポートの中で現在見えている部分を\*\*視覚的ビューポート\*\*と呼んでいます。これは、ユーザーがピンチ操作により拡大縮小しているときなど、レイアウトビューポートより小さくなることがあります。レイアウトビューポート (en-US)は変わりませんが、視覚的ビューポートはより小さくなります。

詳細情報
----

### 一般知識

* Visual Viewport API (en-US)
* Viewport (Wikipedia)
* A tale of two viewports (Quirksmode)
* 視覚的ビューポート (MDN 用語集)
* レイアウトビューポート (en-US) (MDN 用語集)
CMS
===

CMS (Content Management System, コンテンツ管理システム) とは、ユーザーに色々な種類のコンテンツ (テキストだけでなく組み込み画像、動画、音声、インタラクティブなコードも) の発行、編集、変更、削除ができるようにするソフトウェアです。

詳細情報
----

### 一般知識

* Wikipedia の コンテンツ管理システム
Grid Column (グリッド列)
===================

**グリッド列**とは CSS グリッドレイアウトにおける縦のトラックであり、二つの垂直方向のグリッド線に挟まれた領域のことです。グリッド列は `grid-template-columns` プロパティまたは一括指定の `grid` や `grid-template` プロパティで定義されます。

加えて、明示的グリッド *(explicit grid)* で作られる列の外にアイテムが配置される場合は、暗黙的グリッド *(implicit grid)* にもグリッド列が作られます。これらの列はデフォルトでは自動的に大きさが決定されますが、`grid-auto-columns` プロパティでサイズ指定することもできます。

CSS グリッドレイアウトの中で位置調整 (alignment) をする場合、列が並ぶ軸を *ブロック軸もしくは列軸* と呼びます。

関連情報
----

### プロパティリファレンス

* `grid-template-columns`
* `grid-auto-columns`
* `grid`
* `grid-template`
### 参考情報

* CSS グリッドレイアウトガイド: *グリッドレイアウトの基本概念*
Control flow (制御フロー)
====================

*制御フロー*（制御の流れ）は、コンピューターがスクリプト内の文を実行する順序です。

条件やループなどの（非常によく出てくる）制御フローを変更する構造にコンピューターが出合わない限り、コードはファイルの最初の行から順に最後の行まで実行します。

たとえば、ウェブページのフォームからのユーザーのデータを検証するために使用されるスクリプトを想像してみてください。 スクリプトは有効なデータを送信しますが、ユーザーが必要なフィールドを空のままにしておくと、スクリプトはそれを入力するように要求します。 これを行うには、スクリプトは条件付き構造または `if...else` を使用し、フォームが完全であるかどうかによって異なるコードを実行します。
```

if (field==empty) {
    promptUser();
} else {
    submitForm();
}
```


JavaScript や PHP などの一般的なスクリプトには、条件付き、ループ、関数などの多くの制御構造が含まれています。 スクリプトの一部は、イベントが発生したときに実行するように設定することもできます。

たとえば、上記の抜粋は、ユーザーがフォームの [送信] ボタンをクリックしたときに実行される関数内にある可能性があります。 この関数にはループを含めることもできます。 ループは、フォーム内のすべてのフィールドを反復し、それぞれを順にチェックします。 `if` と `else` のセクションのコードを振り返ってみると、`promptUser` と `submitForm` という行はスクリプト内の他の関数を呼び出すこともできます。 ご覧のように、制御構造はわずか数行のコードでも複雑な処理フローを指示することがあります。

制御フローとは、スクリプトを読むときに、最初から最後まで読むだけでなく、プログラムの構造や実行順序にどのように影響するかを調べる必要があることを意味します。

より詳しく知る
-------

### 一般知識

* Wikipedia 上の 制御構造
### 技術文書

* MDN の JavaScript リファレンス - 制御フロー
### それについて学ぶ

* MDN の 文（制御フロー）
accent (強調表示)
=============

**強調表示** は主に明るい色によって、配色内でよりわかりやすく背景色と前景色を引き立たせます。これらは多くのプラットフォームの視覚スタイルに存在します (しかしながら、全てではありません) 。

ウェブにおいて、強調表示は `<input>` 要素で操作の活性状態の部分に使われることがあります。例えばチェックした checkbox の背景です。

関連情報
----

### 強調表示に関連する CSS

特定の要素の CSS `accent-color` プロパティに適切な `<color>` 値を設定することで、強調表示の色を設定できます。

### 強調表示を持つHTML要素

* `<input type="checkbox">`
* `<input type="radio">`
* `<input type="range">`
First-class Function (第一級関数)
============================

あるプログラミング言語が**第一級関数 (First-class functions)** を持つと言われる場合、その言語の関数がその他の変数と同様に扱われることを表します。例えば、こうした言語では、関数を他の関数への引数として渡したり、他の関数から返却したり、変数の値として代入したりすることができます。

例
-

### 関数を変数へ代入


```js
const foo = () => {
  console.log("foobar");
};
foo(); // 変数を使用して呼び出し
// foobar
```


ここでは**無名関数**を変数に代入してから、変数を使用して末尾に括弧 `()` を追加することで、その関数を呼び出しています。

**メモ:** **関数に名前があっても**、変数を使用してその関数を呼び出すことができます。名前を付けるとコードをデバッグするときに役立ちますが、*呼び出し方法に影響はありません*。

### 引数として関数を渡す


```js
function sayHello() {
  return "Hello, ";
}
function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}
// `sayHello` を `greeting` 関数の引数として渡す
greeting(sayHello, "JavaScript!");
// Hello, JavaScript!
```


ここでは `sayHello()` 関数を `greeting()` 関数の引数として渡しており、関数を**変数**として扱っていることを示しています。

**メモ:** 他の関数へ引数として渡される関数は、**コールバック関数** と呼ばれます。 *`sayHello` はコールバック関数です。*

### 関数を返す


```js
function sayHello() {
  return () => {
    console.log("Hello!");
  };
}
```


この例では、関数を他の関数から返す必要があります。 - *関数を返すことができるのは、 JavaScript では関数を値として扱っているからです。*

**メモ:** 関数を返す関数は**高階関数**と呼ばれます。

関連情報
----

* ウィキペディアの第一級関数
* MDN Web Docs 用語集
    + コールバック関数
    + 関数
    + 変数
Global scope (グローバルスコープ)
========================

プログラミング環境において、グローバルスコープとは、他のすべてのスコープを含み、他のすべてのスコープからアクセス可能なスコープを指します。

クライアントサイド JavaScript においては、一般的にすべてのコードが実行されている Web ページがグローバルスコープとなります。

関連項目
----

### これについて学習する

* JavaScript の変数スコープ入門
* Wikipedia の スコープ
Card sorting (カードソート)
=====================

カードソート（カードの並べ替え）は、ウェブサイト（または他のタイプの製品）の設計に関わる人々が製品に含めるべきコンテンツ/サービス/機能を書き留めるよう請い、それからこれらの機能をカテゴリまたはグループに編成する、情報アーキテクチャで使用される単純な手法です。 これは、例えば、ウェブサイトの各ページに何をすべきかを決めるために使用することができます。 その名前は、文字通りカードに並べ替えるための項目を書いてから、カードを積み重ねて整理することによって、しばしばカードの並べ替えが行われるという事実から来ています。

より詳しく知る
-------

### 一般知識

* Wikipedia 上の Card sorting （英語）
Localization (ローカライゼーション)
=========================

**ローカライゼーション**（ローカライズ）とは、ソフトウェアのユーザーインターフェイスを特定の文化に適合させるプロセスです。

考慮するべき共通点は以下の通りです。

* 言語
* 計測単位（例えば、ヨーロッパではキロメートル、アメリカではマイル）
* 文字の方向（例えば、ヨーロッパ言語では左から右へ、アラビア語では右から左へ）
* アルファベットの大文字・小文字（例えば、英語では週に大文字を使い、スペイン語では小文字を使う）
* ことわざの対応（例えば、 "raining cats and dogs" は直訳すると意味不明になる）
* 言葉遣いの使用（例えば、日本語では敬語は常体と異なる）
* 数値形式（例えば、ドイツでは 10 000,00 がアメリカでは 10,000.00）
* 日付形式
* 通貨
* 文化的な基準
* 用紙の大きさ
* 色の心理
* 法令
* 祝日
* 個人名
詳細情報
----

### 一般知識

* ウィキペディアのローカライゼーション
* ウィキペディアの国際化と地域化
MitM (中間者攻撃)
============

**Man-in-the-middle attack**（MitM、中間者攻撃）は、2 つのシステム間の通信を傍受します。たとえば、Wi-Fi ルーターが侵害される可能性があります。

これを物理的な郵便と比較します。もしあなたがお互いに手紙を書いているなら、郵便配達員はあなたが郵送するそれぞれの手紙を傍受することができます。彼らはそれを開き、それを読んで、最終的にそれを修正してから、その手紙を再び包み、あなたが手紙を送ろうとした人にそれを送ります。元の受取人はあなたに手紙を郵送し、郵便配達員は再度手紙を開き、それを読んで、最終的にそれを修正し、それを再び包み、あなたにそれを与えるでしょう。コミュニケーションチャンネルの中間に人がいることはわかりません – 郵便配達員はあなたとあなたの受取人には見えません。

物理的な郵便やオンライン通信では、MITM 攻撃は防御するのが難しいです。いくつかのヒント:

* 証明書の警告を無視しないでください。フィッシング詐欺サーバーまたは偽者サーバーに接続するかもしれません。
* 公衆 Wi-Fi ネットワーク上で HTTPS 暗号化のない機密のサイトは信頼できません。
* ログインする前にアドレスバーにある HTTPS を確認し、暗号化が行われていることを確認してください。
より詳しく知る
-------

* OWASP の記事: Man-in-the-middle attack （英語）
* Wikipedia 上の 中間者攻撃
* `Public-Key-Pins` (en-US) ヘッダー（HPKP）は、ウェブサイトへのその後のすべての接続にホワイトリスト証明書を要求するようにブラウザーに指示することで、MITM のリスクを大幅に低減できます。
Domain name (ドメイン名)
===================

**ドメイン名**は インターネット 上でのウェブサイトの住所です。ドメイン名は URL で特定のウェブページが所属するサーバーを識別するために使用されています。ドメイン名はピリオド (ドット) で区切られ、トップレベルドメインで終わる階層的な名前で構成されています。

詳細情報
----

### 基礎知識

* Wikipedia 上の記事: ドメイン名
* ドメイン名を理解する
IPv4
====

IPv4 は、インターネットの基礎となる通信プロトコルの第 4 のバージョンで、広範囲に展開された最初のバージョンです。

最初に 1981 年に公式化された IPv4 は、ARPAnet の最初の開発作業にそのルーツをたどります。IPv4 は、パケット交換リンクレイヤネットワーク（イーサネット）で使用されるコネクションレスプロトコルです。IPv6 は、IPv4 のセキュリティ上の問題とそのアドレスフィールドの限界のために徐々に IPv4 を置き換えています。（バージョン番号 5 は 1979 年に実験的なインターネットストリームプロトコルに割り当てられましたが、これは決して IPv5 と呼ばれていませんでした）。

より詳しく知る
-------

### 一般知識

Wikipedia 上の IPv4
Domain (ドメイン)
=============

ドメインとは、インターネット上の独自のリソースを識別し管理する機関のことです。 "ドメイン名"は、URLの階層の一部として使用します。たいていはブランド名のような最も記憶に残る部分です。

完全修飾ドメイン名（FQDN）には、インターネットのDNSシステムを使用してこの権限を名前で一意に検索するために必要なすべてが含まれています。

例として、"developer.mozilla.org"というドメイン名の場合：

1. "org"は、 トップレベルドメイン です。トップレベルドメインは、 IANA によってインターネット標準として登録されています。 ここでは"org"とは、最上位のドメインレジストリで定義される"organization（組織）"を意味します。
2. "mozilla"は、ドメインです。ドメインを所有したい場合は、最上位のドメインレジストリで許可されているドメイン名 レジストラのひとつとして登録する必要があります。
3. "developer"は、サブドメインです。あなたがドメインの所有者であると自分自身を定義することができます。 多くのドメイン所有者はWorld\_Wide\_Webリソースを指すようにサブドメインに "www"を選択しますが、必須ではありません（ただし、余り好ましくないです）。
詳細情報
----

* Wikipedia 上の記事： ドメイン名
Quality values
==============

**品質値**、もしくは q 値と q ファクターは、値の優先順位をコンマ区切りのリストで記述するために使用されます。これはいくつかの HTTP ヘッダーと HTML で許される特別な構文です。 値の重要性はサフィックス `';q='` の直後に `0` と `1` の間の値が含まれ、最大 3 つの 10 進数で最高の優先度を示します。存在しない場合、デフォルト値は `1` です。

例
-

次の構文
```

text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
```


優先順位を示します。

| 値 | 優先度 |
| --- | --- |
| `text/html` and `application/xhtml+xml` | `1.0` |
| `application/xml` | `0.9` |
| `*/*` | `0.8` |

最初の 2 つの値に優先順位が定義されていない場合、リスト内の順序は関係ありません。それにもかかわらず、同じ品質であれば、より具体的な値よりも優先度が低くなります。
```

text/html;q=0.8,text/*;q=0.8,*/*;q=0.8
```


| 値 | 優先度 |
| --- | --- |
| `text/html` | `0.8` (but totally specified) |
| `text/*` | `0.8` (partially specified) |
| `*/*` | `0.8` (not specified) |

`Accept` のようないくつかの構文は、`text/html;level=1` のような追加の指定子を許可します。これらは価値の特異性を高めます。それらを使用することは非常にまれです。

ブラウザ固有の情報
---------

### Firefox

Firefox 18 以降、品質係数の値は小数点以下 2 桁に固定されます。 以前のバージョン (Firefox バグ 672448) では小数点以下 1 桁にしかクランプされませんでした。

詳細情報
----

* HTTP headers using q-values in their syntax: `Accept`, `Accept-Charset`, `Accept-Language`, `Accept-Encoding`, `TE` (en-US).
Grid Cell (グリッドセル)
==================

CSS グリッドレイアウトにおける CSS グリッドの最小単位が**グリッドセル**です。 4 つの交差する グリッド線 に囲まれた領域のことで、表におけるセルと考え方はほぼ同じです。

![グリッド上の個々のセルを示す図。](/ja/docs/Glossary/Grid_Cell/1_grid_cell.png)

各アイテムのグリッド配置の方法を指定しなければ、グリッドコンテナ直下の子アイテムは自動配置アルゴリズムに従って個別のグリッドセルに一つずつ配置されます。全てのアイテムを保持できるように、行もしくは列 トラック が自動的に追加されます。

例
-

この例では 3 列のトラックグリッドを作成しています。5 つのアイテムはまず最初の行の 3 つのグリッドセルに配置され、新しい行を作って残りの 2 つのアイテムが配置されます。
```

\* {
  box-sizing: border-box;
}

.wrapper {
  border: 2px solid #f76707;
  border-radius: 5px;
  background-color: #fff4e6;
}

.wrapper > div {
  border: 2px solid #ffa94d;
  border-radius: 5px;
  background-color: #ffd8a8;
  padding: 1em;
  color: #d9480f;
}
```



```css
.wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 100px;
}
```



```html
<div class="wrapper">
  <div>One</div>
  <div>Two</div>
  <div>Three</div>
  <div>Four</div>
  <div>Five</div>
</div>
```

関連情報
----

### プロパティリファレンス

* `grid-template-columns`
* `grid-template-rows`
* `grid-auto-rows`
* `grid-auto-columns`
### 参考資料

* CSS グリッドレイアウトガイド: グリッドレイアウトの基本概念
* CSS グリッドレイアウト仕様におけるグリッドセルの定義
SGML
====

*Standard Generalized Markup Language* (**SGML**) は、宣言型のマークアップ言語を定義するための ISO 規格です。

ウェブにおいて、HTML 4、 XHTML、 XML は広く普及した SGML ベースの言語です。HTML は、第 5 版からもはや SGML を基にしておらず、独自の構文解析規則をもつ点は注意が必要です。

関連情報
----

* Wikipedia 上の SGML
* Introduction to SGML
Flex
====

`flex` は CSS `display`のプロパティに新しく追加された値です。`inline-flex` と同じく、使用すると Element(要素)に Flex コンテナ が適用されます。また、その Element(要素)の子 Element(要素)それぞれには Flex アイテム が適用されます。flex アイテムが適用された Element(要素)は flex layout を構成し、CSS Flexible Box Layout Module で定義されているプロパティの全てが適用されるはずです。

`flex` プロパティは flexbox プロパティを縮めて表したプロパティです。`flex-grow` や `flex-shrink`、`flex-basis` 等があります。

`<flex>` については、CSS Grid Layout 内の flexible length にて確認できます。

関連項目
----

### プロパティリファレンス

* `align-content`
* `align-items`
* `align-self`
* `flex`
* `flex-basis`
* `flex-direction`
* `flex-flow`
* `flex-grow`
* `flex-shrink`
* `flex-wrap`
* `justify-content`
* `order`
### 参考文献

* *CSS Flexible Box Layout Module Level 1 Specification*
* CSS フレックスボックスガイド: *フレックスボックスの基本概念*
* CSS フレックスボックスガイド: *フレックスボックスと他のレイアウト方法の関係*
* CSS フレックスボックスガイド: *フレックスコンテナー内のアイテムの配置*
* CSS フレックスボックスガイド: *フレックスアイテムの順序*
* CSS フレックスボックスガイド: *主軸方向のフレックスアイテムの比率の制御*
* CSS フレックスボックスガイド: *フレックスアイテムの折り返しをマスターする*
* CSS フレックスボックスガイド: *フレックスボックスの典型的な用途*
WebDAV
======

**WebDAV** (*Web Distributed Authoring and Versioning*) は Web 開発者がリモートでウェブクライントからコンテンツを更新できる HTTP 拡張機能です。

WebDAV 単体で使われる事はまれで、CalDAV(リモートで使えるカレンダー） とCardDAV(リモートで使えるアドレス帳）の 2 つの拡張機能と共に使われるのが一般的です。

WebDAV を使用すると、クライアントから次の事ができます。

* ウェブページのメタデータ（例：著者や作成者など）の追加、削除、照会
* 任意のメディアタイプのページを関連するものにリンクする機能
* ドキュメントセットを作成し、階層構造のリストを取得
* ウェブページのコピーや移動
* 複数人での編集を回避するためのドキュメントのロック

関連項目
----

### 一般知識

* Wikipedia の WebDAV
### 技術リファレンス

* RFC 2518
* RFC 3253
* RFC 3744
Adobe Flash
===========

Flash は Adobe によって開発された廃れつつある技術で、表現力のあるウェブアプリ、マルチメディアコンテンツ、ストリーミングメディアを表示します。 Adobe Flash は対応しているウェブブラウザーでプラグインを用いて実行することができます。

1. 公式ウェブサイト
2. Shumway: Mozilla によるフリーな実装
3. Gnash: GNU によるフリーな実装
4. 用語集
    1. ブラウザー
5. Wikipedia の記事
    1. Adobe\_Flash
Metadata (メタデータ)
================

**メタデータ**とは — 最もシンプルな定義では — データを記述するデータです。例えば HTML 文書はデータですが、HTML には `<head>` 要素の中に文書を記述するメタデータ(誰が書いたのかや要約など)も含んでいます。

関連項目
----

### 一般知識

* Wikipedia の metadata
### HTML メタデータ

* MDN での `<meta>` 要素
Perceived performance (知覚的パフォーマンス)
==================================

**知覚的パフォーマンス**は、ウェブサイトがユーザーにとってどれだけ速く、レスポンスよく、信頼できるものと感じるかの尺度です。サイトのパフォーマンスに対する認識は、実際の読み込み時間やレスポンス時間よりもユーザー体験に大きな影響を与える可能性があります。

関連情報
----

* 知覚的パフォーマンス
CRUD
====

**CRUD** (Create, Read, Update, Delete) は、格納されたデータの操作を行う方法の頭文字をとった語です。永続化されたストレージの 4 つの基本的な機能を覚えるのに役立ちます。CRUD は通常、データベースやデータストアに対する操作を示しますが、データが実際には削除されずに、状態によって削除されたと扱われる「ソフトデリート」のような、アプリケーションの上位レベルの機能にも適用できます。

関連項目
----

### 一般知識

* Wikipedia の CRUD