Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

SpotBugsの使い方とレポート化の手順

Javaで静的解析がお手軽にできるツールということでレポート化できんだっけ?というので調べたときのメモ

前提条件

Java 17環境(Java 8でも同じだと思うが)
Maven使用(Gradleの場合は末尾の参考サイトを)
Eclipse(英語版)のPleadesじゃないのを使ってる想定
自PCにMavenをインストールしてなくてmvnwを使っていて、
基本的にEclipseのGUIでbuild/installする前提
SpotBugsは4.8.3を使います

インストール

Help > Install new software
Work with:
https://spotbugs.github.io/eclipse/
Addを押しとく Name: SpotBugs
あとは選択してNext、agreeしてFinish

その後しばらくして経つと、trust selectedを選ぶ

そのあとEclipse再起動により
プロジェクト右クリックでSpotBugsが出てくるようになる
4.8.3が選ばれた。

設定

プロジェクト右クリック
プロパティでSpotBugsを選ぶ

Configure Workspace Settingsを押す
お好みですが、かなり緩い設定にしてます。
後述のプラグインで簡単に制御できるのは analysis effortMinimum confidence to reportです。

analysis effort: Default  
Reporter Configurationタブ  
Reported (visible) bug categories  
の欄のBad pricticeなどのチェックを全部入れる  
右側のMinimum confidence to report: Highにする  
あとはそのまま  

実行方法

右クリックによりFind Bugsで出せる
そうすると下部の(Problems(マーカー))に出てくる。どれが出したかは
TypeにSpotBugsと書いてあるのでそれで判別できる
Excelに貼り付けたい場合はこれをCtrl+Aでコピーしてコピペすればよい

HTMLレポート化

spot-bugs-maven-pluginの最新版は4.8.3であるようだ
1)pom.xmlのdependencyに以下を追加

    <dependencies>
            ...
        <dependency>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-maven-plugin</artifactId>
            <version>4.8.3</version>
        </dependency>
    </dependencies>

注:環境によっては次の依存も追加しないといけないかもしれない

    <dependencies>
            ...
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.12.1</version>
        </dependency>
    </dependencies>

あと場合によってはmaven-site-pluginの依存するhttpcoreあたりも追加する必要があるかも。

2)pom.xmlのbuild.pluginsの中に下記を追加

    <build>
        <plugins>
            ...
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <version>4.3.0</version>
            </plugin>
        </plugins>
    </build>

3)pom.xmlのreporting.pluginsに下記の記載を追加

 <reporting>
        <plugins>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <configuration>
                    <effort>Default</effort>
                    <threshold>High</threshold>
                    <xmlOutput>true</xmlOutput>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

※かなり緩い設定にしています。これはEclipseのプラグインの設定画面の次にあたるっぽいです。   effort -> analysis effort threshold -> Minimum confidence to Report 設定を書かないとあらゆるものが出力されます(本来はそれで良いが)。 ちなみにカテゴリー(Bad Practice)の単位でしぼりたかったものの何故かできませんでした。 SpotBugs Mavenプラグインの使い方 — spotbugs 4.8.3 ドキュメント
ここにはその記載があるにもかかわらず。
あと公式サイトがeffortとthresholdに何がかけるのか書いてない気がしますのでそこがつらい。

EclipseでMaven Buildの実行を追加する

あとは
mvn compile site

mvnw compile site
でいいのだが、大人の事情でSSL関連のエラー出るよーとかで、
いろいろ解決がめんどくさいのでEclipseからやる方法
(※制限された環境かだと素直にMavenをインストールしてコマンドラインからやったほうが楽ですが)

プロジェクト右クリック > Run As > Run Configuration
Maven buildの欄に新規追加
Name SpotBugs
Base directory: ${project_loc:[プロジェクト名]}
Goals: compile site
Profiles: pom.xml
プロジェクト名は置き換えてください。

あとはRun
だいぶかかるのでしばらく待つ
Spring Bootのプロジェクトなんだけどごっそり全部落とされてダウンロード地獄
しばらくたつと
target/site配下にspotbugs.htmlが出力される
※要リフレッシュ

警告された例

Primitive boxed just to call toString in ... [Of Concern(16), High confidence]

