アーキテクチャの中でよく出る単語

とあるQiitaの記事で、「現場で使われる単語集」みたいな記事があって、プログラムをやってるときにぶつかる単語をまとめてみようかなと。
目的としては、プログラムやってて「よく出てくる単語だけど、どういう感じのものなん？」というのがぱっと分かればいいなと。
プログラマならこんな単語知ってるよね？っていうのを集める感じ。

思いついたものをどんどん羅列して、暇な時に埋めるつもりだけど、編集リクエストとかあるとうれしいなぁ。
私の思い込みで理解している単語もままあると思う。
雰囲気で使われてる単語の、その「雰囲気」を定義している感じになればいいなぁ。

# A

## API
Application Programming Interfaceの略。
とあるサーバなりプログラムなりにリクエストを出すと、サーバなりプログラムなりが処理した結果を返してくれるもの。
自分が作っているプログラムがAPIにリクエストを出して、自分が作っているプログラムがAPIの返す結果を受け取って処理をする使い方。

REST API、WEB APIが代表的だけど、WEB上にあるものに限らず、プログラムからリクエストを出せるものをだいたいAPIと言ったりする理解。
あくまで、アプリケーションのインターフェースになる機構を指す感じ。

## apt
Ubuntuでで使うソフトウェアのインストールをするコマンド。
昔はapt-getだったはず。

## Arduino
ものすごく簡単に組み込み系の制御を行える装置。（OSのようにも捉えている）
LEDやセンサーなどを制御することができる。
C言語でコーディングすることができ、さらにArduino IDEという開発環境を使うと、
- 電源を入れてすぐの動作
- 電源を入れている間繰り返される動作
を記述するだけで制御プログラムができてしまう。

## Auth
認証。
ログインとかの処理を思い浮かべる。
この単語を見ると「アカウントとパスワードがマッチしてセッションを確立する（ログイン状態になる）」ところまでを想像する。

# B
## BSD
unixの一系統なのかな？と思っていたが、どうやらunixの構造を真似たカリフォルニア大学バークレー校が作ってたOSのことを言うらしい。
今ではBSDの派生も含め「BSD系」と言ったりする。
BSD系であることの一つの特徴は、BSDカーネルを使うことらしい。（ほかのカーネルにはLinuxカーネルがある）
アップルのOSはBSDをベースにしていることは結構有名。

## BIツール
Bussiness Intelligence Toolのことで、訳すると「事業情報分析」とかになるのかな？
Intelligenceは翻訳すると「知性・英知」だから、業務上のノウハウを抽出することなんだと思う。

厳密な定義は色々あるだろうが、私の理解では、「たくさんあるデータを、自分で決めた軸で集計してグラフなり、表なり、チャートなりで表示するもの」といった感じ。

# C
## CakePHP
PHPでのWebアプリ構築のフレームワーク。
MVCをPHPに取り入れたということで、昔は日本ですごいシェアだった。
世界的にはLaravelにシェアが上がっていき、後々日本でもシェアを奪われてしまった印象。

## CentOS
Linuxのディストリビューション。（Linuxの中の一つのパッケージ）
フリーで使える。（WebサーバのOSにインストールしていることが多い）
RHELのフリー版みたいな位置づけ。

## COBOL
メインフレームで業務システムを構築するために使われているプログラミング言語。
1950年代に登場して以降、1990年代にオープン系システムに台頭されるまで、業務系のSEやプログラマーと言えば、COBOLを組む人⇒コボラーのことだったらしい。
コボラーが大量に定年を迎えることを2018年問題なんて言ったりして2000年問題並みにヤバいなんて言われた。
システムのリプレイスが進められない企業ではコボラーの需要が高く、なんだかんだでCOBOLで食べていけているらしい。


## C言語
昔からあるプログラム言語。もともとB言語がいてその後継のような存在らしい。
OSからファーム、アプリ、スーパーコンピュータに至るまで、幅広く使われている。
それぞれの環境に合わせてコンパイルするので、実行ファイは実行環境が不要となる。
処理速度が最も早いプログラムというイメージがある。（他の言語では実行環境の上で動いているので）

