日々のWeb開発でよく使うコマンドを1つの記事に集約する ※具体例付き


## 概要
日々のWeb開発でよく使うコマンドを集約する記事となります❗❗❗
よく使うコマンドを1つの記事に集約することで、日々の生産性を向上したいと考えております。
逆に普段あまり使っていないコマンドは追求しておりません。例えばGUIツールでカバーしているコマンドについては追求していないです。  

具体的には下記のコマンド集を集約いたします
1. Dockerコマンド集
2. AWS CLIコマンド集
3. Terraformコマンド集
4. CDKコマンド集
5. Python/FastAPI
   1. uv
   2. Alembic
   3. Python
6. PHP/Laravel
   1. Laravel
   2. PHP
7. Linuxコマンド集
8. その他コマンド集
   1. Zenn CLI
   2. Qiita CLI

また、自身のスキルを証明する一つの材料として執筆しております

:::note warn
本記事は下記のサービスにて公開しております。公開日時：2025年01月01日
複数のプラットフォームで発信することで、多くの方にご覧いただき、少しでも参考になれば幸いです。
- Zenn
- Qiita
- Twitter
- LinkedIn
- Findy
- Forkwell
- LAPRAS
- 職務経歴書のレジュメ
- etc
:::

## 1. Dockerコマンド集
### Dockerコンテナを起動する 
**概要** 
docker-compose.ymlの中に定義されているコンテナを起動するコマンド
```code:構文
docker-compose up -d
```
```code:具体例
$ docker-compose up -d
【結果】
Starting db ... done
Starting python_app ... done
```
### Dockerコンテナを起動する && ターミナルにコンテナのログを出力する
**概要** 
コンテナ起動 && ターミナルにコンテナのログを出力するを同時に行うコマンド

**ユースケース** 
- ターミナル上でコンテナのログを確認したい時
```code:構文
 docker-compose up
```
```code:具体例
$ docker-compose up
【結果】
db   | 2024-12-30 11:33:59.979 UTC [1] LOG:  starting PostgreSQL 15.4 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924, 64-bit
```
### Dockerコンテナ起動する && コンテナをビルドする 
**概要** 
コンテナビルド && コンテナ起動を同時に行うコマンド

**ユースケース** 
- docker-compose.ymlやDockerfileの変更をコンテナに反映したい時
- コンテナの中に新しくライブラリーを追加した時
- etc
```code:構文
docker-compose up -d --build 
```
```code:具体例
$ docker-compose up -d --build 
【結果】
[+] Building 4.8s (5/12)   
Recreating python_app ... done
```
### 現在起動中のコンテナ一覧を表示する
**概要** 
現在起動中のコンテナ一覧を表示するコマンド

**ユースケース** 
- 立ち上げたコンテナが起動しているかどうかを確認したい時
```code:構文
docker ps
```
```code:具体例
$ docker ps
【結果】
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS         PORTS                    NAMES
31a8f4920194   nginx:latest        "/docker-entrypoint.…"   33 minutes ago   Up 3 seconds   0.0.0.0:80->80/tcp       web_1
7cce55cc3857   php8                "docker-php-entrypoi…"   33 minutes ago   Up 4 seconds   9000/tcp                 php_1
d4e432df05eb   mariadb:10.4        "docker-entrypoint.s…"   6 weeks ago      Up 4 seconds   0.0.0.0:3306->3306/tcp   mariadb_1
```

### Dockerコンテナに潜る
**概要** 
Dockerコンテナに潜るコマンド

**ユースケース** 
- コンテナの中を確認・操作したい時。例)エラー調査、コンテナ操作
```code:構文
docker exec -it {コンテナID or コンテナ名} bash
```
```code:具体例
$ docker ps
【結果】
CONTAINER ID   IMAGE         COMMAND               CREATED          STATUS        PORTS               NAMES
b1231d15b8cc   backend_app   "uv run python -m de…" 25 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp  backend_app_1

// backend_app_1コンテナに潜る
$ docker exec -it backend_app_1 bash
【結果】
bash-5.2# 
```
### Dockerコンテナを停止する
**概要** 
docker-compose.ymlの中に定義されているコンテナを停止するコマンド

**ユースケース** 
- docker-compose.ymlの中に定義されているコンテナを一括で止めたい時
```code:構文
docker-compose stop
```

```code:具体例
$ docker-compose stop
【結果】
Stopping web_1 ... done
Stopping php_1 ... done
```

### Dockerコンテナのログを表示する
**概要** 
Dockerコンテナのログを表示するコマンド

**ユースケース** 
- ターミナル上でコンテナのログを確認したい時
```code:構文
docker logs {コンテナID or コンテナ名}
```
```code:具体例
$ docker logs backend_db_1
【結果】
PostgreSQL Database directory appears to contain a database; Skipping initialization
2024-12-30 11:33:59.979 UTC [1] LOG:  starting PostgreSQL 15.4 on aarch64-unknown-linux-musl, compiled by gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924, 64-bit
```

## 2. AWS CLIコマンド集
### AWS CLIのプロファイルをexportする
**概要** 
AWS CLI実行時に使用するプロファイルをexportするコマンド

**ユースケース** 
- SSM接続
- ポートフォワーディング
- IaCデプロイ
- etc
```code:構文
export AWS_PROFILE={プロファイル名}
```
```code:具体例
$ export AWS_PROFILE=xxx-stg-admin
// 例)踏み台EC2経由でSSM接続
$ aws ssm start-session --target {踏み台サーバーID} --profile xxx-stg-admin
```

### AWS CLIのプロファイル初期設定を行う
**概要** 
AWS CLI を使うためのプロファイル初期設定を行うコマンド

**ユースケース** 
- ローカルPCからクラウド上のRDSにポートフォワーディング接続したい時
- クラウド上のAWSリソースを操作したい時

