Kubernetes上でWindowsコンテナを操作し、効率的にリソースを管理することは、現代のクラウドネイティブ環境で重要なスキルです。特に、PowerShellを活用することで、Windowsユーザーにとって直感的で強力な操作が可能になります。本記事では、KubernetesとWindowsコンテナの基本から、リソース管理、トラブルシューティング、実用的な応用例までを網羅的に解説します。PowerShellを駆使して、シンプルかつ効果的にWindowsコンテナを管理する方法を学び、クラウド環境での生産性を向上させましょう。
PowerShellとKubernetesの基本概念
Kubernetesは、コンテナ化されたアプリケーションを大規模にデプロイ、管理、自動化するためのオープンソースプラットフォームです。一方、Windowsコンテナは、Windowsオペレーティングシステムを基盤とするコンテナで、Windows環境に特化したアプリケーションを実行するために利用されます。これらの技術を組み合わせることで、柔軟かつ効率的なシステム運用が可能となります。
PowerShellとは
PowerShellは、Windows環境で主に使用される強力なスクリプト言語とシェルであり、クラウド環境の管理にも広く利用されています。その特徴は次の通りです:
- オブジェクト指向の構文を採用し、シンプルで明快なコマンド操作が可能。
- モジュールを追加することで、多様な管理タスクを統合的に実行可能。
PowerShellを使ったKubernetes操作
PowerShellには、Kubernetesと連携するための専用モジュール「Kubernetes PowerShell Module」や「kubectl」のラッパースクリプトを利用できます。これにより、以下のような操作が効率化されます:
- クラスタの構成管理(ノード、ポッド、サービスの操作)。
- リソース使用状況の監視と分析。
- YAMLファイルの生成や編集を効率的に実行。
KubernetesにおけるWindowsコンテナの特徴
- Windowsノードのサポート:KubernetesクラスタでWindowsノードを追加することで、Windowsコンテナを運用可能。
- 互換性:Windows専用のアプリケーションやサービスをクラウド環境で実行するための柔軟性を提供。
- 制約:Linuxコンテナに比べて一部の機能に制限があるため、運用には特有の注意点が必要。
PowerShellを利用することで、WindowsコンテナとKubernetesの管理を効率化でき、従来の手作業の多いプロセスを簡略化できます。この基本概念を理解することで、次の実践的な操作にスムーズに進めるようになります。
Kubernetes環境でのWindowsコンテナ準備手順
KubernetesでWindowsコンテナを運用するには、事前に適切な環境構築と設定が必要です。本セクションでは、クラスタのセットアップからWindowsノードの追加までの具体的な手順を解説します。
Kubernetesクラスタのセットアップ
まず、Kubernetesクラスタを構築します。以下の手順でクラスタを設定してください:
- マスタークラスタの構築
- Kubernetesディストリビューション(例: kubeadm, AKS, EKS)を選択。
- 必要なコマンドを使用してクラスタを初期化します(例:
kubeadm init
)。
- ネットワークプラグインのインストール
- Windowsノードは特定のCNIプラグイン(例: Flannel, Calico)に対応しています。
kubectl apply
を使用して適切なCNIプラグインをインストールします。
- Windowsノードを有効化する設定
- クラスタレベルでWindowsノードを受け入れるために、
feature-gates
にWindowsHostProcessContainers=true
を設定します。
Windowsノードの追加
Windowsコンテナを実行するには、Windowsノードをクラスタに追加する必要があります。以下の手順を実行します:
- Windows Serverの準備
- Windows Server 2019以降のバージョンを使用します。
- DockerまたはContainerDをインストールして、Windowsコンテナのランタイムを有効化します。
- Kubeletとkube-proxyのインストール
- KubernetesのバイナリをWindowsノードにインストールします。
- 必要な設定ファイル(kubeconfigやkubelet-config.yaml)を適切に配置します。
- ノードの参加
- マスタークラスタで生成されたトークンを使用して、Windowsノードをクラスタに登録します:
powershell kubeadm join --token <TOKEN> <MASTER_IP>:<PORT> --discovery-token-ca-cert-hash sha256:<HASH>
動作確認
クラスタにWindowsノードが追加されたか確認します:
kubectl get nodes
ノードの一覧にWindowsノードが表示されれば成功です。
Windowsノードの最適化
- リソース制限の設定:Windowsノードに対して適切なCPUとメモリ制限を設定します。
- ネットワークの構成:正しいCNI設定を確認し、トラフィックルールを最適化します。
- セキュリティ設定:Kubernetes RBACを有効化し、ノードへのアクセス権限を適切に制御します。
これで、Windowsノードを含むKubernetesクラスタが準備でき、Windowsコンテナのデプロイが可能になります。次のステップでは、PowerShellを活用した具体的なコンテナ操作について解説します。
PowerShellによるWindowsコンテナ操作の基礎
PowerShellは、Kubernetes上のWindowsコンテナを効率的に操作するための直感的なツールを提供します。このセクションでは、PowerShellを使った基本的なコマンドと一般的なユースケースを紹介します。
PowerShellでKubernetesを操作する準備
PowerShellからKubernetesを操作するには、以下の環境を準備します:
- PowerShellのインストール
最新のPowerShell(CoreまたはDesktop Edition)を使用してください。
Install-Module -Name PowerShellGet -Force
- kubectlのインストールと設定
Kubernetesの公式CLIツールであるkubectlをインストールします:
choco install kubernetes-cli
クラスタと連携するために、kubeconfigファイルを適切に設定します:
kubectl config view
- PowerShell Kubernetesモジュールの導入
Kubernetes用のPowerShellモジュール(Kubernetes PowerShell Module)をインストールします:
Install-Module -Name Kubernetes -Force
基本的なKubernetesコマンド
以下にPowerShellでのKubernetes操作の基本コマンドを示します:
- リソースの確認
Kubernetesクラスタ内のリソースを確認する:
kubectl get nodes
kubectl get pods
kubectl get services
- Windowsコンテナのデプロイ
サンプルのWindowsコンテナをデプロイする:
kubectl apply -f windows-container-deployment.yaml
- ポッドのログ確認
実行中のポッドのログを表示する:
kubectl logs <pod-name>
- ポッドの削除
指定したポッドを削除する:
kubectl delete pod <pod-name>
YAMLファイルの操作
PowerShellではYAMLファイルの作成や編集を自動化することも可能です。
例として、WindowsコンテナのデプロイメントYAMLファイルを作成します:
@"
apiVersion: apps/v1
kind: Deployment
metadata:
name: windows-app
spec:
replicas: 2
selector:
matchLabels:
app: windows-app
template:
metadata:
labels:
app: windows-app
spec:
containers:
- name: windows-container
image: mcr.microsoft.com/windows/servercore:ltsc2022
ports:
- containerPort: 80
"@ | Out-File -FilePath windows-deployment.yaml
kubectl apply -f windows-deployment.yaml
リソースの監視と管理
PowerShellを使用してリソースの監視と管理を効率化できます:
- ノードの状態確認:
kubectl describe node <node-name>
- リソース使用状況の監視:
kubectl top pod
PowerShellスクリプトの応用例
日常のタスクを自動化するためにスクリプトを作成できます。以下は、特定の条件でポッドを再デプロイする例です:
$pods = kubectl get pods --output=json | ConvertFrom-Json
foreach ($pod in $pods.items) {
if ($pod.status.phase -ne "Running") {
kubectl delete pod $pod.metadata.name
}
}
PowerShellを活用すれば、Kubernetesリソースの管理がより柔軟かつ効率的に行えるようになります。次のセクションでは、Windowsコンテナのリソース管理についてさらに詳しく解説します。
Windowsコンテナのリソース管理方法
Kubernetes上でWindowsコンテナを運用する際、リソース管理はパフォーマンスと安定性を維持する上で重要な要素です。本セクションでは、CPUやメモリの割り当てと制御、リソース使用状況の監視について、PowerShellを活用した具体的な方法を解説します。
リソースリクエストとリソース制限
Kubernetesでは、各コンテナに対してリソースリクエスト(最低限必要なリソース)とリソース制限(使用できる最大リソース)を設定できます。以下はWindowsコンテナに対してリソースを設定するYAMLファイルの例です:
apiVersion: apps/v1
kind: Deployment
metadata:
name: windows-app
spec:
replicas: 1
selector:
matchLabels:
app: windows-app
template:
metadata:
labels:
app: windows-app
spec:
containers:
- name: windows-container
image: mcr.microsoft.com/windows/servercore:ltsc2022
resources:
requests:
memory: "512Mi"
cpu: "0.5"
limits:
memory: "1Gi"
cpu: "1"
この設定では、各Windowsコンテナに対して以下を指定しています:
- リソースリクエスト:最低512MiBのメモリと0.5コアのCPU。
- リソース制限:最大1GiBのメモリと1コアのCPU。
PowerShellでリソース設定を適用する
上記のYAMLファイルをPowerShellで適用する手順は以下の通りです:
kubectl apply -f windows-deployment.yaml
リソース使用状況の監視
リソースの使用状況を監視することで、負荷の高いポッドやノードを特定できます。以下のコマンドを使用して監視を行います:
- ポッドごとのリソース使用量:
kubectl top pod
- ノードごとのリソース使用量:
kubectl top node
- 特定ポッドの詳細情報:
kubectl describe pod <pod-name>
オートスケーリングの活用
負荷が変動するアプリケーションでは、Horizontal Pod Autoscaler(HPA)を使用してスケーリングを自動化できます。以下はHPAを使用してポッドを自動スケーリングする例です:
kubectl autoscale deployment windows-app --cpu-percent=50 --min=1 --max=5
この設定では、CPU使用率が50%を超えた場合に、ポッド数が1から5の範囲で自動調整されます。
トラブルシューティングと最適化のヒント
- リソース不足の検出:
イベントログを確認してリソース不足の原因を特定します:
kubectl describe pod <pod-name>
- ノードのキャパシティ確認:
クラスタ全体のキャパシティとノードの使用状況を確認します:
kubectl get nodes -o wide
- 適切なリソース割り当て:
コンテナごとに適切なリソース割り当てを行い、過剰な割り当てを防ぎます。
実践例:リソース制限の検証
以下のPowerShellスクリプトは、CPUとメモリの使用状況を監視し、制限を超えるリソース使用を検出します:
$pods = kubectl get pods --output=json | ConvertFrom-Json
foreach ($pod in $pods.items) {
$usage = kubectl top pod $pod.metadata.name --output=json | ConvertFrom-Json
if ($usage.cpu > "1") {
Write-Host "$($pod.metadata.name) is using too much CPU!"
}
}
まとめ
適切なリソース管理は、Kubernetes上でWindowsコンテナを安定的に運用するための基盤です。PowerShellとKubernetesの組み合わせにより、効率的なリソース制御とトラブルシューティングが可能となり、アプリケーションの安定性とスケーラビリティを向上させます。
ストレージの管理と永続化のベストプラクティス
Windowsコンテナでは、データの永続化とストレージ管理が非常に重要です。Kubernetesは、Persistent Volume(PV)とPersistent Volume Claim(PVC)を使用してストレージを管理します。本セクションでは、PowerShellを利用したストレージの設定方法と永続化のベストプラクティスを解説します。
Persistent Volume(PV)とは
PVは、クラスタ全体で使用可能なストレージリソースを定義します。これはストレージプロバイダ(例: Azure Disk、AWS EBS、ローカルストレージ)によって提供されます。
Persistent Volume Claim(PVC)とは
PVCは、アプリケーションが必要とするストレージをリクエストする仕組みです。PVCを使用すると、PVに対するアクセスを簡単に管理できます。
Persistent VolumeとPVCの設定
以下は、ローカルストレージを利用したPVとPVCの設定例です。
Persistent VolumeのYAML設定例
apiVersion: v1
kind: PersistentVolume
metadata:
name: windows-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
Persistent Volume ClaimのYAML設定例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: windows-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
PowerShellを使った設定適用
kubectl apply -f windows-pv.yaml
kubectl apply -f windows-pvc.yaml
永続ストレージを使用したWindowsコンテナの設定
以下は、永続ストレージを利用するWindowsコンテナのデプロイメント設定例です:
apiVersion: apps/v1
kind: Deployment
metadata:
name: windows-app
spec:
replicas: 1
selector:
matchLabels:
app: windows-app
template:
metadata:
labels:
app: windows-app
spec:
containers:
- name: windows-container
image: mcr.microsoft.com/windows/servercore:ltsc2022
volumeMounts:
- mountPath: "/data"
name: windows-storage
volumes:
- name: windows-storage
persistentVolumeClaim:
claimName: windows-pvc
設定の適用
kubectl apply -f windows-deployment-with-storage.yaml
ストレージの永続化におけるベストプラクティス
- 適切なストレージプロバイダの選択
- クラウド環境(Azure、AWSなど)では、対応するストレージプロバイダを使用してください。
- オンプレミス環境では、NFSやローカルストレージを活用できます。
- ストレージクラスの利用
ストレージクラスを設定して、動的プロビジョニングを有効化します:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
- データのバックアップとリストア
- 定期的にストレージのバックアップを取得します。
- PowerShellスクリプトで自動化が可能です。
トラブルシューティングのヒント
- PVCの状態確認
PVCがPVにバインドされているか確認します:
kubectl get pvc
- イベントログの確認
ストレージに関連するエラーを特定するためにイベントを確認します:
kubectl describe pvc <pvc-name>
- アクセス権の問題の解決
コンテナがストレージにアクセスできない場合、アクセス権の設定を確認してください。
まとめ
Windowsコンテナでのストレージ管理と永続化は、データを安全かつ効率的に保持するために重要です。Persistent VolumeとPersistent Volume Claimを適切に設定し、PowerShellで効率的に操作することで、安定したコンテナ運用を実現できます。
ネットワーク設定とセキュリティの考慮事項
WindowsコンテナをKubernetes上で運用する際、ネットワーク設定とセキュリティは重要な要素です。適切な設定を行うことで、安定した通信と安全な運用を確保できます。このセクションでは、ネットワークの構成とセキュリティのベストプラクティスをPowerShellでの操作方法を交えて解説します。
ネットワーク設定の基本
Kubernetesでは、各コンテナが仮想ネットワーク内で通信します。Windowsコンテナの場合、以下のポイントを考慮します:
- CNI(Container Network Interface)の選択
- Windowsコンテナは特定のCNIプラグインに対応しています(例: Flannel、Calico)。
- クラスタ作成時にCNIを設定してください。 Flannelのインストール例:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- ネットワークポリシーの設定
ネットワークポリシーを使用して通信を制御します。以下はサンプルのネットワークポリシー設定です:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-web
namespace: default
spec:
podSelector:
matchLabels:
app: windows-app
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
適用コマンド:
kubectl apply -f network-policy.yaml
セキュリティ設定の考慮事項
- RBAC(Role-Based Access Control)の有効化
KubernetesではRBACを使用して、リソースアクセスを制御します。以下は、Windowsコンテナ用の基本的なRBAC設定例です:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
適用方法:
kubectl apply -f rbac-role.yaml
- Pod Security Policies(PSP)の活用
コンテナの動作環境を制限することで、セキュリティを強化します:
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
runAsUser:
rule: MustRunAsNonRoot
適用方法:
kubectl apply -f pod-security-policy.yaml
- Secretsの使用
センシティブな情報(例: パスワードやAPIキー)は、Secretsリソースで管理します:
apiVersion: v1
kind: Secret
metadata:
name: windows-app-secret
type: Opaque
data:
username: dXNlcm5hbWU=
password: cGFzc3dvcmQ=
適用コマンド:
kubectl apply -f secret.yaml
PowerShellを活用したネットワークとセキュリティの管理
PowerShellでの操作例:
- ポッドのネットワーク状態確認:
kubectl get pods -o wide
- ネットワークポリシーの確認:
kubectl get networkpolicy
- Secretsの内容確認:
(デコード付き)
kubectl get secret windows-app-secret -o jsonpath="{.data}" | ConvertFrom-Json | ForEach-Object { $_.Value | ForEach-Object { [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($_)) } }
ベストプラクティス
- ネットワークポリシーの活用
- 不要なポッド間通信を制限し、攻撃対象を最小化します。
- セキュリティ設定の自動化
- RBACやSecretsの設定をスクリプトで自動化します。
- 定期的なセキュリティ監査
- ポッドやノードのログを定期的に監査し、不審な挙動を検出します。
まとめ
ネットワークとセキュリティの適切な管理は、Kubernetes上でWindowsコンテナを安全かつ効率的に運用するための鍵です。PowerShellを活用し、シンプルかつ効果的に設定や監視を行い、クラスタ全体の安全性とパフォーマンスを最大化しましょう。
トラブルシューティングとデバッグのヒント
WindowsコンテナをKubernetes上で運用する際、さまざまな問題が発生することがあります。これらの問題を迅速に特定し、解決するためには、適切なトラブルシューティングとデバッグ手法を身につけることが重要です。このセクションでは、PowerShellを活用した具体的な手順とヒントを解説します。
一般的なトラブルシューティングの手順
- 問題の特定
問題が発生したポッドやノードを特定するには以下を使用します:
kubectl get pods -o wide
kubectl get nodes
- ログの確認
ログファイルを確認してエラーの詳細を調べます:
kubectl logs <pod-name>
- リソースの詳細情報を取得
問題のあるリソースを詳細に確認します:
kubectl describe pod <pod-name>
Windowsコンテナ特有の問題と対策
- イメージの互換性の問題
- 問題: Windowsコンテナで正しいイメージが使用されていない場合、動作が失敗することがあります。
- 対策:
- イメージが正しいバージョンであることを確認します。Windows Serverのバージョンと一致している必要があります。
- イメージを手動で取得し、動作を確認します:
powershell docker pull mcr.microsoft.com/windows/servercore:ltsc2022
- リソース不足によるクラッシュ
- 問題: メモリやCPUが不足してコンテナが異常終了することがあります。
- 対策:
kubectl describe pod
でエラーメッセージを確認します。- リソースリクエストとリソース制限を適切に設定します(例:
requests.memory
、limits.cpu
)。
- ネットワーク接続の問題
- 問題: ネットワーク設定が適切でないと、ポッド間通信や外部との接続が失敗します。
- 対策:
- ネットワークポリシーを確認します:
powershell kubectl get networkpolicy
- ポッドのIPアドレスを調査し、通信経路をテストします:
powershell kubectl exec <pod-name> -- curl <target-ip>
- ネットワークポリシーを確認します:
デバッグのための便利なコマンド
- ポッドの状態を確認
kubectl get pod <pod-name> -o yaml
- 実行中のコンテナに入る
コンテナ内でコマンドを直接実行して問題を調査します:
kubectl exec -it <pod-name> -- cmd
- イベントの確認
クラスタで発生したイベントを調査します:
kubectl get events
- リソース使用状況のモニタリング
kubectl top pod
kubectl top node
問題解決のためのベストプラクティス
- YAMLファイルの構文チェック
デプロイメントやサービス設定に問題がないか検証します:
kubectl apply -f <file.yaml> --dry-run=client
- リソース再作成
問題のあるリソースを削除して再作成します:
kubectl delete pod <pod-name>
kubectl apply -f <deployment.yaml>
- クラスタの健全性を確認
ノードやネットワークの状態を定期的に監視します:
kubectl get nodes
kubectl describe nodes
トラブルシューティングスクリプトの例
以下のスクリプトは、異常なポッドを検出してログを収集する例です:
$pods = kubectl get pods --output=json | ConvertFrom-Json
foreach ($pod in $pods.items) {
if ($pod.status.phase -ne "Running") {
Write-Host "Pod $($pod.metadata.name) is in $($pod.status.phase) state"
kubectl logs $pod.metadata.name
}
}
まとめ
Windowsコンテナのトラブルシューティングには、適切なツールの利用と正確な問題の切り分けが重要です。PowerShellを活用すれば、問題の特定と解決が効率的に行えます。これらの手法を活用して、迅速なデバッグと安定した運用を実現しましょう。
実用例:アプリケーションデプロイの流れ
PowerShellを活用して、Kubernetes上でWindowsコンテナを使用したアプリケーションをデプロイする具体的な手順を解説します。この実用例では、IIS(Internet Information Services)を利用した基本的なWebアプリケーションのデプロイを行います。
アプリケーションデプロイの準備
- 必要なリソースの確認
- Kubernetesクラスタが正常に稼働していることを確認します:
kubectl get nodes
- Windowsノードがクラスタに登録されていることを確認します:
powershell kubectl get nodes -o wide
- IIS用コンテナイメージの準備
WindowsベースのIISイメージを使用します。Microsoftが提供する公式イメージを利用します:
mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022
デプロイメントYAMLファイルの作成
以下の例は、IISを実行するWindowsコンテナのデプロイメント設定です:
apiVersion: apps/v1
kind: Deployment
metadata:
name: iis-app
spec:
replicas: 2
selector:
matchLabels:
app: iis-app
template:
metadata:
labels:
app: iis-app
spec:
containers:
- name: iis-container
image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2022
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/os: windows
サービスYAMLファイルの作成
以下は、IISアプリケーションを外部に公開するためのサービス設定例です:
apiVersion: v1
kind: Service
metadata:
name: iis-service
spec:
selector:
app: iis-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
YAMLファイルの適用
PowerShellでデプロイメントとサービスを適用します:
kubectl apply -f iis-deployment.yaml
kubectl apply -f iis-service.yaml
デプロイメントの確認
- ポッドのステータス確認
ポッドが正常に稼働していることを確認します:
kubectl get pods
- サービスのステータス確認
外部IPアドレスが割り当てられていることを確認します:
kubectl get service iis-service
- ブラウザでアクセス
サービスの外部IPアドレスをブラウザに入力して、IISの初期画面が表示されることを確認します。
運用中のアプリケーション管理
- スケールアップ/ダウンの操作
PowerShellでレプリカ数を変更します:
kubectl scale deployment iis-app --replicas=5
- ロールアウト更新
新しいバージョンのコンテナイメージを適用します:
kubectl set image deployment/iis-app iis-container=mcr.microsoft.com/windows/servercore/iis:new-version
- ログの確認
問題が発生した場合はログを確認します:
kubectl logs <pod-name>
デプロイにおけるベストプラクティス
- リソース設定
- デプロイメントにリソースリクエストとリソース制限を設定して、安定性を向上させます。
- CI/CDの統合
- JenkinsやGitHub Actionsを使用して、YAMLファイルの管理とデプロイを自動化します。
- セキュリティの考慮
- RBACやネットワークポリシーを適切に設定し、アクセス制御を強化します。
まとめ
PowerShellを利用したKubernetes上でのWindowsコンテナアプリケーションのデプロイは、効率的かつ柔軟な運用を可能にします。本セクションで解説した手順と設定を応用することで、クラウドネイティブなアプリケーション管理の第一歩を踏み出せるでしょう。
まとめ
本記事では、PowerShellを活用してKubernetes上でWindowsコンテナを操作し、リソース管理や運用を行うためのベストプラクティスを解説しました。Kubernetesの基本概念から、Windowsコンテナの準備手順、リソース管理、ネットワーク設定、セキュリティ強化、トラブルシューティング、さらに具体的なアプリケーションデプロイの例まで網羅しました。
これらの知識と手法を活用することで、Windowsコンテナの運用が効率化され、クラウドネイティブ環境での管理がよりスムーズになります。PowerShellの強力なスクリプト機能を取り入れれば、自動化や継続的な改善も実現可能です。本記事の内容を基に、実践的なスキルをさらに深め、効果的なシステム運用を目指しましょう。
コメント