# D

## Debian
Linuxのディストリビューション。（Linuxの中の一つのパッケージ）
1993年から始まったということで、割と古参なイメージ。
DebianのさらにディストリビューションされたものがUbuntuだったりRaspberry Piで使うRaspbianだったりするので、かなりベーシックなOSなのかな。
## DIP
The Dependency Inversion Principleの略。
依存性逆転の原則というらしい。
SOLIDの原則の一つ。

簡単に言うと、「クラス間の関係の定義は、インタフェースを使え」みたいな感じかな。

```
クラスA
　　└クラスB
　　　　└クラスC
```

上記のようなhas-aの関係がある場合、次のようにしておけということ。

```
クラスA
　　└インタフェースB

クラスB extends インターフェースB
　　└インタフェースC

クラスC extends インターフェースC
クラスD extends インターフェースC

```

利点は、同じインターフェースを使っているものは、置き換えるのが簡単になる。
（↑の例だとクラスCとクラスDは置き換え可能）
DBでアクセスしているところを、テストデータのオブジェクトの切り替えとかできるようになる。

## Django
PythonのWebシステムのフレームワーク。
（Pythonでwebフレームワークといったらこれってくらい定番）
MVTという概念のフレームワーク。（Django以外でMVT聞いたことないけど）

## DLL
Dynamic Link Libraryの略。
Windows環境で動くアプリケーションで、DLLのファイルを配置すると機能拡張できたりする。
最近は拡張するときにEXEファイルを丸ごと置き換える方が普通かな？
CとかC++やるとよく遭遇する。

## dpkg
Debian系のOSで使うソフトウェアのインストールをするコマンド。
組み込みLinuxのOSにあったのでかなり軽いのだと思う。

# E
## ETL
Extract/Transform/Loadの略。
データを抽出／変換／取ってくるツール。

# F
## Fedora
Linuxのディストリビューション。（Linuxの中の一つのパッケージ）
RHELの2003年のバージョンをフォークして以降、コミュニティ主導で運営されているフリーのOS。
WikiPediaによると、最新技術をどんどん取り入れる特徴があるらしい。
2005年の学生時代、Linuxのデスクトップとしてよく入れてた思い出深いOS。
社会人になってから名前は聞かなない。

## fixture

# G
## getter
オブジェクト指向で、クラスが持つプロパティの値を取得するためのメソッド。

# H

## Handlebars
テンプレートエンジンで、JavaScriptの値を参照してHTMLを生成できるもの。
拡張子は`*.hbs`。

## has-a
オブジェクト指向で、クラスが他クラスを所有している関係。
具体的には、クラスのメンバーに他のクラスを持っているような感じ。

```
クラスA
　└クラスB
```

↑はクラスA has a クラスB。

# HSTS
HttpのStrict-Transport-Securityの略。
「厳密なセキュリティ通信」て雰囲気の訳。
HTTPヘッダにこれがある場合、HTTPS通信を要求するもの。
多分ブラウザが自動的にhttpからhttpsに変換されるときはこれが指定されていると思われる。
参考：https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Strict-Transport-Security

# I
## is-a
オブジェクト指向で、クラスが他クラスを継承している関係。
具体的には、クラスが他のクラスとして使えるような感じ。

```
クラスA extends クラスB

var クラスB 変数１ = new クラスA
var クラスB 変数２ = new クラスB
```

↑はクラスA is a クラスB。


# J

## Java
プログラミング言語。
JVM（Java Virtual Machine）というJavaを実行するための仲介者の上で実行させることにより、LinuxでもWindowsでもMacでも同じバイナリを実行することができるようにしたのが登場当時画期的だった。
もともとSun Micro Systemsがフリーで開発キットを公開していたため広く使われてきた。
後にOracleが買収される。
Javaプログラマーは2000～2010年辺りで大量に発生し、一世を風靡した。
2019現在ではJava案件の絶対量は多いものの、Javaプログラマーが余っているのではないかと穿った見方をしている。
→ お堅い企業ではJavaは今でも愛されているが、Java一本でやっていくには相当なプロフェッショナルでないと安く買い叩かれそう。


