importas

Table of Contents

  1. 解決する問題
  2. 設定
  3. オプション
  4. サンプル
    1. 検出例
    2. 修正例
    3. 正規表現による一括ルール
  5. 注意点
  6. 参考リンク

importas はインポートエイリアスの一貫性を強制するツールです。

解決する問題

バージョン付きパッケージ(Kubernetes API など)をインポートする際、開発者ごとにエイリアスの付け方がばらつくとコードの可読性が低下します。同じパッケージに対して v1apiv1servingv1 などが混在すると、コードレビューの効率も落ちます。

1
2
3
4
5
6
// Before: エイリアスがバラバラ
import (
v1 "k8s.io/api/core/v1" // 開発者 A
corev1 "k8s.io/api/core/v1" // 開発者 B
core "k8s.io/api/core/v1" // 開発者 C
)
1
2
3
4
5
6
// After: エイリアスを統一
import (
corev1 "k8s.io/api/core/v1"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

設定

公式ドキュメント

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# .golangci.yml 設定例
version: "2"

linters:
enable:
- importas
settings:
importas:
no-unaliased: true
no-extra-aliases: true
alias:
- pkg: k8s.io/api/core/v1
alias: corev1
- pkg: k8s.io/api/apps/v1
alias: appsv1
- pkg: k8s.io/apimachinery/pkg/apis/meta/v1
alias: metav1

オプション

オプション デフォルト 説明
alias []object [] パッケージパスとエイリアスの対応リスト
alias[].pkg string - パッケージのインポートパス(正規表現可)
alias[].alias string - 強制するエイリアス名(キャプチャグループで動的生成可)
no-unaliased bool false alias で指定したパッケージのエイリアスなしインポートを禁止する
no-extra-aliases bool false alias で指定していないエイリアスを禁止する

サンプル

検出例

1
2
3
4
5
6
7
8
9
10
11
// importas が警告するパターン

// 1. エイリアスが指定と異なる
import (
v1 "k8s.io/api/core/v1" // import "k8s.io/api/core/v1" imported as "v1" but must be "corev1"
)

// 2. no-unaliased: true の場合、エイリアスなしも検出
import (
"k8s.io/api/core/v1" // import "k8s.io/api/core/v1" must be imported with alias "corev1"
)

修正例

1
2
3
import (
corev1 "k8s.io/api/core/v1"
)

正規表現による一括ルール

1
2
3
4
5
6
7
8
9
10
11
12
# パターンマッチでエイリアスを動的生成
linters:
settings:
importas:
no-unaliased: true
alias:
# k8s.io/api/<group>/<version> → <group><version>
- pkg: k8s.io/api/(\w+)/(v[\w\d]+)
alias: $1$2
# k8s.io/apimachinery/pkg/apis/meta/<version> → meta<version>
- pkg: k8s.io/apimachinery/pkg/apis/meta/(v[\w\d]+)
alias: meta$1

この設定で以下のように解決されます:

1
2
3
4
5
import (
corev1 "k8s.io/api/core/v1" // core + v1
appsv1 "k8s.io/api/apps/v1" // apps + v1
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" // meta + v1
)

注意点

  • no-unaliased: truealias で指定したパッケージにのみ適用される。指定していないパッケージのエイリアスなしインポートには影響しない
  • no-extra-aliases: true にすると alias に定義されていないエイリアスが禁止される。段階的に導入する場合はまず false で始める
  • 正規表現の pkg パターンとキャプチャグループ($1$2)を活用すると、バージョン付きパッケージが多い場合でも設定を簡潔に保てる

参考リンク