LoginSignup
5
4

More than 5 years have passed since last update.

AzureCLI2.0でコマンド操作!

Last updated at Posted at 2017-08-26

◆AzureでもAWSCLIのようなコマンドラインツールがあり、それを「AzureCLI」と言っています。ここでは「AzureCLI」ととりあえず使えるまでを行います

◆環境

AzureでVMを単純に作っただけのものを使います。

項目 内容
OS Windows 10
サイズ Standard_D2_V2
NSG default-allow-rdp
S/W AzureCLI

◆「AzureCLI」のインストール

 これをやらないとAzureのコマンドが使えません。

【1】MSから「AzureCLI」をダウンロード
ダウンロード先 : https://aka.ms/InstallAzureCliWindows

【2】「AzureCLI」を使用するサーバにダウンロードしたMSIを転送する
【3】「AzureCLI」をダブルクリックしインストール開始
【4】以下のコマンドを実行しインストール確認を行う

コマンド
az --version
結果
PS C:\Users\defaultuser0> az --version
azure-cli (2.0.14)
<>
Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'

◆「Azure」へのログイン

 入れただけではコマンドが使用できてもどのサブスクリプションの環境であるかが判断できません。以下のコマンドを実行して自分の環境で操作できるようにします

【1】AzureCLI環境

コマンド
az login
実行結果

PS C:\Users\defaultuser0> az login
To sign in, use a web browser to open the page

※以下のURLと「Code」を取得しておく
https://aka.ms/devicelogin and enter the code Code to authenticate.

[
  {
    "cloudName": "AzureCloud",
    "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "isDefault": true,
    "name": "\XXXXX\XXXXX\XXXXX\XXXXX\XXXXX",
    "state": "Enabled",
    "tenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "user": {
      "name": "XXXXXXXX@XXXXXXXX",
      "type": "user"
    }
  }
]
PS C:\Users\defaultuser0> az vm list -o table

【3】取得したURLにアクセスしコードを入力する
※ログインが終わったら画面を閉じてよい

02.png

【4】AzureCLIよりコマンドを実行する
※本当に使えるようになっているかの確認です

コマンド
az vm list -o table
実行結果
PS C:\Users\defaultuser0> az vm list -o table
Name           ResourceGroup    Location
-------------  ---------------  ----------
XXXXXXXXXXXXX  XXXXXXXX         japaneast
PS C:\Users\defaultuser0>

以上!
次はコマンドです

AzureCLIを使う以上最低限必要になるコマンド

今回導入した「AzureCLI」を使った以下の環境の作成をします!

【以降で扱うコマンドのリスト】

No 内容 コマンド
1 リソースグループ・作成 az group create [Option]
2 リソースグループ・一覧 az group list -o table
3 リソースグループ・詳細 az group show --name [RGNAME]
4 仮想ネットワーク・作成 az network vnet create [option]
5 仮想ネットワーク・一覧 az network vnet list -o table
6 仮想ネットワーク・詳細 az network vnet show --resource-group [RGNAME] --name [VNETNAME]
7 ネットワークセキュリティグループ・作成 az network nsg create [option]
8 ネットワークセキュリティグループ・一覧 az network nsg list -o table
9 ネットワークセキュリティグループ・詳細 az network nsg show --resource-group [RGNAME] --name [NSGNAME]
10 ルール・作成 az network nsg rule create [option]
11 ルール・一覧 az network nsg rule list [option]
12 サブネットとルール関連付け・作成 az network vnet subnet update [option]
13 仮想マシン・作成 az vm create [option]
14 仮想マシン・一覧   az vm list -o table
15 仮想マシン・詳細 az vm show --resource-group [RGNAME] --name [VMNAME]
16 全リソース・一覧 az resource list -o table

【コマンド実行して作る環境】

04.png


■1 リソースグループの作成
オプションで指定した内容に従いリソースグループを作成する

コマンド(作成)
az group create [option]
option------------------------------------------
--name / リソースグループの名前
--location / リソースグループの場所
-------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az group create `
>> --location japaneast `
>> --name Hogehoge-RG

<(showコマンド実行結果と同じ内容)>

PS C:\Users\defaultuser0>

■2 リソースグループ一覧
サブスクリプション内に作成されているリソースグループを一覧表示させる

