IT-Skills

ハードコーディングは初心者の証?

ハードコーディング(Hard Coding)とは何か?

この記事にたどり着いた人の中には、上司や先輩から「ハードコーディングはやめろ!」なんて指摘を受けた人もいるかもしれません。

「動くならなんでもよいではないか!」と思っている人もいるかもしれませんが、ハードコーディングは別名「初心者の証」です。

それだけ、ハードコーディングをしてはいけない理由が存在するということです。

このページでは、ハードコーディングとは何か?ハードコーディングは何がいけないのか?をザックリ解説し、ハードコーディングをしてはいけない理由を読者の皆様にお届けします。

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

ハードコーディングとは、「ソースコードの中に固定値をそのまま書き込むこと」を言います。

もっと丁寧な言い方をすれば、「本来、別の場所に保存しておくべき値を、ソースコードの中に保存してしまう」ことです。

言葉ではわかりにくい部分もあるので、具体例で考えてみましょう。

実例)ハードコーディング:消費税計算

筆者の身の回りであった、ハードコーティング例です。これは、消費税を計算するプログラムです。

(税込み額)=(金額)×1.08

「1.08」というのが、ソースコード中に直接書かれています。これがまさに、ハードコーティングの代表例です。

ハードコーディングの反対「ソフトコーディング」で書けば

消費税率)= 1.08
(税込み額)=(金額)×(消費税率

のようになります。(消費税率)を別の場所であらかじめ定義し、実際の計算では、その固定値を呼び出す形でコーディングします。

もちろん、どちらも計算結果は同じです。

これだけでは、一体ハードコーディングの何がいけないのかわかりません。ここから、ハードコーディングの罠について解説していきます。

①マジックナンバー

ハードコーティングをした際に、実際に埋め込まれた値をマジックナンバーと呼びます。

(税込み額)=(金額)×1.08

上記の例でいえば、「1.08」がマジックナンバーです。

なぜ、マジックナンバーと呼ばれるかと言うと「なんの数字だかわからなくなる」場合が多いため、皮肉を込めて名付けられたことに由来します。

「1.08」といえば消費税率である、というのは常識のように思えますが、これが「1.33」などの数字であればどうでしょうか?

(税込み額)=(金額)×1.33

この瞬間、(税込み額)の「税」とは一体何の税金なのか、わかるでしょうか?ミス?それともあってる・・・?

下記のようにしたらどうでしょうか?

所得税率)= 1.33
(税込み額)=(金額)×(所得税率

マジックナンバーではなくなりました。

だれがどう見ても、「なるほど。1.33というのは所得税率のことなんだな」というのが分かります。

システムを新規開発するタイミングでは、問題ないかもしれませんが、もしこのプログラムでバグが発生し、保守を引き継いだ担当者が

(税込み額)=(金額)×1.33

をみたら、意味が分かりません。何の税額だ、、、?これはバグなんじゃないの?なんて疑いをもたれます。

マジックナンバーを避けるために、ソフトコーディングが有効となります。

「コメント」を付与しておけばいいじゃないか!なんて声も聞こえてきそうですが、「コメント」では「保守性」が低下してしまうのです。

②保守性

続いてのハードコーディングをしてはいけない理由が「保守性」です。

多くのプログラマーが、これを理由にハードコーディングをさけるべきだと主張します。

先ほどの例でいえば、

(税込み額)=(金額)×1.08

というコードが、プログラムのあちこちに散りばめられているのを想像してみてください。

①(税込み額)=(金額)×1.08

②(支払い額)=(金額)×1.08

・・・・

⑳(売上額)=(金額)×1.08

考えただけでもぞっとしますね。

消費税が変わっただけで何か所も何か所もプログラムを修正する必要が出てきてしまいます。もし、

(税込み額)=(金額)×(消費税率

というように、ソフトコーディングされていれば、

消費税率)= 1.08

消費税率)= 1.10

に変更するだけで、他の箇所に記載されている計算式も変更することができます。保守性の観点からも、共通の値は固定値として1か所にまとめておくべきです。

③セキュリティ保護

3つ目は、セキュリティ保護の観点です。

これは、ユーザ登録やフォルダ操作などのプログラムで起こりがちです。

IF(入力されたパスワード)= ”pass091827346″

とハードコーディングした場合、パスワードが外部に駄々洩れです。以下のように、ソフトコーディングをしていないと、

(パスワード)= DBから取得
IF(入力されたパスワード)=(パスワード)

としていれば、DBにアクセスすることができる場合を除いて、パスワードを外部から閲覧することはできません。

このように、ハードコーディングをすることには多くの弊害があります。特に近年3つ目のセキュリティ保護の観点からハードコーディングが話題になることが多くあります。

ハードコーディングをしていると、プログラムの基礎を知らないとみなされ初心者のレッテルを張られてしまうため、ソフトコーディングでプログラミングを行うことを心がけましょう。