1. コーディング標準とベストプラクティス入門 MOC

2. 命名規則 (Naming Conventions) MOC

3. コードのフォーマットとレイアウト (Code Formatting and Layout) MOC

4. コメントとドキュメンテーション (Comments and Documentation) MOC

  • コメントの目的
    • [["なぜ" を説明する (コードが "何を" しているかはコード自身が示すべき)]]
    • [[複雑なロジックやアルゴリズムの解説]]
    • [[設計上の決定やトレードオフの記録]]
    • [[一時的なメモやTODO (・・ TODO:, ・・ FIXME:)]]
    • [[意図的に行っている「悪い」コードの説明 (ハックやワークアラウンド)]]
  • 良いコメント、悪いコメント
    • [[自己記述的なコード (Self-Documenting Code) を目指す]] (コメントを不要にする努力)
    • [[冗長なコメント、自明なコメントは避ける]] (例: // iをインクリメントする\ni++;)
    • [[コードの変更に追従しない古いコメントは害悪]]
    • [[攻撃的なコメントや不適切なジョークは避ける]]
    • [[明確で簡潔な言葉を選ぶ]]
  • コメントの種類
  • コメントのスタイルと言語ごとの慣習
  • バージョン管理システムとコメント (コミットメッセージも一種のドキュメント)

5. 制御構造のベストプラクティス (Control Structure Best Practices) MOC

  • 条件分岐 (if, else if, else, switch/case)
    • [[ネストの深さを浅く保つ (複雑性の低減)]] (ガード節、早期リターンなど)
    • [[条件式の可読性 (複雑な条件は変数や関数に抽出)]]
    • [[ヨーダ記法 (if (null == variable)) の是非]]
    • [[switch・case文のフォールスルーの注意点と default 節の推奨]]
    • [[条件演算子 (三項演算子) の適切な使用]]
  • ループ (for, while, do-while, foreach)
    • [[無限ループの回避]]
    • [[ループ条件の明確化]]
    • [[ループ変数のスコープ]]
    • [[ループ内の処理のシンプルさ]]
    • [[breakcontinue の慎重な使用]]`
    • [[コレクションの反復処理におけるイテレータや高階関数の活用]] (読みやすさと安全性)
  • 早期リターン (Early Exit ・ Guard Clauses)
  • GOTO文の使用は原則避ける (構造化プログラミングの観点から)

6. 関数・メソッド設計のベストプラクティス (Function・Method Design Best Practices) MOC

  • 単一責任の原則 (SRP) の適用 (関数は一つのことだけをうまくやるべき)
  • 関数の長さ
    • [[短い関数を目指す (例: 1画面に収まる程度)]] (ただし、明確さが犠牲にならない範囲で)
  • パラメータの数
  • 副作用 (Side Effects)
    • [[副作用を明確に文書化するか、可能な限り避ける (純粋関数)]]
    • [[コマンド・クエリ分離 (CQS) の考え方]]
  • 抽象度のレベルの一貫性
    • [[関数内のコードは同じ抽象度で記述する]]
  • 関数の凝集度 (Cohesion) (関数内の要素が密接に関連していること)
  • エラー処理と戻り値
  • 関数シグネチャの設計 (明確な名前、型ヒント、戻り値の型)
  • (オプション) DRY原則の関数レベルでの適用 (重複コードの関数化)

7. クラス・オブジェクト設計のベストプラクティス (Class・Object Design Best Practices) MOC (オブジェクト指向言語向け)

8. エラー処理と例外管理のベストプラクティス MOC

9. 並行処理・非同期コードのベストプラクティス MOC

  • 並行処理の課題 (複雑性、競合状態、デッドロック、ライブロック)
  • スレッドセーフティ (Thread Safety)
    • [[共有リソースへのアクセスの同期 (Mutex, Semaphore, Monitorなど)]]
    • [[イミュータブルオブジェクトの活用]]
    • [[スレッドローカルストレージ]]
  • デッドロックの予防と検出
  • 競合状態の回避
  • 非同期プログラミングのパターン
    • [[コールバック (Callbacks) とその問題点 (Callback Hell)]]
    • [[Promise ・ Future の利用]]
    • [[async ・ await 構文の利用]]
    • [[リアクティブプログラミング (Reactive Programming)]] (概要)
  • リソースプーリング (スレッドプール、コネクションプール)
  • キャンセル処理とタイムアウト
  • 並行処理コードのテストの難しさと戦略

10. セキュリティコーディングのベストプラクティス (Secure Coding Best Practices) MOC

  • 入力検証 (Input Validation)
    • [[全ての外部入力を信頼しない (バリデーション、サニタイズ)]]
    • [[ホワイトリスト方式 vs. ブラックリスト方式]]
  • 出力エンコーディング (Output Encoding)
    • [[コンテキストに応じた適切なエンコーディング (HTML, SQL, JavaScriptなど) によるインジェクション対策]]
  • 認証 (Authentication) と認可 (Authorization)
    • [[強力なパスワードポリシー、多要素認証 (MFA)]]
    • [[最小権限の原則 (Principle of Least Privilege)]]
  • セッション管理 (Session Management)
    • [[安全なセッショントークンの生成と管理]]
  • エラー処理と情報漏洩
    • [[詳細すぎるエラーメッセージを外部に公開しない]]
  • 暗号化の実装
    • [[実績のある暗号アルゴリズムとライブラリの使用]]
    • [[鍵管理の重要性]]
  • 依存関係のセキュリティ
    • [[脆弱性のあるライブラリを使用しない (SCAツールの利用)]]
  • セキュアなAPI設計
  • OWASP Top 10などの脆弱性リストと対策
  • (オプション) 静的・動的セキュリティテスト (SAST・DAST)`

11. パフォーマンスに関するコーディングのベストプラクティス MOC

12. コードの可読性向上のためのプラクティス MOC (まとめ的)

13. コードの保守性向上のためのプラクティス MOC (まとめ的)

14. 言語ごとのコーディング標準とベストプラクティス MOC (各言語MOCへのポータル)

  • (各言語のMOCで、その言語固有の標準(例:PEP 8)、イディオム、コミュニティ推奨プラクティスを詳述)
  • [[Java コーディング標準とベストプラクティス MOCへのリンク]]
  • [[Python コーディング標準とベストプラクティス MOCへのリンク]]
  • [[JavaScript コーディング標準とベストプラクティス MOCへのリンク]]
  • [[C# コーディング標準とベストプラクティス MOCへのリンク]]
  • (他、主要言語へのリンク)

15. コーディング標準を支援するツール MOC

  • リンター (Linters)
    • [[ESLint (JavaScript), Pylint・Flake8 (Python), Checkstyle・PMD・SpotBugs (Java), RuboCop (Ruby), StyleCop・Roslyn Analyzers (C#)]]
  • フォーマッタ (Formatters)
    • [[Prettier (多言語対応), Black (Python), gofmt (Go), rustfmt (Rust), clang-format (C・C++・Java・etc.), Spotless (多言語対応)]]
  • 静的解析ツール (Static Analysis Tools) (リンターより高度な解析)
    • [[SonarQube, Coverity, Veracode]]
  • IDEの機能 (フォーマット、Lint連携、静的解析機能)
  • CI/CDパイプラインへの統合 (自動チェックと強制)

16. チームにおけるコーディング標準の策定と運用 MOC

  • なぜチーム標準が必要か
  • 標準策定のプロセス
    • [[既存の公開標準 (言語コミュニティ、Google Style Guidesなど) をベースにする]]
    • [[チームメンバー全員での議論と合意形成]]
    • [[重要な項目に絞る (過度に厳格すぎない)]]
    • [[理由や背景を明記する]]
  • 標準のドキュメント化と共有
    • [[Wiki, Confluence, Gitリポジトリ内のMarkdownなど]]
  • 標準の浸透と教育
    • [[新規メンバーへのオンボーディング]]
    • [[定期的な見直しと更新]]
  • 標準の強制と自動化
    • [[リンター、フォーマッタ、CIツールの活用]]
    • [[コードレビューでの指摘]]
  • 標準からの逸脱を許容する場合のプロセス

17. コードレビューとコーディング標準 MOC

18. コーディング標準のアンチパターン MOC

  • [[標準が存在しない ・ 誰も守らない]]
  • [[過度に厳格で開発効率を著しく下げる標準]]
  • [[理由や目的が不明な標準]]
  • [[古く、現状に合わない標準]]
  • [[ツールによる自動チェックがない、または無視される]]
  • [[標準が一方的に押し付けられる]]
  • [[「標準だから」という思考停止]]