JavaRush /Java Blog /Random-JA /IntelliJ IDEA: コードスタイルと書式設定
Viacheslav
レベル 3

IntelliJ IDEA: コードスタイルと書式設定

Random-JA グループに公開済み
最新のツールにより、開発プロセスが容易になります。特に、「不正な」書式設定を最小限に抑えるようにすると、コードのスタイルを監視することが容易になります。このレビューでは、コードを読みやすく理解しやすくするために IntelliJ Idea IDE が開発者に提供するツールについて理解することを提案します。
IntelliJ IDEA: コードのスタイルと書式設定 - 1

導入

プログラミング言語は、人々が話す言語と非常によく似ています。唯一の違いは、これがコンピュータに何を求めているかをコンピュータに説明するために最初にコンピュータと通信するために使用される特別な言語であるということです。しかし、コンピュータとの 1 対 1 のコミュニケーションは不可能です。プログラミング言語を学び始めたときでも、本や JavaRush などの教育リソースを調べました。そして、このソースには、コンピュータが理解できるコードが含まれています。ただし、Java 言語の知識を得るにつれて、それも理解する必要があります。他の言語と同様に、プログラミングにもコードを形成するためのいくつかのルールがあります。たとえば、礼儀正しい社会では柵を付けて書くことはマナー違反とみなされ、Java では大文字でメソッドを呼び出すことはコード スタイルの重大な違反となります。Java コードのフォーマット規則は、Java コード規約文書で策定されています。さらに、コード スタイルにより、インデントなどの細かい詳細を調整できます。そして、バージョン管理ツールを使用する場合、誰もがファイルをタブとしてインデントまたはスペースとしてインデントして保存するときの悪夢全体を想像してみてください。1 つの方法だけで編集内容を確認する必要があるが、スペースからタブへの修正、またはその逆の修正によりファイル全体が変更される場合はどうなるでしょうか。当然のことながら、通常の言語と同様に、使用される場所によってスタイルが異なる場合があります。たとえば、インターネットでは、Google Java Style GuideTwitter Java Style Guideを見つけることができます。このレビュー記事にはテスト被験者が必要です。Gradleプロジェクトビルドシステムのサービスを使ってみましょう。これにより、テンプレートを使用して新しいプロジェクトを簡単に作成できるようになります。Gradle には、Build Init Plugin という優れたプラグインがあります。新しいディレクトリに移動して、そこでコマンドを実行しましょう。 gradle init --type java-application その後、IntelliJ Idea を起動します。すでに開いているプロジェクトを含むウィンドウが表示された場合 (コード エディター、プロジェクト構造ツリーが表示されます)、 を使用してこのプロジェクトを閉じますFile -< Close Project。ようこそウィンドウで、"Import Project"新しいプロジェクトを実行してインポートします。インポート時にフラグを設定します"Use autoimport"。最新の開発ツールを使用して、何らかの方法で作業を簡素化できないかどうかを考えてみましょう。

アイデアでのコードのフォーマット

プロジェクトをインポートした後、キーの組み合わせを押してCtrl+Nクラスに移動しますAppTest。このクラスはデフォルトのテスト クラスです。次のようになります。
import org.junit.Test;
import static org.junit.Assert.*;