## JavaScript
もともとHTML上に組んでブラウザ上で動くプログラムだった理解。
MozillaとInternet Explorerで仕様が違ったりして色々使いづらかったのが、いつの間にかECMAScript2016とかの標準化も進んで使い易いものになった。
今では実行環境がブラウザを飛び出して、JavaScript単体で使えるようなってサーバのプログラミングにも使えるようになった。（Node.jsの登場）

# K

## KPI
Key Performance Indicatorの略。
重要業績評価指標。
目標を達成する上で、その達成度合いを計測・監視するための定量的な指標。
ひろゆきが「KPIを定義して〜」って言うらしい。
計測対象の定義は結構重要で、計測対象自体間違えてると結果も得られない。

# L
## Laravel
PHPのWebアプリを構築するためのフレームワーク。
2019時点では、PHPでのWebフレームワークとしては定番という認識。

## Linux
unixの一系統なのかな？と思っていたが、どうやらunixの構造を真似た別系統のOSのことを言うらしい。
Linuxであることの一つの特徴は、Linuxカーネルを使うことらしい。（ほかのカーネルにはBSDカーネルがある）
Linuxの種類の中に、ubuntuやCentOSが居るという形。
フリーのOS⇒Linuxみたいな風潮がある気がする。

## LL

Lightweight Languageの略。
軽量プログラミング言語の意で、学習コストとかが少なく簡単にできる言語のことをいう。
ruby、Python、JavaScript、VBScriptあたりがこれに該当するらしい。

# M
## MVC
Model View Controllerの略。
システムを作るときのアーキテクチャの考え方の一つ。
Webシステムでは定番で、LaravelでもRuby on Railsでもいろんなものがこのつくりを使っている。

ModelはなんというかDBのテーブルみたいなもの。データを扱うところと考えて大体良い。
（業務をモデル化した時のエンティティといってもいいかもだが表現がムズイよな）
Viewは、UIに表示する部分。
Controllerは、ModelとViewを組み合わせる場所。

MVCをやるときは大体いつもビジネスロジックをどこに作るのかで話がややこしくなる。
Viewは表示することに専念するからここでビジネスロジックの話はほとんどないけど、Modelでやるのか（最近はModelでやる案はあまり聞かないか）Controllerでやるのかはたまたサービスとかプロバイダとか新しいものもの持ち込んでそこでやるのかなど。

大体発展していくとDDDだのクリーンアーキテクチャの話になっていく。

## MVT
Model View Templateの略。
システムを作るときのアーキテクチャの考え方の一つ。
でもDjangoでしか聞いたことがない。

経験則的な話、Modelはほぼほぼ純粋にデータをCRUDするところ。
ViewはModelを扱うのとビジネスロジックを持たせる（Viewの自由度は高くてViewをController的にしてビジネスロジックのようなものを組むスキーマは別で作るとかもよくやる）。
Templateは純粋に、Viewが返す値をUIにはめ込むほんとの雛型という感じ。

MVCに比べて、明確にModelとTemplateの役割が定まっていて、Viewは自由に！という感じ。

# N

## npm
Node.jsで、モジュールをインストールするためのコマンド。
Node.jsをインストールすると、大体セットでインストールされる。

## Node.js
JavaScriptを実行するための実行環境。
もともとJavaScriptはブラウザ上でのみで動くものだったけど、コマンドラインなど、普通のプログラムとしてブラウザを使わずに動かすためのものという理解。
サーバ側で動かして、webサーバとして動かすことも可能なまでに拡張できる。
JavaScriptが書ければ、フロントアプリだけでなくサーバアプリも作れるようになったことがNode.jsの意義なのかなと思っている。

