バグ

登録日:2010/05/12(水) 11:26:41
更新日:2024/01/18 Thu 20:43:02
所要時間:約 7 分で読めます




パソコンやゲーム機等の電子機器におけるプログラムミスの総称。
転じて、誤植や設定ミスなどもバグに含める場合がある。
機動戦士ガンダムF91』に登場する機動兵器をお求めの方はこちらへ、石川賢作品に登場する美少女または兵器をお求めの方はこちらへ。

概要

語源は英語の「(bug)」(ナンキンムシ)に由来し、その昔機械の熱や光に引き寄せられた虫の死骸が原因で何らかの誤作動を起こした事からこう呼ばれる。
もともとはそのように虫が侵入するような人為的ではない不可抗力的な弊害を指す言葉であったが、
後に人為的ミスをバグに責任転嫁する風潮が高まり、現在の意味になったとされる。

またバグを取り除く作業の事を「虫取り」という意味で「デバッグ」とも呼ぶ。

英語では「bug」と「glitch」を使い分けたりもするが、実際は曖昧のようだ。
検索の際は日本でいう「バグ」は後者の方を使うとよくヒットする。

バグの症状としては、画面の表示がおかしくなる、音声が再生されないなどの軽微な物から
フリーズ、強制終了、データの消失など致命的な物まで様々。

また、バグには二種類ある。いわば、『見えるバグ』と『見えないバグ』である。
前者は言うまでもなく、エラーメッセージですぐわかるバグ。後者は文法などには引っかからないが、プログラムのロジックの間違いにより、エラーが出ることなく動くが、間違った結果が発生するもの。
ゲームなどのバグは、大方のはこれだろう。
そして開発者は、この『見えないバグ』と苦しい戦いを繰り広げるのである。

一般的に販売された何らかのソフトでバグが見つかった場合、開発元はそれを修正するプログラム(パッチ)を配布するのが普通だが、
ネット接続が不可能な時代のゲームソフトの場合はそれが困難なのでそのまま放置される事も多かった。
しかしセーブデータの破損やゲーム進行不可等のあまりに重大なバグの場合は修正版と交換してくれる場合もある。

納期の問題から、バグを放置したまま出してパッチで直すというソフトもある。
が、パッチが中々でない、パッチがないとまともに動作しないといったソフトは物議を醸す。
だが中にはどれだけ重大で商品価値を著しく損なうバグがあろうとも、「仕様です(キリッ)」の一点張りでまるで対応してくれない企業もいたりする。

とはいえ、プログラムからすべてのバグを探し出し、そして修正する事は人員・予算的にも困難である。
中にはどう足掻いてもプログラムの構造的にバグが出る・消えない事だってある。
その為、余程悪影響が出るバグでもない限りは、放置される事も珍しくない。

あまりにバグが酷いゲームは「バグゲー」とも呼ばれ、そのままクソゲーと化す場合も多い。
またバグは基本的に攻略本やゲーム雑誌ではあまり公開されないので、プレイヤー同士の情報交換がバグ回避の最良の手段となる。


バグを減らするためのオススメは?

  • システムログを見る
  • 先に数行程度のコードを書いて動作の確認をする
  • try catch文のような例外処理を入れる
  • デバッグフラグをつけて、trueの時に各種必要な変数の表示をさせる
  • フローチャートなり仕様書なりを図表を交えてちゃんと書く
  • オライリー Huckシリーズを熟読する
  • if文乱用を避け、else文、else if文、switch文でコードをスッキリさせる
  • 定数は大文字で定義、クラスはsetAniotaWikiのように2個目以降の単語の頭文字を大文字にするなど記述のルールを決める
  • goto文の乱用でスパゲティにしない
  • 関数を小型化・単機能化する
  • 関数名、変数名は面倒でもわかりやすいようにつける
  • 再帰的な記述はなるべく避け、処理ごとの階層を合わせる
  • 使っている/使おうとしているAPIがどういう原理で動いているのか知っておく
  • 使っている/使おうとしているAPIの対応/非対応バージョンを確認しておく
  • コメントは面倒でも「どういう意図でその記述をしたのか」しっかり分かりやすくつける
  • テストケースに漏れがないよう、条件と期待値のマトリクスをしっかり作成する
  • 工程を最後まで進める前に、進捗ごとに複数人でのレビューを行う
  • プロジェクトチームへの報連相を欠かさない
  • 現在と過去のソースの差分がわかりやすいよう、Gitなどでバージョンを管理しておく
  • 非同期処理は特に念入りに動作の順番を確認しておく
  • 動作が重複するとまずい機能はブロッキング処理を入れる


