Slide 1

Slide 1 text

インフラエンジニアだけどGoでコードが 書けるようになりたいので Enablement Bootcamp for Gopherizing に参加してみた Takayuki Kashiwa

Slide 2

Slide 2 text

Bootcampに参加する前の状態 ● Goでの開発経験は個人開発レベル ○ 開発業務がメインではないため業務での開発経験は少し ○ とりあえず動くコードは書けるが、 Goらしい可読性の高いコードは書く自信がない ● 課題のsplitコマンドは夏季休暇の時間を使ってなんとか実装(Google先生や ChatGPT先生の力を借りながら) ○ https://github.com/takak2166/split ○ (他の参加者の方の書いたコードを見てレベル高いなあと思いました 🙃)

Slide 3

Slide 3 text

Bootcampに参加してから行ったsplitコマンドの改善 ● 標準入力への対応 ○ 同じグループの方に interfaceが一緒で実装が簡単と教えてもらえた ● CLI用のstructを作成することでテスタブルなコードに変更 ○ Goで書くテスタブルなCLIツールの作り方 を参考に実装 ○ flagを使っていたのでCLIのテストは書けなかった ...(helpを表示するときにos.Exit(0)が直接呼び出 される) ● リファクタリング ○ 詳細は次ページ以降

Slide 4

Slide 4 text

リファクタリング ● リファクタリングポイントを見つける ○ tenntenn/tennvetを使用 ○ 実行例: $ go vet -vettool=`which tennvet` ./... # split ./main.go:121:11: unnecessary else ./main.go:155:11: unnecessary else ./main.go:194:11: unnecessary else ./main.go:293:9: unnecessary else ./main.go:130:3: defer should not use in a loop ./main.go:203:3: defer should not use in a loop ./main_test.go:159:5: defer should not use in a loop

Slide 5

Slide 5 text

不要なelse ● elseがなくてもよい箇所にelseが入っていることでネストが深くなってしまっている例

Slide 6

Slide 6 text

loop内のdefer

Slide 7

Slide 7 text

(おまけ)GitHub Actionsでリファクタリング漏れを防ぐ name: Static Analysis
 on:
 push:
 branches:
 - "feature/**"
 jobs:
 static-analysis:
 runs-on: ubuntu-latest
 steps:
 - name: Checkout code
 uses: actions/checkout@v3
 - name: Set up Go 1.21
 uses: actions/setup-go@v3
 with:
 go-version: 1.21
 - name: Install Funcstat
 run: go install github.com/gostaticanalysis/funcstat/cmd/funcstat@latest
 - name: Run Funcstat
 run: funcstat ./...
 - name: Install tennvet
 run: go install github.com/tenntenn/tennvet@latest
 - name: Run tennvet by go vet
 run: go vet -vettool=`which tennvet` ./...
 
 
 


Slide 8

Slide 8 text

Bootcampに参加してみて ● 可読性の高いコードを書くための知識やリファクタリングポイントを見つけるための 静的解析ツールの知識を身に付けることができた ○ 実際に自分の実装した splitコマンドを改善することで Goらしいコードの書き方を学ぶことができた ● グループワークを通じて、一人でコードを書いていたときには気付けなかったような ことに気付くことができた ● Goで開発するモチベーションが上がった💪 ○ これからもBootcampの資料を読み返しながら継続的に学習していきたい

Slide 9

Slide 9 text

今回Bootcampに参加してたくさん学ぶことができました! tenntennさん、mayahさん、チーム1の皆さん、 ありがとうございました󰢛