```code:構文
aws configure --profile {プロファイル名}
```
```code:具体例
$ aws configure --profile xxx-stg-admin
【結果】
AWS Access Key ID [None]: xxxxxxxxx
AWS Secret Access Key [None]:xxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

### AWS CLIのプロファイル一覧を表示する
**概要** 
AWS CLI に設定されているすべてのプロファイルの一覧を表示するコマンド

**ユースケース** 
- プロファイル名を忘れてしまった時
- どのプロファイルを設定したか確認したい時

```code:構文
aws configure list-profiles
```
```code:具体例
$ aws configure list-profiles
【結果】
default
xxx-stg-admin
xxx-prod-admin
...
```

### SSMポートフォワーディング
**概要** 
SSMを用いて、ローカルPCの任意ポートをリモートホスト（ここではRDSエンドポイント）とトンネル接続するコマンド

**ユースケース** 
- ローカルPCのデータベースGUIクライアントからクラウド上のRDSに接続したい時

```code:構文
aws ssm start-session \
    --target {踏み台サーバーID} \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{
        "portNumber": ["{リモートポート}"],
        "localPortNumber": ["{ローカルポート}"],
        "host": ["{RDSエンドポイント}"]
    }' \
    --profile {プロファイル名}
```
```code:具体例
// localPortNumberは、ローカルPCの空いている任意なポートを指定する
// RDSエンドポイントは、AWSマネコン>RDSサービス>RDSクラスター>詳細から確認する
$ aws ssm start-session \
    --target i-xxxxxxxxxx \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{
        "portNumber": ["3306"],
        "localPortNumber": ["1053"],
        "host": ["mydb.xxxxxx.ap-northeast-1.rds.amazonaws.com"]
    }' \
    --profile stg-admin
【結果】
Starting session with SessionId: stg-admin-0abcdef123456...
Port 3306 opened for sessionId stg-admin-0abcdef123456...
```
```code:補足
Host：127.0.0.1
Port：1053 ※ポートフォワーディングで指定したport
User：xxx ※パラメーターストア等から確認する
Password：xxx ※パラメーターストア等から確認する
Database：xxx ※パラメーターストア等から確認する

コンテナの中にあるアプリから接続する場合
// .env
DB_HOST=host.docker.internal
```

![db-gui-tool-table-plus.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967556/4d8b3e61-7418-b766-3b66-88f121852977.png)


### ECS ExecでFargateコンテナに潜る
**概要** 
AWS ECSの「ECS Exec」を用いて、Fargateコンテナに潜るコマンド

**ユースケース** 
- コンテナの中を確認・操作したい時。例)エラー調査、コンテナ操作

```code:構文
// 1. 現在起動しているタスクIDを取得する
aws ecs list-tasks --cluster {クラスター名} --service-name {サービス名} --region {リージョン名} --profile {プロファイル名}

// 2. 上記で取得したタスクIDを使い、ECS Execでコンテナにログインする
aws ecs execute-command \
    --region {リージョン名} \
    --cluster {クラスター名} \
    --container {コンテナ名} \
    --interactive \
    --command "/bin/sh" \
    --task {タスクID} \
    --profile {プロファイル名}

```

```code:具体例
// 1. 現在起動しているタスクIDを取得する
$ aws ecs list-tasks --cluster {クラスター名} --service-name {サービス名} --region {リージョン名} --profile {プロファイル名}

// 2. 上記で取得したタスクIDを使い、ECS Execでコンテナにログインする
$ aws ecs execute-command \
    --region {リージョン名} \
    --cluster {クラスター名} \
    --container {コンテナ名} \
    --interactive \
    --command "/bin/sh" \
    --task {タスクID} \
    --profile {プロファイル名}

```

### SSM接続
**概要** 
SSM接続でクラウド上のサーバーに潜るコマンド

**ユースケース** 
- ローカルPCからクラウド上のサーバーに潜って、サーバー上での調査・操作をしたい時

```code:構文
aws ssm start-session --target {踏み台サーバーID} --profile {プロファイル名}
```

```code:具体例
$ aws ssm start-session --target i-xxxxxxxxxx --profile {プロファイル名}
【結果】
# ここでEC2インスタンスのシェルに接続
sh-4.2$ sudo su -
[root@ip-xx-xx-xx-xx ~]# 
```

### .awsディレクトリ
**概要** 
AWS CLI で利用する設定ファイルが格納されているディレクトリ。

**ユースケース** 
- AWS CLIの設定ファイルを直接編集・確認したい時
- 各プロファイルのリージョンや認証情報を確認したい時

```code:具体例
// .awsディレクトリに移動する
$ cd ~/.aws
$ ls
【結果】
cli		config		credentials
// プロファイルを確認
$ cat config
//アクセスキーやシークレットキーなどを確認
$ cat credentials
```

## 3. Terraformコマンド集
### terraform init
**概要** 
Terraform 作業ディレクトリを初期化するコマンド。
コマンド実行後は、隠しフォルダ「.terraform」ディレクトリが生成される

**ユースケース** 
- プロジェクトをgit cloneしてきた直後に Terraform を利用可能な状態にしたい時

```code:構文
terraform init
```

```code:具体例
$ pw
【結果】
infra/env/stg

$ ls
【結果】
隠しフォルダ「.terraform」ディレクトリ
main.tf
.terraform.lock.hcl

$ terraform init
【結果】
Terraform has been successfully initialized!
```

### terraform plan
**概要** 
差分や実行プランを確認するコマンド。

**ユースケース** 
- 変更がデプロイされる前にどのリソースが追加・変更・削除されるかを確認したい時
- 思わぬリソースの削除などがないか事前にチェックしたい時

```code:構文
terraform plan
```

```code:具体例
$ pw
【結果】
infra/env/stg

$ ls
【結果】
main.tf
.terraform.lock.hcl

$ terraform plan
【結果】
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
  ~ update in-place
  - destroy
...
Plan: 1 to add, 0 to change, 0 to destroy.
```

### terraform apply
**概要** 
クラウド上へリソースを作成・変更・削除するコマンド

**ユースケース** 
- リソースの新規作成や構成変更を本番環境やステージング環境に反映したい時

```code:構文
terraform apply
```

```code:具体例
$ pw
【結果】
infra/env/stg