# O
## ORM
Object Relation Mapperの略。
オブジェクト　→　プログラム上のインスタンスのこと
リレイション　→　DB上のテーブルのこと
それらをマッピングしているということで、プログラムのコードでDBにアクセスする仕組みのことをいう。

普通は、クラスがテーブルに対応していて、クラスからインスタンスを生成すると、テーブルの行データが作れるみたいな感覚。

## OS
Operating Systemの略。
日本語だと基本ソフト。（日本語になるとシステム→ソフトに規模が縮小されてる印象あるな）
Windows、Linux、MacOSにあたる。

# P
## pip
Pythonのライブラリ管理ツール。
基本pipが使えなきゃ何もできないといって過言ではない。

## Python
2019年現在、隆盛を極めるプログラミング言語。
LinuxコマンドがPythonで書かれていたり、AIだのIoTだのでよく使われていたり新しい分野での活躍が目立つ。
Pythonプログラマも多くなっている印象で、供給過多なのかこないだ見た言語別単価は下がってきている感じがした。
（いつかはCOBOLやJavaみたいになってくのかも・・・）

# R
## R（言語）
統計などの分析に使えるツール。
グラフ化したり、標準偏差を出したり、データサイエンティストがマスターしておくツールらしい。

## REST
REpresentational State Transferの略。
直訳では「代理表現の転送」となって全然意味が分からない。
一般的に言われるのは「RESTの原則に従って実装されている、WebシステムのHTTPでの呼び出しインターフェース」とのこと。

じゃぁRESTの原則ってなんだ？となるわけだが、大体次のような感じ。
1.アドレス可能性
URIで、何に対して何をするのかが簡単に表現されていること。
APIのバージョン、データを取得するのか／更新するのかなどが一目でわかるように、一意なURIで表現されるようにすること。

2.ステートレス性
HTTPリクエストが完全に分離独立していること。
例えば、１回目のHTTPリクエストで「このユーザはAを持っている」という情報をセッションとかで持たせて、２回目のHTTPリクエストで「ユーザがAを持っていたら～を返す」みたいにリクエストに関係をもたせないこと。

3.接続性
ある情報に「別の情報へのリンク」を含めることができること。
そして、リンクを含めることで「別の情報に接続すること」ができること。
多分これは、URIがホスト名とか含み、完全に一意であることを言っている。

4.統一インターフェース
情報の取得、作成、更新、削除といった操作は、すべてHTTPメソッドを利用すること。
この場合のHTTPメソッドとは、取得「GET」、作成「POST」、更新「PUT」、削除「DELETE」となる。

大体RESTって聞くと意識されるのは1.と4.かな。

## RHEL
Red Hat Enterprise Linuxの略。
Linuxの有料のディストリビューション。（Linuxの中の一つのパッケージ）
Linuxを有料で使うってどういうこと？という疑問はよくあるが、入っているソフトが良いものだとかいうより、サポートが受けられるという点がポイントらしい。
最近あまり出会うことはないけど、大きい会社で止まっちゃいけないシステムとかではよく名前が挙がる。
RHELのフリー版は、CentOS。

## rpm
yumが出る前までは結構使われていたソフトウェアのインストールのコマンド。（CentOSでよく使ったかな）
昔のソフトなどでたまにrpm形式で提供されていて、このコマンドでインストールするようなことも過去にあったな。

npmはこのコマンドをインスパイアされたものだと思う。

# S
## setter
オブジェクト指向で、クラスが持つプロパティに値をセットするためのメソッド。
## Spring Framework
JavaのWebアプリのフレームワーク。
昔はStrutsだとか有名だったけど、2019現在は今はSpring Framework一択という印象。
あんまり触ったことはないけど、聞いたのは、フレームワークのカバーしている範囲が広い⇒Webアプリがやりたいことは大体組めるみたいなこと。
簡単なシステムにこのフレームワークは蟻を大砲で退治するようなものだけど、フレームワークの必要なところだけ使って対処することもできるのでオールラウンドで使えるみたいな説明をどこかで見たような。

## SOLID
オブジェクト指向での良いアーキテクチャの原則みたいなもの。
S：The Single Responsibility Principle（単一責任の原則）
O: The Open Closed Principle（オープン・クローズドの原則）
L: The Liskov Substitution Principle（リスコフの置換原則）
I: The Interface Segregation Principle（インターフェース分離の原則）
D: The Dependency Inversion Principle（依存性逆転の原則）

# U
## Ubuntu
Debianをベースにした、Linuxのディストリビューション。（Linuxの中の一つのパッケージ）
基本的にフリーで使えるが、有償サポートもあるらしい。
2019年時点では、デスクトップがよく使われるためか、シェアがかなり高い印象。
Ubuntuからのさらにディストリビューションも多数ある。

## URI
Uniform Resource Identifierの略。
URL、URNの総称に当たるらしい。URI ＝ URL ＋ URNといってる人がいる。

URLはインターネットの場所、URNインターネットにあるファイル名、URIはインターネットのファイルにアクセスするための一意の文字列みたいな感じだろうか。

## URL
Uniform Resource Locatorの略。
インターネット上に存在するファイルの場所を示す。

## URN
Uniform Resource Nameの略。
インターネット上に存在するファイルの名前を示す。
例えば、 `http://hoge/fuga.html`とある場合、`fuga.html`のことを示す表現があるらしく、それがURNになるらしい。
あまり意識することがない。

## Unix
AT&Tのベル研究所が昔作ったOS。
今のLinuxやBSDの仕様の元になった。
→ UbuntuやCentOSでだいたい同じコマンドで使えるのはこのためという理解。

もともとはOSそのものをいうらしいが、今はUnix仕様から派生したOSを示す、規格としての「Unix系」という言葉が一般的な印象。
似たような使い方の言葉としてPOSIXがある。

# Y
## yum
CentOSで使うソフトウェアのインストールをするコマンド。


# あ
## アーキテクチャ　architecture
直訳だと「建築」となるが、簡単にいうと「作り方」とか「プログラム／システムの組み方の構造」とかかな。
大体、アーキテクチャにも定番があって、MVCとかリアクティブアーキテクチャとか、定義する範囲なども色々変わる。
（データをって表示するところとか、データを扱うところとか、データを登録するところとか、それぞれでアーキテクチャがあったりする）


## アカウント　account
システムにアクセスするための、ユーザに割り当てられた情報。
ユーザ＝アカウントという感覚もある。
（ユーザが複数アカウントをもっていることもあるので、一概にはイコールではない）

## アクセサ　accessor
ネットワークやファイルなどの特定のものににアクセスするため役割を持ったプログラムの名前についてたりする。
～～ファイルアクセサ　みたいな。

オブジェクト指向の世界では、クラスが持つプロパティにアクセスするためのメソッド（getterやsetter）のことを言うらしい。


## アクティブ　active
有効な状態。
有効な状態にすることをアクティベイトと言ったりする。

## アジャイル　Agile
迅速かつ適応的にソフトウェア開発を行うためのコンセプト。
12のルール（マニュフェスト）があるらしい。（まともに勉強したことはないので詳しくは知らない）
よく部分的に使われる有名なものは、スクラムだとかスプリントだとかXP（エクストリーム・プログラミング）だとか。

アジャイルをまともに勉強した人に聞いたところでは、スクラムとかスプリントとかXPはそれぞれ12のルールの内のいくつかをカバーするフレームワークということらしい。

## アグリゲート　aggregate
集計。
ORMを使った集計をするときのメソッド名によくある。

## アサート assert
テストコードで使われる、内容が正しいか確認するための関数/メソッド。
アサート入れて～　とかよく使う。

元々は電気回路で信号が来ていることをアサート、来ていないことをネゲートというらしい。


## アセット asset
業務上は「資産」とか言ったりするけど、WEB系のプログラムでは画像や生のJSファイルとか
→　ブラウザとかそのまま読み込まれるファイルのことを言ったりする。

WEBのフレームワークでは、assetディレクトリの下に画像ファイルやJSファイルを置いたりすることが多い。

