忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【開発技術】エラーはいつ見つける?「静的型付け」と「動的型付け」|情報処理問題1000本ノック

プログラミング言語が変数の「データ型(数値や文字列など)」をいつ、どのようにチェックするのか。開発の安全性とスピードを左右する2つの型付け手法を攻略しましょう。

1. 【 問題 】:プログラミング言語の特性

【 問題 】 プログラミング言語のデータ型の扱いに関する記述のうち、適切なものはどれでしょうか?

① 静的型付け言語では、プログラムの実行時に変数の型が決定されるため、実行速度が高速になる。
② 動的型付け言語では、コンパイル時に厳密な型チェックが行われるため、データ型の不一致によるエラーを実行前に検知できる。
③ 静的型付け言語では、ソースコードの記述段階やコンパイル時に変数の型が決定されるため、型に関するバグを実行前に発見しやすい。
④ 動的型付け言語では、変数の型をあらかじめ宣言する必要があるため、大規模開発におけるコードの可読性が高まる。

2. 正解:

正解: ③ 静的型付け言語では、ソースコードの記述段階やコンパイル時に変数の型が決定されるため、型に関するバグを実行前に発見しやすい。

3. 解説:型をチェックする「タイミング」の違い

「型付け(Typing)」とは、変数に入れるデータの種類(整数、文字列、配列など)のルールのことです。このルールを「実行前」に決めるか、「実行しながら」決めるかが決定的な違いです。

【2つのアプローチの特徴比較】

■ 静的型付け(Static Typing)
いつ決まる?:プログラムを実行する前(コード記述時やコンパイル時)。
メリット:間違った型を代入しようとすると、実行前にエラー(コンパイルエラー)が出るため安全。大規模開発向き。
代表例:Java, C++, TypeScript, Go, Rustなど。

■ 動的型付け(Dynamic Typing)
いつ決まる?:プログラムを実行している最中(値が代入された瞬間)。
メリット:型をいちいち宣言しなくてよいため、コードが短く済み、素早く開発できる。試作向き。
代表例:Python, JavaScript, Ruby, PHPなど。
[ 選択肢のひっかけポイント ]
★ ①:実行時に型を決めるのは「動的型付け」です。
★ ②:コンパイル時にチェックするのは「静的型付け」です。
★ ④:事前に型を宣言する必要があるのは「静的型付け」です。

1. 理解のコツ: 荷物を送る「段ボール箱」をイメージしてください。あらかじめ「これは割れ物用」「これは本用」と箱にラベルを貼って指定するのが静的型付けです(違うものを入れると怒られます)。一方、中身を詰めてガムテープを貼った瞬間に「あ、これは本箱ね」と決まるのが動的型付けです。
2. 試験対策の視点: 「コンパイル時に型が決定する=静的」「実行時に型が決定する=動的」という対応関係を確実に覚えましょう。近年はJavaScript(動的)に型を導入したTypeScript(静的)が主流になるなど、トレンドとしても非常によく狙われるテーマです。


4. まとめ

「エラーを実行前に潰せる安全な静的型付け」と、「素早く柔軟にコードが書ける動的型付け」。これがプログラミング言語の2大特性です。それぞれのメリット・デメリットを正しく理解することが、堅牢なソフトウェア設計への第一歩です。


PR

【情報セキュリティ】誰?と何ができる?は違う!「認証」と「認可」|情報処理問題1000本ノック

情報セキュリティを学ぶ上で、避けて通れないのが「認証」と「認可」の区別です。言葉は似ていますが、役割は全く異なります。今回はその決定的な違いを攻略しましょう。

1. 【 問題 】:アクセス制御の基本

【 問題 】 情報セキュリティにおける「認証」と「認可」の説明として、適切なものはどれでしょうか?

① 認証は「本人であるか」を確認することであり、認可は「特定の操作を許可する権限」を与えることである。
② 認証は「特定の操作を許可する権限」を与えることであり、認可は「本人であるか」を確認することである。
③ 認証と認可は同じ意味であり、どちらもパスワードの入力によって完了するプロセスを指す。
④ 認証はシステムの「可用性」を高めるための手続きであり、認可は「機密性」を高めるための手続きである。