$ ls
【結果】
main.tf
.terraform.lock.hcl

$ terraform apply
【結果】
Terraform used the selected providers to generate the following execution plan...
Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

Enter a value: yes

aws_vpc.main: Creating...
aws_vpc.main: Creation complete after 4s [id=vpc-0abcd123456...]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
```

### terraform destroy
**概要** 
Terraform 管理下のクラウドリソースを削除するコマンド。

**ユースケース** 
- 不要になったクラウドリソースを一括削除したい時

```code:構文
$ pwd
【結果】
infra/env/stg

$ ls
【結果】
main.tf
.terraform.lock.hcl

$ terraform destroy
【結果】
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  - destroy
...

Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
  Only 'yes' will be accepted to approve.

Enter a value: yes

aws_vpc.main: Destroying... (ID: vpc-0abcd123456...)
aws_vpc.main: Destruction complete after 3s

Destroy complete! Resources: 1 destroyed.
```

### terraform fmt
**概要** 
.ディレクトリ配下にあるtfファイルを一括フォーマットするコマンド 

**ユースケース** 
- スペースやインデントが乱れた .tf ファイルを整形したい時

```code:構文
terraform fmt --recursive
```

```code:具体例
$ terraform fmt --recursive
【結果】
ファイル名.tf
ファイル名.tf
ファイル名.tf
```
## 4. AWS CDKコマンド集
### CDKプロジェクト作成
**概要** 
CDK のプロジェクト（雛形）を作成するコマンド

**ユースケース** 
- 新規で AWS CDK のプロジェクトを開始したい時

```code:構文
cdk init app --language {使用言語}
```

```code:具体例
// TypeScript で新規プロジェクトを作成する場合
$ cdk init app --language typescript

【結果】
Applying project template app for typescript
...
✅ All done!
```

### cdk bootstrap
**概要** 
初めて CDK を使用するリージョン・アカウントに対しては、この bootstrap 実行が必要です。
CDKでAWSクラウドリソースを構築・追加・変更・削除する為のIAMロールを引き受けるコマンド。
IAMロールが引き受けるアカウントは、AWS CLIで設定した現在のプロファイルとなる。

**ユースケース** 
- CDK デプロイする際に必要なリソースを準備したい時。例)新環境でCDKでIaCする時など

**参考記事** 
[cdk bootstrapってなんだ？](https://www.cloudbuilders.jp/articles/3511/)

```code:構文①
cdk bootstrap aws://{アカウントID}/{リージョン名}
```
```code:構文②
cdk bootstrap
```

```code:具体例
$ cdk bootstrap aws://{アカウントID}/us-east-1
【結果】
15:52:20 | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack | CDKToolkit
15:52:22 | CREATE_IN_PROGRESS   | AWS::ECR::Repository    | ContainerAssetsRepository
15:52:22 | CREATE_IN_PROGRESS   | AWS::IAM::Role          | LookupRole
15:52:22 | CREATE_IN_PROGRESS   | AWS::IAM::Role          | ImagePublishingRole
15:52:22 | CREATE_IN_PROGRESS   | AWS::IAM::Role          | FilePublishingRole
15:52:22 | CREATE_IN_PROGRESS   | AWS::IAM::Role          | CloudFormationExecutionRole
15:52:22 | CREATE_IN_PROGRESS   | AWS::SSM::Parameter     | CdkBootstrapVersion
...
✅  CDKToolkit
```

### cdk diff --all ※マルチスタック
**概要** 
CDK で定義した複数のスタック（マルチスタック）に対して、CloudFormation テンプレートの差分をまとめて表示するコマンド。
マルチスタックとは、1つの CDK アプリケーション内で複数の CloudFormation スタックを同時に管理する形態を指します。

**ユースケース** 
- 変更差分を一括で把握したい時

```code:構文
cdk diff --all
```
```code:具体例
$ cdk diff --all
【結果】
Stack DevVpcStack
There were no differences

Stack DevEcsStack
Resources
[-] AWS::EC2::Instance MyInstance MyInstance1234
[~] AWS::ECS::Service EcsService
  └─ containerDefinitions:
    ...
```

### cdk diff {スタック名} ※任意スタック
**概要** 
任意スタックに対して差分を表示するコマンド。

**ユースケース** 
- 任意スタックの差分を確認したい時

```code:構文
cdk diff {スタック名}
```
```code:具体例
// DevVpcStack スタックに対して差分を確認
$ cdk diff DevVpcStack

【結果】
Resources
[-] AWS::EC2::Instance MyInstance MyInstance1234
[~] AWS::EC2::VPC MyVpc MyVpc5678
  ...
```

### cdk deploy --all ※マルチスタック
**概要** 
定義した複数スタックを一括でデプロイするコマンド。
コードで記述したリソース構成を CloudFormation によって実際の AWS 環境に作成・更新します。

**ユースケース** 
- 複数スタックを一括リリースしたい時
```code:構文
cdk deploy --all
```

```code:具体例
$ cdk deploy --all
【結果】
DevVpcStack: deploying...
DevEcsStack: deploying...
 ✅  DevVpcStack
 ✅  DevEcsStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/DevVpcStack/...
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/DevEcsStack/...
```

### cdk deploy {スタック名}  ※任意スタック
**概要** 
任意スタックをデプロイするコマンド。

**ユースケース** 
- 任意スタックのみデプロイしたい時
```code:構文
cdk deploy {スタック名}
```

```code:具体例
// DevVpcStack のみデプロイ
$ cdk deploy DevVpcStack
【結果】
DevVpcStack: deploying...
 ✅  DevVpcStack

Stack ARN:
arn:aws:cloudformation:ap-northeast-1:123456789012:stack/DevVpcStack/...
```

### cdk destroy --all ※マルチスタック
**概要** 
複数のスタックを一括で削除（destroy）するコマンド。不要になったリソースをまとめて削除できます。

**ユースケース** 
- 複数スタックの各リソースを一括削除したい時
```code:構文
cdk destroy --all
```

```code:具体例
$ cdk destroy --all
【結果】
Are you sure you want to delete: DevVpcStack, DevEcsStack (y/n)? y
DevVpcStack: destroying...
DevEcsStack: destroying...
 ✅  DevVpcStack: destroyed
 ✅  DevEcsStack: destroyed
