go-skills について
go-skills は、LlamaFarm CLI の開発者向け Go ガイドラインです。慣用的で保守しやすく、安全な実装方法を扱い、主要な開発テーマのチェックリストを備えています。
主な機能
- 01Go のエラー処理と並行処理の指針
- 02テストとセキュリティのチェックリスト
- 03慣用的な Go のパターン
- 04LlamaFarm CLI のコード規約
活用シーン
- 01LlamaFarm CLI の Go 変更のレビュー
- 02エラー処理と並行処理の統一
- 03テストとセキュリティの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ llama-farm/ llamafarm --skill go-skillsインストール後、Claude Code で/go-skillsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
concurrency.mderror-handling.mdpatterns.mdsecurity.mdtesting.md詳細
LlamaFarm CLI 向け Go スキル
LlamaFarm CLI 開発で共通して使う Go のベストプラクティスです。これらのガイドラインに従うことで、慣用的で保守しやすく、安全な Go コードを作成できます。
技術スタック
- Go 1.24+
- Cobra(CLI フレームワーク)
- Bubbletea(TUI フレームワーク)
- Lipgloss(ターミナルのスタイリング)
ディレクトリ構成
cli/
cmd/ # Command implementations
config/ # Configuration types and loading
orchestrator/ # Service management
utils/ # Shared utilities
version/ # Version and upgrade handling
internal/ # Internal packages
tui/ # TUI components
buildinfo/ # Build information
クイックリファレンス
エラー処理
- エラーには必ずコンテキストを付けてラップします:
fmt.Errorf("operation failed: %w", err) - 予期される状況にはセンチネルエラーを使用します:
var ErrNotFound = errors.New("not found") - 関数呼び出しの直後にエラーを確認します
並行処理
- 共有状態の保護には
sync.Mutexを使用します - 読み取りが書き込みより多い場合は
sync.RWMutexを使用します - ゴルーチン間の通信にはチャネルを使用します
- ミューテックスのロック解除には必ず
deferを使用します
テスト
- 幅広いカバレッジを確保するため、テーブル駆動テストを使用します
- モック可能にするため、インターフェースを使用します
- テストファイル名:同じパッケージ内の
*_test.go
セキュリティ
- 認証情報やトークンをログに記録しません
- デバッグログでは機密性の高いヘッダーをマスキングします
- 外部からのすべての入力を検証します
- キャンセル処理には
context.Contextを使用します
チェックリストファイル
| ファイル | 説明 |
|---|---|
| patterns.md | Go の慣用的なパターン |
| concurrency.md | ゴルーチン、チャネル、同期 |
| error-handling.md | エラーのラップ、センチネル |
| testing.md | テーブル駆動テスト、モック |
| security.md | 入力検証、安全なコーディング |
覚えておきたい Go の格言
- 「メモリを共有して通信するのではなく、通信してメモリを共有しましょう」
- 「エラーは値です」
- 「少しのコピーは、少しの依存よりも優れています」
- 「巧妙さより明快さが大切です」
- 「アーキテクチャを設計し、コンポーネントに名前を付け、詳細を文書化しましょう」
このコードベースでよく使われるパターン
HTTP クライアントインターフェース
type HTTPClient interface {
Do(req *http.Request) (*http.Response, error)
}
ミューテックスを使ったプロセス管理
type ProcessManager struct {
mu sync.RWMutex
processes map[string]*ProcessInfo
}
Cobra コマンドパターン
var myCmd = &cobra.Command{
Use: "mycommand",
Short: "Brief description",
RunE: func(cmd *cobra.Command, args []string) error {
// Implementation
return nil
},
}
Bubbletea モデルパターン
type myModel struct {
// State fields
}
func (m myModel) Init() tea.Cmd { return nil }
func (m myModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { /* ... */ }
func (m myModel) View() string { return "" }
コメント
Markdown 対応