Integer.valueOf(1).toString() → String.valueOf(1)かInteger.toString(1)
今回の場合は後者でいい...的な警告だった。 Bug descriptions — spotbugs 4.8.3 documentation

参考サイト

いまだにJava 8 備忘録 - SpotBugsの使い方 - ふるてつのぶろぐ

ブラウザで日本語入力がおかしくなる、うまく入力できなくなることがある

起こっていた問題

特にブラウザのアドレスバー上でGoogle検索をしようと日本語入力をしようとしたときに
まともに日本語が打てなくなる事象がたまに発生します。
ブラウザ以外のテキストエディタ上では特に問題になりません。

環境情報

ちなみに私の環境は以下です。※Mac macOS Ventura13.0のほうでもESETを使っていますがそちらはこの問題が起きてないです。

種別 ソフト バージョン
OS Windows 11 Pro 22H2
ブラウザ Google Chrome 119.0.6045.125
ウィルス対策ソフト ESET Internet Security 16.2.15.0

原因と思われるもの

何だろうと思い探るとESETで問題があると報告がありました。

文字の入力がおかしいです - Google Chrome コミュニティ

ただここで指摘されているバージョンと少し違います。
「キーボード保護」というのをONにすると(デフォルトではオン)
特にパスワードなどの入力で悪意のあるソフトウェアのキーロガーなどからキー入力を盗まれないように保護する機能があり、
ESET側で多分何らかのフックを妨害しているのかな?と推測します。
Windowsにはグローバルフックという何かの処理に割り込んで横取り処理をすることができます。

それであまり欧米人(というかほぼ日本人以外)にはなじみの薄いIMEの漢字変換を伴う
(日本人から見ても非常に複雑な)入力での(おそらくESET側での)不具合により妨害され
まともに入力できなくなるということなのでしょう。
※英語入力では問題になりせんでした。また、この不具合はESET側が悪いのかブラウザ側が悪いのかは外部の人間には判断がつきません。ESETは数あるウィルス対策ソフトの中でもいいものだと思っています(Windows Defenderでよくない?というのはありますが)。

対処方法

対処としては別途テキストエディタで入力したものをコピペする
もしくはあまり気が進みませんが、一時的にESETの「キーボード保護」を無効にすると発生しなくなると思います。
怪しいマルウェアが絶対に入ってないと言い切れるならOFFにしてもよいでしょう(ここにたどり着く人はある程度のリテラシーがあるはずなのでまず大丈夫だとは思いますが)。

ESETのメニューから
設定 > 詳細設定 > 保護 > ブラウザー保護
下部のセキュアブラウザーから「キーボード保護」があるのでOFFにします
検索窓が詳細設定にあるのでそこで検索してもよいです。

CPUクーラーを交換した

注記

主にCPUクーラー交換の記事ですが音がうるさい主因はケースファンのほうだったかもしれないです。
どっちもダメだった可能性は否めませんが、厳密に切り分けるのが面倒というのもあったりします。
電源から抜いて止めた状態でしばらく動かせば特定できそうなもんですが、
ずっとうるさいわけでないのでなかなか難しかったです。

起きていた現象

マウスコンピューターのG-Tune NEXTGEAR-MICRO im620GA4を使用していましたが、
3年経過して、ファンからカラカラと騒音がするようになりました。
たまにジジジジジとも聞こえるような音がしていました。

交換の記録

CPUクーラーを交換したスペックのマシンはこんな感じ。

チップセット: インテル® Z390 (Micro ATX)
CPU: インテル® Core™ i7-9700K プロセッサー
GPU: GeForce® RTX 2070 SUPER™
電源: 700W 80+ BRONZE
筐体: ミドルタワー型 幅×奥行き×高さ(mm) 188.8×410.5×400

購入してから3年くらいなので買い替えタイミングとしてはそこまで悪くないですが、
まだまだ使えるスペックなので延命をしたいと思いました。
最近M1 iMac買ったばっかりだし、立て続けにデスクトップPC買うのもなぁと。
原因がしばらくわからず、ファンがケーブルを巻き込んでいるのを疑い筐体を開けてみましたが、
ケーブルを巻き込んでいる様子がなく、次にホコリを疑いエアダスターで吹き飛ばすも効果なし。
濃厚な線がファンのグリス切れ、軸ズレあたりですがそもそもどこのファンなのか判断がつかず。