```

### cdk destroy {スタック名}  ※任意スタック
**概要** 
任意スタックだけを削除するコマンド。
誤って重要なスタックを削除しないように、限定的に破棄したい時に利用します。

**ユースケース** 
- 部分的に不要になった任意スタックを削除したい時

```code:構文
cdk destroy {スタック名}
```

```code:具体例
// DevVpcStack のみ削除
$ cdk destroy DevVpcStack
【結果】
Are you sure you want to delete: DevVpcStack (y/n)? y
DevVpcStack: destroying...
 ✅  DevVpcStack: destroyed
```

### cdk synth --all ※マルチスタック
**概要** 
複数のスタックを一括で CloudFormation テンプレート（.template.json など）に合成（synthesize）するコマンド。
デプロイせずに、どのようなテンプレートが生成されるかを確認できます。 

**ユースケース** 
- リソース構成が期待通りになっているかを確認したい時

```code:構文
cdk synth --all
```

```code:具体例
cdk synth --all
【結果】
Resources:
  MyVpc:
    Type: AWS::EC2::VPC
    Properties:
      ...
  ...
---
Resources:
  MyEcsCluster:
    Type: AWS::ECS::Cluster
    Properties:
      ...
  ...
```

### cdk synth {スタック名} ※任意スタック
**概要** 
任意スタックを指定してテンプレートを合成（synthesize）するコマンド。

**ユースケース** 
- 任意スタックのリソース構成を確認したい時
```code:構文
cdk synth {スタック名}
```

```code:具体例
// DevVpcStack のテンプレートを生成
$ cdk synth DevVpcStack
【結果】
Resources:
  MyVpc:
    Type: AWS::EC2::VPC
    Properties:
      ...
  MySubnet:
    Type: AWS::EC2::Subnet
    Properties:
      ...
```

## 5. Python/FastAPI
### 1. uv
#### uv add
**概要** 
パッケージを本番/開発依存として追加し、pyproject.toml を更新するコマンド

**ユースケース** 
- 新しくライブラリを導入したい時

本番環境用:
```code:構文
uv add {パッケージ名}
```
開発環境用:
```code:構文
uv add --dev {パッケージ名}
```
```code:具体例
// バージョン指定して requests を本番環境に追加する例
$ uv add requests==2.28.1
【結果】
backend/pyproject.tomlファイルに下記のような依存が追記されます
dependencies = [
  "requests >= 2.28.1",
]
```

#### uv remove
**概要** 
パッケージを本番/開発依存から削除し、pyproject.toml を更新するコマンド

**ユースケース** 
- 不要になったライブラリを整理したい時

本番環境用:
```code:構文
uv remove {パッケージ名}
```
開発環境用:
```code:構文
uv remove --dev {パッケージ名}
```
```code:具体例
// バージョン指定は不要だが、参考として示す例
$ uv remove requests
【結果】
backend/pyproject.tomlファイルから
requests が削除されます
```

#### uv sync
**概要** 
xxxするコマンド

**ユースケース** 
- xxx
```code:構文
uv sync
```
```code:具体例
$ uv sync
【結果】
xxx
```

#### uv pip freeze > requirements.txt
**概要** 
uv コマンドで管理されている Python パッケージを pip freeze 形式で requirements.txt に書き出すコマンド

**ユースケース** 
- AWSクラウド上にLambda関数をデプロイする場面などで requirements.txt が必要な場合がある。

```code:構文
uv pip freeze > requirements.txt
```
```code:具体例
$ uv pip freeze > requirements.txt
【結果】
requirements.txt が生成され、中身は
requests==2.28.1
fastapi==0.98.0
uvicorn==0.22.0
...
```

### 2. Alembic
#### マイグレーションファイルを新規作成 & マイグレーション実施
**概要** 
データベーススキーマをバージョン管理する Alembic を使い、新規マイグレーションファイルを自動生成（revision --autogenerate）し、データベースを最新化（upgrade head）するためのコマンド

**ユースケース** 
- マイグレーションファイルを新規作成する時
```code:構文
alembic revision --autogenerate -m "{コメント}"
```
**ユースケース** 
- バージョン管理された DB スキーマを最新の状態にアップグレードしたい時
```code:構文
alembic upgrade head
```

```code:具体例
// 1. まず DB を最新状態にしておく
$ alembic upgrade head
【結果】
No changes detected or DB is already up to date

// 2. テーブル追加などのモデル変更を app/models/user.py に反映

// 3. 新規マイグレーションファイルを作成
$ alembic revision --autogenerate -m "create-users-table"
【結果】
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
  Generating /path/to/alembic/versions/20240101_create_users_table.py ... done