2. 正解:

正解: ① 認証は「本人であるか」を確認することであり、認可は「特定の操作を許可する権限」を与えることである。

3. 解説:「Who are you?」と「What can you do?」

この2つは独立した概念ですが、システムでは基本的に「まず認証して相手を特定し、その後に認可を行って権限を与える」という順番で処理されます。

【認証と認可の明確な違い】

■ 1. 認証(Authentication)
・目的:「あなたは誰(本人)か?」を確認する。
・手段:ID/パスワード、指紋や顔(生体認証)、ワンタイムパスワードなど。

■ 2. 認可(Authorization)
・目的:「あなたに何を許可するか(権限)?」を決める。
・手段:閲覧のみ/編集可能といった「アクセス権限(ACL)」の割り当て、管理者ロールの付与など。
[ 現実世界の身近な例:ホテルの宿泊 ]
認証:フロントで身分証を見せて「予約した本人」だと証明する手続き。
認可:渡された「ルームキー」。これにより、自分が予約した「301号室」のドアだけを開けられる(スイートルームや他人の部屋は開けられない)権限。

1. 理解のコツ: 英語のフレーズで覚えるのが最も確実です。認証は「Who are you?」、認可は「What can you do?」。この2文を頭に叩き込んでおけば、試験で絶対に迷わなくなります。
2. 試験対策の視点: 選択肢②のように、説明をあべこべ(逆)にして受験生を引っかける問題が定番です。また、近年は異なるWebサービス間で安全に「認可」の情報を渡すプロトコルである「OAuth(オーアース)」などの応用技術とも結びついて出題されます。


4. まとめ

「相手が誰かを確かめるのが認証」、「その相手に許可する行動を決めるのが認可」。これがアクセス制御の鉄則です。この2つが正しく組み合わさることで、初めて安全なセキュリティ環境が実現します。


【情報セキュリティ】バグや矛盾を許さない!「信頼性」|情報処理問題1000本ノック

情報セキュリティの7要素を解説するシリーズ、いよいよ最終回です!今回は、システムが期待通りに正しく機能し続けることを指す「信頼性」を攻略しましょう。

1. 【 問題 】:セキュリティの付加特性

【 問題 】 情報セキュリティの要素の中で、システムや処理が、意図した通りの動作や結果を一貫して出力し、不具合や矛盾が生じない特性を指すものはどれでしょうか?

① 真正性(Authenticity)
② 責任追跡性(Accountability)
③ 否認防止(Non-repudiation)
④ 信頼性(Reliability)

2. 正解:

正解: ④ 信頼性(Reliability)

3. 解説:処理の「正確さ」と「確実性」を担保する

信頼性とは、システムが勝手に誤作動を起こしたり、計算ミスをしたり、データの間違った書き換え(処理の矛盾)を起こしたりしない状態を指します。

【 情報セキュリティの7要素:総まとめ 】

[ 基本の3要素:CIA ]
1. 機密性 (C):漏洩防止。許可された人だけが使える。
2. 完全性 (I):改ざん防止。情報が正確で最新である。
3. 可用性 (A):停止防止。必要な時にいつでも使える。

[ 付加的な4要素 ]
4. 真正性:なりすまし防止。本人が作成したと証明できる。
5. 責任追跡性:ログの証拠。誰がいつ何をしたか追跡できる。
6. 否認防止:しらばっくれ防止。後から事実を否定できない。
7. 信頼性「処理の確実性」。意図した通りに正しく動作する。 ← ココ!

「意図した通りの動作や結果」「不具合がない」は、信頼性の定義です。
[ 可用性(Availability)との違いに注意! ]
可用性(A):システムが「稼働し続けている(止まらない)」こと。
信頼性(Reliability):稼働しているシステムが「正しい結果を出す(バグらない)」こと。
→ サーバーはずっと動いている(可用性は高い)けれど、計算結果が毎回バグだらけ(信頼性は低い)という状態があり得るため、試験では明確に区別されます。

1. 理解のコツ: 「ベテランの職人さん」をイメージしてください。いつも遅刻せずに出勤してくるのが「可用性」で、いざ仕事を頼んだら、絶対にミスなく完璧な製品を仕上げてくれるのが信頼性です。
2. 試験対策の視点: 「意図した通りの動作」「不具合や矛盾が生じない」「一貫した出力」という言葉が揃ったら信頼性が正解です。また、信頼性を測定する指標として「MTBF(平均故障間隔)」などの計算問題と結びつくこともあります。


4. まとめ

「システムや処理が、バグや矛盾なく期待通りの結果を出し続ける特性」。これが信頼性です。これで情報セキュリティの7要素(CIA + 4特性)がすべて出揃いました!それぞれの違いを網羅的に押さえて、試験での確実な得点源にしましょう。


【情報セキュリティ】「やってない」とは言わせない!「否認防止」|情報処理問題1000本ノック

情報セキュリティの7要素を解説するシリーズ。今回は、操作や取引が行われた事実を後から否定させない「否認防止」を攻略しましょう。

1. 【 問題 】:セキュリティの付加特性

【 問題 】 情報セキュリティの要素の中で、事象や行動が後から否定されないように、その発生を証明する特性を指すものはどれでしょうか?

① 真正性(Authenticity)
② 責任追跡性(Accountability)
③ 否認防止(Non-repudiation)
④ 信頼性(Reliability)

2. 正解:

正解: ③ 否認防止(Non-repudiation)

3. 解説:取引の「言い逃れ」を防ぐ絶対的な証拠

否認防止とは、電子取引やデータの送受信において、「確かにその操作が行われた」という客観的な事実を証明し、当事者が後から「そんなことは知らない」と主張するのを防ぐ状態です。

【 情報セキュリティの7要素:再掲 】

[ 基本の3要素:CIA ]
1. 機密性 (C):漏洩防止。
2. 完全性 (I):改ざん防止。
3. 可用性 (A):停止防止。

[ 付加的な4要素 ]
4. 真正性:なりすまし防止。本人が作成したと証明できる。
5. 責任追跡性:ログの証拠。誰がいつ何をしたか追跡できる。
6. 否認防止「しらばっくれ防止」。後から事実を否定できない。 ← ココ!
7. 信頼性:意図した通りに正しく動作する。

「後から否定されないように発生を証明する」は、否認防止の定義です。
[ 具体的な対策例 ]
デジタル署名(公開鍵暗号の応用):送信者の秘密鍵で署名するため、「本人がそのメッセージを送った」という動かぬ証拠になり、否認を防げます。
タイムスタンプ(タイムスタンプ局の利用):ある特定の時刻に、そのデータが確かに存在していたことを第三者機関が証明します。
ブロックチェーン:取引履歴がネットワーク全体で共有され改ざんできないため、取引の事実を後から否認することが不可能です。

1. 理解のコツ: 現実世界の「契約書と実印(またはサイン)」をイメージしてください。実印が押された契約書が残っていれば、後から「私はそんな契約結んでいません」と言い張っても通用しませんよね。この法的・客観的な証拠能力をデジタル上で持たせるのが否認防止です。
2. 試験対策の視点: 「後から否定されない」「発生(事実)を証明する」「しらばっくれ防止」というフレーズがあれば否認防止(ノンレピュディエーション)が正解です。特に「デジタル署名」の目的としてセットで出題されるケースが非常に多いです。


4. まとめ

「事象や行動が後から否定されないように、その発生を証明する特性」。これが否認防止です。インターネット上の電子商取引(ネットショッピングや電子契約)において、ビジネスを安全に成立させるための根幹となる要素です。


【情報セキュリティ】行動の足跡を見逃さない!「責任追跡性」|情報処理問題1000本ノック

情報セキュリティの7要素を解説するシリーズ。今回は、システム内での行動を後から辿れるようにする「責任追跡性」を攻略しましょう。

1. 【 問題 】:セキュリティの付加特性

【 問題 】 情報セキュリティの要素の中で、ある実体の動作が、その動作から元となる実体まで一意に追跡できることを確実にする特性を指すものはどれでしょうか?

