{"record":{"id":"5135ccbcea87a43b","repo":"krahets/hello-algo","slug":"error-5135cc","errorCode":null,"errorMessage":"スタックは空です","messagePattern":"スタックは空です","errorType":"exception","errorClass":"IndexError","httpStatus":null,"severity":"error","filePath":"ja/codes/ruby/chapter_stack_and_queue/linkedlist_stack.rb","lineNumber":41,"sourceCode":"  ### プッシュ ###\n  def push(val)\n    node = ListNode.new(val)\n    node.next = @peek\n    @peek = node\n    @size += 1\n  end\n\n  ### ポップ ###\n  def pop\n    num = peek\n    @peek = @peek.next\n    @size -= 1\n    num\n  end\n\n  ### スタックトップ要素を参照 ###\n  def peek\n    raise IndexError, 'スタックは空です' if is_empty?\n\n    @peek.val\n  end\n\n  ### 連結リストを Array に変換して返す ###\n  def to_array\n    arr = []\n    node = @peek\n    while node\n      arr << node.val\n      node = node.next\n    end\n    arr.reverse\n  end\nend\n\n### Driver Code ###\nif __FILE__ == $0","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/krahets/hello-algo/blob/69932aed1891a7b7f6a0de88cd116d3fe13e7032/ja/codes/ruby/chapter_stack_and_queue/linkedlist_stack.rb#L23-L59","documentation":"Raised by LinkedListStack#peek (ja) on an empty stack. The class stores its top in `@peek`, and `pop` is `num = peek; @peek = @peek.next; @size -= 1` — so both `peek` and `pop` on an empty stack fail at this same raise (line 41). It guards against dereferencing nil @peek.","triggerScenarios":"Calling `stack.peek` or `stack.pop` after the last element was popped, or on a never-pushed stack. Any pop loop that overshoots triggers it.","commonSituations":"Unwinding/popping all frames then popping once more; an algorithm that pops until empty and then peeks to verify; mismatched push/pop counts in a driver.","solutions":["Guard with `stack.is_empty?` before peek or pop.","Drive pop loops with `while stack.size > 0` (or `until stack.is_empty?`).","For optional behavior, wrap pop in a helper returning nil on empty instead of raising."],"exampleFix":"// before\nstack.pop  # raises 'スタックは空です' when empty\n\n// after\nval = stack.is_empty? ? nil : stack.pop","handlingStrategy":"validation","validationCode":"val = stack.pop unless stack.is_empty?","typeGuard":"def stack_nonempty?(s) = !s.is_empty?","tryCatchPattern":"begin\n  val = stack.pop  # also covers peek\nrescue IndexError\n  val = nil\nend","preventionTips":["Guard both peek and pop with is_empty? (pop routes through peek).","Drive pop loops with `while stack.size > 0`.","Track push/pop balance externally."],"tags":["ruby","stack","linkedlist","empty-state","index-error"],"backgroundTag":null,"analyzedSha":"69932aed1891a7b7f6a0de88cd116d3fe13e7032","analyzedAt":"2026-08-13T23:02:37.581Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}