// 4. マイグレーションを適用
$ alembic upgrade head
【結果】
INFO  [alembic.runtime.migration] Running upgrade  -> 20240101, create-users-table
```

#### マイグレーションのダウングレード(ロールバック)
**概要** 
最新のマイグレーションを1つ切り戻す（-1）コマンド

**ユースケース** 
- 新しく適用したマイグレーションで不具合があったため、直前の状態に戻したい時
```code:構文
alembic downgrade -1
```
```code:具体例
$ alembic downgrade -1
【結果】
INFO  [alembic.runtime.migration] Running downgrade 20240101 -> 20231212, remove-latest-changes
```

#### 現在のマイグレーション情報を確認する
**概要** 
現在適用されているマイグレーションのバージョンを確認するコマンド

**ユースケース** 
- マイグレーションの現状を確認したい時
```code:構文
alembic current
```

```code:具体例
$ alembic current
【結果】
Current revision(s) for postgresql://user:pass@localhost:5432/db_name:
20240101 (head)
```

### 3. Python
#### 仮想環境の非アクティベート

**概要** 
アクティブになっている仮想環境（venv / conda など）を解除するコマンド

**ユースケース** 
- システム Python へ戻したい時
```code:構文
deactivate
```

```code:具体例
(venv) MacBook-Pro:Desktop user$ deactivate
【結果】
仮想環境が解除され、(venv) の表示が外れます
MacBook-Pro:Desktop user$
```

#### python diagram.py ※独自ファイル
**概要** 
pythonファイルからpng形式でdiagramを出力するコマンド

**ユースケース** 
- 構成図をサクッと作成したい時
```code:構文
python diagram.py
```

```code:具体例
$ python diagram.py
【結果】
xxxxx.png
```

## 6. PHP/Laravel
### 1. Laravel
#### 開発に関するartisanコマンド
**概要** 
Laravel開発に関するartisanコマンド

**ユースケース** 
- Laravelを使って開発する時

モデル作成&&マイグレーションファイル作成:
```code:構文
php artisan make:model {モデル名} -m
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan make:model {モデル名} -m
```
enumファイル作成:
```code:構文
php artisan make:enum {ファイル名}
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan make:enum {ファイル名}
```
seedファイル作成:
```code:構文
php artisan make:seed {モデル名}Seeder
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan make:seed {モデル名}Seeder
```
Factoryファイル作成:
```code:構文
php artisan make:factory {モデル名}Factory
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan make:factory {モデル名}Factory
```
Policyファイル作成:
```code:構文
php artisan make:policy {モデル名}Policy --model={モデル名}
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan make:policy {モデル名}Policy --model={モデル名}
```

```code:具体例
// モデル作成 && マイグレーションファイル作成
$ docker-compose exec app php artisan make:model Admin -m
【結果】
Model created successfully.
Created Migration: 2025_01_01_000000_create_admins_table

// enumファイル作成
$ docker-compose exec app php artisan make:enum {ファイル名}
【結果】
Enum [{ファイル名}] created successfully.

// seedファイル作成
$ docker-compose exec app php artisan make:seed AdminSeeder
【結果】
Seeder created successfully.

// factoryファイル作成
$ docker-compose exec app php artisan make:factory AdminFactory
【結果】
Factory created successfully.

// policyファイル作成
$ docker-compose exec app php artisan make:policy AdminPolicy --model=Admin
【結果】
Policy created successfully for model [App\Models\Admin].

```

####  データベース操作に関するartisanコマンド
**概要** 
Laravelのartisanコマンド経由でデータベース操作するためのコマンド

**ユースケース** 
- database/migrations/ディレクトリの直下のマイグレーションファイルに基づいて、テーブルをCREATEしたい時。例)初回テーブル作成

fresh:
```code:構文
php artisan migrate:fresh
```
DockerのComposerコンテナ経由する場合:
```code:構文
docker-compose exec {コンテナサービス名} php artisan migrate:fresh
```
**ユースケース** 
- マイグレーションを実行したい時。例)運用フェーズの既存テーブルに対して、新たに追加・更新・削除などを適用したい時

migrate:
```code:構文
php artisan migrate
```
Composerコンテナ経由する場合:
```code:構文
docker-compose exec {コンテナサービス名} php artisan migrate
```
**ユースケース** 
- database/seeders/ディレクトリ直下のseedファイルに基づいて、ダミーデータを生成したい時

seed:
```code:構文
php artisan db:seed
```
Composerコンテナ経由する場合:
```code:構文
docker-compose exec {コンテナサービス名} php artisan db:seed
```

```code:具体例
// fresh〜migrate〜seedまでの一連の流れ（例）
$ docker-compose exec app php artisan migrate:fresh
【結果】
Dropped all tables successfully.
Migration table created successfully.
Migrated: 2025_01_01_000000_create_users_table
Migrated: 2025_01_01_000001_create_posts_table

$ docker-compose exec app php artisan migrate
【結果】
Nothing to migrate. // 既に最新の状態になっている場合

$ docker-compose exec app php artisan db:seed
【結果】
Database seeding completed successfully.
Seeded: AdminSeeder
Seeded: PostsSeeder
```

#### ide-helperコマンド
**概要** 
エディタのIDE補完を生成するコマンド

**ユースケース** 
- IDE補完を強化して保守性向上したい時

すべてのモデルに対して一括指定する場合:
```code:構文
php artisan ide-helper:models
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan ide-helper:models
```

指定したモデルのみ生成する場合:
```code:構文
php artisan ide-helper:models "App\Models\{モデル名}"
```
```code:構文(Docker)
docker-compose exec {コンテナサービス名} php artisan ide-helper:models "App\Models\{モデル名}"
```

```code:具体例
$ docker-compose exec app php artisan ide-helper:models
【結果】
A new helper file was written to _ide_helper_models.php
Model information was written for:
- App\Models\User
- App\Models\Admin
- App\Models\Post
...  // 実際のモデルに応じて変わります

