プログラミング初学者のための用語解説集

#本記事のターゲット
まずはじめに、本記事の対象者は以下を想定しています。

- 業界未経験でエンジニア転職を目指してプログラミングを勉強している方
- プログラミングの勉強を始めたばかりで用語がたくさん出てきて混乱している方

実務経験豊富な現役エンジニアからすると「こんなもん当たり前のお話やろ！！！」って感じだと思うので、
この記事は見る価値がほとんど無いかな思います（笑）
それでも見ていただける超優しい方は、本記事の内容に関してご指摘などいただけると非常に嬉しいです！


#本記事を書いた理由
この記事を書いた理由は

**僕がプログラミングの勉強をしていく中で苦労したのは専門用語の多さだったら**

です。

IT業界の専門用語って多いうえにだいたい略されているからわかりにくいんですよね...

もちろんプログラミング言語の勉強自体も難しいですが、
今回は用語に焦点を当てて解説していこうと思います。

#本記事のオススメの使い方
ストックしていただき、辞書代わりに使っていただけると嬉しいです。
用語は順次追記していきますよ。

#用語解説
##DBMS(Database Management System)

WebサービスやWebアプリでデータを蓄積する`DB（データベース）`を管理する役割を担うもののことを指します。
`DBMS`のことを単に`DB`と呼ぶことの方が多いです。

つまり、

**`DBMS＝データベース`**と認識しておいてOKかと思います。

データベースには`RDB（Relational Data Base）`という種類があり、
WebサービスやWebサプリでよく使われると思います。

データベースの例としては、以下の物があります。

- MySQL
- PostgreSQL
- MariaDB
- SQLite
- Oracle Database

`DBMS（=データベース）`を搭載したサーバーをデータベースサーバーといいます。

詳しくはこちら→[DBMSについて](https://wa3.i-3-i.info/word11771.html)

##Cookie（クッキー）
Webサーバーに接続してきたWebブラウザに対して、コンテンツを返すのと一緒にWebブラウザに保存して欲しい情報をCookieとして送ります。

そうすることでWebブラウザが再度Webサーバーに接続する際にCookieも一緒に送信することでWebサーバーがどのWebブラウザなのかを識別できるわけですね。

ネットショッピングサイトでカートに入れた情報が残っているのはCookieが使われています。

イメージとしては**目には見えない会員証**みたいなものです。

詳しくはこちら→[Cookieについて](https://time-space.kddi.com/ict-keywords/20180726/2392)

##POSTとGET
WebブラウザとWebサーバーがやり取りする際の一般的なプロトコルであるHTTP、そのHTTPが持つメソッドの一部にPOSTとGETがあります。

**Webサーバーとの通信の仕方（種類）**といったところかなと思います。

POSTとGETの違いについてはQiitaでわかりやすくまとめらている記事がありました。→[GETとPOSTの違いについて](https://qiita.com/kanataxa/items/522efb74421255f0e0a1)

##Ajax(Asynchronous JavaScript + XML)

Webブラウザ上でクライアントサイドで動く**JavaScript**が直接Webサーバーと通信を行い、取得したデータを用いて、表示するHTMLを更新する技術。

簡単にいうと**サーバーとデータのやり取りをする際にページをリロードせずに行う**ことができる技術ですかね。
ちなみにこれを**非同期通信**というらしいです。

うーん、もっとわかりやすく言うとブラウザ側で動くJavaScriptでサーバーとやり取りできるっていう感じでしょうか。


Twitterの「いいね」機能とかGoogle MapとかもAjaxが使われています。

##CUI(Character User Interface)
簡単に言うと

**文字だけの操作画面**

です。

- Character＝文字
- User Interface＝画面（ユーザーとコンピュータの間を仲立ちするもの）


`CUI`はキーボードのみで操作していきます。

代表的なCUIとしては以下が挙げられます。
- Windoow：コマンドプロンプト
- Mac：ターミナル

これらの`CUI`ツールは`Git`というファイルのバージョン管理ツールを使用するときによく使われます。
（もちろん他の用途もたくさんありますが）

詳しくはこちら→[CUIとGUIの違い](https://lanchesters.site/cui-gui/)

##GUI(Graphic User Interface)
簡単に言うと

**グラフィックなデザインで表示された操作画面**

です。

- Graphic＝グラフィック（そのままですみません）
- User Interface＝画面（ユーザーとコンピュータの間を仲立ちするもの）

`GUI`はマウスとキーボードで操作していきます。

みなさんが使いのPCの画面が以下の理由から*GUI*ですね。
- マウスで操作可能
- ファイルやフォルダが視覚的にわかる

詳しくはこちら→[CUIとGUIの違い](https://lanchesters.site/cui-gui/)

##LAMP
これは必ず覚えておきましょう。

`LAMP`以下の頭文字をつなげて作られた開発環境を指します。

- **L：Linux（OS）**
- **A：Apache（Webサーバー）**
- **M：MySQL（データベース）**
- **P：PHP（スクリプト言語）**

データベースに`PostgreSQL`や`MongoDB`など他の物を用いる場合や
スクリプト言語に`Ruby`や`Python`などを用いる場合もあります。

企業の募集要項を見ていただけるとわかりますが、

**LAMP環境での開発経験◯年以上**

と書かれていることが多いので意味は知っておいた方が良いですね。

OS、Webサーバー、データベースについても知っておくと良いと思いますので、
その辺りも解説されている記事のリンクを貼っておきます。→LAMPについて](https://wa3.i-3-i.info/word13.html)

##MVC
こちらも今後PHPやRubyを勉強する方は絶対に抑えておくべき用語です。
`MVC`は以下の頭文字をとったアプリケーションの構造を表す言葉です。

- M：Model(モデル)
- V：View(ビュー)
- C：Controller(コントローラー)

`MVCモデル`と呼ぶことが多いです。

M・V・Cそれぞれの働きは以下の通りです。

- M（Model）：データベースとのデータのやり取りやその他の処理
- V（View）：画面を表示する
- C（Controller）：クライアントから要求された処理をModelとViewに伝える役割

MVCモデルの概念を利用した**MVCフレームワーク**が開発現場では多く使われています。
（MVCと似た構造でMVVCモデルというのもありますが今は覚えなくて良いかなと）

詳しくはこちら→[MVCモデルとMVCフレームワークについて](https://se-shine.net/what-mvc/#i)

##デプロイ
アプリケーションの開発などで作成した**プログラム（ファイル）をサーバー（もしくはクラウド）上にアップロードし、そのサーバー環境で使用可能にする**ことです。

よく、**Xserverにデプロイする**とか**AWSにデプロイする**とか**Herokuにデプロイする**とか言いますよね。
（聞いたことねえよ！って方もこれからよく目にしますよ）

詳しくはこちら→[デプロイとは](https://wa3.i-3-i.info/word16767.html)


ちなみに僕は転職活動用ポートフォリオはXserverにデプロイしました。

その時に参考になった記事を貼っておきます→[WebサービスをXserverで公開する方法](https://qiita.com/kgkgon/items/c2a72f1bc22d0993cda5)

また、上記記事でXserverでデプロイしたときに感じた注意点や気付きについてまとめた僕の記事もよかったら覗いてみてください。→[自作WebサービスをXserverで公開するときの注意点と学び](https://qiita.com/shimotaroo/items/be5789333d49d0139234)

##IDE(Integrated Development Environment)
**統合環境開発ソフト**と呼ばれるものですね。
プログラミングを快適に行うことができるソフトで、エディターに色々な機能が付属しているみたいなイメージです。

詳しくはこちら→[IDEとは](https://www.sejuku.net/blog/98980)

##FTP(File Transfer Protocol)
通信プロトコル（プロトコル）の一種で、**ファイルの送受信に使用されるプロトコル**のこと。
（名称にFileって入ってますもんね）

ちなみにおなじみの**HTTP(Hyper Text Transfer Protocol)**もプロトコルの一種で、こちらは**文書の送受信用**です。
セキュリティー性を高めた**HTTPS**というのもあるのでその辺は各自調べてみてください。笑

僕はXserverにポートフォリオサイトをデプロイした時にFTPという言葉を初めて見ました。

今は**ファイルの送受信用のプロトコル**ってことだけ知っておきましょう！

詳しくはこちら→[FTPとは](https://wa3.i-3-i.info/word1137.html)

##CDN(Content Delivery Network)

Wikipediaには
>コンテンツデリバリネットワーク(英: content delivery network、CDN)とは、ウェブコンテンツをインターネット経由で配信するために最適化されたネットワークのことである。コンテンツ配信網とも。

と書かれています。

これはプログラミング言語のライブラリを使う時によく使います。

プログラミング初心者の方であればjQuery(JavaScriptのライブラリ)を使う時にCDNを利用するのではないかと思います。

**ネットワーク上にあるコンテンツ取ってきて使う**っていう感じですかね。
なのでネットに繋がっていないと反映されません。
（まあWebサイトを閲覧するときはネットに繋がっているので問題ないと思いますが）

詳しくはこちら→[CDNとは](https://www.1-firststep.com/archives/2142)

##SPA(Single Page Application)

Wikipediaには
>シングルページアプリケーション（英: single-page application、SPA）とは、単一のWebページのみから構成することで、デスクトップアプリケーションのようなユーザ体験を提供するWebアプリケーションまたはWebサイトである。必要なコード（HTML、JavaScript、CSS）は最初にまとめて読み込むか[1]、ユーザの操作などに応じて動的にサーバと通信し、必要なものだけ読み込みを行う。

その名の通りですね。笑

**1つのページで構成されたアプリ**ですね。
Twitterもそうなのかな？

詳しくはこちら→[SPAについて](https://digitalidentity.co.jp/blog/creative/about-single-page-application.html)

このように書かれています。
##AWS(Amazon Web Service)
Wikipediaには
>Amazon Web Services（アマゾン ウェブ サービス、AWS）とは、Amazon.comにより提供されているクラウドコンピューティングサービスである。ウェブサービスと称しているが、ウェブサービスに限らない多種多様なインフラストラクチャーサービスを提供している。これらのサービスは全世界で22の地理的リージョンで提供されている（2019年9月現在、利用に制約のあるリージョンを含む）。AWSの有名なサービスにAmazon Elastic Compute Cloud (EC2) とAmazon Simple Storage Service (S3) がある。各組織が独自に保有し、仕様変更には長時間の物理的な作業を必要とするサーバファームと比較して、AWSは需要に応じた計算能力を、設定変更のみで速やかに提供出来ることが強みである。クラウドの分野でのAWSの世界的シェアは33％前後で世界1位である[1]。世界的シェア13%前後で世界2位のMicrosoft Azureを大きく引き離している。

このように書かれています。

**Amazonが提供しているクラウドサービス**のことですね。

最近はプログラミングが初心者が転職活動のために作成したポートフォリオをAWSにデプロイする人が増えてきたみたいです。

QiitaにもAWSにデプロイする方法をまとめて記事がたくさんあります。

クラウドサービスはAWSを含め、他には以下のものがあります。
**Amazon：AWS(Amazon Web Service)
Google：GCP(Google Cloud Platform)
Microsoft：Microsoft Azure**

詳しくはこちら→[AWSとは](https://aws.amazon.com/jp/about-aws/)

##API(Application Programming Interface)
ソフトウェアに外部とのやり取りすることのできる窓口を作り、外部サービスと連携ができるようにするものです。

今はアプリでニュースを読んだりした時にその記事とTwitterが連携していて、その記事に関してすぐツイートができるようになっていますよね。

これかTwitter APIを使っているんですね。

**他のアプリと連携するためのもの**と考えておきましょう。

ちなみに僕はまだAPIを使ったことも作ったこともありません・・・

詳しくはこちら→[APIとは](https://data.wingarc.com/what-is-api-16084)
##DOM（Document Object Model）
HTMLやXML文書を取り扱うためのAPI
(APIだったんだ・・・知らなかった）
DOMではHTMLやXML文書をノードと呼ばれる塊の階層的な構造と認識しており、
JavaScriptなどのプログラミング言語でノードを指定し、操作できるような仕組みを提供している。
つまりDOMがあるためJavaScriptで動的なサイトを作ることができるというわけですね。

こちらのサイトに詳しく書かれています。
→[DOMとは](https://www.javadrive.jp/javascript/dom/index1.html)

また、ノードを階層的な構造と認識していると書きましたが、階層的な構造のことをDOMツリーと呼びます。
DOMツリーについてはこちらのサイトで解説されています。
→[JavaScript初心者でもすぐわかる！DOMとは何か？
](https://eng-entrance.com/what-is-dom#DOM-2)
##フレームワーク
フレームワークとは**プログラミング言語の工作キット**みたいなもので開発を簡単に行えるようにするためのツールです。

例えば、
JavaScript：Vue.js、React.js、Angular.js
PHP：CakePHP、FuelPHP、Laravel
Ruby：Ruby on Rails
Python：Django
とかですね。
ここで説明より、めちゃくちゃわかりやすくまとめていただいているサイトを見つけましたので、
そちらを読んでみてください。
→[フレームワークとは](https://wa3.i-3-i.info/word12470.html)


#おわりに
本記事ではプログラミング初心者のための用語解説集として、知っておいて損はない用語についてまとめていきました。

最初はわからない用語がどんどん出てくるので不安になりますが、
誰しもが最初はそうだったので心配する必要はないです。

もし最後まで読んでいただけましたら非常に嬉しく思いますし、いいねやコメントをいただけたら嬉しいです。

内容におかしいところがあればぜひご指摘いただければ嬉しいです。