Go でスネークケースやっちまった人のための識別子変換ツール

Go でスネークケースやっちまった人のための識別子変換ツール

何を作った?

Go ソース内のスネークケースの識別子をキャメルケースに変換するツールを作りました.

GitHub : https://github.com/kita127/goconvcase

なぜ作った?

Go ではキャメルケースが推奨です.(http://go.shibu.jp/effective_go.html) しかし、定数などはさすがにいいだろうと思い以下のようなソースを書くと...

package sample

// SNAKE_CASE identifires
const (
    HOGE_CONST = iota
    FUGA_CONST
    PIYO_CONST
)

lint が許しません(^^)

$golint .\sample.go
sample.go:5:2: don't use ALL_CAPS in Go names; use CamelCase
sample.go:6:2: don't use ALL_CAPS in Go names; use CamelCase
sample.go:7:2: don't use ALL_CAPS in Go names; use CamelCase

なんとなく Go ではキャメルだと知っていても定数までダメとは思わずついつい書いてしまう人もいるのではないでしょうか.

私は書きました.

こまめに lint をかければ気づくのでしょうがズボラなのでコーディングも後半になってから lint をかけて, そのころには大量のスネークで作られた定数が...という人もいるのではないでしょうか.

私はそうでした.

もしかすると正規表現力が高ければ一括で置換できるかもしれませんが, 正規表現に精通していない人もいるでしょう.

私にはできませんでした.

そんな人のために goconvcase を作りました.

インストール方法

利用対象の方は基本的に Go をお使いと思いますので go get でインストールお願いします.

go get github.com/kita127/goconvcase/cmd/goconvcase

使用方法

先ほどの例に出てきた以下のファイル(sample.go)に対して,

package sample

// SNAKE_CASE identifires
const (
        HOGE_CONST = iota
        FUGA_CONST
        PIYO_CONST
)

以下のコマンド実行でスネークケースの識別子がキャメルケースに変換されたソースが標準出力されます.

$goconvcase --from us --to uc .\sample.go
package sample

// SNAKE_CASE identifires
const (
        HogeConst = iota
        FugaConst
        PiyoConst
)

解説すると --from で変換対象となる識別子のケースを指定します. us は Upper Snake Case の略で大文字のスネークケースです. そして --to で変換後のケースを指定します. uc は Upper Camel Case の略で大文字のキャメルケースです. 最後に変換対象のファイルを指定します.

変換対象は識別子だけです. コメントの // SNAKE_CASE identifires はスネークケースのままです.

ファイルを上書きする場合は, gofmtgoimports と同じように -w を指定します.

$goconvcase -w --from us --to uc .\sample.go

指定可能な全てのケースを知りたい場合は --list を指定してください.

$goconvcase --list
us : UPPER_SNAKE_CASE like this.
uc : UpperCamelCase like this.
ls : lower_snake_case like this.
lc : lowerCamelCase like this.

現在以上の4種類のケースが相互に変換可能です. (キャメルからスネークに変換する必要性はないと思いますが...)

終わり

基本的には「命名ルールをしっかり把握する」「lint をこまめにかける」が大事かと思いますが, もし私と同じようにやらかしてしまった方いればよければ使ってみてください.