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

Golangci-lint と AI をメンターとして活用する Go の深掘りアプローチ / ...

Avatar for uMa uMa
November 27, 2025

Golangci-lint と AI をメンターとして活用する Go の深掘りアプローチ / Deep Diving into Go Using Golangci-lint and AI as Mentors

Avatar for uMa

uMa

November 27, 2025
Tweet

More Decks by uMa

Other Decks in Programming

Transcript

  1. SPEAKER プロダクト開発本部 サーバーサイドエンジニア 原 佑⾺(uMa) • 2022 年 4 ⽉〜

    前職 ◦ バックエンド開発(JavaScript/TypeScript, Perl など) ◦ その他、フロントエンドやインフラ領域なども担当 ◦ 合計 3 回のチーム異動を経験 • 2025 年 4 ⽉〜 株式会社ヤプリ ◦ 主に Go 製のバックエンドアプリケーションを担当
  2. INDEX ⽬次 1. Go との出会い 2. Go について学ぶ with Golangci-lint

    3. Golangci-lint と学んでみて 4. AI を活⽤した更なる深掘りアプローチ 5. Claude Code Plugin を活⽤した具体⼿法と実践例 6. まとめと展望
  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. ヤプリでの AI 活⽤ ヤプリでは、AI 委員会を中⼼として多くの AI サービスを活⽤しています! 例: • Gemini

    • NotebookLM • Devin • GitHub Copilot • Claude Code など 詳しくは技術ブログをご覧ください:https://tech.yappli.io/archive/category/AI 4. AI を活⽤した更なる深掘りアプローチ
  12. 各課題に対する AI 活⽤アプローチ • 学習内容の偏り → AI による題材の選定 ◦ 学びたい内容から題材を⽣成してもらうことで、確実に成果を得る

    • 初学者に対するハードルの⾼さ → AI によるメンターの代替 ◦ Lint エラーの説明やプロジェクトへ適⽤するかどうかの判断をサポートしてもらう ◦ 上記以外にも、コードレビューや質問‧相談対応をしてもらう 4. AI を活⽤した更なる深掘りアプローチ
  13. Claude Code Plugin について カスタムコマンド、エージェント、フック、スキル、MCP サーバーを通じて Claude Code を拡張するプラグインシステム。 出典:

    https://code.claude.com/docs/ja/plugins → プラグインをインストールするだけで誰でも同じ体験が可能に 5. Claude Code Plugin を活⽤した具体⼿法と実践例
  14. 学習の流れ 1. 学びたいことを指定して題材を⽣成 a. 複数提案して選択する形式 2. 選択した題材に基づいた実装準備 a. 完成させるためのプランニングを実施 b.

    Golangci-lint の設定も⽣成 3. 実装中のコードレビューや質問対応 a. レビュー時に Golangci-lint の⾃動実⾏なども実施 5. Claude Code Plugin を活⽤した具体⼿法と実践例
  15. 実践結果 • 👍 ◦ 題材⽣成の段階でも未知の知識に触れられた ▪ 未知のライブラリやツール、実装パターンなど ◦ レビュワーは、与えたソースやウェブ検索を駆使して満遍なく情報を提供してくれる印象 ▪

    たまに嘘のリファレンスを提⽰するのが難点 • 👎 ◦ 外部の情報取得やサブエージェントとの連携が遅く、テンポ良くは進められない → まだまだ改善の余地はあるが、単に個⼈開発を進めるよりかは得られるものが多かった 5. Claude Code Plugin を活⽤した具体⼿法と実践例
  16. まとめ • Golangci-lint を学習メンターとして活⽤した ◦ 全ルール有効化で受動的に多様な知⾒を獲得できた ◦ ルールの意図理解を通じて Go ⾔語の深い理解へつながった

    • 更に AI で学習体験を拡張するアプローチを試した ◦ Claude Code Plugin で題材⽣成からレビューまで⼀貫した学習フローを提供できた ◦ 個⼈開発以上の学習密度を実現できた 6. まとめと展望
  17. 展望 • オンボーディング⽬的での活⽤ ◦ Go ⾔語は特にやり易かったが、他の⾔語にも応⽤できそう ▪ 実際、AngularJS では AI

    Tutor という似たようなコンセプトの仕組みが存在する • https://angular.dev/ai/ai-tutor ◦ ⾃由度を減らしてチームに特化させれば、意外とすぐ使えそう? ▪ CLAUDE.md や AGENTS.md、各種ドキュメント、カスタム Linter などが光りそう • 各種機能の個別での活⽤ ◦ レビュワーは既に実務レベルであるように思われる ▪ 既に軽量版を個⼈的に利⽤中 ▪ コミット前のレビューや、⾃分がレビューする場合の補助として活⽤ ◦ 題材⽣成も、実践的に学びたい内容がある場合に活⽤できそう 開発したプラグインは、しばらく個⼈的に使っていこうと思います! 6. まとめと展望