## アノテーション annotation
英語の直訳では「注釈」を意味する。
アノテートと言ったりもする。

Javaでアノテーションといえば、なくても動くけど宣言してしておく@で始まる付加情報。（`@Override`など）
Pythonで言えば、なくても動くけど関数の型や引数の型の宣言。
（`def hoge(foo: str) -> int`のstrやintのところ）
PyCharmで言えば、エディタ画面でどの行が誰のコミットか表示する機能。（Annotateのこと）

総じてなくても動くけど、重要な注釈（大体の場合、コメントとは別のコードに記述する印みたいな存在）という印象かな。

## アラート alert
注意喚起のメッセージを出すイメージ。
プログラマー的には、JavaScriptのalertがブラウザの警告のポップアップを出すことからこのイメージにつながるのではなかろうか。

今ではプログラム以外でも、上位者にヤバい報告を積極的にすることを「アラートをあげる」なんて聞く。

## アレイ array
プログラムでいうところの配列。
リストとかコレクションとかディクショナリーとかとごっちゃになるけど、イメージとしては「同じ型の変数を複数個でまとめたもの」という感じ？

全部の言語で共通なのかは不明だが、配列というと初めに要素数が決まっているもというイメージ。
→CとかJavaとかではその配列が使うメモリをはじめに確保していたためだった気がする

## アプリケーション application
人が実際に使うソフトって感じかな？
エクセルとかワードとかはアプリケーション。
日本語すると応用ソフト。（OSの上で動いて、「基本ソフト」の対義語みたいに使われる印象）

## イテレータ/イテレート　iterator/iterate
配列的なもの（辞書とかリストとかマップとか）があって、その要素それぞれに処理をするような動作。
「イテレート」という言葉自体が「繰り返し」という意味らしい。
Java以降に出てきた高級言語では割とイテレートするための機構は用意されている認識。

## イネーブル　enable
有効化すること。
アクティベイトとはちょっと違う印象。
直訳だと「可能にする」なので、フラグで機能をOnにする感じ。

## イベント
「マウスのクリックした」「キーボードのaを押した」とかデバイスの細かい操作みたいな印象。
「ダブルクリックした」とか「キーボードのaを離した」とかイベントの単位はそれぞれのシステムで細かさが違う。
昔は画面項目設計で「○○ボタン押下時：～～へ遷移」とかで定義していた。（今もか？）

## インクリメント
一定数ずつ増加すること。
コードで書くとこんなん。

```
count++
```


## インクルード
外部プログラムファイルを参照して読み込むこと。
C言語でしか使わないかな？
でも一般的にインクルードといえばどういうことなのか伝わるイメージ。
読み込むが転じて、「～をインクルードする」⇒「～を含める」みたいに使ってしまう私。

## インジェクション
## インスタンス
## インスタンス変数
メンバ変数と同じような雰囲気。
というか、一説にはメンバー変数は「インスタンス変数」「クラス変数」に分けられ、インスタンスに持たせる変数（＝プロパティ）が「インスタンス変数」なのだとか。
rubyとかSmallTalkで使う用語らしい。
以下の@nameがインスタンス変数

```ruby:ruby

class Hoge

  def hogehoge
    @name = 値
  end

end
```
## インターフェース

## インデックス　index
日本語にすると索引。
アーキテクチャの中だと、普通はDBのインデックスのことを言いそう。
⇒インデックスを張る　とか
DBのインデックスは、大量のデータがあった際に、目的のデータのあるところに直接アクセスする時間短縮のための技術。

配列のキーに `array[i]` とかでiを使うのはindexのiだと思っている。

あと、webのデフォルトページはindex.htmlが普通。

## インベントリ情報　inventory
PCのメモリやCPU、接続デバイスの情報を集約したもの。
インベントリ情報を収集して、ベンダーに問い合わせる～なんてことがサポートを受けるときにある。

インベントリという言葉自体は、元々は資産目録という一般的なものらしい。

## エクステンド
extend → 拡張。
pythonを触ってると、集合と集合を結合して拡張するイメージ。

