Upgrade to Pro — share decks privately, control downloads, hide ads and more …

他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / H...

Avatar for uMa uMa
October 13, 2025

他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer

JavaScript/TypeScript や Perl によるバックエンドアプリケーション開発などの経験を持つ Go 言語初学者が、Golangci-lint の全ルール有効化オプションを活用し、効率的にキャッチアップを進めようとした体験談について、手法の概要や得られた学びなどを交えて紹介します。

※ 発表時間の関係上、かなり圧縮された内容になっております

Avatar for uMa

uMa

October 13, 2025
Tweet

Other Decks in Programming

Transcript

  1. SPEAKER 開発統括本部 開発 2 部 サーバーサイドエンジニア 原 佑⾺(uMa) • 2022

    年 4 ⽉〜 前職 ◦ バックエンド開発(JavaScript/TypeScript, Perl など) ◦ その他、フロントエンドやインフラ領域なども担当 • 2025 年 4 ⽉〜 株式会社ヤプリ ◦ 主に Go 製のバックエンドアプリケーションを担当
  2. きっかけ ヤプリ⼊社前のこと、とあるチームでバックエンド開発⾔語を選定することに。 → 以下の理由から Go が第⼀候補に決定! • 学習コストの低さ • ⾼いパフォーマンス

    • 充実したエコシステム ※ このような Go の魅⼒についても語りたいのですが、今回は割愛させていただきます... 1. Go との出会い
  3. キャッチアップにおける課題点 早速 PoC 実装を開始することになったが... • チーム内や周囲に Go の実務経験者はゼロ • ⾃⾝も

    Go を使うのは初めて • PoC 実装の期限はかなりタイト(半年未満) ◦ 但し、今後の開発運⽤に耐えうることを⽰すために、⾼い品質のアウトプットが 求められる → 爆速でキャッチアップをしなければ...! 1. Go との出会い
  4. どのようにキャッチアップしたか? 公式のチュートリアルやドキュメントが充実しているので、まずはそこから • A Tour of Go(https://go.dev/tour/) ◦ Play Ground

    付きで Go の基礎が学べる(嬉しい) • Effective Go(https://go.dev/doc/effective_go) ◦ Go の特性を踏まえて効果的なコードを書くための⽅法が紹介されている(嬉しい) + 個⼈開発でも Go を使ってみることに! 2. Go について学ぶ with Golangci-lint
  5. Golangci-lint について "Golangci-lint is a fast linters runner for Go"

    • 100 種類以上の Linter をインストール無しで利⽤可能 • コードフォーマットやパフォーマンス、セキュリティなど Linter の⽬的は様々 • Issue 経由の Linter 追加依頼受付 / 古いルールの Deprecated 管理 → 需要や品質が担保された信頼できる Linter が豊富 2. Go について学ぶ with Golangci-lint
  6. 初学者にとっては初期設定が⼤変 • 膨⼤な数の Linter からどれを有効化するべきなのか? ◦ まだ Linter の概要⽂を読んでもピンとこないことも •

    有効化したとしてその設定はどのようにするべきか? ◦ 各 Linter で設定できる内容もまちまちなので、すべて把握してから始めるのは⾮現実的 • 巨⼤なプロジェクトの設定ファイルを参考にする? ◦ アーキテクチャや思想はプロジェクトごとに異なるので、良く理解せずにそのまま流⽤する のは不適切に思える 2. Go について学ぶ with Golangci-lint
  7. Golangci-lint をメンターとして活⽤する エラーが出るたびに以下を繰り返す: 1. Linter のドキュメントを確認 2. ルールの意図を理解 3. ⾃分のプロダクトに適⽤するか判断

    4. 必要に応じて設定を調整 → 成熟した Go エンジニアがアドバイスをくれているようなもの = 助⾔者(メンター) 2. Go について学ぶ with Golangci-lint
  8. 学びの例 2 依存性逆転のためにインターフェースを返す関数を書いていたところ、 Accept Interface, Return Concrete Types という考え⽅を教えてくれた: →

    ハードルールでもなく、今回のケースでは返り値の拡張性を必要としていな かったので無効化 ※ ついでに Go Wiki: Go Code Review Comments というページの存在も知った 3. Golangci-lint と学んでみて
  9. 他にも多くの気づきや学びがあった • Staticcheck(SA4023) ◦ インターフェース型を返す関数で、具象型の nil ポインタを返すと == nil は

    false になる • Staticcheck(SA9004) ◦ const 宣⾔で最初だけ型を指定しても、iota 使⽤時を除き、それ以降には型が引き継がれな い • revive(string-of-int) ◦ 整数を string(i) で変換すると、⽂字コード(rune)として解釈される などなど 3. Golangci-lint と学んでみて
  10. 感想 • 実装するものによって学べるものとそうでないものがある ◦ ある程度慣れてきたらコードリーディングをしたり、しっかりとルール選定していくのが良さ そう ◦ ただ、⾛り出しとしては有効な⼿段だったようにも思う • 個⼈開発レベルであれば全ルール有効化は選択肢として有りなのでは

    ◦ 多様な⽬的の Linter を第三者が選定して導⼊してくれるようなもの ◦ 更新して落ちるようになったらそれは学びのチャンス • 今だと AI を活⽤すればより⾼い効果が得られるかも ◦ Golangci-lint に基づいたレビューや議論など 3. Golangci-lint と学んでみて
  11. まとめ • 短期間で Go をキャッチアップするために、Golangci-lint をメンターとして 活⽤した ◦ 豊富で信頼できる Linter

    が統合済み → 受動的に多様なチェックを受けられる ◦ 全ルールを有効化 → 判断を後回しにして学習を優先 • Linter の意図を理解し、取捨選択や設定を⾏う過程で、Go の特性や成熟した エンジニアの思想などを学べた 4. まとめ