public class AppTest {
    @Test public void testAppHasAGreeting() {
        App classUnderTest = new App();
        assertNotNull("app should have a greeting", classUnderTest.getGreeting());
    }
}
ここですぐに目に留まるものは何ですか? メソッド宣言が 1 行にある注釈は、見苦しく見えますが、これに同意します。これを修正するにはどうすればよいでしょうか? IntelliJ Idea には、さまざまなコード操作のためのメニュー セクションがあります"Code"。このような操作の 1 つは"Reformat Code"キーの組み合わせですCtrl + L。適用後、注釈は 1 行に表示され、メソッド自体は別の行に表示されます。この操作がコードの選択されたセクションに対して実行されることにすぐに注目してください。そのようなものが存在しない場合、フォーマット操作はすべてのコンテンツに対して実行されます。新しいテスト メソッドを追加しましょう。
@Test
public void testSummOfOddNumbers() {
	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
	Integer result = data.stream().filter(number -> number % 2 == 0).reduce((n1, n2) -> n1 + n2).get();
	assertThat(result, is(12));
}
そして 2 つのインポート:
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
ご覧のとおり、Stream に対する操作は 1 行に配置されています。しかし、呼び出しが連鎖しているメソッドが常にある時点で新しい行に分割されるようにしたい場合はどうすればよいでしょうか? 一方で、これを手動で行うこともできます。しかし、私たちはすべてがうまく機能することを望んでいることを忘れないでください。結局のところ、時々忘れてしまい、コードの形式がどこでも異なってしまいますが、これは良くありません。Idea が書式設定を実行するルールを編集する必要があることがわかりました。メニューで [アイデア] 項目を選択しますFile -> Settings(または をクリックしますCtrl + Alt + S)。設定ウィンドウの検索フィールドに「コードスタイル」と入力します。コードスタイルセクションでは、Java だけでなく設定を指定することができます。しかし今、私たちは Java に興味を持っています。ご覧のとおり、設定はいくつかのタブに分かれています。最も便利なのは、変更の結果がウィンドウの右側に例として表示されることです。
IntelliJ IDEA: コードのスタイルと書式設定 - 2
スクリーンショットでわかるように、「連鎖メソッド呼び出し」の設定を「常にラップ」として指定できます。マージされたメソッド呼び出しの場合は常に分割されます。ここで、テストでもう一度書式設定をクリックして、実際に機能することを確認してみましょう。しかし、場合によっては、一般的な書式設定ルールを超えてコードを書式設定する必要がある場合があります。次のように書式設定を設定しましょう。
IntelliJ IDEA: コードのスタイルと書式設定 - 3
書式設定を無効にするには、「コード スタイル」セクションで書式設定マーカーの無効化のサポートを有効にする必要があります。
IntelliJ IDEA: コードのスタイルと書式設定 - 4
ここで、テストのコードを変更して、書式設定がテストを作成した形式のままになるようにします。
@Test
public void testSummOfOddNumbers() {
	List<Integer> data = Arrays.asList(1, 4, 2, 3, 6, 7, 9);
	// @formatter:off
	Integer result = data.stream().filter(number -> number % 2 == 0)
                             .reduce((n1, n2) -> n1 + n2)
                             .get();
	assertThat(result, is(12));
	// @formatter:on
}
はい、お気づきのとおり、Tab キーを押すと、Idea はそれをスペースとして解釈します (デフォルトの動作)。ただし、コード スタイルでこれを変更できます。
IntelliJ IDEA: コードのスタイルと書式設定 - 5
ご覧のとおり、非常に多様な設定があります。コード スタイル設定の詳細については、「アイデア ヘルプ: コード スタイル」を参照してください。もう 1 つの重要な書式設定機能、インポート書式設定があります。これは個別に実行され、呼び出され"Optimize Imports"、メニュー項目Code -> Optimize Imports(Ctrl + Alt + O) にあります。インポートの最適化では、不要なインポートが削除され、Java のコード スタイル設定の [インポート] タブの設定に従って正しい順序に配置されます。また、フォーマットを自動的に実行したい場合は、Save Actionsプラグインを使用してフォーマットを行うことができます。

設定をチームに配布する

なるほど、書式スタイルを自分に合ったものにカスタマイズできることが上でわかりました。しかし、このスタイルをチームでどのように活用できるのでしょうか? とてもシンプルです。いくつかのオプションがあります。最も簡単な方法は、図を保存することです。[ファイル] -> [設定] からアイデア設定を開きます (または Ctrl + Alt + S を押します)。「コードスタイル」セクションに「スキーム」という文字が表示されます。これが私たちの書式設定スキームです。デフォルトでは、スキームは Default という名前とその横に注釈 IDE で指定されます。これは、この設定が IDE のみに適用され、誰にも影響を与えないことを意味します。「カスタム」スキームを作成するには、右側のボタンをクリックして「複製」を作成し、名前を付けます。例: JavaRush
IntelliJ IDEA: コードのスタイルと書式設定 - 6
この後、設定をインポートまたはエクスポートできるようになります。
IntelliJ IDEA: コードのスタイルと書式設定 - 7
別のオプションは、インポート アイデア設定をインポートすることです。
IntelliJ IDEA: コードのスタイルと書式設定 - 8
3 番目のオプションは設定リポジトリです。設定リポジトリの使用方法の詳細については、ドキュメント「IntelliJ Idea ヘルプ:設定リポジトリ」を参照してください。チーム内で 1 つのスタイルを配布するという点に関しては、Eclipse IDE によるスタイルの優れたサポートにも注目せずにはいられません。これを行うには、別のプラグインをインストールする必要があります。[ファイル] -> [設定] (Ctrl + Alt + S) で [アイデア設定] を開き、[プラグイン] セクションに移動します。新しいプラグインを検索するには、 ボタンをクリックする"Browse Repositories"と、検索ウィンドウに Eclipse Code Formatter プラグインが表示されます。
IntelliJ IDEA: コードのスタイルと書式設定 - 9
インストール後、Idea を再起動する必要があります。これは標準的な手順です。その後、アイデア設定の同じ場所に、「Eclipse コード フォーマッタ」という新しいセクションが表示されます。Eclipse のフォーマット ファイルの例は、ここにあります。次のようになります。
IntelliJ IDEA: コード スタイルと書式設定 - 10