$ docker-compose exec app php artisan ide-helper:models "App\Models\Admin"
【結果】
A new helper file was written to _ide_helper_models.php
Model information was written for:
- App\Models\Admin
```
####  シングルアクションコントローラ自動生成 ※独自コマンド
**概要** 
開発体験の高い「シングルアクションコントローラアーキテクチャ」を生成するコマンド
一部、Next.js × App Router × ダイナミック辺りの思想を少し参考にしている

**ユースケース** 
- 1ルート＝1コントローラの構成で保守性を高めたい時

```code:構文(GET)
docker-compose exec {コンテナサービス名} php artisan make:route {エンドポイントURL} --method={GET}
```
```code:具体例(GET)
$ docker-compose exec app php artisan make:route /admin/admins --method=GET
```

```code:構文(POST)
docker-compose exec {コンテナサービス名} php artisan make:route {エンドポイントURL} --method=POST
```
```code:具体例(POST)
$ docker-compose exec app php artisan make:route /admin/admins/create   --method=POST
```

```code:構文(PUT)
docker-compose exec {コンテナサービス名} php artisan make:route {エンドポイントURL} --method=PUT
```
```code:具体例(PUT)
$ docker-compose exec app php artisan make:route /admin/admins/id   --method=PUT
```

```code:構文(DELETE)
docker-compose exec {コンテナサービス名} php artisan make:route {エンドポイントURL} --method=DELETE
```
```code:具体例(DELETE)
$ docker-compose exec app php artisan make:route /admin/admins/id   --method=DELETE
```

### 2. PHP
####  Composer
**概要** 
PHP関連のパッケージ管理ツールに関連するコマンド

**ユースケース** 
- ライブラリを追加したい時

本番環境用:
```code:構文
composer require {ライブラリ名}
```
Composerコンテナ経由する場合:
```code:構文
docker-compose run composer composer require {ライブラリ名}
```

開発環境用:
```code:構文
composer require --dev {ライブラリ名}
```
Composerコンテナ経由する場合:
```code:構文
docker-compose run composer composer require --dev {ライブラリ名}
```

```code:具体例
// Laravelデバッガーを開発環境のみインストールする
$ docker-compose run composer composer require --dev barryvdh/laravel-debugbar
```

## 7. Linuxコマンド集
### historyコマンド
**概要**  
過去に実行したコマンドの履歴を表示するコマンド

**ユースケース**  
- どのコマンドを実行したか履歴をさかのぼりたい時  
- コマンドの再実行や調査を行いたい時

```code:構文
history {オプション}
```

**主なオプション**
| オプション | 説明                                             |
| ---------- | ------------------------------------------------ |
| \`-c\`       | 履歴をクリア（削除）する                          |
| \`-d [行番号]\` | 指定した行番号の履歴を削除する                   |

```code:具体例
$ history
【結果】
  1  pwd
  2  ls -la
  3  vim sample.txt
  4  history

$ history | grep docker
【結果】
過去に実行した docker 関連のコマンドが表示されます

// 範囲指定
$ history 10 30
  10  pwd
  11  ls -la
  12  vim sample.txt
  13  history
```

---

### envコマンド
**概要**  
現在の環境変数を表示、もしくは一時的に環境変数を設定した状態で別のコマンドを実行するコマンド

**ユースケース**  
- システム上に設定されている環境変数を確認したい時  
- 一時的に環境変数を変更した状態でコマンドを実行したい時

```code:構文
env {オプション} {変数=値 ...} {コマンド [引数 ...]}
```

```code:具体例
$ env
【結果】
LANG=ja_JP.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
HOME=/root
...

$ env VAR1=TEST VAR2=EXAMPLE bash -c 'echo $VAR1 && echo $VAR2'
【結果】
TEST
EXAMPLE
```

---

### cpコマンド
**概要**  
ファイルやディレクトリをコピーするコマンド

**ユースケース**  
- ファイルを別名で複製したい時  
- ディレクトリ構造をまるごとコピーしたい時

```code:構文
cp {オプション} {コピー元} {コピー先}
```

**主なオプション**
| オプション | 説明                                                                 |
| --------- | -------------------------------------------------------------------- |
| `-f`      | コピー先に同名のファイルがあれば上書きする                             |
| `-i`      | コピー先に同名のファイルがあれば、上書き前に確認を行う                 |
| `-p`      | コピー元ファイルの属性（所有者、グループ、タイムスタンプ）を保持       |
| `-r/-R`   | ディレクトリを再帰的にコピー（ディレクトリごとコピー）                 |
| `-d`      | シンボリックリンクをリンクとしてコピー                                |
| `-a`      | `-dpR`と同様。元ファイルの構成・属性を最大限保持してコピー             |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// data.txtファイルを data.BKUP.txt という名前でコピー
$ cp data.txt data.BKUP.txt
【結果】
data.BKUP.txt  data.txt

// /usr/local/src/dir1 ディレクトリを /tmp/bkup ディレクトリに再帰的にコピー
$ cp -r /usr/local/src/dir1 /tmp/bkup
```

---

### findコマンド
**概要**  
ファイルやディレクトリを検索するコマンド

**ユースケース**  
- ファイル名や拡張子を指定して検索したい時  
- 所有者や最終更新時刻など、複数の条件でファイルを探したい時

```code:構文
find {検索開始ディレクトリ} {検索式} {アクション}
```

**主な検索式・オプション**
| 検索式             | 説明                                                                                  |
| ------------------ | ------------------------------------------------------------------------------------- |
| `-name ファイル名` | ファイル名で検索                                                                       |
| `-type [f/d/l]`  | ファイルの種類で検索<br>f：ファイル、d：ディレクトリ、l：シンボリックリンク             |
| `-mtime +/-日数`  | 最終更新時刻が◯日以内（-）または◯日より前（+）のファイルを検索                         |
| `-size サイズ`    | ファイルサイズで検索                                                                   |
| `-user ユーザー名` | ファイル所有者で検索                                                                   |
| `-print`         | マッチしたファイルを表示（省略可能）                                                   |
| `-exec コマンド \;`| 見つかったファイルに対して指定のコマンドを実行                                       |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// /etcディレクトリ以下で、ファイル名が sshd_config のファイルを検索
$ find /etc -type f -name "sshd_config"
【結果】
/etc/ssh/sshd_config

// /varディレクトリ以下で、フォルダ名が tmp のディレクトリを検索
$ find /var -type d -name "tmp"
【結果】
/var/opt/remi/php80/tmp
/var/tmp

