SonarQube の
多言語化対応が
各ルールに
一部日本語化された
メニュ-の
ルールに
日本語化したい 背景
- できない
人対策
Sonar を使って 英語の 警告が 出ていたと しても、 英語が 読めてしまったり、
あまり 得意でなくても Web 検索を 駆使し、 解決が できる 人が います。
その 人には 特に ルールの 日本語訳は あまり 必要ないし、 そうあるのが 理想に 思います。
しかしながら、職業プログラマの 中には 英語が 読めず、 Web 検索も 駆使できない 人が (たまに )存在し、
その 人は、 英語で 指摘事項述べられても、 どうしようもなかったりします。
いわゆるSI 的な 話だと、 商流を 下れば 下る ほど、 単金が 下がれば 下がるほど、
できない人の 割合が 高まる 傾向が ありますが、 (個人 調べ) 、 いろいろな 理由から、 事前に 排除して おくことが 難しかったりします。
そのため、 できない 人向けの 救済措置が 必要だと 考えます。 1
[1] 勿論、そうでないできる 技術者の 方も たくさんいます。
ルールが 日本語化されない 理由
Github を
SonarQube の
ソースをLocale
を@Deprecated
が
且つ、Locale
は
/** * @deprecated in 4.1. Rules are not localized anymore. See http://jira.sonarsource.com/browse/SONAR-4885 */ @Override @Deprecated public String getName(String repositoryKey, String ruleKey, Locale locale) { return getName(repositoryKey, ruleKey); }
コメントにSee http://jira.sonarsource.com/browse/SONAR-4885
のIssue
を
I18n of rule descriptions and titles is a costly feature that is barely used. Dropping this support will allow to simplify code and to prevent wasting time on nasty bugs.
ルールの説明とタイトルのほとんどは、あまり使われていないコストの高い機能です。 このサポートを中止することで、コードを単純化し、厄介なバグに時間を浪費するのを防ぐことができます。
というような
いやいや、
関連 Issue に、
Plugin が
ルールが
確かに
案
案1 ルール html、
ルール json の 日本語ファイルを 作り、 英語ファイルと 差し替えてみる。 ルールファイルを 翻訳し、 Sonar の jar 内に 含まれる 英語ルールから 差し替えて 動かしてみます。
起動時にルールを DB に 登録しているようなので、 この 段階で ダメな 可能性は あります。 案2 DB に
格納された ルール定義を 直接書き換えてみる。
案1で駄目なら、 案2で ルールファイルが 登録されている テーブルの 内容を 日本語に 書き換えます。
正直、内部構造変更の 影響を 案1より、 受けるので、 辛すぎるかもしれません。 案3 Rule の
画面表示前に 差し込む 隙を 作る。
Rule の内容が 表示される 直前に、 Rule ファイルを 参照する 口を 作る。
Eclipse Pleiades
のような仕組みの イメージです。 案4 http://jira.sonarsource.com/browse/SONAR-4885 で
なかった ことになった Rule ファイル国際化を 実装する
正攻法で頑張る イメージです。
案4 が
案1 が
案1 を 試す。
まず、
jar 内の
0. 前提
小生は
インストール後の、
/usr/local/Cellar/sonarqube/6.1
と
1. jar の ファイルから、 ルールファイルを 取得
jarファイルから、
- 作業ディレクトリ作成し、
ディレクトリ移動 mkdir WORK cd WORK
- sonar-java-plugin-4.0.jar を
作業ディレクトリに 持ってきて 解凍 cp /usr/local/Cellar/sonarqube/6.1/libexec/lib/bundled-plugins/sonar-java-plugin-4.0.jar . cp /usr/local/Cellar/sonarqube/6.1/libexec/extensions/plugins/sonar-java-plugin-4.3.0.7717.jar .
中身を
確認 2 [2] java-checks-4.3.0.7717.jarに、jar tf sonar-java-plugin-4.3.0.7717.jar | grep java-checks ------------------------------------------ META-INF/lib/java-checks-4.3.0.7717.jar -----------------------------------------
ルールファイルが 含まれています。 java-checks-4.3.0.7717.jar を
取り 出し、 オリジナルを バックアップ。 jar -xvf sonar-java-plugin-4.3.0.7717.jar META-INF/lib/java-checks-4.3.0.7717.jar cd META-INF/lib/ cp java-checks-4.3.0.7717.jar java-checks-4.3.0.7717.jar.org
中身の
確認 jar tf java-checks-4.3.0.7717.jar | grep org/sonar/l10n/java/rules/squid/S | head ----------------- org/sonar/l10n/java/rules/squid/S100_java.html org/sonar/l10n/java/rules/squid/S100_java.json org/sonar/l10n/java/rules/squid/S101_java.html org/sonar/l10n/java/rules/squid/S101_java.json org/sonar/l10n/java/rules/squid/S103_java.html org/sonar/l10n/java/rules/squid/S103_java.json org/sonar/l10n/java/rules/squid/S104_java.html org/sonar/l10n/java/rules/squid/S104_java.json org/sonar/l10n/java/rules/squid/S105_java.html org/sonar/l10n/java/rules/squid/S105_java.json -----------------
コンソールには
org/sonar/l10n/java/rules/squid/S2221_java.html org/sonar/l10n/java/rules/squid/S2221_java.json
- ファイル取り出し
jar -xvf java-checks-4.3.0.7717.jar org/sonar/l10n/java/rules/squid/S2221_java.html jar -xvf java-checks-4.3.0.7717.jar org/sonar/l10n/java/rules/squid/S2221_java.json
2. jar内の ファイルの 書き換え、 sonarqubeへ コピーする。
取り出した
ファイル書き換え
jar -uf java-checks-4.3.0.7717.jar org/sonar/l10n/java/rules/squid/S2221_java.html jar -uf java-checks-4.3.0.7717.jar org/sonar/l10n/java/rules/squid/S2221_java.json
jarバックアップと、
jarファイルの 書き換え、 sonarqube内に コピーする。
cd ../../ cp sonar-java-plugin-4.3.0.7717.jar sonar-java-plugin-4.3.0.7717.jar.org jar -uf sonar-java-plugin-4.3.0.7717.jar META-INF/lib/java-checks-4.3.0.7717.jar cp sonar-java-plugin-4.3.0.7717.jar /usr/local/Cellar/sonarqube/6.1/libexec/extensions/plugins/sonar-java-plugin-4.3.0.7717.jar
3. SonarQube起動して 画面表示を 確認する。
SonarQubeを
- SonarQubeを
起動して、 ルール説明ウィンドウを 開いてみる。 sonar console
あっさり
も
厳密には、
Ruleの、
[3] Catch a list of specific exception subtypes instead.
の
文言 Catch a list of specific exception subtypes instead.
が
Github を
対象箇所の
Iessue と
[4] propetiesファイルで
@Override public void visitNode(Tree tree) { TryStatementTree tryStatement = (TryStatementTree) tree; for (CatchTree catchTree : tryStatement.catches()) { TypeTree catchType = catchTree.parameter().type(); if (catchesException(catchType, tryStatement.block())) { reportIssue(catchType, "Catch a list of specific exception subtypes instead."); } } }
4. SonarQube の Database 上の 起動して 画面表示を 確認する。
SonarQube の
SQL ルール定義は、
rules
という テーブルに 設定されてます。 select plugin_name, name from rules where plugin_name = 'squid' and name = '"Exception" 呼び出されたメソッドで必要とされないときに捕まえるべきではない' order by name;
OUTPUT 日本語化した
ルールが 設定されているのが 確認できました。 plugin_name | name -------------+---------------------------------------------------------------------------- squid | "Exception" 呼び出されたメソッドで必要とされないときに捕まえるべきではない (1 row)
まとめ
案1 ルールファイルを
動作確認等厳密に
いけそうに
ある
別の
ちまちま
以上です。
コメント