電源はおそらく違う、背面のケースファンも全然うるさい感じがない。となるとCPUについてるファン?
PCケースをあけたまま電源ONして少し動画再生とかするとCPU負荷が上がったときにうるさくなるので
おそらくCPUクーラーのファンだろうとあたりをつけてダメもとで交換することにしました。
このPCはミドルタワー型であまり大きくないのでサイズが気になるところでしたが、
これも多分大丈夫だろうというサイズのやつから探しサイドフロー型のこれがよさそうと購入しました。

購入したもの

AK400 R-AK400-BKNNMN-G-1 Deepcool
kakaku.com
結果うまくつけることができました。
レビューによるとコスパがいいそうです。
あとコンパクトそうなのも決め手でした。

取り付け作業

自分でCPUクーラー自分で取り付けたことがないので、ブログ・YouTube等で予習して無事取り付け。 ここを参考にさせていただきました。 CPUクーラーの交換 | 初心者のための入門講座
最初からついてたファンはこんなのでした。ネジでバックプレートに固定するタイプでした。

ただ、なかなかバックプレートが取れない。なぜ…と思ったら、
もともとついてたこのファンのバックプレートがそこそこ強力な粘着テープでくっついてたので、
ねじを外したあと慎重に力を入れてマイナスドライバーを併用して粘着テープからはがしました。
外した後はCPUにグリスがついてたので拭き取り

そのあとバックプレートを交換し、マウンタみたいなものを取り付けますが、苦戦。 ガムテープで一時的にバックプレートを固定することで取り付けできました。
ヒートシンクをつける段になって、CPUグリスってついてるんだっけ?
と思ったら最初からクーラーに塗ってありました。
換装後、このようになりました。ほぼぴったりサイズ。 ちゃんと背面に風が向いてる…よな…というのはちゃんと確認しました。あれ?逆か?
マウスで文字を書いたら字が乱れました…。逆でしたので気を取り直して正しい方向にしました。 Deepcoolのロゴも逆になってますもんね。
これが正しい設置向きです。
その後電源投入し、温度確認して30度くらいだったのでだいたい問題ないというところで、
Cinebenchで負荷テストしつつCore Tempで温度計測。
CPUが冷えるのとファンが騒音を出さないのを確認して換装がうまくいきました。

負荷テスト直後なので若干温度が高めですが、その後通常の用途では30度程度で安定しています。
静かなファン音になって良かったですが、CPUクーラーのファン音が静かになりすぎて、
今度はほかのファンがうるさいなと感じるようになってしまいました。
(あとで気づいたけどケースファンももっとうるさかった)

追記

その後、背面のケースファンもうるさかったことが判明しました。
1000円くらいで買えるのでこっちも交換することにしました。
kakaku.com
ケースファン、このPC固有の事情ですが他のパーツが取り付けられている状態だと指が入れにくい位置に
ケーブルを挿すところがあるので抜き差しがなかなか時間がかかってしまいました。
変えるとだいぶ静かになりました。完全なる無音とはなりませんでしたが。
結局ケースファンが主因だったような気もします。
ケースファンは安いので調子悪かったらこっちから変えたほうがいいかもしれません。
Macがかなり静かなので音がすると気になる病にかかってしまいました。

さらに追記

そのあともごくまれにジー・ギギギ・ジリジリジリと気になるレベルの音がすることがありました。
これはなにか?とYoutubeでPCの異音とかを探しているとどうも「コイル鳴き」という現象に近いことがわかりました。

電磁石コイルから電流が流れるときに、ジー・ギギギ・ジリジリジリといったノイズ音が発生するのですが、この音がコイル鳴きと呼ばれているものです。

引用元: コイル鳴きとは?対策方法をご紹介! | Aprico

高性能のグラフィックボードを付けているPCに発生しやすい問題とのことです。
電気代が気になる今日この頃ですので電源も変えることにしました。
これは機会があればブログに別に書きます。と思ったのですが、断念しました。