// /etcディレクトリ以下で、拡張子 .conf のファイルを検索
$ find /etc -type f -name "*.conf"
【結果】
/etc/man_db.conf
/etc/abrt/gpg_keys.conf
/etc/abrt/abrt.conf
```

---

### grepコマンド
**概要**  
ファイル内の文字列を検索するコマンド

**ユースケース**  
- 特定の文字列を含む行だけを抜き出したい時  
- ログファイルからエラー文言を探したい時

```code:構文
grep {オプション} "検索文字列" {ファイルやディレクトリ}
```

**主なオプション**
- `-r`：指定ディレクトリを再帰的に検索  
- `-i`：大文字/小文字を区別しない  
- `-n`：マッチした行番号を表示  

```code:具体例
// /etcディレクトリ以下で、文字列 localdomain を含むファイルを再帰的に検索
$ grep -r "localdomain" /etc
【結果】
/etc/sysconfig/network-scripts/network-functions:        '(none)' | 'localhost' | 'localhost.localdomain')
/etc/sysconfig/network-scripts/network-functions:        # ['(none)', 'localhost' or 'localhost.localdomain' are not valid]
/etc/hostname:localhost.localdomain
/etc/pki/tls/certs/make-dummy-cert:     echo localhost.localdomain
/etc/pki/tls/certs/make-dummy-cert:     echo root@localhost.localdomain
/etc/hosts:127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
/etc/hosts:#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
```

---

### chmodコマンド
**概要**  
ファイルやディレクトリのアクセス権を変更するコマンド

**ユースケース**  
- ファイルのパーミッションをまとめて変更したい時  
- 再帰的にディレクトリ配下の権限を変えたい時

```code:構文
chmod {オプション} {モード} {ファイル名}
```

**主なオプション**
| オプション | 説明                                                     |
| ---------- | -------------------------------------------------------- |
| `-R`       | 指定したディレクトリ以下を再帰的に処理                   |
| `-v`       | 実行結果を表示                                           |
| `-c`       | 変更があった場合のみ実行結果を表示                       |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
//「dir」ディレクトリのパーミッションは777であることを確認
$ ls -l
【結果】
drwxrwxrwx 2 root root 4096 Oct 12 11:48 dir

// パーミッションを777から755に変更
$ chmod -cR 755 dir
【結果】
mode of ‘dir’ changed from 0777 (rwxrwxrwx) to 0755 (rwxr-xr-x)

//「dir」ディレクトリのパーミッションは775であることを確認
$ ls -l
【結果】
drwxr-xr-x 2 root root 4096 Oct 13 11:48 dir
```

---

### chownコマンド
**概要**  
ファイルやディレクトリの所有者を変更するコマンド。rootユーザー権限が必要。

**ユースケース**  
- ファイルの所有者をまとめて変更したい時  
- Webサーバー用に ownership を apache ユーザーへ変更したい時

```code:構文
chown {オプション} {ユーザー名:グループ名} {ファイル名}
```
> グループ名を省略するとグループの変更は行われません

```code:具体例
// 所有者がlinuxである
$ ls -l testfile
【結果】
-rw-rw--r-- 1 linux staff 2048 Jun 27 10:00 testfile

// testfileファイルの所有者をlpicに変更
$ chown lpic testfile

// 所有者がlpicである
$ ls -l testfile
【結果】
-rw-rw--r-- 1 lpic staff 2048 Jun 27 10:00 testfile
```

---

### chgrpコマンド
**概要**  
ファイルやディレクトリのグループを変更するコマンド

**ユースケース**  
- 所有者はそのまま、グループだけを変更したい時  
- rootユーザーなら任意のグループに変更可能

```code:構文
chgrp {オプション} {グループ名} {ファイル名}
```

```code:具体例
// 所有グループがstaffである
$ ls -l testfile
-rw-rw--r-- 1 linux staff 2048 Jun 27 10:00 testfile

// testfileファイルの所有者をlpicに変更
$chgrp lpic testfile

// 所有グループがlpicである
$ ls -l testfile
-rw-rw--r-- 1 lpic lpic 2048 Jun 27 10:00 testfile
```

---

### useraddコマンド
**概要**  
新規ユーザーアカウントを作成するコマンド

**ユースケース**  
- 新規サーバー構築時にユーザーを追加したい時  
- 共同作業者ごとにユーザーを追加したい時

```code:構文
useradd {オプション} {ユーザー名}
```

**主なオプション**
| オプション    | 説明                                        |
| ------------- | ------------------------------------------- |
| `-g グループ` | プライマリグループを指定                     |
| `-G グループ` | サブグループを指定                           |
| `-d パス`     | ホームディレクトリを指定                     |
| `-s シェル`   | ログインシェルを指定                         |
| `-m`          | ホームディレクトリを自動作成（Debian系で有効）|

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// apacheユーザーをプライマリグループ apache で作成
$ useradd -g apache apache
```

---

### usermodコマンド
**概要**  
既存のユーザーアカウント情報を変更するコマンド

**ユースケース**  
- 追加のグループにユーザーを所属させたい時  
- ホームディレクトリやログインシェルを変更したい時

```code:構文
usermod {オプション} {ユーザー名}
```

```code:具体例
//「testuser」ユーザーは、「testuser」グループに所属している
$ grep testuser /etc/group
【結果】
testuser:x:1001:

//「testuser」ユーザーのサブグループに「apache」グループを追加する
$ usermod -aG apache testuser

$ grep testuser /etc/group
【結果】
testuser:x:1001:
apache:x:48:admin,root,testuser
```
> `-aG` をつけないとサブグループ設定が上書きされる点に注意

---

### groupaddコマンド
**概要**  
新しいグループを作成するコマンド

**ユースケース**  
- 共同開発用に新しいグループを追加したい時  
- グループ管理で権限を整理したい時

```code:構文
groupadd {オプション} {グループ名}
```

```code:具体例
$ groupadd dev

// グループ一覧を確認
$ cat /etc/group
【結果】
mysql:x:993:
redis:x:992:
dev:x:1003:
```

---

### groupmodコマンド
**概要**  
既存のグループの情報を変更するコマンド

**ユースケース**  
- グループ名を変更したい時  
- GIDを変更したい時

```code:構文
groupmod {オプション} {グループ名}
```

**主なオプション**
| オプション | 説明                  |
| --------- | --------------------- |
| `-g`      | GIDを変更する         |
| `-n`      | グループ名を変更する   |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// devグループを develop にリネーム
$ groupmod -n develop dev
```

---

### tarコマンド
**概要**  
ファイルやディレクトリをアーカイブ・展開するコマンド  
オプションで gzip 圧縮 (`-z`) や bzip2 圧縮 (`-j`) などと組み合わせられる