コマンド(一覧確認)
az group list -o table
実行結果
PS C:\Users\defaultuser0> az group list -o table
Name                                     Location        Status
---------------------------------------  --------------  ---------
Hogehoge-RG                              japaneast       Succeeded
PS C:\Users\defaultuser0>

■3 リソースグループ詳細
特定のリソースグループの詳細を確認する

コマンド(詳細確認)
az group show --name [RGNAME]
実行結果
PS C:\Users\defaultuser0> az group show -name hogehoge-RG
{
  "id": "/・・・/Hogehoge-RG",
  "location": "japaneast",
  "managedBy": null,
  "name": "Hogehoge-RG",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}
PS C:\Users\defaultuser0>

■4 VNET(仮想ネットワーク)の作成
オプションで指定した内容に従いVNETを作成する
またオプション付与でサブネットも同時に作成する

コマンド
az network vnet create [option]
option---------------------------------------------------------
--name [VNETNAME]                          // 仮想ネットワーク名
--resource-group [RGNAME]                  // リソースグループ
--location [LOCATION]                      // リージョン
--address-prefix [IPADDRESS]               // アドレス範囲
--subnet-name [SNNAME]                     // サブネット名
--subnet-prefix [IPADDRESS]                // サブネットIP
---------------------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az network vnet create `
>> --name hogehoge-VNET `
>> --resource-group hogehoge-RG `
>> --location japaneast `
>> --address-prefix ・・・ `
>> --subnet-name hogehoge-SN `
>> --subnet-prefix ・・・/24

<(showコマンド実行結果と同じ内容)>

PS C:\Users\defaultuser0>

■5 仮想ネットワーク一覧
サブスクリプション内に作成されている仮想ネットワークを一覧表示させる

コマンド
az network vnet list -o table
実行結果
PS C:\Users\defaultuser0> az network vnet list -o table
Location    Name               ProvisioningState    ResourceGroup                         ResourceGuid
----------  -----------------  -------------------  ------------------------------------  ------------------------------------
japaneast   hogehoge-VNET      Succeeded            hogehoge-RG                           d76fa574-3da3-46e0-9959-f37f82cf3d40

PS C:\Users\defaultuser0>

■6 仮想ネットワーク詳細
特定の仮想ネットワークの詳細を確認する

コマンド
az network vnet show --resource-group [RGNAME] --name [VNETNAME]
実行結果
PS C:\Users\defaultuser0> az network vnet show --resource-group hogehoge-RG --name hogehoge-VNET
{
  "newVNet": {
    "addressSpace": {
      "addressPrefixes": [
        "・・・"
      ]
    },
    "dhcpOptions": {
      "dnsServers": []
    },
    "etag": ""・・・\"",
    "id": "・・・",
    "location": "japaneast",
    "name": "hogehoge-VNET",
    "provisioningState": "Succeeded",
    "resourceGroup": "hogehoge-RG",
    "resourceGuid": "・・・",
    "subnets": [
      {
        "addressPrefix": "・・・",
        "etag": "・・・"",
        "id": "・・・/hogehoge-SN",
        "ipConfigurations": null,
        "name": "hogehoge-SN",
        "networkSecurityGroup": null,
        "privateAccessServices": null,
        "provisioningState": "Succeeded",
        "resourceGroup": "hogehoge-RG",
        "resourceNavigationLinks": null,
        "routeTable": null
      }
    ],
    "tags": {},
    "type": "Microsoft.Network/virtualNetworks",
    "virtualNetworkPeerings": []
  }
}

■7 NSG(ネットワークセキュリティグループ)の作成
オプションで指定した内容に従いNSGを作成する

コマンド
az network nsg create [option]
option---------------------------------------------------------
--name [name]                          // NSG名
--resource-group [rg]                  // リソースグループ
--location [ex)japaneast]              // リージョン
---------------------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az network nsg create `
>> --resource-group hogehoge-RG `
>> --name hogehoge-NSG

<(showコマンド実行結果と同じ内容)>

PS C:\Users\defaultuser0>

■8 ネットワークセキュリティグループ一覧
サブスクリプション内に作成されているNSGを一覧表示させる

コマンド
az network nsg list -o table
実行結果
PS C:\Users\defaultuser0> az network nsg list -o table
Location    Name                                     ProvisioningState    ResourceGroup                         ResourceGuid
----------  ---------------------------------------  -------------------  ------------------------------------  ------------------------------------
japaneast   hogehoge-NSG                             Succeeded            hogehoge-RG                           XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

