【初心者必読!?】プログラミングを学ぶ際に躓く用語集

どうも！
三町哲平です。
夏真っ盛りで汗かきの私には中々大変な時期であります。

さて今回は、
私がプログラミング言語にPythonやRubyというものが存在すると初めて知ったぐらいの時期にWordにまとめていたメモがありましたので、多少修正して記事にしています。
プログラミング初心者が学習で躓く聞き慣れない用語のまとめです。

※ Pythonから学習を始めたのでPython関係の内容を中心にインフラ等の知識も含まれます。


# CRUD
データを操作する際に必要な最低限の機能のこと。

* 機能（Create）
* 参照機能（Read）
* 変更機能（Update）
* 削除機能（Delete）

参考及び引用元:https://wa3.i-3-i.info/word123.html

# CI/CD
「Continuous Integration／Continuous Delivery」の略で、日本語では継続的インティグレーション／継続的デリバリーという。

ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法

オンプレミス型としてはJenkins、クラウド型としてはTravis CIやCircleCIなどが有名。

参考及び引用元:https://codezine.jp/article/detail/11083

# アジャイル開発
アジャイルとは『すばやい』『俊敏な』という意味で、反復 (イテレーション) と呼ばれる短い開発期間単位を採用することで、リスクを最小化しようとする開発手法の一つです。

参考及び引用元:https://www.nec-solutioninnovators.co.jp/column/01_agile.html#:~:text=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E5%9E%8B%E9%96%8B%E7%99%BA%E6%8A%80%E6%B3%95,%E3%81%A7%E9%96%8B%E7%99%BA%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

# MVCモデル
MVCモデルでは、プログラムの中身を

* モデル（Model）：表示や入力に関連しない処理
* ビュー（View）：表示や入力に関する処理
* コントローラ（Controller）：ビューとモデルの橋渡し役

に分類して作ります。

参考及び引用元:https://wa3.i-3-i.info/word11584.html
参考及び引用元:https://umaroidblog.com/what_mvcmodel

# pip
pipはPythonのパッケージを管理するためのツール

パッケージには
・公式が配布しているもの
・サードパーティが配布しているもの
と大きく分けて2つがあります。

サードパーティのパッケージはPyPIというサイトで配布されています。
公式サイトURL=> https://pypi.org/

公式が配布しているものはたいていPythonをインストールする時点で自動的にインストールされますが、サードパーティが配布しているパッケージは別にインストールをする必要があります。

このサードパーティが配布しているパッケージをインストールするために、pipを使います。pipを使うことでパッケージの管理が楽になります。

参考及び引用元:https://www.sejuku.net/blog/50417

# モジュール・パッケージ・ライブラリ
参考及び引用元：https://netdekagaku.com/module-package-lybrary/
※Django理解に必須

## モジュール
例えで言うなら「部品」や「歯車」に当たります。

もっと具体的に言うなら拡張子が「.py」のファイルは全てPythonモジュールとなります。

## パッケージ
モジュールの集まったものがパッケージとなります。

例えで言うなら、「箱」ですね。

## ライブラリ
パッケージをいくつかまとめてインストールできるようにしたものです。

モジュール　＞　パッケージ　＞　ライブラリ みたいに理解すれば簡単ですね。

参考及び引用元:https://qiita.com/yutaro50/items/f93893a2d7b23cb05461
参考及び引用元:https://qiita.com/Usek/items/86edfa0835292c80fff5

# プロトコル
インターネットの接続は、TCP/IPプロトコルを使用する。TCP/IPの通信は、大きく4つの機能階層に分けられる。
各階層には、以下のプロトコルおよび規格が該当する。
（1）アプリケーション層
Webアクセスに使われるHTTP（Hypertext Transfer Protocol）、電子メールのやりとりに使われるPOP（Post Office Protocol）、SMTP（Simple Mail Transfer Protocol）
（2）トランスポート層
別のコンピューターへのデータ伝送を制御するTCP（Transmission Control Protocol）、ネットワーク上のほかのホストへデータグラムを送るUDP（User Datagram Protocol）
（3）インターネット層
IP（Internet Protocol）
（4）ネットワークインターフェイス層
ネットワークの規格のEthernetなど

各階層でそれぞれ異なる役割のプロトコルが機能し、TCPやIPに加えて、HTTP、Ethernetなど各プロトコルが連携して初めて通信が実現される。このように通信プロトコル群を「プロトコルスタック」と呼ぶ。

参考及び引用元:https://www.otsuka-shokai.co.jp/words/protocol.html

# GET/POST

