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

2. 命名規則 (Naming Conventions) MOC

  • 命名の重要性 (名前はコードの意図を伝える最初の手段)
  • 命名規則の種類と適用箇所
  • ケーススタイル (Case Styles)
    • [[キャメルケース (camelCase)]] (例: firstName)
    • [[パスカルケース (PascalCase / UpperCamelCase)]] (例: PersonName)
    • [[スネークケース (snake_case)]] (例: first_name)
    • [[スクリーミングスネークケース (SCREAMING_SNAKE_CASE)]] (例: MAX_USERS)
    • [[ケバブケース (kebab-case)]] (例: my-variable - 主にファイル名やCSSクラス)
    • 言語やコミュニティごとの主流ケーススタイル
  • 命名における避けるべきこと
    • [[短すぎる/曖昧な名前 (a, x, data, infoなど)]]
    • [[誤解を招く名前]]
    • [[型情報を含めるハンガリアン記法 (一般的に非推奨)]]
    • [[長すぎる名前 (ただし、明確さとのバランス)]]
    • [[数字で始まる名前 (多くの言語で不可)]]
    • [[予約語との衝突]]
    • [[一貫性のない命名]]
  • 国際化と命名 (非ASCII文字の使用について)

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

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

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

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

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

6. Method Design Best Practices) MOC

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

7. Object Design Best Practices) MOC (オブジェクト指向言語向け)

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

  • エラー処理の目的 (堅牢性、ユーザーへの適切なフィードバック、デバッグ容易性)
  • 例外 (Exceptions) vs. エラーコード (Error Codes)
  • 例外処理の基本 (try-catch-finally / try-except-finally)
    • [[具体的な例外を捕捉する (catch (Exception e) は避ける)]]
    • [[catchブロックは適切に処理するか、再スローする (握りつぶさない)]]
    • [[finallyブロックによるリソース解放の保証 (try-with-resources / usingなど)]]
  • カスタム例外 (Custom Exceptions) の作成と利用
  • 検査例外 (Checked Exceptions) vs. 非検査例外 (Unchecked/Runtime Exceptions) (Javaなど)
  • エラーメッセージの設計
    • [[明確で、問題解決に役立つ情報を含める]]
    • [[ユーザー向けと開発者向けのメッセージの分離]]
  • ログ記録とエラー
    • [[エラー発生時の詳細情報のログ記録]]
  • アサーション (Assertions) の利用
    • [[プログラムの前提条件を検査 (デバッグビルドでのみ有効な場合が多い)]]
  • Either型によるエラー処理 (関数型言語スタイル)
  • **(オプション) エラー処理の横断的関心事 (AOPの適用など)`

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などの脆弱性リストと対策
  • DAST)`

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

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

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

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

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

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