プログラマーの心構えとして

プログラムは書けば書くほど、複雑になればなるほどバグが増えやすくなるので、
普段から簡単で分かりやすいプログラムを書くよう心構けると、自然にバグの数は減っていくだろう。
その為にも、プログラムが何処で、何をしているかをしっかり把握出来る様にするのがベスト。
自分が書いたコードの意図を他人に説明できることは最低条件である。
そうすることで懸念点の指摘を貰いやすくなり、修正もよりスムーズになる。

もちろん、デバッグにきちんと時間と労力をかけるのを忘れないように。
特に商品として世に出すのなら、デバッグにかける時間を十分に確保するようにしたい。
何故なら、デバッグにかけた労力はそのまま製品の完成度に直結する。
動けばいいやなんて根性でデバッグを軽視したら後で痛い目見ること間違いなし。
その為にも、製作期間はゆとりを持って確保したいところである。

また、将来プログラムをさらに改造していくのは自分だけとは限らない。むしろ他人から引き継いだプログラムを弄る作業もかなり多い。
こういう時に誰も読み方がわからないようなコードだと「ブラックボックス化」し、そのプログラムは再利用できなくなってしまう。訳のわからないプログラムを弄ったところで余計に何が何だかわからなくなるだけだ。
仕様書や可読性の高い記述が重要視されるのは、そういった面もあることを忘れてはならない。
開発速度も勿論大事だが、それで保守性を疎かにすると後々取り返しの付かないことに……なんてことも。


プレイヤーによるバグの利用

中にはそのバグを逆手に取り有効利用する技もあり、通称「バグ技」と呼ばれ、裏技の一種として扱われる事もある。
バグ技を使えばアイテムやお金を手軽に増殖したり普段行けない場所に行けたりしてしまうが、
作品によっては使いすぎるとデータを破損したり元の場所に戻れなくなったりする諸刃の剣。
バグ技の使用は自己責任で。
一部のRTAではバグを利用した壁抜けやフラグ無視などが必須テクニックとなっている場合がある。

たとえ何の弊害が無くとも、もともとバグ技はグレーゾーンな行為のためその使用を快く思わない人も多いので、
あまり使用した事を公開するのも良くない。

また、オンラインゲームであればバグを利用したDUPE行為などは、プレイヤーの格差(=ゲームの存続)に影響しかねない為、規約違反である場合がほとんど。
過去の例としてMHF-Gでは、シジルというアイテムの無限生産バグが見つかった際、
それを利用して無限生産を行った者・行おうとした者含めて全員アカウント永久停止(垢BAN)という処分が行われた。

ただ、ゲームソフトは他のソフトウェアと異なり「感性に訴えるもの」であるため、「このバグがあると面白くなる」と判断された場合は積極的に放置され、続編や派生作品で仕様に組み込まれたりする。
「活用すると連続技の爽快感が出る」という理由でデバッグされなかったストリートファイターⅡのキャンセル技がこの典型例である。
そのため、ゲームの進行に支障をきたす内容でなければ、絵面が愉快なバグやテクニックとして導入されているバグが修正されると逆に残念がられることも。


便利な言葉?