交換してプラチナの電源買ったものの、もともとついてた光学ドライブのコネクタがなんか特殊で断念しました。
そしてフロントに電源がつながっていたのだけれどもフロントパネルの開け方がわからな過ぎて断念しました(3回言いました)。
マウスコンピュータのケースむずすぎ、そして配線が職人芸すぎる。交換するとなると鬼門すぎる。
その後、なぜか音がしなくなった気がする。。。謎
そして、なぜかネジが1本余りました(あるある)

WSL2を有効化した


WSL2を使いたくて有効化した時のメモ

前提条件

・Hyper-Vは使用済み
・WSL1も有効化済み

やること

2023年3月現時点ではWSL1からWSL2にするには
コマンドプロンプトから管理者権限で

> wsl --set-default-version 2

を打つだけ。あとは新規にディストリビューションを入れるだけ。
コマンドラインからでもWindows Storeからでもどっちでもよいです。

補足

WSL1からディストリビューションをいれてて
移行が必要な場合はもうちょい手順が必要だけどここでは書いてません。

使ってみた感想

WSL2あれば開発でdockerいらないかも。
いや、微妙に用と違うけどさ。開発環境構築だけならこれだけで良い。
現実的にはDocker on WSL2とかになるんだろうけどさ。
ちゃんとしたLinuxでCygwinできる感があって嬉しい。
Windows内のファイルをGrepするのに活用してたGit Bashとかももはや不要。
Macを使う理由が1つ減った感じがある。
しかし、会社の政治的な事情により業務用PCはそもそもVT-x有効化が封じられてるケースが多い。

長い説明

WSL1は有効化しているが別段何もインストールしてなかったという状態
Hyper-Vのおまけで有効化していた状態でした。

ちょっと前からHyper-VとWSL2が共存できるぞという情報は知っていたので、
いつかWSL2ためしたいなーと思うこの頃でした。

Hyper-Vはインストールして有効化しているはずだが、念のため以下を確認
管理者のコマンドプロンプトで実行

> dism.exe /online /get-featureinfo /featurename:VirtualMachinePlatform  

Deployment Image Servicing and Management tool
Version: 10.0.22621.1

Image Version: 10.0.22621.1265

Feature Information:

Feature Name : VirtualMachinePlatform
Display Name : Virtual Machine Platform
Description : Enables platform support for virtual machines
Restart Required : Possible
State : Enabled

Custom Properties:

(No custom properties found)

The operation completed successfully.

これが有効化されてないと何も始まりません。

> wsl -l -v
Windows Subsystem for Linux has no installed distributions.
Distributions can be installed by visiting the Microsoft Store:
https://aka.ms/wslstore

2って文字がなければWSL1です。たぶん。

デフォルトをWSL2にする

> wsl --set-default-version 2 
For information on key differences with WSL 2 please visit https://aka.ms/wsl2
The operation completed successfully.

「WSL2の重要な違いは https://aka.ms/wsl2 見て」 と書いてるが知ってる話なので無視。


--- 以下必要なかったところの記録 ---

> wsl -l -v
Windows Subsystem for Linux has no installed distributions.
Distributions can be installed by visiting the Microsoft Store:
https://aka.ms/wslstore

としかでない。最初と同じ。あれ? 2になってる気配なし…

ドキュメントを漁るも公式にアップグレード手順が書いてない。
WSL のインストール | Microsoft Learn
これはまっさらな状態からの手順で、関係がない。
ググる。
以前のバージョンの WSL の手動インストール手順 | Microsoft Learn
これかなと思ったら違う。
ここからダウンロードしたものをインストールしようと思ったが、
これもすでにインストールされているになってた。

--- 以上必要なかったところの記録 ---

コマンドラインから

> wsl --install -d Ubuntu-22.04

インストールが終わったら
Terminalが立ち上がってユーザー設定を聞いてきた。あれこれもうWSL2じゃん。   再びコマンドプロンプトで見てみる。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

普段起動するときはアプリからUbuntu 22.04とかを選ぶとよい

無事、WSL2を有効化できた。

その他

rootユーザーになるときなど、あとWindowsの環境変数を引き継ぐ、引き継がないあたりはこの辺りを参考に。
WSL2の初歩メモ - Qiita