締め付け要件

Idea ツールに加えて、ビルド システム プラグインを使用して要件を強化することもできます。ユーザーがフォーマットを使用したかどうかを確認する方法はありません。チームに5人いればまだ可能です。従業員が 100 人の会社であれば、それは非現実的です。はい、5 つでも追跡するのは困難です。そして、なぜこれに時間を無駄にするのでしょうか?特定のルールに違反した場合、プロジェクトの収集を禁止する方がはるかに簡単です。実際、これは「コードの検査」と呼ばれるまったく別のトピックです。この記事では、それがどのように機能するかを示したいだけです。Gradle の最も一般的なプラグイン (覚えていると思いますが、プロジェクトを収集するため) の 1 つはpmdです。これを有効にするには、gradle プロジェクトのビルド スクリプト (プロジェクトのルートにある build.gradle ファイル) に移動し、残りのプラグインの隣に pmd を指定するだけです。

plugins {
    // Apply the java plugin to add support for Java
    id 'java'
    // Check source code
    id 'pmd'
    // Apply the application plugin to add support for building an application
    id 'application'
}
ここでさらに詳細な設定を行うことができます。

pmd {
    ignoreFailures = false
    pmdTest.enabled = true
    ruleSets = [
            'java-basic',
            'java-braces',
            'java-clone',
            'java-codesize',
            'java-comments',
            'java-controversial',
            'java-coupling',
            'java-design',
            'java-empty',
            'java-finalizers',
            'java-imports',
            'java-optimizations',
            'java-strictexception',
            'java-strings',
            'java-typeresolution',
            'java-unnecessary',
            'java-unusedcode'
    ]
}
私たちのプロジェクトでも、すべてがうまくいかなくなりました。gradle build を実行してエラーを取得してみましょう。素晴らしいのは、組み立て中にレポートが生成されることです。エラーがある場合は、次のようなメッセージが表示されます。

BUILD FAILED in 35s
6 actionable tasks: 6 executed
7 PMD rule violations were found. See the report at: file:///C:/_study/codestyle/build/reports/pmd/main.html
レポートにアクセスすると、次のような内容が表示されます。
IntelliJ IDEA: コードのスタイルと書式設定 - 11
さらに、「問題」列には、pmd プラグイン Web サイトの問題の説明へのリンクがあります。たとえば、エラー「headerCommentRequirement Required」の場合、リンクは次のようになります: pmd - CommentRequired。このエラーは、クラスに JavaDoc がないことを示しています。クラスに対する JavaDoc の存在は、テンプレートを使用して構成できます。
IntelliJ IDEA: コードのスタイルと書式設定 - 12
そして、ファイルヘッダーの内容を指定します。
IntelliJ IDEA: コードのスタイルと書式設定 - 13
この後、App クラスの上のコメントを JavaDoc に変換し、新しいビルドでエラーが消えたことを確認できます。

結論

コード スタイルは生産的なプロジェクトにとって重要です。一般的なルールに従って書かれた美しいコードは、同僚がそれをより簡単かつ迅速に理解することを保証し、あなたについていくつかの愛情表現を言わなくなるでしょう。最新の開発ツールを考慮すると、ルールに従うことはそれほど難しくありません。このレビューがこれが実際に当てはまることを示していることを願っています。さて、いつものように、このトピックに関するちょっとした資料です。 #ヴィアチェスラフ
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION