マジックナンバー (メッセージ)

マジックナンバーとは、装置やソフトウェアの内部処理状態などを利用者に通知する際のメッセージ（エラーコード類）のことである。
概要.
コンピュータ分野では、一見意味不明に見える情報を意味する言葉として、様々な場面でマジックナンバーという言葉が用いられる。ここで説明するマジックナンバーも、そういった情報を意味する言葉の一つである。
コンピュータにおける装置やソフトウェア（以下、両者を総合してコンピュータと略記）が内部で保持している情報を、利用者が直接参照することはできない。利用者は、画面や表示パネルへの表示、ビープ音やメロディ音など、コンピュータの外部インターフェースを経由した形でのみ、コンピュータ内部に保持された情報を入手することが可能である。場合によっては、一度ログファイルに出力された後で、それを画面に表示するといった場合もある。
利用者がこれらの出力情報を理解するにあたり、コンピュータが内部情報を可読性の高い形で出力することが、出力情報の理解には有益である。しかし、様々な理由によって、このような可読性を下げた形で出力されることがある。このような場合、そういった事情を知らない者にとっては一見意味不明な形で出力されるため、そのようなものを指し示す総称であるマジックナンバーと呼ばれることがある。なお、音による出力情報もこのような性質を持っている場合があるが、一般的にはマジックナンバーとは呼ばれていない。
可読性.
上述の通り、およそ自然文によるエラーメッセージとはかけ離れた、可読性を下げた形で出力されるが故にマジックナンバーと呼ばれる。過去のコンピュータシステムにおいてはプログラムサイズやメモリ制約などの理由により、本来の文法上は正しくない短縮表記のエラーメッセージが用いられるケースは多くあり、可読性を更に犠牲にしてプログラムサイズやメモリ使用量を抑えることで、マジックナンバーの使用に辿り着く。
マジックナンバーの使用例.
コンピュータのブートプロセス.
コンピュータ起動の際、POST処理中でのエラーは主にビープ音によって利用者に通知される。しかし、IBMの一部のコンピュータでは、これと合わせてチェックポイントコードと呼ばれる短いエラーメッセージに集約してエラー情報が示される。比較的古いコンピュータでは、2桁の表示パネルにブートプロセスの進行状況が逐次表示され、エラーが発生すると表示の更新が停止する。表示されたエラーコードによってブートプロセスがどこまで進行したか、どのような理由によってブートプロセスが停止したかが判断可能となっている。比較的新しいコンピュータでは、ディスプレイ上に数文字に集約されたエラーメッセージが用いられているケースがある。このメッセージは1文字ごとに区分あるいはフラグのような扱いとなっており、メッセージ全体は可読性のある文章ではない。
ブートプロセスではハードディスク等の広大なプログラムエリアを割り当てることができないため、可読性を犠牲にして使用プログラムサイズを削減する目的で、ビープ音やマジックナンバーでのメッセージ通知が行われるケースがしばしば用いられる。
OSのブートプロセス.
LILOとはLInux LOaderの略であり、Linuxで用いられているブートローダの一種である。LILOを使用している場合、ブートプロセス中にLILOの各文字が順番に表示されるようになっており、ブートエラーが発生するとその段階で表示の更新が停止する。表示された内容によって、ブートプロセスがどこまで進行したか、どのような理由によってブートプロセスが停止したかが判断可能となっている。表示内容とブートプロセスの進行状況との対応は以下の通りである。
上記以外に、第2ステージのブートローダ実行後、ブートローダの実行が完了するまでの間は、 <samp>LIL-</samp> や <samp>LIL?</samp> などのようにメッセージが細分化されており、そのメッセージに応じてブートプロセス停止理由が判断可能となっている。
LILOに限らず、OSのブートプロセス、とくに第1ステージのブートローダのプログラムは512バイトという制限を持つマスターブートレコードに収める必要があり、そのサイズ制限の影響を受けて、このブートプロセスにおけるエラーメッセージは非常に限定されたものとなる。第2ステージ以降のブートローダにはこのような制約はないが、第1ステージにおけるメッセージとの整合性を考慮したメッセージとすると、LILOのような簡素化されたメッセージとなる。
Broadcast Markup Language.
BMLにおいて、受信機の残メモリ量を返す関数は仕様のまま実装されることはほとんどなく、BMLブラウザのバージョンなどの情報に基づいたマジックナンバーを返すように実装されるケースが多い。