【IntelliJ IDEA】インポート文がワイルドカードでまとまってしまう問題の解決法

# 目次
[はじめに](#はじめに)
[前提](#前提)
[概要](#概要)
[実行したこと](#実行したこと)
[おわりに](#おわりに)
[参考](#参考)


# はじめに
:::note warn
こちらは、個人の学習記事になります。以下の点をご承知おき下さい。
- 学習中の内容になります。必要に応じて都度加筆・修正致します。
- 出来る限り正しく記載するよう努力致しますが、間違い、ミスも御座います。コメントにてご指摘、アドバイス頂けたら幸いです。
- <b>二次情報としての使用は推奨致しません。</b>ご了承ください。
:::
# 前提
- Macbook Pro
- Java(17.0.5)
- IntelliJ IDEA 2022.3.3 (Community Edition)

# 概要
　コードを書く際に、checkstyleというコード解析ツールを使っています。これにかけると「綺麗にコード書けてるかな〜？？」ってプログラムの書き方を文字通りチェックしてくれる便利ツールです。こうすると、レビュアーの方々に見てもらう時しょーもないミスとかに時間を割いてしまう…みたいな事を減らすことが出来るメリットもあります。（その内記事にしようかな）
　本題です。私はIntelliJ上でそれを行なっているわけですが、今回お叱りを受けたのですがこんな内容でした。
![スクリーンショット 2023-05-31 12.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3339485/3ef504a8-75a0-a2af-8273-3812f7013f32.png)
<b>`'.*' 形式のインポートの使用は避けるべきです - org.springframework.web.bind.annotation.*。`</b>
これは要するに「インポート文まとめるのはダメですよ」って言ってます。この「*」を<b>ワイルドカード</b>と言います。何故まとめるのがダメなのか理由は後述しますが、こんなお叱りを受けたままだと嫌なので、こいつを解決していきます。(2行目の「行が 100 文字を超えています （118 個見つかりました）。」はまた別で纏めます。)

# 実行したこと

　早速直そうと思って、消してインポートし直しました。
![ano.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3339485/1e972b71-0b9d-94bc-2f0b-7b8886e7f43a.gif)
勝手にまとまりやがる…。なんでやねん。
これはIntelliJが自動で纏めてくれるという機能があるので、それのせいなのです。とても親切なのですが、今回はこれがcheckstyleと相反する状態となっています。


### 質問
　どっちが正しいのか判断出来なかったので、スクールの講師の方に質問しました。
>Q：org.springframework.web.bind.annotation.*について
個別に記述したが、保存と同時に結合されてしまうのですが、アノテーションのインポートは結合したままでよいのでしょうか？cehckstyleに沿うべきでしょうか？
>A:ワイルドカードインポートは避けるようなIntelliJの設定を見直すべきだと思います。　　

とのことでした。気になったので理由を調べたのですが、このワイルドカードでインポートしてしまうと、使う必要のないクラスまで引っ張ってきてしまっているので、他のパッケージクラスで別なインポート文を使用する時に競合してしまうという面倒くさい事態が起きかね無いので、推奨されていないらしいです。

### IntelliJの設定を直してみた
ということで、ワイルドカードにならない設定をしてみます。


![annotation-Automation](https://github.com/gotokaka/RaiseTechTask7/assets/120085564/622b2fce-297a-4fc5-a7f2-f5f664e6f16f)
同じimportクラスがある程度並ぶと結合されてしまう。「(” * ”)ワイルドカード」で纏められてしまう。

JetBrainsの公式docsで確認出来たので実行してみた。
日本語での解説が少ないので敢えてプラグインは日本語にしてます。

<b>1.「settings」を選択</b>
<img width="250" alt="スクリーンショット 2023-05-31 15 10 17" src="https://github.com/gotokaka/RaiseTechTask7/assets/120085564/4f0d1482-3e0f-40d4-a2ed-537762cd7156">


<b>2.「エディター」→「一般(General)」→「コードスタイル」→「Java」</b>
　「シングルクラスインポートを使用する」にチェック。さっきまとめられたのは同じインポート文が5行揃った時だったので、「'\*'でインポートするクラス数」の設定が５となっているので納得しました。
<img width="974" alt="スクリーンショット 2023-05-31 14 32 13" src="https://github.com/gotokaka/RaiseTechTask7/assets/120085564/250a152c-1d36-405e-9b37-519684c543ec">


<b>3.「'\*'でインポートするクラス数」と「'\*'でstaticインポートする名前数」を変更する。</b>
完全に無効化するという項目はないので、「999(最大値)」を入れておく。
<img width="979" alt="スクリーンショット 2023-05-31 14 35 28" src="https://github.com/gotokaka/RaiseTechTask7/assets/120085564/8b2adcf1-05b4-4a58-8766-55f2250dedee">


##### 結果
![aon2](https://github.com/gotokaka/RaiseTechTask7/assets/120085564/3705e940-ab2a-4175-89e1-b3a54788f2a7)
無事、全部表示されました。





# おわりに

　IntelliJもcheckstyleもそれぞれコードを良くしてくれる便利ツールですが、こうやって競合して「どっちなんだい？？？」ってなる事もあるんだなと思いました。こういう状況は、企業の開発環境やチームなんかでもどこをどう使うのかは変わってくると思うので、<b>調べるよりまず聞くが大事なパターン</b>なのかも知れません。



# 参考
JetBrainsの公式docs
- https://pleiades.io/help/idea/creating-and-optimizing-imports.html#disable-wildcard-imports
インポート文のワイルドカードが推奨されない理由
- http://www.limy.org/program/java/checkstyle/imports.html
本記事の内容を記載したissueです
- https://github.com/gotokaka/RaiseTechTask7/issues/5