## GET
基本的に読み取り専用な機能に対して使うべきメソッド

## POST
以下のような例があります。

* HTMLの <form></form>に入力された内容をDBへ登録する
* ブログの記事を投稿する
* 新しいユーザを登録する
* 既存のデータに新しい情報を付加する

また、GETとは反対に冪等でないかつ安全でないと定義されています。

参考及び引用元：https://qiita.com/kanataxa/items/522efb74421255f0e0a1

# 絶対パス, 相対パス
参考及び引用元:https://techacademy.jp/magazine/5801

## 絶対パス
URLでページを指定して、目的地（情報）がどこにあるのかを確実に伝えます。# 逆引き
DNSなどを使って、IPアドレスに対応するホスト名を調べることです。
また、ホスト名からIPアドレスを調べる事を「正引き」といいます。

## 相対パス
今いる場所（階層）を基準にして、目的地（情報）がどこにあるのかを伝えます。

# 正引き、逆引き
DNSなどを使って、IPアドレスに対応するホスト名を調べることです。
また、ホスト名からIPアドレスを調べる事を「正引き」といいます。

例）正引き 　www.example.com　→　192.0.2.100
例）逆引き 192.0.2.100　→　www.example.com

参考及び引用元:https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?id=94

# オーバーライド
オブジェクト指向におけるオブジェクトの継承の話で出てくる用語のひとつであり親クラスにあるメソッドを子クラスで再定義することによって、子クラス上で親クラスのメソッドを上書きすることです。

参考及び引用元:https://wa3.i-3-i.info/word138.html#:~:text=%E7%B6%99%E6%89%BF%E3%81%99%E3%82%8B%E3%81%A8%E8%A6%AA%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7,%E5%AD%90%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7%E4%BD%BF%E3%81%88%E3%81%BE%E3%81%99%E3%80%82&text=%E5%90%8C%E3%81%98%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E5%86%8D%E5%AE%9A%E7%BE%A9,%E6%8C%81%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82

# メソッド
メソッドとは、簡単に言うとクラスの中で定義された関数のことです。

参考及び引用元:https://www.sejuku.net/blog/64106
参考及び引用元:https://wa3.i-3-i.info/word1906.html

# メンバ変数
インスタンス変数＝メンバ変数

参考及び引用:https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E5%A4%89%E6%95%B0
参考及び引用元:https://wa3.i-3-i.info/word13563.html

# Pythonのクラス変数とインスタンス変数
* インスタンス変数 - そのインスタンスだけで使う属性。クラス定義文の直下で変数に代入する。各インスタンスオブジェクトで共有する変数は、クラス変数として定義します。

* クラス変数 - すべてのインスタンスで共有して使う属性。関数定義文の直下でselfの属性に代入する。各インスタンスで共有しない変数は、インスタンス変数として定義します。

参考及び引用元:https://python.ms/attribute/#_1-%EF%BC%92%E3%81%A4%E3%81%AE%E5%B1%9E%E6%80%A7%E3%81%AE%E9%81%95%E3%81%84
参考及び引用元:https://uxmilk.jp/41600

# インスタンス生成
インスタンスを生成すること。
参考及び引用元:https://uxmilk.jp/39906

# self
クラスの中のコンストラクタやメソッドには、selfというものが存在します。このselfは、インスタンス自身を示すものです。

参考及び引用元:https://www.sejuku.net/blog/64106

# インスタンス
クラスが「たい焼きの型」
インスタンスが「たい焼き」

参考及び引用元:https://techacademy.jp/magazine/23289

# if __name__ == '__main__':
一言で言うと、 if __name__=='__main__': はこのPythonファイルが「python ファイル名.py というふうに実行されているかどうか」を判定するif文です。

参考及び引用元:https://blog.pyq.jp/entry/Python_kaiketsu_180207

# Docker
コンテナ仮想化ツールです。アプリ操作をコンテナに分けて実行することや、別のOS上にコンテナを移しても動作するよう働きます。

* 速い(起動、処理)
* 軽い(プログラムサイズ、移動のしやすさ)
* エコ(Memory や Disk 消費量節約)

参考及び引用元:https://www.kagoya.jp/howto/rentalserver/docker/

# コンストラクタ
コンストラクタとは、オブジェクトが生成される時に実行されるメソッド（関数）のことです。オブジェクトが扱う変数などの初期化を主に行います。オブジェクトはクラスをもとに生成されます。

参考及び引用元:https://techacademy.jp/magazine/18842

# さいごに
この記事の「参考及び引用元」の製作者様全てに感謝致します。