【はーどこーでぃんぐ】

ハードコーディング とは?

💡 値をコードに「直接書き込む」行為、柔軟性がなく変更に弱い
📌 このページのポイント
ハードコーディング vs 設定ファイル ハードコーディング ✗ // 値を直書き... url = "192.168.1.1" tax = 0.10 max = 100 変更のたびにコード修正が必要 ミスの原因になりやすい 環境ごとに書き換えが発生 設定ファイル活用 ✓ // config.json {"url":"...","tax":0.10} url = config.url tax = config.tax 設定変更だけで対応可能 保守性・再利用性が高い 環境ごとに設定を切替
ハードコーディングのイメージ
ひよこ ひよこ

ハードコーディングって何がダメなの?

ペンギン先生 ペンギン先生

3つの問題がある。①変更に弱い:URLやパスが変わるたびにコードを修正してデプロイが必要。②セキュリティリスク:パスワードAPIキーをコードに書くとGitで漏洩する。③環境依存:開発と本番でパスが違う場合に対応できない。

ひよこ ひよこ

じゃあどうすればいいの?

ペンギン先生 ペンギン先生

環境変数(.envファイルやCI/CD環境変数設定)・設定ファイル(config.yaml)・クラウドのシークレット管理AWS Secrets Manager・HashiCorp Vault)に外出しする。コードでは「os.environ['DB_PASSWORD']」のように環境変数から読む。

ひよこ ひよこ

定数はハードコーディングと違うの?

ペンギン先生 ペンギン先生

定数(const MAX_RETRY = 3)は「意味があって変わらない値」に名前をつけたもので問題ない。ハードコーディングが問題なのは「環境によって変わるべき値」や「機密情報」をコードに直書きすること。同じ数字でも文脈次第で判断が変わる。

ひよこ ひよこ

.envファイルって何で.gitignoreに入れるの?

ペンギン先生 ペンギン先生

.envにはDBのパスワードAPIキーが書いてあることが多い。これをGitに入れてGitHubにpushすると全世界に公開される。実際にAWSのアクセスキーがGitHubに漏れて数時間で数百万円の不正利用された事例もあるんだ。GitGuardianのようなツールで漏洩を自動検知する対策も重要だよ。

ひよこ ひよこ

マジックナンバーもハードコーディングの一種なの?

ペンギン先生 ペンギン先生

その通り。if (status === 3) の「3」が何を意味するか、書いた本人しかわからない。const STATUS_APPROVED = 3 と名前を付ければ意図が明確になる。ハードコーディングの問題は「変更に弱い」だけじゃなく「読んで理解できない」ことも大きいんだ。コードは書く時間の何倍も読まれるものだから、読みやすさへの投資は必ず報われるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ハードコーディングって出てきたら「値をソースコードに直接書き込むこと、変更しにくくセキュリティリスクもある悪習慣」と思えばOK!
📖 おまけ:英語の意味
「Hardcoding(Hard-coding)」 = 固定配線のようにコードに埋め込む
💬 かつての電子機器でスイッチやジャンパ線で設定を「固定(hard-wired)」したことから。ソフトウェアで変更不能なほど固定された値という意味
← 用語集にもどる