Share
Embed
Enablement Bootcamp for Gopherizing 発表会資料
kashiwa
October 12, 2023
Transcript
9 slides
-
Bootcampに参加する前の状態 • Goでの開発経験は個人開発レベル ◦ 開発業務がメインではないため業務での開発経験は少し ◦ とりあえず動くコードは書けるが、 Goらしい可読性の高いコードは書く自信がない • 課題のsplitコマンドは夏季休暇の時間を使ってなんとか実装(Google先生や
ChatGPT先生の力を借りながら) ◦ https://github.com/takak2166/split ◦ (他の参加者の方の書いたコードを見てレベル高いなあと思いました 🙃) -
Bootcampに参加してから行ったsplitコマンドの改善 • 標準入力への対応 ◦ 同じグループの方に interfaceが一緒で実装が簡単と教えてもらえた • CLI用のstructを作成することでテスタブルなコードに変更 ◦ Goで書くテスタブルなCLIツールの作り方
を参考に実装 ◦ flagを使っていたのでCLIのテストは書けなかった ...(helpを表示するときにos.Exit(0)が直接呼び出 される) • リファクタリング ◦ 詳細は次ページ以降 -
リファクタリング • リファクタリングポイントを見つける ◦ 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 -
(おまけ)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` ./... -
Bootcampに参加してみて • 可読性の高いコードを書くための知識やリファクタリングポイントを見つけるための 静的解析ツールの知識を身に付けることができた ◦ 実際に自分の実装した splitコマンドを改善することで Goらしいコードの書き方を学ぶことができた • グループワークを通じて、一人でコードを書いていたときには気付けなかったような
ことに気付くことができた • Goで開発するモチベーションが上がった💪 ◦ これからもBootcampの資料を読み返しながら継続的に学習していきたい