1週間で習ったことの復習(docker,linux,vim,git正規表現,sql)

# はじめに
直近1週間で習ったことをOutputします


# Dockerに関して
## Dockerとは
> Dockerは、アプリケーションを開発、出荷、実行するためのオープンプラットフォームです。

>Dockerを使用すると、開発者は、アプリケーションとサービスを提供するローカルコンテナーを使用して、標準化された環境で作業できるようになり、開発ライフサイクルが合理化されます。

参考：https://docs.docker.com/get-started/overview/

つまり、windowsやLinuxでも同じように開発環境を構築することができるので、環境によっておこる問題を少なくすることができます。

## Dockerを勉強するために行ったこと

1. [DotInstall_Docker入門](https://dotinstall.com/lessons/basic_docker)
1. [独学エンジニア](https://dokugaku-engineer.com/course/serverside)
1. [公式ドキュメント](https://docs.docker.com/)

## 必要な基本情報
- 基本的な流れ
    1. imageの取得(docker pull)
    1. containerの立ち上げ(docker run)
    1. 自分好みのimageの作成(docker commit)
    1. DockerIndexに登録(docker push)
- Dockerfile
    - 新規にDockerイメージを作成するための手順を記したテキストファイル
- docker-compose.yml
    - Dockerビルドやコンテナ起動のオプションなどを含め、複数のコンテナの定義が書かれている
- docker run
    - 1つのイメージしか起動できない
- docker-compose
    - webサーバ、DB、キャッシュなど複数のコンテナを作る場合に便利
    - 同じ構成の環境を別の環境に構築することが可能

## dockerコマンド
| コマンド 　| 意味    | 
|:---|:-------|
|docker ps|起動中containerの確認|
|docker ps -a|すべてのcontainerの確認|
|docker ps -a -n=5 |最新の5つだけ見たい時|
|docker container ls|containerの確認|
|docker images|imageの確認|
|docker rm [container id] |削除|
|docker logs [container id] |　ログの確認|
|docker kill [container id] | contianerをとめる|
|docker stop [container id]|contianerをとめる|
|docker start [container id]|　再開させる|


##  docker-composeコマンド
| コマンド 　| 意味    | 
|:---|:-------|
|docker-compose ps|コンテナの起動状態を確認する|
|docker-compose logs [container id] |コンテナのログを確認する|
|docker-compose up -d|Dockerコンテナの起動|
|docker-compose down|Dockerコンテナの停止・削除|
|docker-compose build|Dockerイメージのビルド|
|docker-compose down|Dockerコンテナの停止・削除|
|docker system prune --volumes|Docker の不要なイメージ、コンテナ、ネットワーク、ボリュームを削除する|

## その他
| コマンド 　| 意味    | 
|:---|:-------|
|-d|バックグラウンドで走らせる|
|free|メモリの状況を表示させるコマンド|
|-i|インタラクティブモード|
|-t|コンテナの中でterminalを立ち上げる|

## Dockerfile
```
# なんのイメージを元にするか記載する
FROM <image>

# 誰がつくったか
MAINTAINER tanu  <tanu@gmail.com>

# RUN: buildするときに実行される
RUN echo "now building..."

# CMD(コマンド): runするときに実行される
# CMD echo "now running..." <-この書き方もできるが未推奨
CMD ["echo", "now running..."]

```


# Linuxに関して
- MacOSのようなOSの1つ
- オープンソースなので無料で使える

## 基本操作
| コマンド 　| 意味    | 
|:---|:-------|
|ctr c |リセットして次の行へ|
|ctr u |リセット|
|ctr l |画面クリア|
|cd |移動(homeへ戻りたい時にも使える)|
|[tab] [tab] |候補の表示|
|--help |help表示|
|cat file|ファイルの中身確認|

## lsコマンド
| コマンド 　| 意味    | 
|:---|:-------|
|ls|一覧表示|
|ls mysite/|ディレクトリの中身まで見れる|
|ls -alS |サイズ順に表示|
|man ls |詳細を表示|
|* |ワイルドカード|
|ls -l *.conf |.confのみ表示|
|? |任意の一文字|
|ls -l s????? | 「s」ではじまる6文字|

## 作成
| コマンド 　| 意味    | 
|:---|:-------|
|touch file|ファイル作成|
|mkdir dir|ディレクトリ作成|
|mkdir -p dir1/dir2|dir1の中にdir2を作成|

## 削除
| コマンド 　| 意味    | 
|:---|:-------|
|rm|削除|
|rm -r |強制削除|
|rmdir|ディレクトリ削除|


## コピー
| コマンド 　| 意味    | 
|:---|:-------|
|cp file1 file2|file1をfile2の名前でコピー|
|cp -r dir dir|ディレクトリのコピー|

## 実行中のコマンドの確認
| コマンド 　| 意味    | 
|:---|:-------|
|ps|実行中のものを確認|
|kill <> |強制終了|


## その他
| コマンド 　| 意味    | 
|:---|:-------|
|history|コマンドの履歴表示|
|!3 | historyの三番目を実行|
|!** | 直近**に該当するコマンドを実行|
|!pw |　直近でおこなった「pw」から始まるコマンドを実施|
|[--] | --には英字がはいる|
|[ab]??? | 「a」か「b」がる4文字|
|[f-h]* | f~hで始まる項目|
|{sh,ho}* -.|sh, ho　からはじまる項目|

## アクセス権限
```
ls -l

↓

-rw-r--r--
```
| コマンド 　| 意味    | 
|:---|:-------|
|r| read|
|w| write|
|x| execute(実行可能)|


# Vimに関して
- terminalからコマンドを操作するテキストエディタ
- `vi index.html` のような形で呼び出す

## Vimの勉強方法
- terminalで`vimtutor`と入力することでVimの基本操作に関して学ぶことができる

## カーソルの移動

| コマンド 　| 意味    | 
|:---|:-------|
| h  | 左方向      | 
| j  | 下方向      | 
| k  | 上方向      | 
| l  | 右方向      | 


## 保存と編集
- 本当に重要
- 最初、操作方法がわからず本当に焦った

| コマンド 　| 意味    |
|:-------|:-------|
| ESC |ノーマルモード |
| i |入力モード(カーソルの前) |
| a |入力モード(カーソルの後ろ) |
| : |コマンドモード |
| v |選択モード |
| :q | quit |
| :w |保存 |
| :w [**] | 名前を付けて保存 |
| :wq |保存 |
| :q! |強制終了 |
| :e [**] |他のファイルを開く |
|p |ペースト |
|yy |コピー |

## 削除

| コマンド | 意味    |
|:-------|:-------|
|x | 削除 |
|dd | 行単位で削除 |
|3dd | 3行削除 |

## ビジュアルモード

| コマンド | 意味    |
|:-------|:-------|
|v | 文字単位を選択できる|
|shift v | 行単位で選択 |
|ctr v | 矩形選択 |

## 検索

| コマンド | 意味    |
|:-------|:-------|
|/[*] | *を検索 |
|n | 下方向へ検索 |
|N | 上方向へ検索 |
|* |今カーソルがある位置の単語を検索(上方向|
|# |今カーソルがある位置の単語を検索(下方向|

## その他のコマンド

| コマンド | 意味    |
|:-------|:-------|
|gg | 先頭に戻る |
|G | 一番最後に飛ぶ |
|ctr f | 1画面上に |
|ctr b | 1画面下に |
|w | 単語ごとに飛ぶ |
|b | 1つ前の単語に飛ぶ |
|^ | 行の先頭へ |
|$ | 行末へ |
|f [*] |*の文字まで飛ぶ |
|%({}などの上で) | 対応するカッコに飛ぶ |


# Gitに関して
## Gitとは
- バージョン管理システム
- 基本的な流れ
    - リポジトリから最新のバージョンを取得して、作業ディレクトリを作成して、作業をする。作業が終わるとステージングエリアに格納して、リポジトリへpushするというよう流れ

[公式サイト](https://git-scm.com/)

## Gitのコマンド
| コマンド | 意味    |
|:-------|:-------|
|git init |初期化 |
|git branch|ブランチを表示|
|git checkout -b branch|branchの作成と移動|
|git checkout branch|branchへ移動|
|git log|ログの確認|
|git log --oneline|1行で履歴を見る|
|git status|変更状況の確認|
|git add . |変更をステージングに追加|
|git commit -m comment|commentでコミット|
|git push origin branch|リモートリポジトリへコミット内容を送信|
|git reset --hard HEAD|直前の状態に戻す|
|git reset --hard git logのID|特定の位置のlogまで戻したい時|
|git reset --hard ORIG_HEAD|git resetをした後に再度戻りたい場合|
|git branch -d branch|branchの削除|
|git stash save|一時的に退避|

## 基本的な流れ
作業をする際に必要な流れに関して
1. 現在のブランチから自分用の作業ブランチを作成
1. ファイルの変更/確認
1. `git add`で追加
1. `git commit` でコミット
1. `git push`でコミット内容を送信

| コマンド | 意味    |
|:-------|:-------|
|git checkout -b branch|branchの作成と移動|
|git status|変更状況の確認|
|git add . |変更をステージングに追加|
|git commit -m comment|commentでコミット|
|git push origin branch|リモートリポジトリへコミット内容を送信|

## Git Hubとの連携に関して
1.  GitHub->設定->Developer settings -> Personal Access tokensでtokenを発行
1.  git hubでリポジトを作成
1.  以下のコマンドの実行
```
git remote add origin https://github.com/<UserName>/<リポジトリ>
git branch -M main
git push -u origin main
passwordの入力欄に発行したTokenを入力
git remote -v //remoteの接続状況を確認できる
```

また、gitはディレクトリごとにgitと接続する必要があるので、新しくリポジトリを作成したら以下のコマンドを実行する必要がある
```
echo "# <リポジトリ>" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/<User Name>/<リポジトリ>.git
git push -u origin main
git branch 
→ mainなどと表示されていれば接続完了
```

# 正規表現

## 基本的な正規表現
| コマンド | 意味    |
|:-------|:-------|
|. |開業を除く任意の一文字|
|\\. |「.」を検索|
|\d |0-9|
|\w | a-z, A-Z, 0-9, _|
|\s |スペース、改行、タブ|
|\D |0-9 以外|
|\W | a-z, A-Z, 0-9, _ 以外|
|\S |スペース、改行、タブ 以外|
|\t| タブ|
|\n| 改行|

## 量指定子

| コマンド | 意味    |
|:-------|:-------|
|{n}|n個|
|{min, max}|min異常、max以下|
|{min,}|min以上|
|?|0、1|
|+|1個以上|
|*|0個以上|

## アンカー
| コマンド | 意味    |
|:-------|:-------|
|^|最初のみ|
|$|末尾|
|\b|単語の境界|
|^\d|最初の数値のみ検索|
|\d$|末尾の数値を検索|
|\bseki\b| 「seki」のみを検索|

# SQLに関して
- データベースの操作
- ここでは基本的な部分のみ記載

## CREATE

```
CREATE TABLE posts (
  id INT NOT NULL AUTO_INCREMENT,
  message VARCHAR(140),
  likes INT,
  PRIMARY KEY (id)
);
```

## INSERT
```
INSERT INTO posts (message, likes, category) VALUES
  ('Thanks', 12, "Gadget"),
  ('Arigato', 4, "Business");
```

## SELECT
```
SELECT * FROM posts;
SELECT * FROM posts where id = 1;
```

##  DELETE
```
DELETE FROM posts WHERE likes < 10;
```

## UPDATE
```
UPDATE
  posts
SET
  likes = likes + 5,
  message = UPPER(message)
WHERE
  likes >= 10;
SELECT * FROM posts;
```