① 真正性(Authenticity)
② 責任追跡性(Accountability)
③ 否認防止(Non-repudiation)
④ 信頼性(Reliability)

2. 正解:

正解: ② 責任追跡性(Accountability)

3. 解説:デジタル上の「指紋」と「足跡」を残す

責任追跡性とは、システムで発生したイベント(ログイン、ファイル操作、設定変更など)を、それを行ったユーザーやプログラムと正確に紐づけて後から検証できる状態のことです。

【 情報セキュリティの7要素:再掲 】

[ 基本の3要素:CIA ]
1. 機密性 (C):漏洩防止。
2. 完全性 (I):改ざん防止。
3. 可用性 (A):停止防止。

[ 付加的な4要素 ]
4. 真正性:なりすまし防止。
5. 責任追跡性「ログの証拠」。誰がいつ何をしたか一意に追跡できる。 ← ココ!
6. 否認防止:しらばっくれ防止。後から事実を否定できない。
7. 信頼性:意図した通りに正しく動作する。

「一意に追跡できる」「動作の元を辿れる」は、責任追跡性の定義です。
[ 具体的な対策例 ]
詳細なアクセスログの取得:操作日時、IPアドレス、実行ユーザーIDなどの履歴を厳重に記録する。
アカウントの個別化:1つのID(例:admin)を複数人で使い回さず、1人1IDを徹底することで「動作の元」を特定可能にする。
タイムスタンプの同期(NTP):複数の機器でログの時間を一致させ、一連の行動のタイムラインを正しく追跡できるようにする。

1. 理解のコツ: 防犯カメラが回っている「お店」をイメージしてください。誰かが商品を動かしたとき、カメラの映像(ログ)を巻き戻せば、どの人物(実体)が動かしたのかがバッチリ特定できますよね。この「犯人探しや原因究明ができる状態」が責任追跡性です。
2. 試験対策の視点: 「一意に追跡できる」「元となる実体まで辿れる」「ログの管理」という表現が出たら「責任追跡性(アカウンタビリティ)」を選びましょう。次回解説する「否認防止(後からやってないと言わせない)」と非常に深い関係にあります。


4. まとめ

「システム内の行動を、その実行者まで確実に遡れる状態」。これが責任追跡性です。万が一のインシデント(セキュリティ事故)発生時に、被害の拡大を防ぎ、迅速な原因究明を行うために不可欠な要素です。


【コンピュータシステム】光で世界を立体的に捉える!「LiDAR」|情報処理問題1000本ノック

電波ではなく「光」を使うことで、周囲の障害物の形や距離を目にも留まらぬ速さでスキャンする。自動運転の「目」となる注目技術、LiDARを攻略しましょう。

1. 【 問題 】:センサ技術と自動運転

【 問題 】 自動運転システムや3次元マッピングなどで広く用いられている技術で、対象物に向けてレーザー光を照射し、それが反射して戻ってくるまでの時間や波長の変化を測定することで、対象物までの距離や形状を精密に計測する仕組みはどれでしょうか?

① RADAR(レーダー)
② SONAR(ソナー)
③ LiDAR(ライダー)
④ インクリメンタルエンコーダ

2. 正解:

正解: ③ LiDAR(Light Detection And Ranging / ライダー)

3. 解説:レーザー光が作る3Dマップ

LiDARは、1秒間に数十万回以上ものレーザー光を周囲に照射し、跳ね返ってきた光のデータを集めることで、周囲の環境をリアルタイムに「点群(ポイントクラウド)データ」として3次元モデル化します。

【他のセンサ技術との違い】

■ LiDAR(光)
特徴:レーザー光(赤外線など)を使う。波長が短いため、障害物の「精密な形や位置」をクッキリ捉えるのが大得意。

■ RADAR(電波)
特徴:電波(ミリ波など)を使う。悪天候(雨や霧)に強く、遠くの物体を検知するのが得意だが、詳細な形を識別するのは苦手。

■ SONAR(音波)
特徴:超音波を使う。主に水中(潜水艦)や、車のバックセンサなど至近距離の検知に使われる。
[ 身近な活用例 ]
自動運転車:ルーフやバンパーに搭載され、歩行者や他車、道路の白線などを検知する。
スマートフォン:高級スマホのカメラ付近に搭載され、暗い場所でのピント合わせや、AR(拡張現実)の空間認識に活躍している。

1. 理解のコツ: やまびこ(山彦)の光バージョンです。「ヤッホー」と叫んで返ってくる時間で山までの距離を測るように、光を発射して戻る時間(Time of Flight: ToF)を計算して、瞬時に周囲の3Dマップを作り上げます。
2. 試験対策の視点: 「光(レーザー)を放射」「反射光から距離を測定」「自動運転」というキーワードの組み合わせが出たらLiDARが正解です。電波を使う「RADAR(レーダー)」との違いが非常によく狙われます。


4. まとめ

「レーザー光を使って、物体の距離や形状を正確に測定する技術」。これがLiDARです。自動運転レベル3以上の高度なシステムや、スマート都市(スマートシティ)における空間認識の基盤として、今後ますます出題が増えるトレンド用語です。


【ブロックチェーン】自動で契約を執行する!「スマートコントラクト」|情報処理問題1000本ノック

「仲介者」を排除し、プログラムが厳格にルールを執行する。ブロックチェーンの可能性を金融やビジネスに爆発的に広げた「スマートコントラクト」を攻略しましょう。

1. 【 問題 】:ブロックチェーンの応用技術

【 問題 】 ブロックチェーン上で動作する仕組みの一種で、あらかじめ設定された契約内容や取引ルールをプログラムとして記述しておき、特定の条件が満たされた段階で、第三者を介さずに自動的に契約を執行する仕組みを何と呼ぶでしょうか?

① コンセンサスアルゴリズム
② スマートコントラクト
③ トークノミクス
④ 暗号資産ウォレット

2. 正解:

正解: ② スマートコントラクト(Smart Contract)

3. 解説:「もし〜なら、〜する」を自動化

スマートコントラクトは、ブロックチェーンの「改ざんできない」という特性を活かし、プログラムされた契約を100%確実に実行する技術です。イーサリアム(Ethereum)などのプラットフォームで広く採用されています。

【スマートコントラクトの3大特徴】

■ 仲介者が不要(トラストレス)
・銀行や不動産業者のような「信頼できる第三者」を挟まなくても、プログラムが正しく取引を保証してくれます。

■ コスト削減と高速化
・人が書類を確認したり、承認手続きをしたりする時間がゼロになるため、瞬時に取引が完了し、手数料も抑えられます。

■ 不可逆性(後戻りできない)
・一度ブロックチェーンに書き込まれたプログラムは、誰にも変更・消去できません。ルール通りに絶対に実行されます。
[ 具体的な活用例 ]
DeFi(分散型金融):あらかじめ指定した価格になったら、自動で暗号資産を交換する。
NFT(非代替性トークン):デジタルアートが転売されるたびに、作者に自動でロイヤリティ(報酬)が還元される。

1. 理解のコツ: 究極にシンプルなスマートコントラクトは「自動販売機」です。「150円を入れる(条件)」+「ボタンを押す(条件)」が揃うと、機械が自動で「ジュースを落とす(契約執行)」を行います。これをお互いに見知らぬ人同士で、より複雑な取引でも行えるようにしたのがこの技術です。
2. 試験対策の視点: 「プログラムに書き込み」「条件が整った段階で」「自動的に契約を執行」というフレーズがあればスマートコントラクトが一択です。ブロックチェーンが単なる金銭の記録(ビットコイン等)から、高度なシステム基盤へと進化した最大の理由として出題されます。


4. まとめ

「条件を満たすと自動で実行される、ブロックチェーン上の契約プログラム」。これがスマートコントラクトです。改ざん不可能なプログラムによって、信頼のコストをテクノロジーで解決する、Web3時代の核心となる技術です。


【データベース】1ミリの狂いも即座に許さない!「強い整合性」|情報処理問題1000本ノック

分散データベースにおいて、「いずれ同じデータになる(結果整合性)」のではなく、「今この瞬間に全員が同じ最新データを共有する」という厳格な一貫性、強い整合性を攻略しましょう。

