【あさーしょん】

アサーション とは?

💡 「こうなってるはずだよね?」をコードで書く安心チェック
📌 このページのポイント
アサーション(Assertion)の仕組み assert(expected == actual) PASS 条件が成立 → 処理を続行 FAIL 条件が不成立 → エラー発生 assert(1+1 == 2) → 正常に通過 assert(1+1 == 3) → AssertionError! 条件が真(True)か偽(False)かで分岐する
アサーションのイメージ
ひよこ ひよこ

アサーションって何に使うの?

ペンギン先生 ペンギン先生

プログラムの中で「ここではこの条件が成り立つはず」と宣言するんだよ。たとえば「この変数は絶対に0以上のはず」って書いておくと、もし負の値になったら即エラーになるんだ

ひよこ ひよこ

if文でチェックするのとは違うの?

ペンギン先生 ペンギン先生

if文は「もし〜なら」という分岐だけど、アサーションは「絶対にこうなっているはず」という前提の表明なんだよ。失敗したら「バグがある」という意味だから、普通のエラー処理とは目的が違うんだ

ひよこ ひよこ

テストでもよく使うって聞いたんだけど?

ペンギン先生 ペンギン先生

そうだよ!単体テストでは assert(expected == actual) という形で「期待する値と実際の値が一致するか」をチェックするのが基本パターンなんだ。assertEquals、assertTrue、assertNullなど色々な種類があるよ

ひよこ ひよこ

アサーションが失敗したらどうなるの?

ペンギン先生 ペンギン先生

AssertionErrorという例外が発生して、プログラムが止まるんだよ。テストなら「このテストは失敗」と表示される。本番コードでは、言語によってはアサーションを無効化できる仕組みもあるんだ

ひよこ ひよこ

無効化できるなら、本番では使わないほうがいいの?

ペンギン先生 ペンギン先生

本番では「起きてはならない状態」の検出に使うのがベストプラクティスだよ。Javaでは -ea フラグで有効化、Pythonでは -O フラグで無効化できる。ただし入力チェックの代わりにアサーションを使うのはNGで、あくまで開発者が『ここは絶対にこうなるはず』と確信している箇所に使うものなんだ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「アサーション」って出てきたら「この条件が成り立つはず!と宣言するコードの安全チェック」と思えればだいたいOK!
📖 おまけ:英語の意味
「Assertion」 = 表明・主張
💬 英語の assert は「断言する」という意味。「この時点でこの値は絶対に正しい!」と断言するニュアンスから来ているんだよ
← 用語集にもどる