メルマガバックナンバー 第15回
こんにちは、プログラミング書籍の館の江畑です。
前回から失踪を心配するレベルに間が空いちゃいました…
断じて、けもフレ2にショックを受けたわけではなく、アプリのバージョンアップをしてました。
Androidが意味不明な動作をし、Appleは無慈悲に互換性を切り捨てやがる。
Titaniumというマイナーな開発環境なので、ググってもなかなか解決策が得られずシャウトしてました。
でも今回勉強になったのは
バグ究明や技術調査を探偵気分で楽しめると強い!
って事です。
毎回は無理でも、時々そういう態度でコードに向かうよう心掛けたいと思いました。
もくじ
デバッグ効率を上げる5つの習慣
という体験をしたので?今回のテーマはデバッグです。
今すぐ簡単に試せて、バグの解決に役立つコツを5つ紹介します。
簡単な習慣だよワトソン君。
1、まず観察する
バグに遭遇した時、よく分からないまま勘で修正してはいけません!
まず何が起こってるのか? を知るのが大切です。
名探偵に習って事件の情報を集めましょう。
具体的には print文 を挿入します。目的は次の2つだけです。
・変数の中身を出力してみる
・どこまで呼ばれたかを確認する
print文 を挿入する箇所は、この2点を基準に決めて下さい。
また、デバッガ(ブレークポイント)を使うのも有効です。
ただ私の経験上、デバッガは少し原因の予測が付いた時に使うのをお勧めします。
究明が進んでない段階でデバッガに頼っても、あまり役立った記憶がありません。
デバッガは便利ですが、情報を全体的に見たりパターンを探すのは苦手です。
大まかな原因究明は print文 や ロギング が有効だと思います。
2、一箇所ずつ直す
バグを修正する時に気を付けて欲しいのは複数箇所を同時に直さないことです。
例えばセーブが上手く行かない時
「セーブデータの生成処理」と「ファイル命令の呼び方」を一気に直して実行する
これは止めた方が良いです。
なぜなら結果が変化してもどちらが原因か?が分からないからです。
ちなみに私は今月コレをやってしまい、時間を浪費しました。
いくら両方怪しくても、まず片方だけ直して観察しましょう。
そして予想通り失敗したなら、もう一方を修正すれば良いのです。
人間の思い込みは恐ろしいもので実は原因は全く違う所にあるケースも多々あります。
よっぽどの確信が無い限り、同時に複数箇所を直すのは避けるべきです。
名探偵は短絡的にならず、コツコツと真相に迫るわけですね。
3、わざと失敗してみる
バグを発見したら、今度はそのバグを100%起こしてみましょう。
つまり、どんな手順や条件で発生するのか? を確定させます。
操作方法を色々試すのが基本ですが、その時の状況(時間・回数・負荷・ハードなど)を記録するのも大事です。
また操作が面倒なら、最初から典型的なデータを変数にぶち込んでメソッドを呼んでやりましょう。
怪しい値を変数の初期値にして実行するわけです。
私の経験ですが、あるパターンのセーブデータをバイナリエディタで作って、ロードのバグを突き止めた事もあります。
こうやって事件を確実に起こせたなら、解決したも同然です(ちょっと言い過ぎか)。
4、最後に動いていた時から何をしたか? を思い出す
何もしてないのに動かなくなった!
こんな経験ありませんか?
そんな時はその間に何があったかを考えてみましょう。
実はほんの些細な変更をしていて、すっかり忘れていた可能性もあります。
ちなみに私は先週これをやりました。
1日の最後に不要な部分を消したつもりが、閉じカッコも抹殺してしまい翌日いきなりコンパイルエラー100個出しました。
また意外な所では次のようなのもあります。
・OSやツールのバージョンアップ
→特に自動のやつは怖い!
・ハードを変えた
→あるコントローラで発生した学生がいました
・別のソフトをインストールした
↓むかしAppleのQuickTimeは、環境変数をぶっ壊しコンパイル不能にしてくれました
https://torutk.hatenablog.jp/entry/20051030/p1
関係ないと思ってたら実は関係あった…なんてケース枚挙にいとまがないです。
名探偵は思い込みを排除して推理し、意外な真相を気付かせてくれます。
5、エラーメッセージでググる
上の4つと違って、実に即物的な方法です。
エラーメッセージの意味が分からなかったら、それでググりましょう。
運が良ければ、同じ問題でハマっていた人のブログや掲示板が見付かります。
特に英語のエラーメッセージで有効な戦術です。
私も先週「iTunes Store」にアプリをアップロードしようとしたら、英語で脅しみたいな警告を喰らいました。
呼んでもイミフだったので、警告内容でググったら情報が大量に見付かり、5分で解決しました。
どんなマイナーなエラーでも、世界には同じ問題を克服した人がいるかもしれません。
こういう時インターネットって素晴らしい!と心底思いますね。
Twitterハイライト
メルマガ出さないくせに色々つぶやいてましたスミマセン
これ崖の上で吠える◯ッキーマウスに見えへん?
これ崖の上でミッキーマウスが吠えているように見えません? pic.twitter.com/hDuCdYKqo0
— K-Eba@プログラミング書籍の館 (@EndymionProgram) April 25, 2019
パンチとキックのある野球ゲーム
パワプロの原点?
コナミ がんばれペナントレース! 1989年
高低のある投球・コミカルな演出が、少しパワプロっぽい?面白いのはレアイベント「乱闘」
ライフ制バトルになり、パンチ&キックで戦いますが
なぜかKOされた方が退場し、勝者はそのまま試合に出れます#レトロコンシューマー愛好会 pic.twitter.com/KJmKoLI11G— K-Eba@プログラミング書籍の館 (@EndymionProgram) April 5, 2019
愛人をつくるには、どうしたらいいのですか
チビッコから編集部に届いたお便り
愛人をつくるには、どうしたらいいのですか。でもこれ健全な質問なんです#レトロコンシューマー愛好会 pic.twitter.com/daMMrQu5Vr
— K-Eba@プログラミング書籍の館 (@EndymionProgram) April 3, 2019
悪魔城伝説 幻の5人目の仲間
プレイヤーキャラが1人多い!?
悪魔城伝説 当時の雑誌よりラルフ、サイファ、アルカード、グラントに加え
バンパイアなる人物が…つまり没キャラ火の玉と格闘で攻撃し、コウモリ・狼男に変身可能
…と結構な高スペック、使ってみたかった
あとサイファが美男子だ#レトロコンシューマー愛好会 pic.twitter.com/dWibKrqBQj— K-Eba@プログラミング書籍の館 (@EndymionProgram) March 20, 2019
ドラクエの「つるぎ」と「けん」の違い
(続き)
ドラクエの「つるぎ」と「けん」の違いは何?この質問の答えは当時かなり衝撃だった
今でも講義で情報量の話をする時ネタにしてます#レトロコンシューマー愛好会 pic.twitter.com/VHMGCgkLUY— K-Eba@プログラミング書籍の館 (@EndymionProgram) February 15, 2019
種類が多すぎる!ドラクエ4の広告
ドラクエ4は発売が延びに延びた為、広告のパターンが驚くほど多彩!
その数、軽く20を超えますキャラ・魔法・モンスター・アイテムなど
ポイントを一つ一つ新規イラストで楽しませてくれました
今回はその一部アリーナ編
ミナデイン編
マネマネ編
銀のタロット編#レトロコンシューマー愛好会 pic.twitter.com/seOqevJeQx— K-Eba@プログラミング書籍の館 (@EndymionProgram) February 7, 2019
クイズあのゲームの文字?? の答え
さて、前回出題したクイズあのゲームの文字??の答えです。
こんな問題でした。
次の○に入る文字は何でしょうか?
か → こ → く → ぜ → ○ → け
ヒント
・ある有名ゲームに関する問題です
・プログラミングを知らなくても解けます。
正解は ね でした。
これ、ファイナルファンタジーのラスボスの頭文字になってます。
1 カオス
2 皇帝
3 暗闇の雲
4 ゼロムス
5 ネオエクスデス
6 ケフカ
ってな具合です。
今回は2人の方に応募いただき、2名とも正解でしたパチパチ。
お二人にはAmazonギフト券を送信しました。
ファファファ豪遊するが良い。
クイズなんの英単語?
では今回のクイズです。
次の英単語にはある共通点があります。
それは何でしょうか?
Cafe, Bad, Dead, Face, Beef
応募は本メールに返信すればOKです。
正解した方の中から抽選で3名様に、Amazonギフト券コード(500円)を送信致します。
締切は次号の配信まで。ご応募お待ちしてます!
※募集は終了しました
今回はここまでです。読んでいただきありがとうございました。
プログラミング書籍の館 江畑