## エクセプション
exception → 例外。
エラーともちょっと違う印象。
「仕様上、対象としていない動作」 → 「例外」みたいな理解。
例外の動作は、エラーにするのか警告にするのか正常にするのか制御できるから 例外 ≠ エラー。

## エミット
## エラー
error → 異常。
「仕様上、想定していない動作」 → 「やべぇ何かが起こった」という理解。
人の確認/対処が必要で、

## オープン系システム
LinuxやWindowsを使ったシステム構成のこと。
オープン系の反対はメインフレームのシステムという理解。

## オブジェクト指向
## オプション
# か
## カラム
## カーネル kernel
Unix系のOSでよく出てくる単語。
ハードウェア（CPUとかメモリとか）の制御と、アプリケーションプログラム間を仲介するプログラム。
Linuxカーネルを使うのか、BSDカーネルを使うのかでOSの系統が分かれる。
## カレント
## キャスト
## キャッシュ
## キャメルケース
## キュー
## クエリ
## クラス
## クラス変数
Javaでいうところの静的変数。
メンバ変数は「インスタンス変数」「クラス変数」に分けられ、クラスに持たせる静的変数が「クラス変数」なのだとか。
## コマンド
## コレクション
## コンソール
## コンテキスト
## コンテナ
## コンテンツ
## コントローラ
## コンバート
## コンポーネント
# さ
## サービス
## シリアライズ
## シングルトン
## シーディング
## ジェネレータ
## スイート
## スカフォールド
## スキーマ
## スケジューラ
## スケルトン
## スタティック
## ストレージ
## スネークケース
## 正規表現
## セッション
## ソケット
# た
## ダックタイピング
値の型を順番にチェックして、値の型を特定する方法。
与えられた値についてオブジェクト型？→string型？→int型？のように尋ねていって、値の型を特定する。
ポリモーフィズムを実現する方法としても使われるとか。

## タスク
## ターミナル
## チュートリアル
## データ駆動設計
DBの設計から始める設計。
業務分析の結果、ER図なりテーブル定義書なりができると、それを元に各機能が「テーブルに何をするか」を定義していく設計の仕方。
## データソース
## データベース
## ディスパッチ　dispatch
割り当てること。
例えば「このURLが来たら、この処理を実行する」みたいなことやるプログラムは、URLディスパッチャなんて言ったりする。

## ディフ diff
差分。
differenceを略しているものと理解。

## テスト駆動開発
テストケースを先に作って、それに沿うようにプログラムを作成していくやり方。
アジャイルの一つのルールにもなっていたような・・・。

## デプロイ
## デリゲート
C#で出てくる宣言。（他の言語にもあるのか？）
メソッドを、型のように定義して、変数のように使えるようにするもの。

```
delegate void TestMethod();    // メソッドを型のように使えるように宣言（TestMethod型）
TestMethod X;                  // TestMethod型の変数Xを宣言
 
void TestMethod1()             // TestMethod型と同じIFのメソッド
{
    // xxx
}
 
void TestMethod2()             // TestMethod型と同じIFのメソッド 
{
    // yyy
}
 
void Main()                    // メインの処理
{
    X = TestMethod1;
    X.Invoke(); // => xxx の処理が実行される
 
    X = TestMethod2;
    X.Invoke(); // => yyy の処理が実行される
}
```

コールバック関数のような使い方ができたりするのかな。
色々使いどころはありそう。

## テンプレート

## ドメイン駆動設計 DDD
利用者の関心事に着目した設計方法。（という解説を見たけどあまりしっくり受け入れられていない感じ）
私の理解の範囲だと、業務分析で5W1Hをはっきりさせたら、「何を」（What）と「どのように」（How）に注目して、どこにどんな役割のプログラムを配置するのかを決めていくイメージ。
- What → アプリケーションモデル
- How → サービスクラスとかプロバイダクラス
Whatの情報を保持するところがDB。
- DBとの仲介 →　リポジトリクラス