1. 【 問題 】:データの一貫性モデル

【 問題 】 分散データベースシステムにおいて、あるデータを更新した際、その処理が即座に反映され、それ以降にどのシステムやノードからデータを読み出しても、必ず最新の更新結果が返ってくることを保証する性質を何と呼ぶでしょうか?

① 最終整合性 (Eventual Consistency)
② 弱い整合性 (Weak Consistency)
③ 強い整合性 (Strong Consistency)
④ 因果整合性 (Causal Consistency)

2. 正解:

正解: ③ 強い整合性(Strong Consistency / ストロング・コンシステンシー)

3. 解説:「即座に反映」という絶対のルール

強い整合性は、従来のRDBMSのACID特性における「一貫性」を分散システムでも死守する考え方です。データのズレが許されない金融システムなどで必須となります。

【対比:強い整合性 vs 結果整合性】

■ 強い整合性(Strong Consistency)
特徴:更新したら即座に全体へ反映。どこから読んでも「最新」。
代償:全員の同期を待つため、書き込みの処理速度が落ちたり、通信が途切れた時にシステムが止まりやすい(可用性が下がる)。

■ 結果整合性(Eventual Consistency)
特徴:更新した直後は古いデータが見えるかもしれないが、「いずれ(結果的に)」全員が同じ最新データに追いつく。
利点:同期を待たないので超高速。一部のサーバーが死んでいても動き続けられる。
[ CAP定理との関係 ]
★ 分散システムでは「一貫性(C)」「可用性(A)」「分断耐性(P)」の3つのうち2つしか選べないという「CAP定理」があります。「強い整合性」を選ぶということは、一貫性(C)を最優先にするという意味です。

1. 理解のコツ: 銀行の口座残高をイメージしてください。AATMで現金を振り込んだら、別のBATMやスマホアプリで1秒後に残高を見ても、絶対に振り込み後の金額(最新)になっていなければ困ります。この「いつでもどこでも即座に最新」が強い整合性です。
2. 試験対策の視点: 「結果整合性に対して」「即座に反映を保証」「どのレプリカから読んでも同じ最新値」という表現があれば「強い整合性」が正解です。NewSQLなどの文脈でも非常によく出題されます。


4. まとめ

「更新処理を即座に反映し、常に最新の同一データを保証する特性」。これが強い整合性です。速度や可用性を犠牲にしてでも、データの正確性を最優先にするシステム設計の根幹となる概念です。



### 【データベース】過去の写し鏡で一貫性を保つ!「スナップショット分離」|情報処理問題1000本ノック

データをロックして全員を待たせるのではなく、「処理を始めた瞬間のデータの写真(スナップショット)」を見せることで、超高速と高い整合性を両立する技術を攻略しましょう。

1. 【 問題 】:高度な同時実行制御

【 問題 】 トランザクションの同時実行制御において、各トランザクションが処理を開始した時点のデータベースの「スナップショット(一貫性のある過去のデータ状態)」を読み取ることで、他のトランザクションによる更新操作と衝突(ロックの競合)することなく、一貫した読み取りを可能にする分離レベルはどれでしょうか?

① Read Uncommitted
② スナップショット分離(Snapshot Isolation)
③ Read Committed
④ Serializable (厳格な悲観的ロック)

2. 正解:

正解: ② スナップショット分離(Snapshot Isolation)

3. 解説:「読者」と「筆者」が互いを邪魔しない

スナップショット分離は、MVCC(マルチバージョン同時実行制御)という技術を用いて実現されます。データを上書きするのではなく「古いバージョン」を残しておくことで、読み取り処理に過去のデータを提示します。

【スナップショット分離の3大メリット】

■ 読者は待たない、書く人も待たない
・誰かがデータを激しく更新していても、読み取り側は「自分が開始した時点のデータ」を読めばよいため、ロックによる順番待ちが発生しません。

■ 3大有害現象をすべて防止
・「ダーティリード」「ノンリピータブルリード」「ファントムリード」のすべてが発生しません(※実質的にRepeatable Read以上の堅牢性)。

