backend-development について
C++ と Elixir/Phoenix のバックエンド開発向けスキルです。コード構成、エラー処理、リソース管理の実践方法を扱います。
主な機能
- 01C++ の命名とメモリ管理
- 02モダン C++ 機能の活用指針
- 03Phoenix contexts による領域構成
- 04パターンマッチとエラー処理
- 05LiveView と Ecto の検証実践
活用シーン
- 01C++ コードレビュー基準の策定
- 02Phoenix の業務コンテキスト整理
- 03バックエンドのリソースとエラー処理
- 04LiveView とデータ検証コードの作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill backend-developmentインストール後、Claude Code で/backend-developmentを入力して読み込まれたか確認します。
詳細
バックエンド開発
C++ と Elixir/Phoenix によるバックエンド開発のエキスパートです。
C++ 開発
命名規則
- クラスと構造体には PascalCase を使用します
- 変数とメソッドには camelCase を使用します
- 定数とマクロには SCREAMING_SNAKE_CASE を使用します
メモリ管理
- 生ポインターよりスマートポインター(
std::unique_ptr、std::shared_ptr)を優先します - 排他的な所有権には
std::unique_ptrを使用します - 共有所有権が必要な場合に限り
std::shared_ptrを使用します - すべてのリソース管理で RAII を実装します
- 不要なヒープ割り当てを避けます
モダン C++ の機能
- 可読性が向上する場合は、型推論に
autoを使用します - 範囲ベースの for ループを活用します
- 存在しない可能性のある値には
std::optionalを使用します - 型安全な共用体には
std::variantを使用します - コードをすっきりさせるために構造化束縛を適用します
- ムーブセマンティクスには
std::moveを使用します
エラー処理
- エラー処理には例外を使用します
- ドメイン固有のエラーにはカスタム例外型を定義します
- 適切な境界で例外をキャッチします
- すべてのコードで例外安全性を確保します
ベストプラクティス
- コード全体で const の正確性を徹底します
- C スタイルのキャストを避け、
static_cast、dynamic_castなどを使用します - Google Test または Catch2 でユニットテストを作成します
- Doxygen コメントでドキュメントを作成します
Elixir と Phoenix のベストプラクティス
基本理念
- PragDave の理念に基づくドメイン駆動設計に従います
- 明示的なエラー処理を伴う関数型プログラミングを使用します
- 「let it crash」の原則を取り入れます
コードの構成
- Phoenix コンテキストを使って、ビジネスドメインを中心にコードを構成します
- 各コンテキストが単一のドメインに専念するようにします
- 結合を防ぐために境界づけられたコンテキストを使用します
- 各コンテキストに明確な公開 API を実装します
パターンマッチングと制御フロー
- データ抽出にはパターンマッチングを積極的に使用します
with文を使って「レール指向プログラミング」を適用します- パイプ演算子で処理を明確につなぎます
- すべてのパターンマッチのケースを明示的に処理します
エラー処理
- タグ付きタプル(
{:ok, result}または{:error, reason})を返します - 失敗する可能性のある処理をつなぐには
with文を使用します - 適切なスーパービジョンツリーを実装します
- 想定されるエラーを明示的に処理します
Phoenix コンテキスト
- 関連する機能をコンテキストにまとめます
- コンテキスト間に明確な境界を定義します
- ビジネスロジックの API 層としてコンテキストを使用します
- コントローラーは薄く保ち、処理をコンテキストに委譲します
LiveView
- 主要な UI 技術として LiveView を使用します
- 再利用可能な UI には関数コンポーネントを実装します
- LiveView モジュールでイベントを処理します
- assigns で適切に状態を管理します
データ検証
Ecto.Changesetを使って境界で検証します- データベースのコンテキスト以外でも changeset を使用します
- 明確な検証ルールを定義します
- 役立つエラーメッセージを返します
コメント
Markdown 対応