↑はどちらかというとクリーンアーキテクチャの話と混同してるかも。
DDDの話とクリーンアーキテクチャの話は割とセットで話されることが多そう。
⇒DDDを実現するのにクリーンアーキテクチャを使うみたいな感じ。

（こう見ると、全然正確性のない理解をしているんだと思わされるな。

## トリガー
## ドライバー
# は
## バインド bind
後から値を置き換えられるような動作。

```template.html
<html>
<body>
<h1>%s</h1>
</body>
</html>
```
上みたいな定義がしてあって、`template.html("タイトル")`みたいな事したら`%s`が「タイトル」で置き換わるみたいな動作。

## バウンダリ boundary
「メモリ上の固定長データの存在位置が、ゼロ位置から数えてその固定長の整数倍の長さの位置から始まっていること。」
http://d.hatena.ne.jp/keyword/%A5%D0%A5%A6%A5%F3%A5%C0%A5%EA
「複数バイトの一括メモリーアクセス時に、一定の数で割り切れるアドレスにアクセスしなければならないという制限。アドレス境界、バイト境界、オクテット境界などとも。」
https://www.wdic.org/w/TECH/%E3%83%90%E3%82%A6%E3%83%B3%E3%83%80%E3%83%AA

要するに、メモリの扱いやすい、2、4、8、16、32、64、128バイトのデータを使うことなのかなーと思っているのだけど、とあるプロジェクトのルールに
`バウンダリは、アプリケーションモデルを直接インポートしてはならない`
とあって、これはいったいどういう意味になるのか・・・？
→一般的かは不明だが、djangoで言うところのview/command/middlewareのこととか、MVCで言うところのControllerのような、オブジェクトを組み合わせる指定をするところを言っていたらしい。

`バウンダリは、アプリケーションモデルを直接インポートしてはならない`
↓
`view/command/middlewareでは、アプリケーションモデルを直接インポートしてはならない`といいたかったらしい。

恐らく、view/command/middleware → スキーマの境界の役割 → バウンダリということなのだろうか。

## パスカルケース
アッパーキャメルケース（頭文字が大文字のキャメルケース）と同じ。

## ハッシュ
## バックグラウンド
## バッチ
## バリデーション
## バーチャルマシン
## パッケージ
## パブリック
## パブリッシュ
## パーミッション
## ビュー
## ビルド
## ブートストラップ
## ファームウェア
## ファクトリー
## ファサード
## フィールド
## フラッシュ
## ブロードキャスト
## プッシュ
## プライベート
## プロキシ
## プロジェクト
## プロダクション
## プロバイダ
## プロパティ
## ヘルパー
## ペジネイト
## ポインタ
## ポップ
## ポリモーフィズム
Javaでいう、同じ名前で引数の違うメソッドをいくつも作ること。
AMethod(String)
AMethod(Integer)
AMethod(Boolean)
のようにメソッドを作れる。

# ま
## マイグレート
## マネージャ
## マングリング
Pythonでクラスのメンバーアクセスするときに、`__`でアクセスするやつ。
（他の言語でもいうのかな？）

```
class Hoge:
    def __a(self):
        return "hoge"

assert Hoge()._Hoge__a() == "hoge"       # ← ここの__a()がマングリングが使われている

```


## ミドルウェア
## ミューテタ

## メインフレーム
現在のWindowsやLinuxがサーバで使われる前に定番だったコンピュータ。
富士通や日立などそれぞれで異なるアーキテクチャでメインフレームを作っていたのだと思う。
→　だから富士通系だったら富士通だけで、日立系なら日立系だけで、NEC系ならNEC系だけでシステムを作っていたという解釈をしている。

メインフレームの反対がオープン系システムという理解。

## メソッド
## モジュール
## モック
## モデル
# ら
## ライブラリ
## リクエスト
## リスト
## リソース
## リダイレクト
## リファレンス
## リレーション
## ルーティング
## レイテスト
## レスポンス
## ログ
## ロケール
## ローカル
# わ
## ワークスペース
## ワーニング