PS C:\Users\defaultuser0>

■9 ネットワークセキュリティグループ詳細
指定したNSGの詳細な情報を表示する(デフォルトルールも表示される)

コマンド
az network nsg show --resource-group [RGNAME] --name [NSGNAME]
実行結果
PS C:\Users\defaultuser0> az network nsg show --resource-group hogehoge-RG --name hogehoge-NSG
{
  "defaultSecurityRules": [
    {
      "access": "Allow",
      "description": "Allow inbound traffic from all VMs in VNET",
      "destinationAddressPrefix": "VirtualNetwork",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "・・・"",
      "id": "・・・/Microsoft.Network/
      "name": "AllowVnetInBound",
      "priority": 65000,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "VirtualNetwork",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow inbound traffic from azure load balancer",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
      "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/
      "name": "AllowAzureLoadBalancerInBound",
      "priority": 65001,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "AzureLoadBalancer",
      "sourcePortRange": "*"
    },
    {
      "access": "Deny",
      "description": "Deny all inbound traffic",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Inbound",
      "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
      "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/
      "name": "DenyAllInBound",
      "priority": 65500,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow outbound traffic from all VMs to all VMs in VNET",
      "destinationAddressPrefix": "VirtualNetwork",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
      "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/
      "name": "AllowVnetOutBound",
      "priority": 65000,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "VirtualNetwork",
      "sourcePortRange": "*"
    },
    {
      "access": "Allow",
      "description": "Allow outbound traffic from all VMs to Internet",
      "destinationAddressPrefix": "Internet",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
      "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/
      "name": "AllowInternetOutBound",
      "priority": 65001,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    },
    {
      "access": "Deny",
      "description": "Deny all outbound traffic",
      "destinationAddressPrefix": "*",
      "destinationPortRange": "*",
      "direction": "Outbound",
      "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
      "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/
      "name": "DenyAllOutBound",
      "priority": 65500,
      "protocol": "*",
      "provisioningState": "Succeeded",
      "resourceGroup": "hogehoge-RG",
      "sourceAddressPrefix": "*",
      "sourcePortRange": "*"
    }
  ],
  "etag": "W/\"e7c99659-7e06-44ef-9c49-e6ade0c90e56\"",
  "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Network/netw
  "location": "japaneast",
  "name": "hogehoge-NSG",
  "networkInterfaces": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "hogehoge-RG",
  "resourceGuid": "f3cda1a1-eeea-462b-8157-5cfd6484cc88",
  "securityRules": [],
  "subnets": null,
  "tags": null,
  "type": "Microsoft.Network/networkSecurityGroups"
}
PS C:\Users\defaultuser0>

■10 NSGルールの作成
オプションで指定した内容に従いNSGのルールを作成する。

コマンド
az network nsg rule create [option]
option---------------------------------------------------------------------------------
--name [name]                                     // ルール名
--nsg-name [NSGNAME]                              // ルールを作成するNSG名
--priority [100 ~ 4096]                          // 優先度
--resource-group [RGNAME]                         // リソースグループ名
--access [Allow/Deny]                             // アクション
--description [・・・]                              // 説明
--direction [Inbound/Outbound]                    // 向き先
--protocol [Any/TCP/UDP]                          // プロトコル(Any/TCP/UDP)
--destination-address-prefix [xx.xx.xx.xx/xx]     // 宛先IP
--destination-port-range [ * or 0~65535]         // 宛先ポート範囲(*,0-65535)
--source-address-prefix [xx.xx.xx.xx/xx]          // ソースIP
--source-port-range [ * or 0~65535]              // 送信元ポート範囲(*,0-65535)
---------------------------------------------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az network nsg rule create `
>> --name hogerule2 `
>> --nsg-name hogehoge-NSG `
>> --priority 2001 `
>> --resource-group hogehoge-RG `
>> --access allow `
>> --description TESTRuleAllowRDP `
>> --direction Inbound `
>> --protocol TCP `
>> --destination-address-prefix XX.XX.XX.0/24 `
>> --destination-port-range 2456 `
>> --source-address-prefix * `
>> --source-port-range 3565

<(showコマンド実行結果と同じ内容)>

PS C:\Users\defaultuser0>

■11 NSGルール一覧
特定のNSGに付与されているルールの一覧を表示する