**ユースケース**  
- 複数ファイル・フォルダをまとめて1つのアーカイブにしたい時  
- 配布された tar.gz ファイルを展開したい時

```code:構文
tar {オプション} {アーカイブ名} {ファイル/ディレクトリ}
```

```code:具体例
// latest-ja.tar.gz を展開
$ tar xvf latest-ja.tar.gz

// wordpress ディレクトリを wordpress.tar.gz に圧縮（gzip）
$ tar zcvf wordpress.tar.gz wordpress
```

---

### SSH
**概要**  
リモートホストへ接続するコマンド。ポートやユーザー、秘密鍵などの指定が可能

**ユースケース**  
- ローカルからリモートサーバーにログインして操作したい時  
- 特殊なSSHポートを使ってログインする時

```code:構文
ssh {オプション} {ユーザー名@ホスト名(IPアドレス)}
```

**主なオプション**
| オプション | 説明                  |
| ---------- | --------------------- |
| `-p`      | ポート番号を指定     |
| `-l`      | 接続ユーザーを指定   |
| `-i`      | 秘密鍵ファイルを指定 |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// ポート番号12345で、adminユーザーとしてホスト1XX.XXX.XX.XXXへログイン
$ ssh -p 12345 admin@1XX.XXX.XX.XXX
```

---

### lsofコマンド
**概要**  
開いているポートや使用中のファイルを確認するコマンド

**ユースケース**  
- アプリケーションが使用しているポート番号を調べたい時  
- どのプロセスが特定ファイルを開いているか調べたい時

```code:構文
lsof {オプション}
```

**主なオプション**
| オプション      | 説明                                               |
| --------------- | -------------------------------------------------- |
| `-i`            | TCP/UDPポートを使用しているプロセスを表示          |
| `-i:ポート番号` | 指定ポート番号を使用しているプロセスを表示          |

引用元：Linux教科書 LPICレベル1(あずき本)

```code:具体例
// 開いているポート情報を数値ポート形式で表示
$ lsof -i -P
【結果】
sshd        909   root    3u  IPv4   80727      0t0  TCP *:12345(LISTEN)
mariadbd    930  mysql   24u  IPv4   17013      0t0  TCP *:3306 (LISTEN)
mariadbd    930  mysql   27u  IPv6   17014      0t0  TCP *:3306 (LISTEN)

// ポート3306を使用しているプロセスを表示
$ lsof -i:3306
```

---

**その他**
- パーミッション（777や755などの設定方法）  
- netstat, ss, nmap 等のネットワーク関連コマンド  
- curl, wget 等のHTTP通信コマンド  
- ps, top, htop 等のプロセス管理コマンド  
- df, du 等のディスク使用状況コマンド  

**参考**
- [Qiita_Linuxの権限確認と変更(chmod)（超初心者向け）](https://qiita.com/shisama/items/5f4c4fa768642aad9e06)

## 8. その他コマンド集
### 1. Zenn CLIコマンド集
#### mdファイルを生成する
**概要**  
Zenn仕様のmdファイルを1ファイル生成するコマンド

**ユースケース**  
- Zennで執筆したい時   

```code:構文
npx zenn new:{articles or books} --slug {slug名} --title {タイトル} --type {tech or idea} --emoji {任意な絵文字}
```

```code:具体例
$ pwd
【結果】
codes/tech-blog-content

// 記事×技術記事指定
$ npx zenn new:article --slug line-scheduling-db-design  --title タイトル --type tech --emoji ✨

// 記事×アイデア記事指定
$ npx zenn new:article --slug line-scheduling-db-design  --title タイトル --type idea --emoji ✨
【結果】
created: articles/line-scheduling-db-design.md
```

#### プレビューする
**概要**  
Zenn仕様のmdファイルをlocalhostのブラウザでプレビューするためのコマンド

**ユースケース**  
- 執筆内容をブラウザで確認したい時  

```code:構文
npx zenn preview
```

```code:具体例
$ pwd
【結果】
codes/tech-blog-content

$ npx zenn preview
【結果】
👀 Preview: http://localhost:8000
```

### 2. Qiita CLIコマンド集
#### mdファイルを生成する_ファイル単位 ※独自コマンド
**概要**  
ファイル単位でZenn記事仕様のmdファイルをQiita記事仕様のmdファイルに変換するスクリプトを実行する

**ユースケース**  
- ファイル単位でZenn記事仕様のmdファイル ➔ Qiita記事仕様のmdファイルに変換したい時

```code:構文
node zenn_to_qiita.js articles/{ファイル名} public/{ファイル名}
```

```code:具体例
$ pwd
【結果】
codes/tech-blog-content

$ node zenn_to_qiita.js articles/line-scheduling-db-design.md public/xxx.md
【結果】
変換成功: "articles/line-scheduling-db-design.md" → "public/xxx.md"
```

#### mdファイルを生成する_ディレクトリ単位 ※独自コマンド
**概要**  
ディレクトリ単位で一括指定でZenn記事仕様のmdファイルをQiita記事仕様のmdファイルに変換するスクリプトを実行する

**ユースケース**  
- ディレクトリ単位でZenn記事仕様のmdファイル ➔ Qiita記事仕様のmdファイルに変換したい時

```code:構文
node zenn_to_qiita.js articles/ public/ 
```

```code:具体例
$ pwd
【結果】
codes/tech-blog-content

$ node zenn_to_qiita.js articles/ public/ 
```

#### 記事の投稿
**概要**  
Qiita記事の投稿コマンド

通常:
```code:構文
npx qiita publish {ファイル名}
```
強制:
```code:構文
 npx qiita publish {ファイル名} --force
```

```code:具体例
$ tech-blog-content % npx qiita publish web-command-cheat-sheet
【結果】
Updated: web-command-cheat-sheet -> af70697a995de9d3fcfd
Successful!
```

#### 同期
**概要**  
同期コマンド

通常:
```code:構文
npx qiita pull
```
強制:
```code:構文
npx qiita pull --force
```

```code:具体例
tech-blog-content $ npx qiita pull
Sync local articles from Qiita
Successful!
```