ゲームにおいて、理解できない状況や気に入らない仕様を何でもかんでも「バグだ!」と認定するプレイヤーがいて物議を醸す。
「対戦で負けたのは、バグで相手がワープしたからだ!」といった具合で、気に食わない状況を「バグ」と表現するプレイヤーは後を絶たない。
何でもかんでもバグのせいにするよりもまず自分の行いをじっくり省みよう。バグ認定はそれからでも遅くない。

また、近年ではSNSでのバズ狙いやアフィリエイト目的で、何でもかんでもバグと騒ぎ立てる行為が問題視される事もある。
こちらは完全に故意で騒ぎ立てる分、悪質さがより際立っている。

どちらにしても、本人の技術や勘違いに起因する問題である為、まともなプレイヤーからは煙たがられやすい。

だが、報告者の勘違いだと思われていた現象が実際バグだったというケースもある、
すぐに「それはバグじゃない、お前の勘違いだ」と決め付けるのもそれはそれでお門違い。
再現性の低いバグもある為、冷静に検証する必要がある。

なお、チートをバグ技という事も多々あるが、実査は全くの別物。
チートは非正規の外部ツールを利用するものであり、プログラム単体で成立するバグ技とは原理が根本から異なる。
確かにどちらも製作者の想定外という点だけ見れば同じではあるが、チート≠バグ技である事は念頭に置いておきたい。
改造(ゲーム)の方も参照。
ちなみにチートで意図的にバグを起こし通常ではありえないプレイをする界隈も存在する。
こちらは自分に有利にゲームを進めることではなく、不自然かつ奇想天外な動作そのものを鑑賞して楽しむことを目的としている。


余談

パッチを当てた結果
  • フリーズ頻度増加、ゲームスピードの低下、表示&操作バグなど問題点が増えた「ジャンライン」
  • 再起動する度にユニットが全消滅する*1最悪のバグが混入した「アジト×タツノコレジェンズ」
などのようにパッチでより酷い事になった事例も存在する。

ポケットモンスター 赤・緑」はセレクトボタン絡みのバグのあまりの多さから、
「セレクトボタンを押すとなにかしらバグるゲーム」とまで言われた過去がある。
ただし、バグらせるには意図的な操作が必要かつ遊べるバグも多く、個性として受け入れられている面も。
3DSのバーチャルコンソール版でも修正されていない。

モータルコンバット(以下MK)シリーズの登場人物、アーマックはバグから生まれたキャラとして有名。
初代MKにおいて、カラー情報のバグによりレプタイルの装束の色が本来のではなくソニアの2Pカラーであるになってしまう現象が発生した。
しかしプログラマーのエド・ブーン氏はバグを認めず、「あれは隠しキャラのErmac(Error Macro)だ」と説明。
その後、UMK3よりアーマックは正式に実装され、ケンシに超能力の極意を授けるなどMKの世界観構築にも一役買っている。

ベセスダ・ソフトワークスの開発したSkyrim及びfallout4は共にGOTYを受賞し、しばしばセット販売される神ゲーなのだが、同時に致命的なバグが山積みで中にはメインクエストが進行不能になるものさえ存在する。故に誰が呼んだか界隈では500時間遊べるクソゲーとよばれる。
「アルドゥインが来るぞ!!」 ←※来ません


この項目が追記修正されないのはバグだ!!

この項目が面白かったなら……\ポチッと/

+ タグ編集
  • タグ:
  • プログラム
  • バグ
  • ミス
  • 便利な言葉
  • bug
  • glitch
  • 仕様です(キリッ
  • 多少のバグは仕方がない
  • バグ技
  • ≠チート
  • プログラミング
  • ゲーム用語
  • ゲーム
  • アプリ
  • アップデートで修正される事もある
  • 仕様です
  • デバッグ
  • ソフトウェア
  • バグゲー
  • クソゲー
  • ≠仕様
  • グリッチ
  • フハハハハ…怖かろう!
  • アニヲタIT教室
  • 不具合
  • 設定ミス
  • 設計ミス
  • フリーズ
  • バグる

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2024年01月18日 20:43

*1 通称:賽の河原バグ