コマンド
az network nsg rule list [option]
option---------------------------------------------------------------------------------
--name [name]                                     // ルール名
--resource-group [RGNAME]                         // リソースグループ名
---------------------------------------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az network nsg rule list `
>> --resource-group hogehoge-RG `
>> --nsg-name hogehoge-NSG -o table
Access    Description       DestinationAddressPrefix      DestinationPortRange  Direction    Name         Priority  Protocol    ProvisioningState    ResourceGroup    SourceAddressPrefix      SourcePortRange
--------  ----------------  --------------------------  ----------------------  -----------  ---------  ----------  ----------  -------------------  ---------------  ---------------------  -----------------
Allow     TESTRuleAllowRDP  XX.XX.XX.0/24                                 2456  Inbound      hogerule2        2001  Tcp         Succeeded            hogehoge-RG      *                                   3565
PS C:\Users\defaultuser0>

■12 サブネットとNSGの関連付け
サブネットにNSGを関連付ける

コマンド
az network vnet subnet update [option]
option---------------------------------------------------------------------------------
--name [name]                                     // サブネット名
--resource-group [RGNAME]                         // リソースグループ名
--vnet-name [VNETNAME]                            // 優先度
--network-security-group [NSGNAME]                // 関連付けるNSG名
---------------------------------------------------------------------------------
実行結果
PS C:\Users\defaultuser0> az network vnet subnet update `
>> --vnet-name hogehoge-VNET `
>> --name hogehoge-SN `
>> --resource-group hogehoge-RG `
>> --network-security-group hogehoge-NSG
{
  "addressPrefix": "XX.XX.XX.XX/24",
  "etag": "・"・・・\"",
  "id": "・・・": null,
  "name": "hogehoge-SN",
  "networkSecurityGroup": {
    "defaultSecurityRules": null,
    "etag": null,
    "id": "・・・/Microsoft.Network/netwo
    "location": null,
    "name": null,
    "networkInterfaces": null,
    "provisioningState": null,
    "resourceGroup": "hogehoge-RG",
    "resourceGuid": null,
    "securityRules": null,
    "subnets": null,
    "tags": null,
    "type": null
  },
  "privateAccessServices": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "hogehoge-RG",
  "resourceNavigationLinks": null,
  "routeTable": null
}
PS C:\Users\defaultuser0>

■13 VMの作成
VMを作成する

