Kubernetes
Kubernetes(英語) は、デプロイ、スケーリング、コンテナー化されたアプリケーションの管理のためのコンテナーオーケストレーションエンジンです。JetBrains Rider 用の Kubernetes プラグインをインストールして有効にし、Kubernetes クラスターを管理するための次の機能を追加します。
Kubernetes リソース設定ファイル(英語)のコーディング支援。
Helm(英語) チャートおよびテンプレートのコーディング支援。
カスタムリソース定義(CRD)仕様を使用したカスタムリソースの検証。
カスタマイズする(英語)ファイルのコーディング支援: フィールドおよびローカルファイルパスの補完、クイックドキュメント、Kustomize ファイルとパッチ間のナビゲーション。関連する Kustomize ファイルのリストは、開いている Kustomize パッチの上部にあるエディターに表示されます。
JetBrains Rider からのクラスターとの相互作用: サービスツールウィンドウを使用して、現在のコンテキストで Kubernetes クラスターのすべてのリソースを表示したり、関連するリソース定義に移動したり、pods で実行されているコンテナーのログを表示したりできます。
Kubernetes プラグインは、Kubernetes バージョン 1.6 から 1.28 をサポートします ( 該当するバージョンを選択できます)。
Kubernetes プラグインを有効にする
この機能は、デフォルトで JetBrains Rider にバンドルされて有効になっている Kubernetes(英語) プラグインに依存しています。関連する機能が利用できない場合は、プラグインを無効にしていないことを確認してください。
Ctrl+Alt+S を押して設定を開き、
を選択します。インストール済みタブを開き、Kubernetes プラグインを見つけて、プラグイン名の横にあるチェックボックスを選択します。
kubectl および helm へのカスタムパスを指定する
JetBrains Rider は、PATH
環境変数によって決定されるデフォルトの kubectl(および使用する場合は helm)実行可能ファイルを使用します。カスタムディレクトリに Kubernetes または Helm をインストールする場合は、それらへのパスを手動で指定できます。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、 を選択します。
kubectl 実行可能ファイルへのパスフィールドに、kubectl 実行可能ファイルへのパスを指定します。
helm 実行可能ファイルへのパスフィールドに、helm 実行可能ファイルへのパスを指定します。
テストをクリックしてファイルの場所を確認します。見つからない場合は、ファイルの場所を手動で確認するか、インストールをクリックすると、JetBrains Rider が不足しているソフトウェアをダウンロードしてインストールします。
カスタム Kubernetes 構成ファイルを使用する
クラスターに関する情報は、kubeconfig ファイルに保存されます。JetBrains Rider はデフォルトの kubeconfig ファイルを検出します。これは通常 $HOME/.kube/config
です (この場所は KUBECONFIG
環境変数によって変更できます)。JetBrains Rider がデフォルトの kubeconfig ファイルだけでなくカスタム kubeconfig ファイルからクラスターに関する情報を取得するようにしたい場合は、IDE 設定で指定できます。これをグローバルに適用することも、プロジェクトごとに異なるファイルを使用することもできます。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、 を選択します。
構成で、 をクリックし、
kubeconfig
ファイルへのパスを指定します。すべてのプロジェクトで構成ファイルを使用する場合は、スコープ列でグローバルを選択します。現在のプロジェクトでのみ使用するには、プロジェクトスコープを保持します。
ファイルを追加すると、JetBrains Rider はその構文を検証し、エラーがあればそれを報告します。
Kubernetes API バージョンを構成する
JetBrains Rider は、構成キー値の補完、ガターアイコンによる関連セレクターと定義へのナビゲーション、非推奨の値と必須キーをチェックする特殊なインスペクション、およびその他の支援機能を提供します。これらは、使用している API のバージョンによって異なります。Kubernetes プラグインは、Kubernetes バージョン 1.6 から 1.28 までサポートします。デフォルトでは、JetBrains Rider はそれを最新バージョンに設定します。ただし、リソースが以前のバージョンを使用している場合は、変更できます。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、言語 & フレームワーク | Kubernetes を選択します。
必要に応じて、Kubernetes API バージョンおよび Kustomize バージョンオプションを変更します。
リソース構成ファイル
Kubernetes プラグインは、YAML のリソース構成ファイルの豊富なサポートを提供し、JSON 形式の基本的なサポートのみを提供します。
サポートされている機能
フィーチャー | YAML | JSON |
---|---|---|
サポート | サポート | |
サポート | サポート | |
|
| |
一般的なリソースの種類の定義済みテンプレート | 定義済みライブテンプレートなし | |
サポート | 未サポート | |
サポート | 未サポート | |
ラベル定義とセレクタ | ガターアイコンを使用したナビゲーション、使用箇所の検索、名前の変更 | 未サポート |
オリジナルの Kubernetes モデルの強化 | 該当する場合はプレーン文字列の代わりに列挙型 | なし |
JetBrains Rider は、以下の必須フィールドを使用して Kubernetes リソース設定ファイルを認識します。
apiVersion
: オブジェクト表現のバージョン管理されたスキーマを識別するkind
: リソースタイプを識別します (たとえば、Service
、Pod
、Deployment
などです。)
上記の両方のフィールドが YAML ファイルまたは JSON ファイルに存在する場合、JetBrains Rider は対応する Kubernetes アイコンでファイルをマークし、利用可能なすべての機能を有効にします。
リソースファイルを作成する
JetBrains Rider を使用すると、Kubernetes で最も一般的なリソースの一部の構成ファイルをすばやく作成できます。
ソリューションエクスプローラーツールウィンドウで、フォルダーを右クリックし、新規を選択するか、Alt+Insert を押して、Kubernetes リソースを選択します。
名前フィールドにリソース名を入力し、リストからファイルテンプレートを選択します。
これにより、選択したファイルテンプレートに基づいた内容で新しいファイルが作成されます。
「 」をクリックして、クラスター内にリソースを作成します。適用するコンテキストを変更するには、 をクリックしてコンテキストを選択します。
または、YAML ファイルでは、定義済みのライブテンプレートを使用できます。
kconfigmap
: Kubernetes ConfigMapkcronjob
: Kubernetes クローンジョブkdeployment
: Kubernetes デプロイkingress
: Kubernetes イングレスkpod
: Kubernetes Podkresource
: Kubernetes リソースをゼロから構築kservice
: Kubernetes サービス
Kubernetes スキーマの検証を無効にする
JetBrains Rider は、Kubernetes API スキーマに対して Kubernetes ファイルを検証します。これには、必要なキーまたは可能なタイプのリソースのチェックが含まれます。
ファイルに apiVersion
と kind
が含まれているが、それが Kubernetes ファイルではない場合、そのような検証を無効にすることができます。インスペクションを抑制し、その範囲と重大度を で変更できます。または、検証を無効にする特別なディレクティブでファイルをマークすることもできます。
リソース構成ファイルの上に、
# nonk8s
を追加します。または、不明なリソースに関する警告がすでにある場合は、問題ツールウィンドウでそれを右クリックし、 を選択します。
クラスターを管理する
サービスツールウィンドウを使用して、クラスターを表示し、名前空間とコンテキストを切り替え、クラスターリソースを変更します。
kubeconfig の編集
kubeconfig ファイルには、クラスター、ユーザー、名前空間、認証に関する情報が含まれています。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
クラスターを選択し、ツールバーの ( エディターで kubeconfig ファイルを開く ) をクリックします。このアクションは、サービスツールウィンドウで任意の Kubernetes オブジェクトを右クリックした場合にも使用できます。
これにより、エディターの新しいタブで kubeconfig ファイルが開きます。このアクションによって開かれるデフォルトのファイルを変更するには、kubeconfig ファイルへのパスで別のファイルへのパスを指定できます。
kubeconfig ファイルを変更すると、構成が自動的に再ロードされます。クラスターまたは任意の Kubernetes オブジェクトを右クリックして
を選択することにより、手動で再ロードするか、自動再ロードを無効にすることもできます。名前空間を切り替える
Kubernetes 名前空間を使用すると、クラスター内のリソースを論理的に分離できます。JetBrains Rider を使用すると、名前空間をすばやく切り替えることができます。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
クラスターまたは任意のリソースを右クリックし、名前空間を選択し (またはツールバーの をクリックし)、必要な名前空間を選択します。
すべての名前空間のリソースを表示するには、すべての名前空間を選択します。
コンテキストの追加
Kubernetes クラスターと対話するには、サービスツールウィンドウでコンテキストを追加します。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
をクリックし、
を選択して、追加する Kubernetes コンテキストのソースを選択します。デフォルトディレクトリから : デフォルトの場所 (通常は
$HOME/.kube/config
) からコンテキストを取得します。カスタム kubeconfigs から : コンピューターから任意の kubeconfig ファイルを選択します。
kubeconfig の内容を貼り付ける : 開いたテキストエリアに kubeconfig のコンテンツを貼り付けます。
開いたコンテキストの追加ウィンドウで、追加するコンテキストを選択し、コンテキストの追加をクリックします。
追加された Kubernetes コンテキストは、サービスツールウィンドウで利用できるようになります。コンテキストを右クリックして新規タブで開くを選択すると、それぞれを別のタブで開くことができます。
コンテキストの変更
リソースファイルをローカルで作成する場合、 をクリックすると、リソースを適用するコンテキストを選択できます。JetBrains Rider 設定で事前に選択することもできます。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、言語 & フレームワーク | Kubernetes を選択します。
使用するコンテキストリストで、ローカル Kubernetes リソースを適用するときに使用するコンテキストを選択します。
クラスタリソースを変更する
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
リソースを右クリックし、 YAML を表示を選択します。
これにより、選択したリソースの構成ファイルがエディターの新しいタブで開きます。フィールドを変更すると、変更された行がガターでハイライトされます。ガターのハイライトされた領域をクリックして、変更をすばやくプレビューまたはロールバックできます。
をクリックして、現在のコンテキストと名前空間に変更を適用します。
リソース構成ファイルを変更すると、右上にツールバーが表示されます。変更の適用、リソースの削除、差分のプレビュー、変更のロールバックを行うことができます。
リソースの削除
次のいずれかの方法でリソースを削除できます。
サービスツールウィンドウでリソースを右クリックし、削除を選択します。
サービスツールウィンドウでリソースを選択し、ツールバーの ( リソースの削除 ) をクリックします。
リソース YAML ファイルがエディターで開かれている場合は、そのファイルの上にマウスを置き、 をクリックします。ここで をクリックして、リソースを削除するコンテキストを変更することもできます。
ログの表示
pods およびデプロイでログを表示できます。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
pod またはデプロイをお選びください。サービスツールウィンドウの右側で、次のいずれかのアイコンをクリックします。
( ログをフォロー ) は、
--follow=true
フラグを使用して、選択したリソースのライブテールログを出力します。( ログのダウンロード ) ログファイルを保存します。
pod またはデプロイを右クリックしても、両方のアクションを利用できます。
pod に複数のコンテナーがある場合は、表示されたコンテナーのリストから 1 つを選択する必要があります。
の IDE 設定 (Ctrl+Alt+S) でログ保存オプションを構成できます。
スクラッチ以外の場所にログを保存する場合は、ログをダウンロードするパスにディレクトリを指定します。または、ダウンロードする前にログを保存する場所を確認するを選択すると、ログを保存するたびに場所の入力を求められます。
ファイル名にログのタイムスタンプを含める場合は、ログファイル名にタイムスタンプを追加するを選択します。
シークレットを作成する
JetBrains Rider を使用すると、Kubernetes シークレット(英語)をすばやく作成できます。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
クラスターを選択し、構成を展開し、シークレットを右クリックして、新しいシークレットを作成を選択します。
開いた新しいシークレットを作成ウィンドウで、シークレットの名前、タイプ、名前空間を指定します。シークレットの作成を高速化するために、JetBrains Rider は、選択されたシークレットタイプ(英語)に応じて、必要なデータまたはアノテーションキーを追加します。
データおよびアノテーションセクションで、値をクリックして既存のキーの値を入力するか、 をクリックして値を指定する方法を選択します。
手動で追加を使用して値を手動で入力します。
ファイルデータを使用するを使用してファイル (たとえば、SSH 鍵ファイルまたは Docker config.json) を選択し、ファイルの内容を値として使用します。
構成のサービスツールウィンドウで、すべてのシークレットを表示できます。シークレットが作成されたら、Pod 構成の secretName
フィールドにその名前を入力し始めることができます。これにより、クラスターまたはプロジェクトで使用可能なシークレット名の補完が呼び出されます。
クラスター情報を最新の状態に保つ
JetBrains Rider をクラスターと同期させるには、次のアクションを使用します。
構成の再ロードを実行して、kubeconfig ファイルの最新の変更を取得します。
リソースのリフレッシュを使用して、Kubernetes リソースの最新の変更を取得します。
設定を再読み込み
デフォルトでは、kubeconfig ファイルを変更すると、構成は自動的に再読み込みされます。手動で再読み込みすることもできます。
サービスツールウィンドウを開きます。 を選択するか、Alt+8 を押します。
クラスターを右クリックし、
を選択します。
自動再ロードを無効にする場合は、設定を自動的に再ロードするオプションをクリアします。
この設定は、
の IDE 設定 (Ctrl+Alt+S) でも確認できます。クラスターを自動的にリフレッシュする
クラスターを右クリックしてリフレッシュを選択すると、クラスターリソースを手動でリフレッシュできます。または、自動リフレッシュを有効にすることもできます。
特定のクラスターの自動リフレッシュを有効にするには、そのクラスターを右クリックしてクラスターを自動的にリフレッシュするを選択します。
または、クラスターを選択し、 をクリックして、クラスターを自動的にリフレッシュするを選択します。
すべてのクラスターの自動リフレッシュを有効にするには、任意のクラスターを右クリックし、
を選択します。クラスター名またはリソースタイプの横にある緑色のアイコンは、自動リフレッシュが有効になっていることを示します。それ以外の場合、アイコンは黄色になります。
Helm サポート
Helm(英語) は、Kubernetes アプリケーションを管理するためのツールです。Helm チャートは、Kubernetes クラスター内で実行する事前構成済みのリソース定義のパッケージです。グラフには、パッケージ Chart.yaml の説明と、Kubernetes マニフェストファイルの生成に使用される 1 つ以上のテンプレートが含まれています。
Helm チャートおよびテンプレートのコーディング支援には、コード補完、リファクタリング、インスペクション、クイックフィックス、クイックドキュメントが含まれます。コード補完には、指定されたリポジトリ(デフォルトでは Helm Hub(英語))からの依存関係の値が含まれています。
Go テンプレートディレクティブでは、JetBrains Rider は、Helm 組み込みオブジェクト(英語)、values.yaml
ファイルまたはカスタム値ファイルから渡された値の補完を提供します。Ctrl+B を押すと、オブジェクト値のソース (親チャートにインポートされた子チャート値など) に移動できます。
テンプレートオブジェクトでは、コード折りたたみを使用できます。Ctrl+NumPad Plus と Ctrl+NumPad Minus を押して、値とディレクティブを切り替えます。値にカーソルを合わせると、ディレクティブを展開して表示することもできます。
ガターアイコンを使用して、ラベル定義とラベルセレクターの間、およびオーバーライドされた値とオーバーライドする値の間を移動することもできます。
新しい Helm チャートを作成する
プロジェクトツールウィンドウで、フォルダーを右クリックして を選択します。
開いた新しい Helm チャートを作成するウィンドウで、チャートの名前を入力します。
これにより、helm create(英語) コマンドが実行され、開始に必要なすべての基本ファイルが追加されます。
.helmignore : パッケージ構築時に無視するパターン
Chart.yaml : メタデータを含む基本的なチャートの説明
values.yaml : チャートテンプレートのデフォルト値
charts/ : サブチャートのディレクトリ
templates/ : チャート定義のディレクトリ
_helpers.tpl : テンプレートの一部と機能
NOTES.txt : チャートの配備後に印刷される情報
deployment.yaml : 例 Kubernetes デプロイの定義
ingress.yaml : Kubernetes 入力定義の例
service.yaml : Kubernetes のサービス定義の例
Helm テンプレートレンダリング結果のプレビュー
テンプレートファイルがエディターで開かれている場合は、エディターの右側にある をクリックします。
または、プロジェクト内のテンプレートファイルを右クリックし、Helm をポイントして Helm テンプレートを選択します。
これにより、チャートテンプレートをレンダリングする helm テンプレート(英語)コマンドが実行されます。レンダリングされたプレビューが diff ビューアー内で開き、元のテンプレートファイルと比較されます。
外部依存関係を更新する
グラフを右クリックし、Helm をポイントして、Helm 依存関係更新をクリックします。
これにより、helm 依存関係更新(英語)コマンドが実行されます。
Helm 2 では、requirements.yaml ファイルで依存関係を指定する必要があります。このアクションは、requirements.lock を生成または更新します。
Helm 3 では、Chart.yaml ファイルで依存関係を指定する必要があります。誤ったファイルで依存関係を指定すると、JetBrains Rider はインスペクションに移動するためのクイックフィックスを提供します。
requirements.yaml ファイルと Chart.yaml ファイルの両方で依存関係を更新するためのガターアイコンもあります。
考えられる問題のチャートを調べる
グラフを右クリックし、Helm をポイントして、Helm Lint をクリックします。
これにより、helm lint(英語) コマンドが実行され、一連のテストが実行されて、チャートを実際にインストールせずに、考えられる問題を発見します。
カスタムリソース定義のサポート
カスタムリソース(英語)を使用して Kubernetes クラスターを拡張すると、JetBrains Rider はカスタムリソース定義(CRD)仕様を使用して検証できます。
CRD 仕様へのパスを指定してください
Ctrl+Alt+S を押して設定を開き、
を選択します。をクリックしてローカルの CRD ファイルを選択するか URL を指定します。次に OK をクリックします。
および を使用して、CRD ファイルのリストを再配置します。これにより、競合する定義の優先順位が定義されます。JetBrains Rider は、複数のファイルで定義されている場合、最も低い定義を使用します。
デフォルトでは、CRD は現在のプロジェクトにのみ適用されます。この IDE インスタンスで開くプロジェクトで特定の CRD を使用できるようにする場合は、スコープ : オプションを IDE
に変更します。
実行中の Kubernetes クラスターから CRD を読み込むには、可能な場合は、アクティブクラスターの API スキーマを使用しますを有効にします。
サービスツールウィンドウの Kubernetes ノードに、現在のクラスターの CRD(適用されているすべてのリソースを含む)を表示できます。
Kubernetes プラグインは、次のタイプの CRD ファイルをサポートしています。
YAML の CustomResourceDefinition ファイル
次の例は、CronTab
の種類のカスタムリソース stable.example.com/v1
の単純な CustomResourceDefinition(英語) 仕様を示しています。リソースを識別するための必須フィールドは metadata.name
、spec.group
、spec.versions
、spec.names
です。
JSON での OpenAPI v2.0 スキーマ
次の例は、Config
という種類のカスタムリソース sample/v1
の CRD 仕様を持つ単純な OpenAPI v2.0(英語) スキーマを示しています。カスタムリソースのルート定義には、指定されたグループ、バージョン、種類を持つ x-kubernetes-group-version-kind
フィールドを含める必要があります。この例では、root.Definition
オブジェクトは build
プロパティを使用して some.Definition
オブジェクトを参照しています。
CRD 検証の制限
JetBrains Rider は、次の OpenAPIv3 スキーマ機能をサポートしていません。
multipleOf
maximum
exclusiveMaximum
minimum
exclusiveMinimum
maxLength
minLength
pattern
maxItems
minItems
uniqueItems
maxProperties
minProperties
allOf
oneOf
anyOf
not
format
default
nullable
readOnly
writeOnly
xml
externalDocs
example
deprecated
生産性のヒント
ここに記載されている機能を頻繁に使用する場合は、以下のヒントを参考にしてください。
ショートカットの割り当て
Kubernetes アクションにキーボードショートカットを割り当てることができます。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、キーマップを選択します。
検索フィールドに
kubernetes
と入力してから、アクションをダブルクリックしてショートカットを設定します。
または、アクションの検索ダイアログ Ctrl+Shift+A を使用して、必要なアクションを入力し、Alt+Enter を押すこともできます。
例: クラスターと対話するにショートカットを割り当てて、リソース構成ファイルの変更中にコンテキストメニューをすばやく開くことができます。
コードの折りたたみを構成する
デフォルトでは、JetBrains Rider はコード折りたたみを使用して、Helm テンプレートの値参照と Kubernetes 構成ファイルの定義を実際の値としてレンダリングします。値をクリックして展開するか、Ctrl+NumPad Plus と Ctrl+NumPad Minus を押して折りたたみを切り替えることができます。参照と定義がデフォルトで展開されていることを確認するには、次のようにします。
設定 / 環境設定ダイアログ(Ctrl+Alt+S)で、 を選択します。
コードの折りたたみページで、必要なチェックボックスをオフにします。
Kubernetes: Helm テンプレートの値参照
Kubernetes: YAML ファイルの EnvVar 定義
Kubernetes: YAML ファイルの ExecAction 定義
関連ページ:
サービスウィンドウ
サービスツールウィンドウを使用すると、実行 / デバッグ構成、アプリケーションサーバー、データベースセッション、Docker 接続など、ソフトウェア開発中に役立つさまざまなサービスを管理できます。プラグイン開発者は、IntelliJ プラットフォーム API を通じて他のサービスを追加できます。メインツールバーには、すべてのサービスタイプに共通の次のボタンとメニューが含まれています。すべて展開リスト内のすべての項目を展開します。すべて折りたたむリスト内のすべての項目を折りたたみます。グループ化サ...
コード補完 (IntelliSense)
JetBrains Rider のコード補完機能に慣れ親しむために、実装の基礎をいくつか紹介します。新しい識別子の入力を開始するとすぐに、自動補完の候補リストが表示されます。を押すと、基本補完の候補リストが表示されます。他の 2 つの補完コマンド、型一致補完および第 2 基本補完は、高度なアルゴリズムを適用して、候補リストにさらに項目を追加します。AI Assistant を有効にしている場合は、周囲のコンテキストに基づいてコードブロック全体を作成できる AI を搭載したコード補完を利用できます。...
クイックドキュメント
JetBrains Rider を使用すると、エディター内でシンボルのドキュメントをすばやく確認できます。シンボルがサポートされている形式 (C# の XML-docs など) でドキュメント化されている場合、すべてのドキュメントが適切な形式で表示されます。それ以外の場合は、基本的なシンボル情報が表示されます (完全なメソッドシグネチャーまたは型の可視性と名前空間など)。デフォルトでは、シンボルの上にマウスを置くと、クイックドキュメントポップアップが表示されます。これを無効にして常にポップアップ...
型一致補完
このコマンドは、式の予想される型に一致するように、型、メソッド、変数のリストをフィルター処理します。JetBrains Rider が式の予想される型(たとえば、割り当ての右辺、変数初期化子、return ステートメント)を判別できる限り、どこでも機能します。複数の戻り型が可能な場合、JetBrains Rider は、該当する型の最後に使用されたシンボルを検出し、ルックアップリストでそれを自動的に選択します。Type-Matching Completion は、匿名デリゲート、ラムダ式、通常の...
Web 固有のファイルテンプレート
ファイルテンプレートは、プロジェクトツリーのコンテキストメニューのメニューまたは新規セクションを使用して作成する新しいファイルの既定の内容の仕様です。作成するファイルの種類に応じて、テンプレートは、その種類のすべてのファイルに期待される初期コードとフォーマットを提供します (業界または言語の標準、企業ポリシー、その他の理由に従って)。JetBrains Rider は、新しいファイルを作成するときに提案される、サポートされているすべてのファイルタイプの定義済みテンプレートを提供します。ファイルテ...
スクラッチファイル
一時的なメモを作成したり、プロジェクトのコンテキスト外でコードを作成したりする必要がある場合があります。別のアプリケーションに切り替える代わりに、スクラッチファイルとスクラッチバッファを使用できます。スクラッチファイルは、構文のハイライト、コード補完、対応するファイルタイプのその他すべての機能をサポートする、完全に機能するファイルです。例: 1 つのプロジェクトに取り組んでいるときに、後で別のプロジェクトで使用できる方法のアイデアを思いつくことがあります。メソッドのドラフトを含むスクラッチファイ...