エラーを起こしてバグを減らそう
はじめに
みなさんはエラーは好きですか?
大抵の人は嫌いなのではないでしょうか。
プログラミングをしていると多くのエラーが発生し、修正に苦労します。
そもそもエラーとは何なのでしょうか?
何の為にあるのか考えたことはあるでしょうか?
この記事でエラーの本質と向き合ってみましょう。
※JavaやPHPでは言語仕様上「エラー」と「例外」は明確に区分されますが、ここでは話の便宜上、「例外」の事も「エラー」と表現する場合があります。
エラーは安全装置
たとえば、崖に沿った道路を走っていたら、ガードレールにぶつかって車が凹んでしまったとします。
じゃあ、ガードレールなんてない方が良かったのでしょうか?
そんなわけないですよね。
もしガードレールがなければそのまま落下して大事故になっていました。
さらに、ガードレールの破損状況から、後日、事故がどこで起きたか正確に分かるため、今後の対策も立てやすくなります。
要するに、エラーとは最悪の事態を回避するためにある便利なもの、という事です。
また、適切なタイミングでエラーを起こす事で問題が起きた時の調査範囲を狭く絞り込む事ができます。
静的解析といって、構文エラーなどプログラムを実行する前にエディタやビルドログで問題発覚できれば、デバッグが楽になります。
ですから、プログラミングをする時はしっかりとエラーが出るように記述していく事が大切になります。
プログラミングにおける最悪の事態をいくつか挙げておきます。
- 本番稼働後に問題が発覚してクレームになる。
- データベースにありえない値が入り込んで元に戻せなくなる。
- 間違えて必要なファイルやデータを削除して元に戻らない。
- 問題が起きた時には、作った人がおらずどうやって治せばいいか誰もわからない。
など。
エラーを起こすにはどうすればいい?
では具体的にエラーを起こすにはどうすればいいでしょうか?
- 変数に型を設定する。
- 関数の引数や戻り値に型を設定する。
- ジェネリクス(リストの中身の型を決める)を設定する。
- コードスタイルを適用する。
- 入力チェックを行う
- DBの型を厳しくする。
- 例外クラスを呼び出して中断させる
- テストツールを走らせる
などなど。
はい、入門者が嫌いそうなものばかりですね。
無責任な入門書だと、この言語は型の概念がないので優しい言語です。
なんていい加減なことを書いてたりしますが。
でも、プログラミングに慣れてくると、これらがないと不安になりますし、不便を感じるようになります。
例えばPHPにはジェネリクスが標準で使えません。Javaにはあるのに。
一体どれほど多くのPHPプログラマーが「PHP ジェネリクス」でググっては、ガッカリしてきたか計り知れません。
ですが、Javaも初期の状態ではなかったのです。
みんなの要望に応えて実装されました。
例えばjavascriptは変数の型を固定できません。
それはつまり、どういう種類のデータかイチイチ実行して確認しないといけないという事です。
ウンザリした人たちの声からtypescriptというjavascriptを厳しくした言語が誕生しました。
PHPも関数に型が書けるようになったのは途中からです。
これを活用しない手はあるだろうか?いやない。
※JavaやC#ではそもそも型を決めずに変数をつくれない。ただし、型推論といって初期化時の値で型が決まる書き方はある。
おわりに
いかがでしたか?
構文エラーの印象は読む前から変わりましたか?
プログラムの規模が大きくなるほどエラーの価値は高まります。
エラーでアプリケーションをガードして堅牢なシステムを目指しましょう。
株式会社ONE WEDGE
【Serverlessで世の中をもっと楽しく】 ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion