業務で使うようになったコマンド集

# 最近よく使うコマンド達

ちょくちょく忘れるのでメモ

## git

### `develop` ブランチ等で、GitHub の最新版のコードに更新する場合

- `git pull --rebase`
    - rebaseするときに使う
    - 単純なpullよりも履歴が綺麗になるらしい（実感はなし）
        - https://kray.jp/blog/git-pull-rebase/
- `git submodule update --init --recursive`
    - 別管理してるgitリポジトリをupdateするために使う（DBとか）

### 作業ブランチ: 作業中のコードを一旦退避させ、GitHub の最新版のコードに更新する場合

- `git fetch -p`
    - remotes/origin/xxxx の branchを最新に更新 & 存在しなくなった物を削除するお掃除コマンド
    - https://blog.junpeko.com/git-fetch-prune
- `git stash`
    - WIP のコードを退避する
- `git merge --no-ff remotes/origin/develop`
    - マージコミットを作成する
    - https://tracpath.com/docs/git-merge/
- `git stash pop`
    - 退避したコードを復帰する

### サブモジュールを更新する場合

- サブモジュールの GitHub リポジトリを更新する
    - main に直接 push する、などで
- `git submodule foreach git pull --rebase`
    - submodule を更新する

### サブモジュールの更新が、うまくいかない場合

- `cd conf/database`
    - サブモジュールのディレクトリに移動する
-  `git branch`
    -  `* main` となることを確認する
    -  そうでない場合、
        -  `git checkout main`
        -  で `main` ブランチに移動する
-  `git pull --rebase`
    -  `main` ブランチを最新にする
-  `cd ../..`
    -  作業ブランチに戻る
-  `git status`
    -  `modified: conf/database (new commits)`
    -  のように、サブモジュールが更新していることを確認する
-  コミットして push
    -  GitHub に push する

## Docker

- `docker-compose down`
    - コンテナを停止させる
- `docker-compose up -d`
    - コンテナを起動させる
    - `-d`オプションは、コンテナをバックグラウンドで起動し、実行し続けるために使う。
    - https://docs.docker.jp/compose/reference/up.html
- `rm -rf docker/volumes/var/lib/mysql`
    - ボリュームマウントを削除する
    - スキーマ定義が変わった際、ボリュームマウントが残っていると、以前のデータが立ち上がるため、必要であれば実行する
- `aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com`
    - Amazon ECR プライベートレジストリに対して Docker を認証する
    - https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/registry_auth.html
- `docker pull AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/REPOSITORY:TAG`
    - Amazon ECR からイメージをプルする
    - https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/docker-pull-ecr-image.html
- `docker run --name NAME -p 4200:80 -d REPOSITORY:TAG`
    - ローカルで、docker image を実行する
- `docker exec -it CONTAINER_ID bash`
    - コンテナの中に入り、ディレクトリ構造を確認する

## SQL データ

- `gzip dirName/fileName.sql`
    - .sql ファイルを圧縮する
    - 開発用 DB の SQL データを GitHub リポジトリに push する前に行う
- `db=dbName; time mysqldump -hxxx.xxx.xxx.xxx -PportNumber -uuserName -p -B ${db} | gzip > dirName/${db}.sql.gz`
    - DB を dump する
        - `gzip` コマンドで、 `.sql.gz` 形式に圧縮する
        - `-B` オプションで、 CREATE DATABASE / USE の記述を含める
        - `time` コマンドで、かかった時間を出力する
- `gzip -d dirName/fileName.sql.gz`
    - .sql.gz ファイルを解凍する
- `source dirName/fileNmae.tsv`
    - Google スプレッドシートから DL した tsv を使って、既存テーブルを UPDATE する
        - csv ファイルでは、全列文字列となってしまうので注意
            - https://help.salesforce.com/s/articleView?language=ja&type=1&id=000338771
        - tsv ファイルで DL しましょう
            - https://support.google.com/merchants/answer/160569?hl=ja
    
## MySQL

- `mysql -uuserName -hxxx.xxx.xxx.xxx -p -PportName`
    - mysql にログインするコマンド
- `load data local infile "/dirName/fileName.extention" into table DBName.tableName fields terminated by ',' optionally enclosed by '"' ignore 1 lines;`
    - 指定テーブルに、ローカルファイルのデータをインポートするコマンド。
    - `terminated by` オプションで、区切り文字を指定する。 `'.'` はカンマ区切りを指定。
    - `enclosed by` オプションで、囲い文字を指定する。 `'""'` はダブルクオートを指定。
    - `ignore 1 lines` オプションで、先頭行を無視する。
    - 参考
        - https://qiita.com/oden141/items/239a7ce3cfe3197a3ba7
        - https://www.virment.com/sql-for-import-csv-mysql/
- `TRUNCATE table DBName.tableName;`
    - 指定テーブルのデータを全削除する。

## node-sass

- GitHub Actions で使う node バージョンを確認する
    - `strategy: matrix: node-version: [10.13.0]`
    - これで、セットするべき node バージョンを確認できる

- `yarn add node-dass@4.12`
    - node-sass のバージョンを指定してインストールする。
    - node.js のバージョンを上げる場合、node-sass のバージョンも上げること。
    - 例：　Node 12 -> node-sass 4.12+
    - https://www.npmjs.com/package/node-sass
- `yarn why node-sass`
    - node-sass 周りでエラーが起きたら、これを叩く。
    - 依存関係を調べてくれる
    - 例: `"gulp-sass" depends on it`
    - https://blog.furu07yu.com/entry/yarn-gyp-err

## シェルコマンド

- URL の IP アドレスを確認する
    - `nslookup SOME_URL`
- リダイレクト先を確認する
    - `curl -I -L SOME_URL | grep ^Location`
- HTTP のステータスコードだけを表示する
    - `curl -LI SOME_URL -o /dev/null -w '%{http_code}\n' -s`
- ポートの使用状況を確認する
    - `lsof -i:PORT_NUMBER`
- sbt の使用状況を確認する
    - `ps aux | grep sbt`

## AWS

- 現在のプロファイル名を表示する
    - `echo $AWS_PROFILE`
- 現在設定されているプロファイルを確認する
    - `aws configure list`
- プロファイルを切り替える
    - `export AWS_PROFILE=SOME_PROFILE`

## EC2 (Debian 系)

- bash を使用
    - `$ bash`
- ホームディレクトリに移動
    - `$ cd ~/`
- apt-get を update
    - `$ sudo apt-get update`
- mysql-client を install
    - `$ sudo apt install mysql-client`