■ ライトスキュー(Write Skew)という弱点
・非常に特殊なケースで、別々のデータを同時に更新し合うと、お互いのスナップショットが交差して矛盾(ライトスキュー)が起きる場合があります。
[ 現場での採用例 ]
PostgreSQLOracleSQL Server など、現代の主要なRDBMSの多くが、このスナップショット(またはそれに類するMVCCの仕組み)をベースにして、高速かつ安全な並行処理を実現しています。

1. 理解のコツ: 共有ドキュメントをみんなで編集している時、あなたが「印刷(読み取り)」ボタンを押した瞬間の状態がそのまま印刷されるイメージです。印刷中に他の人が内容を書き換えても、あなたの手元の紙(スナップショット)は変わりません。
2. 試験対策の視点: 「開始した時点の」「ロックを伴わない一貫した読み取り」「MVCC」といったキーワードが出たらスナップショット分離です。データベースの性能を落とさずに整合性を保つための超重要技術として出題されます。


4. まとめ

「トランザクション開始時のデータ写真を見せることで、ロックなしで整合性を保つ仕組み」。これがスナップショット分離です。現代の高アクセスなWebシステムを支える、データベースエンジニア必須の教養です。


【データベース】読み取り中の変化を防ぐ!「反復可能読み取り(リピータブルリード)」|情報処理問題1000本ノック

複数のトランザクションが同時に動くとき、どこまでデータの「割り込み」を許すか。4段階ある分離レベルのうち、上から2番目に厳格な「反復可能読み取り」を攻略しましょう。

1. 【 問題 】:トランザクションの分離レベル

【 問題 】 RDBMSのトランザクション分離レベル(アイソレーションレベル)のうち、「ダーティリード」と「ノンリピータブルリード(非再現可能読み取り)」の発生は防ぐことができるが、「ファントムリード(幻像読み取り)」が発生する可能性が残るものはどれでしょうか?

① 既存データの読み取り (Read Uncommitted)
② 確定データの読み取り (Read Committed)
③ 反復可能読み取り (Repeatable Read)
④ 直列化可能 (Serializable)

2. 正解:

正解: ③ 反復可能読み取り(Repeatable Read / リピータブルリード)

3. 解説:同じデータを何度読んでも「同じ」

「反復可能読み取り」という名前の通り、1つのトランザクションの中で同じデータを「反復」して何度読み込んでも、必ず同じ値が返ってくることを保証するレベルです。

【発生する現象の整理(起きない× / 起きる〇)】

ダーティリード:×(発生しない)
 → 他の人が「まだ確定していない(コミット前)」の怪しいデータを読めてしまう現象。
ノンリピータブルリード:×(発生しない)
 → 自分がさっき読んだデータを、他の人に「書き換え・削除」されて値が変わってしまう現象。
ファントムリード:〇(発生する)
 → 自分がデータを範囲検索している最中に、他の人がデータを「新規追加」したため、2回目に検索したときにデータが「幻(ファントム)」のように増えている現象。
[ 試験に出るマトリクス ]
Read Committed:ダーティだけ防ぐ(ノンリピータブルとファントムは起きる)
Repeatable Read:ダーティとノンリピータブルを防ぐ(ファントムだけ起きる
Serializable:すべて防ぐ(完璧だが処理が遅い)

1. 理解のコツ: あなたが本棚の特定の小説(データ)を読んでいる間、他の人がその小説の文字を書き換えることはできません。これが反復可能読み取りです。ただし、他の人が本棚の隙間に「新しい別の本(ファントム)」をコッソリ差し込むことは止められない、というイメージです。
2. 試験対策の視点: 「ダーティとノンリピータブルは発生しない」「ファントムリードは発生する」という組み合わせは、試験でピンポイントに狙われます。英語名の「Repeatable Read」でも選べるようにしておきましょう。


4. まとめ

「自分が処理している間のデータ書き換えは許さないが、新規追加だけは防げないレベル」。これが反復可能読み取り(Repeatable Read)です。多くのRDBMS(MySQLなど)でデフォルトや推奨の設定として採用されている、非常に重要度の高い分離レベルです。