Javaプログラミングにおいて、条件分岐は基本的かつ重要な構造であり、プログラムの動作を柔軟に制御するために欠かせません。条件分岐を正しく使用することで、プログラムが多様な入力や状況に対して適切に応答することが可能となります。しかし、条件分岐を用いる際に重要なのは、その記述方法に一貫性を持たせることです。コーディングスタイルの一貫性を保つことで、コードの可読性が向上し、保守性が高まり、チーム開発においてもスムーズなコミュニケーションが可能となります。本記事では、Javaにおける条件分岐の基本と、コーディングスタイルの一貫性を維持するためのポイントについて詳しく解説します。
Javaでの条件分岐の基礎
条件分岐は、プログラムの実行フローを特定の条件に基づいて分岐させるための構造です。Javaでは、主にif-else
文とswitch
文が条件分岐に使用されます。
if-else文
if-else
文は、指定した条件が真か偽かに応じて異なる処理を実行するための構造です。条件が真の場合に処理が行われ、偽の場合にはelse
ブロックの処理が実行されます。基本的な構文は以下の通りです。
if (条件) {
// 条件が真の場合に実行されるコード
} else {
// 条件が偽の場合に実行されるコード
}
switch文
switch
文は、複数の値に対する条件分岐を効率的に処理するために使用されます。特定の変数の値に基づいて、対応するcase
ラベルに一致するコードブロックが実行されます。switch
文の基本的な構文は以下の通りです。
switch (変数) {
case 値1:
// 変数が値1の場合に実行されるコード
break;
case 値2:
// 変数が値2の場合に実行されるコード
break;
// その他のケース
default:
// どのcaseにも一致しない場合に実行されるコード
}
これらの構造を正しく理解し使いこなすことが、効率的なJavaプログラミングの第一歩です。次節では、これらの条件分岐をどのように実践的に活用し、最適化するかについて説明します。
条件分岐のベストプラクティス
条件分岐を効果的に活用するためには、コードの可読性や保守性を考慮したベストプラクティスを遵守することが重要です。ここでは、Javaでの条件分岐における最適な書き方とその理由について解説します。
単純な条件分岐を優先する
条件分岐が複雑になると、コードが理解しにくくなるだけでなく、バグの原因にもなります。可能な限り条件式を単純化し、複数の条件が必要な場合は、それぞれの条件を明確に分けて書くことを心がけましょう。
// 複雑な条件式
if ((age > 18 && age < 65) || (age == 17 && parentConsent)) {
// 複雑な条件
}
// 単純化した条件式
if (age > 18 && age < 65) {
// 成人
} else if (age == 17 && parentConsent) {
// 親の同意あり
}
早期リターンを活用する
条件分岐の中で特定の条件が満たされた場合は、早期リターンを使って処理を終了させることで、ネストを浅く保ち、コードを簡潔に保つことができます。
// 早期リターンを活用
if (user == null) {
return;
}
// ここで続きの処理を記述
switch文の適切な使用
switch
文を使うと、特定の値に基づく分岐を簡潔に書けますが、使いすぎると逆にコードが煩雑になる可能性があります。選択肢が多い場合に有効ですが、ケースが少ない場合や、条件式が複雑な場合にはif-else
文を検討するべきです。
デフォルトケースを忘れない
switch
文を使用する際は、必ずdefault
ケースを設定し、すべての可能性を網羅するようにしましょう。これにより、想定外の値が入力された場合でも、適切に対応できます。
switch (status) {
case "STARTED":
// 処理
break;
case "STOPPED":
// 処理
break;
default:
// 想定外の値への対応
break;
}
ネストを最小限に抑える
条件分岐が深くネストすると、コードが読みにくくなるため、早期リターンやガード節を活用して、可能な限りネストを浅く保ちましょう。
これらのベストプラクティスを遵守することで、条件分岐を含むコードが明確で保守しやすくなり、バグの発生を防ぎ、チームでの共同作業も円滑に進めることができます。
コーディングスタイルの一貫性の必要性
コーディングスタイルの一貫性は、チーム開発や長期的なプロジェクトの成功において非常に重要です。一貫したスタイルを保つことで、コードの可読性が向上し、他の開発者がコードを理解しやすくなります。また、保守性が高まり、将来的なバグ修正や機能追加が容易になります。
可読性の向上
一貫したコーディングスタイルにより、コード全体が統一された見た目となり、他の開発者がコードを読む際に混乱することが少なくなります。例えば、条件分岐におけるインデントのルールやブレースの配置を統一することで、コードを直感的に理解しやすくなります。
// 統一されたインデントとブレーススタイル
if (condition) {
executeAction();
} else {
executeAlternativeAction();
}
保守性の向上
一貫したスタイルで書かれたコードは、長期間にわたって保守しやすくなります。新しい開発者がプロジェクトに参加した際でも、統一されたコーディングスタイルに従っていれば、既存のコードベースを迅速に理解し、修正や追加作業を効率的に行えます。
バグの発見と修正が容易になる
統一されたスタイルは、コード内のパターンを簡単に認識できるため、バグや不整合を素早く発見するのに役立ちます。特に大規模なプロジェクトでは、コーディングスタイルのばらつきがあると、バグの原因を特定するのが困難になることがあります。
チーム開発における一貫性の重要性
チームでの開発では、複数の開発者が同じコードベースに貢献します。この際、各メンバーが異なるスタイルでコードを書いてしまうと、コードの統一感が失われ、他のメンバーがコードを理解するのが難しくなります。これにより、レビューの時間が増えたり、コミュニケーションコストが上がったりするリスクがあります。
一貫性を維持するためのツール
一貫性を保つためには、スタイルガイドを定義し、チーム全員で遵守することが重要です。また、自動整形ツールやスタイルチェックツールを導入することで、コーディングスタイルの違反を防ぐことができます。これにより、コードレビューの際にスタイルについての議論を減らし、実質的なコードの品質に集中することができます。
コーディングスタイルの一貫性を維持することは、プロジェクトの成功に直結します。これを怠ると、コードベースが散らかり、メンテナンスが難しくなり、チーム全体の生産性が低下する可能性があります。
コード例: 一貫したスタイルの条件分岐
一貫したコーディングスタイルは、特に条件分岐のような頻繁に使われる構造において重要です。ここでは、条件分岐を用いた具体的なコード例と、それを一貫したスタイルで書く方法を紹介します。
コード例: 基本的な条件分岐
以下は、ユーザーの年齢に基づいて異なるメッセージを表示するシンプルな例です。この例では、if-else
文を用いて、年齢に応じた処理を行います。
public void printAgeMessage(int age) {
if (age < 13) {
System.out.println("You are a child.");
} else if (age >= 13 && age < 20) {
System.out.println("You are a teenager.");
} else if (age >= 20 && age < 65) {
System.out.println("You are an adult.");
} else {
System.out.println("You are a senior.");
}
}
このコードでは、一貫したインデントとブレーススタイルを使用しています。これにより、各条件分岐が明確に区別され、コードが読みやすくなっています。また、年齢に関する条件をシンプルに保つことで、コードの可読性と理解しやすさを向上させています。
コード例: switch文による条件分岐
次に、switch
文を使った例を見てみましょう。switch
文は、特定の値に対して複数の分岐を簡潔に書けるため、選択肢が多い場合に便利です。
public void printDayMessage(int dayOfWeek) {
switch (dayOfWeek) {
case 1:
System.out.println("Today is Monday.");
break;
case 2:
System.out.println("Today is Tuesday.");
break;
case 3:
System.out.println("Today is Wednesday.");
break;
case 4:
System.out.println("Today is Thursday.");
break;
case 5:
System.out.println("Today is Friday.");
break;
case 6:
System.out.println("Today is Saturday.");
break;
case 7:
System.out.println("Today is Sunday.");
break;
default:
System.out.println("Invalid day of the week.");
break;
}
}
この例でも、各case
に対応するコードブロックが一貫したスタイルで記述されています。switch
文を使用することで、複数のif-else
文を使うよりもコードがすっきりし、各条件が明確に見えるようになっています。
一貫性を維持するためのヒント
- インデントとブレースの配置を統一する: チーム全体でインデント(スペースやタブの使用)とブレースの配置方法を統一することが重要です。
- 条件式を簡潔に保つ: 長い条件式を避け、必要に応じてメソッドに分割することで、コードを読みやすくします。
- 命名規則を遵守する: 変数名やメソッド名に一貫した命名規則を適用し、コードが直感的に理解できるようにします。
これらの一貫性を保つための方法を実践することで、条件分岐を含むコード全体が整然とし、他の開発者にも理解しやすいものとなります。
スタイルガイドの活用
コーディングスタイルの一貫性を保つためには、スタイルガイドの導入と活用が非常に効果的です。スタイルガイドは、コードの書き方に関するルールやベストプラクティスを定めた文書であり、チーム全体で共有することでコードベースの統一性を維持できます。
スタイルガイドの重要性
スタイルガイドを使用することで、チーム内の全員が同じルールに従ってコードを書くようになり、コードの見た目や構造が一貫します。これにより、以下のメリットが得られます。
- コードの可読性向上: 統一されたスタイルにより、コードが誰にとっても理解しやすくなります。
- メンテナンスの効率化: 一貫したスタイルのコードは修正や拡張が容易で、他の開発者が変更を加える際の負担が減ります。
- 学習曲線の低減: 新たにチームに加わったメンバーが既存のコードベースを理解する際、統一されたスタイルは助けとなり、迅速にプロジェクトに貢献できるようになります。
スタイルガイドの作成と導入
スタイルガイドはプロジェクトやチームの特定のニーズに合わせてカスタマイズすることができます。作成の際には、以下のポイントに注意するとよいでしょう。
- 共通のルールを設定: インデントの使い方、ブレースの配置、変数命名規則、コメントの書き方など、基本的なルールを定めます。
- ツールの推奨設定: 使用する開発環境やツールの設定についてもガイドラインに含め、チーム全体で統一した環境を構築します。
- 実例の提供: コード例を含め、具体的にどのようにスタイルガイドを適用するかを示します。
オープンソースのスタイルガイドを参考にする
多くの企業やコミュニティが公開しているオープンソースのスタイルガイドを参考にするのも一つの方法です。たとえば、Google Java Style GuideやOracleのJavaコーディングスタンダードなどは広く採用されており、これらを基に独自のガイドを作成することができます。
スタイルガイドの活用方法
スタイルガイドは、単に文書として用意するだけでなく、日常的に活用することが重要です。以下の方法でスタイルガイドを活用できます。
- コードレビュー: コードレビューの際にスタイルガイドを参照し、ルールに従っているかを確認します。
- 自動フォーマッターの使用: IntelliJ IDEAやEclipseなどのIDEには、スタイルガイドに従ってコードを自動整形する機能があります。これらを利用して、コードのフォーマットを簡単に統一できます。
- 定期的な更新: スタイルガイドはプロジェクトの進行に伴って進化するべきです。新しいベストプラクティスが見つかった場合は、スタイルガイドを更新し、全員に周知します。
スタイルガイドを効果的に活用することで、チーム全体の生産性が向上し、コードの品質も大幅に向上します。統一されたルールの下でコードを作成することは、プロジェクトの成功に直結する要素の一つです。
コードレビューによるスタイルの統一
コードレビューは、チーム開発においてコーディングスタイルの一貫性を維持し、コード品質を向上させるための重要なプロセスです。適切なコードレビューを通じて、スタイルガイドの遵守を確認し、チーム全体で統一されたコーディングスタイルを実現できます。
コードレビューの目的
コードレビューの主な目的は以下の通りです。
- バグの早期発見: 他の開発者の目でコードを確認することで、バグやロジックのミスを早期に発見できます。
- スタイルガイドの遵守確認: スタイルガイドに基づいてコードが書かれているかを確認し、一貫性を保ちます。
- ナレッジシェアリング: レビューを通じて、チームメンバー間でベストプラクティスや新しい技術的知識を共有できます。
- 品質向上: 全体的なコード品質を向上させ、保守性の高いコードベースを維持します。
コードレビューのベストプラクティス
効果的なコードレビューを実施するためのベストプラクティスを紹介します。
1. 事前にスタイルガイドを確認
レビューを始める前に、スタイルガイドを確認し、レビューの際にどの点を重視するかを明確にします。これにより、スタイルの一貫性を保つためのチェックポイントを設定できます。
2. 小さな変更をレビューする
大きな変更よりも、小さな変更の方がレビューしやすく、スタイルの一貫性を確認するのも容易です。定期的に小さな単位でコードレビューを行うことで、質の高いレビューが可能になります。
3. フィードバックは建設的に
レビューのフィードバックは建設的で具体的に行いましょう。スタイルの違反が見つかった場合、その理由と修正方法を説明し、改善を促します。
4. ペアプログラミングの活用
ペアプログラミングは、リアルタイムでコードをレビューしながら進める方法です。これにより、コードを書きながらスタイルガイドを遵守しやすくなり、レビューの手間を減らすことができます。
コードレビューのプロセス
効果的なコードレビューを実施するためには、以下のプロセスを踏むことが重要です。
1. プルリクエストの作成
開発者が変更をコミットしたら、その変更を他のメンバーにレビューしてもらうためにプルリクエストを作成します。この際、プルリクエストの説明には、変更の目的や影響範囲を明記します。
2. レビュアーの選定
プルリクエストに対して、スタイルガイドに精通したメンバーやその変更に関連する開発者がレビュアーとなります。適切なレビュアーが選定されることで、より質の高いレビューが期待できます。
3. レビューの実施
レビュアーはコードを確認し、スタイルガイドに従っているか、バグがないか、ロジックが正しいかをチェックします。必要に応じてコメントを追加し、修正を依頼します。
4. 修正とマージ
フィードバックを受けた開発者は、必要な修正を行い、再度レビューを受けます。すべての指摘が解消されたら、コードをマージして完了です。
コードレビューによるメリット
- チーム全体のスキル向上: コードレビューを通じて、チーム全体のコーディングスキルが向上し、スタイルガイドの遵守が徹底されます。
- コードの一貫性維持: レビューにより、すべてのコードが同じスタイルで書かれることを保証し、一貫性が保たれます。
- プロジェクトの安定性: コードの品質が向上し、バグが減少することで、プロジェクトの全体的な安定性が高まります。
コードレビューは単なる形式的な手続きではなく、プロジェクトの品質と効率を向上させるための重要な手段です。チーム全員でレビューの文化を育て、一貫したスタイルで高品質なコードベースを維持しましょう。
一貫性のないコードが引き起こす問題
コーディングスタイルの一貫性が欠如すると、プロジェクト全体に様々な問題やリスクが発生します。一貫性のないコードは、可読性の低下、バグの発生、チーム内の混乱など、多くのデメリットをもたらします。ここでは、一貫性のないコードが具体的にどのような問題を引き起こすかについて解説します。
可読性の低下
一貫性のないコードは、読み手にとって理解しにくくなります。特に、大規模なプロジェクトやチーム開発では、複数の開発者が異なるスタイルでコードを書くと、コードベース全体が雑然としてしまいます。これにより、コードを読む時間が増え、メンテナンスが難しくなります。
// 一貫性がない例
if (condition){
doSomething();
}
else {
doSomethingElse();
}
このようなスタイルのばらつきは、コード全体の可読性を著しく低下させます。
バグの発生と修正の困難
一貫性がないコードは、バグが発生しやすくなります。また、バグが発生した場合でも、その原因を特定し修正するのが難しくなります。一貫性のない命名規則や不統一なロジックは、コードの意図を曖昧にし、バグの発見を遅らせることがあります。
// 不統一な命名規則
int UserAge = 25;
int user_age = 30;
この例では、同じ意味を持つ変数が異なる命名規則で記述されており、バグの原因になりかねません。
チーム内での混乱と生産性の低下
異なるコーディングスタイルが混在していると、チーム内での混乱が生じます。新たにプロジェクトに参加した開発者は、スタイルのばらつきに戸惑い、理解や貢献が遅れることがあります。これにより、チーム全体の生産性が低下し、プロジェクトの進行にも悪影響を及ぼします。
メンテナンスコストの増加
一貫性がないコードは、メンテナンスが難しく、時間がかかります。コードの変更や追加の際に、統一されたスタイルで記述されていないコードに対応することは、余計な労力を要します。結果として、プロジェクトのメンテナンスコストが増加し、長期的なプロジェクトの運用が困難になります。
品質の低下
コードの品質は、一貫性がないことで大幅に低下します。一貫性のないコードは、ユーザーエクスペリエンスやソフトウェアの安定性にも悪影響を与えます。リリース後の不具合や、アップデートの際のトラブルも増加する可能性が高まります。
コードレビューの非効率化
コードレビューの際にも、一貫性がないコードは問題となります。レビュアーはスタイルの違いに気を取られ、実際のロジックやバグの発見に集中できなくなります。これにより、レビューの効率が低下し、時間が無駄に消費されることになります。
一貫性のないコードが引き起こすこれらの問題は、プロジェクトの進行を遅らせ、最終的にはユーザーに提供する製品やサービスの品質に影響を与えます。したがって、プロジェクトの成功と長期的な維持を考える上で、コーディングスタイルの一貫性を保つことは不可欠です。
コーディングスタイルを強制するツール
コーディングスタイルの一貫性を確保するためには、手動の努力だけでなく、自動化ツールを活用することが非常に効果的です。これらのツールは、スタイルガイドの遵守を自動的にチェックし、コードが一貫したルールに従っていることを保証します。ここでは、Javaで広く使われているコーディングスタイルを強制するツールについて紹介します。
Checkstyle
Checkstyleは、Javaのコーディングスタイルをチェックするためのツールです。プロジェクトのスタイルガイドに従ってコードが記述されているかどうかを自動的に確認し、違反を報告します。
主な機能
- コーディング規約のチェック: クラス名、メソッド名、インデント、ブレースの配置など、様々なコーディング規約をチェックします。
- カスタムルールの設定: プロジェクト固有のスタイルガイドに従って、カスタムルールを設定することが可能です。
- IDE統合: EclipseやIntelliJ IDEAなどのIDEに統合して、開発中にリアルタイムでチェックを行えます。
使用例
プロジェクトにCheckstyleを導入することで、ビルドプロセス中に自動的にスタイルチェックを実行し、違反があれば通知されます。これにより、コードレビューの際にスタイル違反が検出される前に問題を修正することができます。
mvn checkstyle:check
上記のコマンドを実行することで、Mavenプロジェクト内のすべてのコードがCheckstyleによってチェックされます。
SonarQube
SonarQubeは、コード品質を継続的に監視するためのツールで、スタイルガイドの遵守だけでなく、バグやセキュリティ脆弱性の検出にも役立ちます。SonarQubeを使用すると、プロジェクト全体のコード品質を包括的に管理できます。
主な機能
- スタイルチェック: Javaのコーディングスタイルに違反している箇所を検出します。
- 品質ゲート: 事前に設定された基準に従って、コードの品質が一定の水準を超えているかを評価します。
- コードレビューの支援: レビュー時に重点を置くべき箇所を特定し、効率的なレビューを支援します。
使用例
SonarQubeは、JenkinsやGitLab CIなどのCI/CDパイプラインに統合して使用されることが多く、コードがリポジトリにプッシュされるたびに自動的にチェックが行われます。
sonar-scanner
このコマンドを使用して、SonarQubeサーバーにプロジェクトのコード分析を送信し、詳細なレポートを得ることができます。
SpotBugs
SpotBugsは、バグの検出に特化したツールですが、コーディングスタイルやプラクティスのチェックにも使用できます。CheckstyleやSonarQubeと組み合わせることで、より包括的なコード品質管理が可能です。
主な機能
- バグ検出: コード内の潜在的なバグや問題箇所を検出します。
- スタイルガイドチェック: Javaのベストプラクティスに反するコードを検出し、スタイルガイドに従うように促します。
使用例
SpotBugsは、MavenやGradleと簡単に統合でき、プロジェクトのビルド時に自動的にコードをスキャンして問題を報告します。
mvn spotbugs:check
このコマンドで、Mavenプロジェクト内のすべてのコードがSpotBugsによってチェックされます。
まとめ
これらのツールを活用することで、コーディングスタイルの一貫性を自動的に強制し、コードレビューの負担を軽減できます。また、チーム全体でコード品質を維持するための共通の基盤を築くことができ、長期的なプロジェクトの成功に寄与します。ツールを適切に選び、プロジェクトに導入することで、より安定した、高品質なソフトウェア開発が可能になります。
応用例: 大規模プロジェクトでの実践
大規模プロジェクトでは、条件分岐とコーディングスタイルの一貫性が特に重要になります。複数の開発者が協力してコードベースを構築・保守するため、統一されたスタイルと条件分岐の適切な使用が、プロジェクトの成功に大きな影響を与えます。ここでは、実際に大規模プロジェクトで条件分岐とコーディングスタイルの一貫性を実践する方法について具体例を交えながら説明します。
条件分岐の複雑化を防ぐ
大規模プロジェクトでは、機能が増えるにつれて条件分岐も複雑になりがちです。このような状況を避けるためには、条件分岐をシンプルかつ明確に保つ工夫が必要です。例えば、複雑な条件式をメソッドに分割し、各メソッドが単一の責任を持つように設計することで、コードの可読性とメンテナンス性を向上させることができます。
public void processOrder(Order order) {
if (isOrderValid(order)) {
executeOrder(order);
} else {
rejectOrder(order);
}
}
private boolean isOrderValid(Order order) {
return order.isPaid() && order.hasValidAddress();
}
この例では、注文処理の条件分岐をisOrderValid
メソッドに切り出すことで、主なロジックを簡潔にし、コードの理解を容易にしています。
設計パターンの利用
大規模プロジェクトでは、単純な条件分岐だけでは対応できない複雑なロジックが発生することがあります。こうした場合、設計パターン(デザインパターン)を利用することで、条件分岐を効果的に管理できます。
例えば、Strategyパターンを用いると、異なるアルゴリズムやビジネスロジックを条件分岐で切り替える代わりに、クラスを切り替えることで処理を柔軟に変更できます。
public interface PaymentStrategy {
void pay(double amount);
}
public class CreditCardPayment implements PaymentStrategy {
public void pay(double amount) {
// クレジットカードでの支払い処理
}
}
public class PayPalPayment implements PaymentStrategy {
public void pay(double amount) {
// PayPalでの支払い処理
}
}
public class PaymentProcessor {
private PaymentStrategy strategy;
public PaymentProcessor(PaymentStrategy strategy) {
this.strategy = strategy;
}
public void processPayment(double amount) {
strategy.pay(amount);
}
}
このように、Strategyパターンを使用すると、条件分岐を設計レベルで置き換えることができ、コードの拡張性と保守性を向上させます。
モジュール分割によるスタイルの一貫性維持
大規模プロジェクトでは、コードベースをモジュール化することで、各モジュール内で一貫したコーディングスタイルを保つことができます。モジュールごとに責任を明確にし、異なるチームがそれぞれのモジュールを担当することで、スタイルの一貫性を確保しつつ、チーム間の干渉を最小限に抑えます。
例えば、UIモジュール、ビジネスロジックモジュール、データアクセスモジュールなどに分け、それぞれのモジュールで共通のスタイルガイドを適用することで、コードベース全体の一貫性を保ちながら効率的に開発を進めることができます。
コードレビューとCI/CDの統合
大規模プロジェクトでは、コードレビューとCI/CDパイプラインを統合し、スタイルチェックや条件分岐の最適化を自動化することが効果的です。コードがリポジトリにプッシュされるたびに、スタイルチェックやユニットテストが自動的に実行され、問題があれば開発者に通知されます。これにより、コードベース全体の品質を維持し、スタイルの一貫性が保たれます。
# GitLab CI/CDの例
stages:
- lint
- test
lint:
stage: lint
script:
- mvn checkstyle:check
allow_failure: false
test:
stage: test
script:
- mvn test
allow_failure: false
このようなCI/CDパイプラインを構築することで、コーディングスタイルの一貫性を保ちながら、開発サイクルの効率を向上させることができます。
まとめ
大規模プロジェクトにおける条件分岐とコーディングスタイルの一貫性は、プロジェクトの成功を左右する重要な要素です。複雑なロジックをシンプルに保ち、設計パターンやモジュール分割を活用することで、コードの可読性と保守性を向上させることができます。また、コードレビューやCI/CDパイプラインを活用して、一貫したスタイルと高品質なコードを維持し続けることが、大規模プロジェクトの安定的な運用に不可欠です。
まとめ
本記事では、Javaにおける条件分岐の基本から、そのベストプラクティス、さらに大規模プロジェクトでの応用例までを詳しく解説しました。条件分岐を効果的に使うためには、シンプルかつ一貫性のあるコーディングスタイルを維持することが重要です。スタイルガイドや自動化ツールの活用、設計パターンの導入により、コードの可読性と保守性が向上し、プロジェクト全体の品質を高めることができます。特に大規模なプロジェクトでは、これらの原則を適用することで、チーム全体の生産性を向上させ、長期的なプロジェクトの成功を支える基盤を築くことができます。
コメント