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

出典: フリー百科事典『ウィキペディア(Wikipedia)』

マジックナンバーとは、装置やソフトウェアの内部処理状態などを利用者に通知する際のメッセージ(エラーコード類)のことである。

概要[編集]

コンピュータ分野では、一見意味不明に見える情報を意味する言葉として、様々な場面でマジックナンバーという言葉が用いられる[1]。ここで説明するマジックナンバーも、そういった情報を意味する言葉の一つである。

コンピュータにおける装置やソフトウェア(以下、両者を総合してコンピュータと略記)が内部で保持している情報を、利用者が直接参照することはできない。利用者は、画面や表示パネルへの表示、ビープ音やメロディ音など、コンピュータの外部インターフェースを経由した形でのみ、コンピュータ内部に保持された情報を入手することが可能である。場合によっては、一度ログファイルに出力された後で、それを画面に表示するといった場合もある。

利用者がこれらの出力情報を理解するにあたり、コンピュータが内部情報を可読性の高い形で出力することが、出力情報の理解には有益である。しかし、様々な理由によって、このような可読性を下げた形で出力されることがある。このような場合、そういった事情を知らない者にとっては一見意味不明な形で出力されるため、そのようなものを指し示す総称であるマジックナンバーと呼ばれることがある[注 1]。なお、音による出力情報もこのような性質を持っている場合があるが[注 2]、一般的にはマジックナンバーとは呼ばれていない。

可読性[編集]

上述の通り、およそ自然文によるエラーメッセージとはかけ離れた、可読性を下げた形で出力されるが故にマジックナンバーと呼ばれる。過去のコンピュータシステムにおいてはプログラムサイズやメモリ制約などの理由により、本来の文法上は正しくない短縮表記のエラーメッセージが用いられるケースは多くあり[注 3]、可読性を更に犠牲にしてプログラムサイズやメモリ使用量を抑えることで、マジックナンバーの使用に辿り着く。

マジックナンバーの使用例[編集]

コンピュータのブートプロセス[編集]

コンピュータ起動の際、POST処理中でのエラーは主にビープ音によって利用者に通知される。しかし、IBMの一部のコンピュータでは、これと合わせてチェックポイントコードと呼ばれる短いエラーメッセージに集約してエラー情報が示される。比較的古いコンピュータでは、2桁の表示パネルにブートプロセスの進行状況が逐次表示され、エラーが発生すると表示の更新が停止する。表示されたエラーコードによってブートプロセスがどこまで進行したか、どのような理由によってブートプロセスが停止したかが判断可能となっている。比較的新しいコンピュータでは、ディスプレイ上に数文字に集約されたエラーメッセージが用いられているケースがある[注 4]。このメッセージは1文字ごとに区分あるいはフラグのような扱いとなっており、メッセージ全体は可読性のある文章ではない。

ブートプロセスではハードディスク等の広大なプログラムエリアを割り当てることができないため、可読性を犠牲にして使用プログラムサイズを削減する目的で、ビープ音やマジックナンバーでのメッセージ通知が行われるケースがしばしば用いられる。

OSのブートプロセス[編集]

LILOとはLInux LOaderの略であり、Linuxで用いられているブートローダの一種である。LILOを使用している場合、ブートプロセス中にLILOの各文字が順番に表示されるようになっており、ブートエラーが発生するとその段階で表示の更新が停止する。表示された内容によって、ブートプロセスがどこまで進行したか、どのような理由によってブートプロセスが停止したかが判断可能となっている。表示内容とブートプロセスの進行状況との対応は以下の通りである。

表示内容 プロセスの進行状況
L 第1ステージのブートローダの読み込みが完了したことを示す。
LI 第2ステージのブートローダの読み込みが完了したことを示す。
LIL 第2ステージのブートローダの実行が開始されたことを示す。
LILO ブートローダの実行が完了したことを示す。

上記以外に、第2ステージのブートローダ実行後、ブートローダの実行が完了するまでの間は、 LIL-LIL? などのようにメッセージが細分化されており、そのメッセージに応じてブートプロセス停止理由が判断可能となっている。

LILOに限らず、OSのブートプロセス、とくに第1ステージのブートローダのプログラムは512バイトという制限を持つマスターブートレコード[注 5]に収める必要があり、そのサイズ制限の影響を受けて、このブートプロセスにおけるエラーメッセージは非常に限定されたものとなる。第2ステージ以降のブートローダにはこのような制約はないが、第1ステージにおけるメッセージとの整合性を考慮したメッセージとすると、LILOのような簡素化されたメッセージとなる。

Broadcast Markup Language[編集]

BMLにおいて、受信機の残メモリ量を返す関数は仕様のまま実装されることはほとんどなく、BMLブラウザのバージョンなどの情報に基づいたマジックナンバーを返すように実装されるケースが多い。

脚注[編集]

注釈[編集]

  1. ^ Condorのマニュアル”. 2009年11月15日閲覧。 - ここで示されている値は本来、エラーコード、ステータスコードの類であるが、左記のようにマジックナンバーと表現されることがある。
  2. ^ 放射能を用いる施設における警告音、コンピュータを起動する際のPOST時に発せられるビープ音などは、その音の意味を知らないものには理解できないという点で、この種の性質を持つ。
  3. ^ errno.h”. 2009年11月15日閲覧。 - FreeBSD の errno.h では、冠詞 the などは一部省略されている。
  4. ^ NetVista 6578、6579 - 診断 - 始動テスト (POST)”. 2009年11月15日閲覧。 - 13文字以下の、1文字ごとに独立した意味を持つ、文章的でないメッセージとなっている。
  5. ^ 実際には、マスターブートレコードの全領域である512バイト全てを使用できるわけではなく、プログラムとして使用可能な領域は446バイトに限られる。

出典[編集]

  1. ^ Jargon File - magic number”. 2009年11月9日閲覧。 - ジャーゴンファイルには、コンピュータ関連の4種類のマジックナンバーが示されている。

関連項目[編集]