コマンド
az vm create [option]
option----------------------------------------------------------------------------
--name [VMNAME]                    //  作成するVMの名前
--resource-group [RGNAME]          //  所属するリソースグループ
--location [LOCATIONNAME]          //  所属するリージョン  
--size [VMSIZE]                    //  VMサイズ  
--admin-password [PASS]            //  ログインユーザパスワード 
--admin-username [USER]            //  ログインユーザのアカウント名   
--image [IMGFILENAME]              //  OSイメージファイル   
--subnet [SUBNETNAME]              //  所属するサブネット名   
--vnet-name [VNETNAME]             //  所属するVNET名  
--public-ip-address [IPADDRESS]    //  PublicIPの付与(つけない場合はオプションなしもしくは""で指定) 
--nics [NICNAME Or ""]             //  NICの付与(つけない場合はオプションなしもしくは""で指定)  
--private-ip-address [IPADDRESS]   //  PryvateIP(つけない場合はオプションなしもしくは""で指定) 
--NSG [NSGNAME Or ""]              //  NSGの付与(つけない場合はオプションなしもしくは""で指定)
#以下の内容でVMを作成
リージョン:東日本
リソースグループ:hogehoge-RG
サブネット:hogehoge-SN
NSG:hogehoge-NSG
PublicIP:自動割り当て
PrivateIP:自動割り当て
サイズ:Standard_D2_V2
OS:Win2k16DC
実行結果
PS C:\Users\defaultuser0> az vm create `
>> --name hogehoge-VM `
>> --resource-group hogehoge-RG `
>> --location japaneast `
>> --size Standard_D2_V2 `
>> --admin-password 1p2a3ss4w506rD `
>> --admin-user testuser `
>> --image Win2016Datacenter `
>> --vnet-name hogehoge-VNET `
>> --subnet hogehoge-SN
{\ Finished ..
  "fqdns": "",
  "id": "/subscriptions/8d5fb7b6-d8be-4816-a6b6-8e60f85921ae/resourceGroups/hogehoge-RG/providers/Microsoft.Compute/virtualMachines/hogehoge-VM",
  "location": "japaneast",
  "macAddress": "00-0D-3A-51-57-C8",
  "powerState": "VM running",
  "privateIpAddress": "10.204.1.4",
  "publicIpAddress": "13.71.133.176",
  "resourceGroup": "hogehoge-RG"

■14 VM一覧
サブスクリプション内に作成されているVMを一覧表示させる

コマンド
az vm list -o table
実行結果
Name                ResourceGroup                         Location
------------------  ------------------------------------  ----------
hogehoge-VM         HOGEHOGE-RG                           japaneast

■15 VM詳細
オプションで指定したリソースグループ内のVMの詳細を表示する

コマンド
az vm show --resource-group [RGNAME] --name [VMNAME]
実行結果
PS C:\Users\defaultuser0> az vm show --resource-group HOGEHOGE-RG --name hogehoge-VM
{
  "availabilitySet": null,
  "diagnosticsProfile": null,
  "hardwareProfile": {
    "vmSize": "Standard_D2_V2"
  },
  "id": "・・・/virtualMachines/hogehoge-VM",
  "identity": null,
  "instanceView": null,
  "licenseType": null,
  "location": "japaneast",
  "name": "hogehoge-VM",
  "networkProfile": {
    "networkInterfaces": [
      {
        "id": "・・・/hogehoge-VMVMNic",
        "primary": null,
        "resourceGroup": "hogehoge-RG"
      }
    ]
  },
  "osProfile": {
    "adminPassword": null,
    "adminUsername": "testuser",
    "computerName": "hogehoge-VM",
    "customData": null,
    "linuxConfiguration": null,
    "secrets": [],
    "windowsConfiguration": {
      "additionalUnattendContent": null,
      "enableAutomaticUpdates": true,
      "provisionVmAgent": true,
      "timeZone": null,
      "winRm": null
    }
  },
  "plan": null,
  "provisioningState": "Succeeded",
  "resourceGroup": "HOGEHOGE-RG",
  "resources": null,
  "storageProfile": {
    "dataDisks": [],
    "imageReference": {
      "id": null,
      "offer": "WindowsServer",
      "publisher": "MicrosoftWindowsServer",
      "sku": "2016-Datacenter",
      "version": "latest"
    },
    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "fromImage",
      "diskSizeGb": 127,
      "encryptionSettings": null,
      "image": null,
      "managedDisk": {
        "id": "・・・/disks/hogehoge-VM_OsDisk_1_7e7b978bcc164ee0b9f00cb275b06d30",
        "resourceGroup": "hogehoge-RG",
        "storageAccountType": "Standard_LRS"
      },
      "name": "hogehoge-VM_OsDisk_1_7e7b978bcc164ee0b9f00cb275b06d30",
      "osType": "Windows",
      "vhd": null
    }
  },
  "tags": {},
  "type": "Microsoft.Compute/virtualMachines",
  "vmId": "b13a8f27-7d34-42d0-af80-1a7ee049e381"
}
PS C:\Users\defaultuser0>

■16 全リソースチェック

--リソースグループ別--

コマンド
az resource list --resource-group [RGNAME] -o table```

--全リソース--

コマンド
az resource list -o table```
実行結果
PS C:\Users\defaultuser0> az resource list --resource-group hogehoge-RG -o table
Name                                                  ResourceGroup    Location        Type                                              Status
----------------------------------------------------- ---------------- --------------  ------------------------------------------------  --------
hogehoge-NSG                                          hogehoge-RG      japaneast       Microsoft.Network/networkSecurityGroups
hogehoge-VM_OsDisk_1_7e7b978bcc164ee0b9f00cb275b06d30 HOGEHOGE-RG      japaneast       Microsoft.Compute/disks
hogehoge-VM                                           hogehoge-RG      japaneast       Microsoft.Compute/virtualMachines
hogehoge-VMVMNic                                      hogehoge-RG      japaneast       Microsoft.Network/networkInterfaces
hogehoge-VMNSG                                        hogehoge-RG      japaneast       Microsoft.Network/networkSecurityGroups
hogehoge-VMPublicIP                                   hogehoge-RG      japaneast       Microsoft.Network/publicIPAddresses
hogehoge-VNET                                         hogehoge-RG      japaneast       Microsoft.Network/virtualNetworks
PS C:\Users\defaultuser0>

終わり
ここまでである程度の確認はできるけどもっと深くってこともできる。。。
JMESPath。。。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4