収録問題 80問 / 10問ランダム出題
ランダムに出題・即時フィードバック・間違えた問題の復習機能付き
PHPで、リクエストごとに読み込む設定ファイルの中で、存在しないキーを参照したときの警告を避けつつ既定値を使いたい。最も自然な書き方はどれですか?
答え: $config['timezone'] ?? 'UTC'
null合体演算子 ?? は、左辺が存在しない、またはnullの場合に右辺を返します。配列キーが存在しない可能性がある設定値の既定値指定に向いています。
フォーム入力をHTMLへ表示するPHPテンプレートで、XSSを避けるために最も基本となる処理はどれですか?
答え: 出力時に htmlspecialchars でHTMLエスケープする
HTML文脈へユーザー入力を出すときは、出力時エスケープが基本です。htmlspecialchars はHTML特殊文字をエンティティへ変換します。
PHPファイルで関数の引数型を厳密に扱いたい。ファイル先頭に置く宣言として適切なのはどれですか?
答え: declare(strict_types=1);
declare(strict_types=1); は、そのファイルから呼び出す関数のスカラー型変換を厳格にします。既存コードとの境界では影響範囲を意識します。
PHPの名前空間つきクラス App\Service\Mailer を短い名前 Mailer で使いたい。適切なのはどれですか?
答え: use App\Service\Mailer;
use は名前空間つきクラスや関数などをインポートし、短い名前で参照するために使います。
APIレスポンスを連想配列として扱いたい。json_decode の呼び出しとして適切なのはどれですか?
答え: json_decode($json, true)
json_decode($json, true) はJSONオブジェクトを連想配列として返します。falseや省略時は標準オブジェクトとして扱われます。
PHPの配列で、ユーザーIDをキー、ユーザー名を値として保持したい。最も適切なデータ構造はどれですか?
答え: 連想配列
PHPの配列は順序付きマップとして使えます。IDをキーにして値を引く用途では連想配列が自然です。
関数が文字列またはnullを返す可能性を型宣言で表したい。PHP 8系で自然な戻り値型はどれですか?
答え: ?string
?string は string|null と同じ意味のnullable型です。値を返さない void とは混ぜません。
大量データを1件ずつ処理し、全件をメモリに載せたくない。PHPで候補になる仕組みはどれですか?
答え: Generator と yield
Generatorは値を逐次生成できるため、大きな配列を作らずに反復処理したい場面で役立ちます。
PHP 8で、内部関数へ不正な型を渡したときに捕捉を考えるべき例外として適切なのはどれですか?
答え: TypeError
PHP 8では型に合わない引数で TypeError が投げられる場面があります。値の範囲が不正な場合は ValueError も考慮します。
例外が発生してもファイルハンドルを閉じるなどの後始末を必ず行いたい。使う構文として適切なのはどれですか?
答え: try / catch / finally
finally ブロックは例外の有無にかかわらず実行されるため、リソース解放などに向いています。
関数の引数にデフォルト値を設定する目的として適切なのはどれですか?
答え: 省略時の動作を明示し、呼び出し側の記述を簡潔にする
デフォルト引数は、よく使う既定動作を関数定義に表現するために使います。セキュリティや例外処理の代替ではありません。
コールバックを受け取る関数で、型宣言として意図が伝わりやすいものはどれですか?
答え: callable
callable は関数名、クロージャ、メソッド参照など、呼び出し可能な値を受け取る意図を示せます。
Composerで、プロジェクトが依存するパッケージとバージョン制約を記録する主なファイルはどれですか?
答え: composer.json
composer.json は依存パッケージ、autoload設定、スクリプトなどのプロジェクト定義を持ちます。
CIや本番デプロイで、composer.lock に固定されたバージョンをそのまま入れたい。適切なコマンドはどれですか?
答え: composer install
composer install はlockファイルがある場合、その内容に従って依存関係をインストールします。update は依存解決を更新します。
PSR-4 autoloadで App\ 名前空間を src/ に対応させたい。設定する場所はどれですか?
答え: composer.json の autoload
ComposerのPSR-4 autoloadは composer.json の autoload セクションで定義し、必要に応じて composer dump-autoload で再生成します。
本番イメージに開発用ツールを入れたくない。Composer install時の代表的な指定はどれですか?
答え: composer install --no-dev
--no-dev は require-dev の依存をインストール対象から外します。本番ビルドのサイズや攻撃面を抑えるために使います。
ユーザー入力を使ってSQLを実行するPHPアプリで、SQLインジェクション対策として基本になるものはどれですか?
答え: PDOのプリペアドステートメントとバインド値を使う
SQLではプレースホルダとバインド値を使い、SQL構造とデータを分離するのが基本です。HTMLエスケープはHTML出力用です。
PHPでパスワードを保存する際に最も基本となるAPIの組み合わせはどれですか?
答え: password_hash / password_verify
password_hash は安全なパスワードハッシュを生成し、password_verify は入力パスワードとハッシュを検証します。
セッション固定攻撃への基本対策として、ログイン成功直後に行うべき処理はどれですか?
答え: session_regenerate_id(true) を実行する
ログインなど権限状態が変わるタイミングでセッションIDを再生成すると、固定されたIDの悪用リスクを下げられます。引数の true は古いセッションデータを削除する指定で、セキュリティ上推奨されます。
ファイルアップロード機能で、ユーザーが送った元ファイル名をそのまま保存名に使うリスクはどれですか?
答え: パストラバーサルや上書き、危険な拡張子の混入につながる可能性がある
アップロードでは保存名の生成、拡張子やMIMEの検証、保存先の分離、公開可否の制御などを考える必要があります。
PHPファイルでPHPコードとして解釈させるために基本的に使う開始タグはどれですか?
答え: <?php
PHPコードは通常 <?php で開始します。HTMLの中にPHPを埋め込む場合も、このタグ以降がPHPとして解釈されます。
PHPで変数名の先頭に付ける記号として正しいものはどれですか?
答え: $
PHPの変数は $name のように $ で始めます。変数名は大文字小文字を区別するため、$user と $User は別の変数です。
PHPで複数の値をまとめて扱う基本的な型として適切なものはどれですか?
答え: array
array は複数の値をまとめて扱うための型です。数値添字の配列だけでなく、キーと値の組み合わせも扱えます。
PHPで条件によって処理を分けたい。最も基本的な構文はどれですか?
答え: if
if は条件式が真か偽かによって処理を分ける基本構文です。必要に応じて else や elseif と組み合わせます。
URLのクエリ文字列 ?page=2 で渡された値をPHPで受け取る基本的なスーパーグローバルはどれですか?
答え: $_GET
$_GET はURLクエリ文字列の値を受け取るスーパーグローバルです。受け取った値は信頼せず、用途に応じて検証やエスケープを行います。
年齢入力を整数として受け付け、範囲も確認したい。PHPで安全な入力処理の考え方として適切なのはどれですか?
答え: filter_varなどで型を検証し、その後に許容範囲を確認する
入力検証では、期待する型や形式を確認したうえで業務上の許容範囲も確認します。値を書き換えるサニタイズと、受け入れ可否を判断する検証は区別します。
パスワード再設定URLに使う推測困難なトークンをPHPで生成したい。適切な関数はどれですか?
答え: random_bytes
random_bytes は暗号学的に安全な乱数バイトを生成します。URLへ載せる場合はhexやBase64URLなど安全な表現へ変換し、有効期限と一回限りの利用も管理します。
受信したWebhook署名とサーバー側で計算した署名を比較する。タイミング攻撃の影響を抑えるために使う関数はどれですか?
答え: hash_equals
hash_equals は既知の署名と利用者由来の署名をタイミング情報が漏れにくい形で比較します。署名生成には共有鍵の管理や正しいHMAC検証も必要です。
外部利用者が送信したデータをPHPで復元する必要がある。オブジェクト注入のリスクを避ける基本方針はどれですか?
答え: 信頼できない値へunserializeを使わず、JSONなど必要な型だけを表現する形式を使う
信頼できないシリアライズ値のunserializeは、クラスのマジックメソッドなどを通じたオブジェクト注入につながる可能性があります。外部データにはJSONなど明示的なデータ形式を選びます。
本番PHP環境で例外のスタックトレースや内部パスを利用者へ見せず、障害調査は継続したい。適切な設定方針はどれですか?
答え: display_errorsを無効にし、log_errorsを有効にして保護されたログへ記録する
本番では詳細エラーを利用者へ表示せず、アクセス制御されたログへ記録します。利用者には一般化したエラー応答を返し、ログには秘密情報を残しすぎない配慮も必要です。
Composerで、本番環境へ開発用パッケージを含めずに依存関係をインストールしたい。適切なコマンドはどれですか?
答え: composer install --no-dev
composer install --no-dev は composer.lock に従って本番用依存関係だけをインストールします。本番では依存バージョンを固定して再現性を保つことが重要です。
PHPからDBへ利用者入力を含むSQLを実行する際、SQLインジェクション対策として最も適切なものはどれですか?
答え: PDOのプリペアドステートメントでプレースホルダに値をバインドする
SQLインジェクション対策では、SQL構文と値を分離するプリペアドステートメントが基本です。HTMLエスケープはHTML出力用であり、SQL文脈の対策ではありません。
PDOでDB処理に失敗したとき例外として扱いたい。接続時に設定する属性として適切なものはどれですか?
答え: PDO::ATTR_ERRMODE に PDO::ERRMODE_EXCEPTION を設定する
PDO::ATTR_ERRMODE を PDO::ERRMODE_EXCEPTION にすると、DBエラーを例外として扱いやすくなり、失敗時の制御が明確になります。
ログイン成功後にセッション固定攻撃のリスクを下げるため、PHPで行うべき基本処理はどれですか?
答え: session_regenerate_id(true) でセッションIDを再生成する
ログインなど権限状態が変わるタイミングではセッションIDを再生成し、攻撃者が事前に固定したIDを使い続けるリスクを下げます。
PHPで画像アップロードを受け付ける際、基本的な安全策として適切なものはどれですか?
答え: MIME/拡張子だけに頼らず内容検査し、保存名を生成し、公開実行されない場所や設定で保存する
アップロードでは、サイズ制限、内容検査、保存名の生成、実行権限の排除、公開パス制御が重要です。利用者由来の名前や拡張子は信頼できません。
PHPの例外処理で、発生した例外を捕捉してログ記録や代替処理を行う基本構文はどれですか?
答え: try ... catch
try ... catch は例外が発生し得る処理を囲み、例外発生時にcatchブロックでログ記録、ロールバック、利用者向け応答などを行います。
PHPで関数の戻り値が存在しないことを型として明示したい。戻り値型として適切なものはどれですか?
答え: void
void は関数が値を返さないことを示す戻り値型です。null は値の一種であり、値を返さないこととは意味が異なります。
PHPでタイムゾーンを意識して日時を扱い、加算や比較を安全に行いたい。適切なクラスの組合せはどれですか?
答え: DateTimeImmutable と DateTimeZone
DateTimeImmutable と DateTimeZone を使うと、タイムゾーンを明示しつつ日時を扱えます。Immutableな値は意図しない変更を避けやすい点も実務で有用です。
配列の各要素へ同じ変換を適用し、新しい配列を得たい。PHPで適切な関数はどれですか?
答え: array_map
array_map は各要素へコールバックを適用し、その結果から新しい配列を作ります。条件で絞る場合は array_filter、畳み込みには array_reduce を使います。
PHPでJSON APIのレスポンスを返す際、Content-Typeとして最も適切なものはどれですか?
答え: application/json
JSONを返すAPIでは Content-Type: application/json を設定し、クライアントがレスポンス形式を正しく解釈できるようにします。
APIで受け取った利用者IDを、文字列の "00123" と整数の 123 を区別して照合したい。適切な比較はどれですか?
答え: 型と値を比較する厳密比較演算子 === を使う
PHPの緩い比較では型変換が行われるため、識別子の意図しない一致を招くことがあります。外部入力や状態値を照合するときは、型も契約に含めて === で比較します。
注文状態をPHP 8.1以降で表し、pending、paid、cancelled 以外の値をコード上で受け付けにくくしたい。適切な設計はどれですか?
答え: 文字列を値に持つ列挙型を定義し、境界で tryFrom などにより変換する
列挙型は取り得る状態を型として限定できます。外部の文字列はアプリケーション境界で列挙型へ変換し、変換失敗を入力エラーとして扱うと、不正状態が内部へ広がりにくくなります。
APIリクエストを表すDTOを生成後に変更させず、意図しない上書きを防ぎたい。PHP 8.2以降で適切な選択はどれですか?
答え: 必要なプロパティを持つ readonly クラスとして定義し、コンストラクタで検証済み値を渡す
readonly クラスは初期化後のプロパティ再代入を防ぎ、DTOの不変条件を保ちやすくします。ただし参照先オブジェクトまで自動で不変になるわけではないため、内部に持つ型も確認します。
外部APIから壊れたJSONが返ったとき、正常な null と解析失敗を取り違えず例外処理へ流したい。適切な方法はどれですか?
答え: json_decode に JSON_THROW_ON_ERROR を指定し、JsonException を処理する
JSON_THROW_ON_ERROR を指定すると、JSONの構文やUTF-8などのエラーが JsonException になります。成功値の null と失敗を戻り値だけで区別する必要がなく、API障害の処理を明確にできます。
PHPのWebフォームで、利用者の権限を使った意図しない更新を別サイトから実行されるCSRFを防ぎたい。中核となる対策はどれですか?
答え: セッションに結び付けた推測困難なCSRFトークンを発行し、更新要求で照合する
CSRF対策では、攻撃元が取得できないトークンを利用者のセッションへ結び付け、状態変更要求ごとに検証します。CookieのSameSite属性やOrigin確認も防御を補強しますが、要件に合うトークン検証を省略する根拠にはしません。
HTTPSのみで提供するPHPアプリのセッションCookieを堅牢化したい。基本となる属性の組合せはどれですか?
答え: Secure、HttpOnly、要件に合う SameSite を session_start より前に設定する
Secure はHTTPS通信だけにCookieを送り、HttpOnly はJavaScriptからの読み取りを抑えます。SameSite は外部サイト起点の送信範囲を制御します。PHPではセッション開始前にCookieパラメータを設定します。
PHPのバージョン更新で推奨されるパスワードハッシュ方式やコストが変わった。ログイン時に安全に移行する方法はどれですか?
答え: password_verify 成功後に password_needs_rehash を確認し、必要なら新しいハッシュへ更新する
パスワード検証に成功した時点では平文入力を利用できるため、password_needs_rehash で方式やコストを評価し、必要な利用者だけ新しい password_hash の結果へ段階移行できます。
抽選結果や一時認証コードに使う整数をPHPで生成したい。予測困難性が必要な場合に適切なのはどれですか?
答え: 暗号学的に安全な乱数を使う random_int を利用する
random_int は偏りを抑えた暗号学的に安全な整数を返します。トークン本体のバイト列には random_bytes も候補です。時刻や連番など観測可能な値は認証用途の乱数に使いません。
PDOで注文行と在庫数を同時に更新し、どちらかが失敗したら両方を取り消したい。適切な実装方針はどれですか?
答え: beginTransaction 後に両方を更新し、成功時は commit、例外時は有効なトランザクションを rollBack する
関連する更新を同じトランザクション境界に置くと、すべて成功した場合だけ確定できます。DDLによる暗黙コミットなどDB固有の挙動もあるため、トランザクション内には対象DBでロールバック可能な処理を置きます。
高負荷時にPDOの更新トランザクションがデッドロックで失敗することがある。再試行を実装する際の適切な方針はどれですか?
答え: 対象エラーだけを判定し、トランザクション全体をロールバックして、回数上限と待機を設けて最初から再実行する
デッドロック後はトランザクションが中断されていることがあるため、対象DBのエラーコードを判定し、全体を新しいトランザクションで再実行します。再試行嵐を防ぐため回数上限、待機、観測可能なログも設けます。
PHP-FPMの応答遅延が増え、待ち行列と max children reached が継続している。最初に行うべき判断はどれですか?
答え: 内部限定のFPMステータス、処理時間、子プロセス当たりのメモリ、DBなど下流の状態を測り、容量内で pm.max_children と遅い処理を調整する
FPMの待ち行列と上限到達はワーカー飽和の手掛かりですが、上限だけを増やすとメモリ枯渇やDB接続過多を招きます。ステータスは内部へ制限し、要求時間と資源量、下流容量を合わせてボトルネックを判断します。
本番PHP-FPMでOPcacheのタイムスタンプ検証を無効にしている。新しいコードを確実に反映するデプロイ方法はどれですか?
答え: 切替可能なリリース単位で配置し、Web側のFPMプロセスを安全に再読み込みまたは該当OPcacheを無効化してから疎通確認する
タイムスタンプ検証が無効なOPcacheは、ファイル更新だけでは古いコードを保持します。CLIとWeb SAPIでキャッシュが分かれる構成もあるため、対象FPMを安全に再読み込みするなど反映手順をデプロイへ組み込みます。
PHPから外部決済APIをcURLで呼ぶと、相手障害時にFPMワーカーが長時間占有される。必要な対策はどれですか?
答え: 接続と処理全体に別々のタイムアウトを設定し、HTTP状態とcURLエラーを記録して失敗を制御する
外部I/Oには接続確立までと処理全体の時間制限を置き、ワーカーが永久に待たないようにします。HTTPエラー、通信エラー、業務エラーを区別し、監視と上位処理へ返す失敗契約を決めます。
PHPの注文APIが外部サービスへのPOSTを再試行した結果、二重注文が発生した。再発防止の中核はどれですか?
答え: 業務要求ごとの一意な冪等性キーを送り、受信側で同じキーの結果を再利用し、再試行回数も制限する
タイムアウトでは相手側の処理成否が不明なため、単純再送だけでは副作用が重複します。同じ業務要求を示す冪等性キーと結果保存を組み合わせ、再試行しても一度の処理結果へ収束させます。
Composer依存パッケージに既知の脆弱性がないかCIで継続確認したい。適切なコマンドはどれですか?
答え: composer audit を実行し、検出時の失敗条件と更新手順を運用する
composer audit は導入済みまたは固定済みパッケージをセキュリティ勧告と照合します。検出結果には、影響確認、互換性試験、更新、例外期限を含む対応手順が必要です。
PHPアプリを本番コンテナへ配備した後、必要なPHP拡張が不足して起動に失敗した。CIで防ぐ方法はどれですか?
答え: 実際の本番イメージ上で composer check-platform-reqs --no-dev を実行し、PHPと拡張要件を満たさなければ配備を止める
check-platform-reqs は実行環境のPHP版と拡張を、導入パッケージの要件と照合します。開発環境ではなく本番と同じイメージで検査することで、起動後に不足が判明するのを防ぎます。
多数のクラスを持つPHPアプリで、本番のオートロード時のファイル探索を減らしたい。安全な第一歩はどれですか?
答え: 本番ビルドで composer install --no-dev --optimize-autoloader を使い、生成物を試験する
Composerの最適化オートローダーはPSR-4などからクラスマップを生成し、本番の探索回数を減らします。権威的クラスマップは実行時にクラス生成する仕組みと衝突し得るため、必要性と互換性を別途確認します。
複数のPHP-FPM子プロセスが同じDBへの永続接続を持ち、DBの最大接続数へ達した。見直すべき考え方はどれですか?
答え: FPMの最大同時実行数とプロセスごとの接続数を合算し、DB容量に合わせて非永続接続や外部プールも含め設計する
FPMは複数プロセスで動くため、永続接続は通常プロセスをまたいで一つにはなりません。同時ワーカー数と各ワーカーの接続を容量計画へ入れ、再利用時に残るセッション状態にも注意します。
PHP CLIのキューワーカーを長時間動かすと、デプロイ後も古いコードを使い続け、メモリ使用量も増加した。適切な運用はどれですか?
答え: ジョブ単位で状態を解放し、処理件数・時間・メモリに上限を設け、デプロイ時は監督プロセスから安全に終了・再起動する
長寿命PHPプロセスでは、通常のリクエスト終了時に解放される前提が通用しません。ジョブ間の状態分離、資源上限、シグナルを使った安全な停止、冪等な再配信を組み合わせて運用します。
PHP APIの障害調査で、同じ利用者操作に属するWeb要求、外部API呼び出し、キュージョブのログを結び付けたい。適切な設計はどれですか?
答え: 入口で相関IDを受け入れるか生成し、検証した値を下流要求とジョブへ伝播して構造化ログへ記録する
同じ相関IDを処理境界を越えて伝播すると、分散したログを一つの操作として検索できます。外部入力のIDは長さや文字種を検証し、認証情報や本文全体などの機密情報はログへ残しません。
PHP 8.4で、公開プロパティへの代入時に国コードを必ず大文字へ正規化したい。適切な機能はどれですか?
答え: Property Hookのset処理で正規化する
Property Hookなら代入経路を一か所へ集約し、値の検証や正規化を型付きプロパティのAPIとして表現できます。
PHP 8.4で、注文IDは外部から読めるが変更はクラス内部だけに制限したい。適切な宣言方針はどれですか?
答え: 非対称プロパティ可視性でpublic getとprivate(set)を指定する
非対称可視性は読取りと書込みの範囲を別々に宣言し、読みやすさと更新制約を両立します。
PHP 8.4のLazy ObjectをORMプロキシへ使う。初期化タイミングを誤解しないために重要な点はどれですか?
答え: 通常はプロパティの読書き・反復・シリアライズなど状態へのアクセスで初期化される
Lazy Objectは状態が必要になるまで初期化を遅延します。どの操作が初期化を起こすかを把握し、意図しないDBアクセスを避けます。
親クラスのメソッドを上書きするつもりが、名前を誤記して別メソッドになった。PHP 8.3以降で検出しやすくする方法はどれですか?
答え: #[Override]を付けて実際の上書きであることを検査させる
#[Override]は親クラスまたはインターフェースに対応するメソッドがなければエラーにし、リファクタリング時のずれも検出します。
配列から条件を満たす最初の要素を探したい。PHP 8.4で意図が明確な関数はどれですか?
答え: array_find()
array_find()はコールバックがtrueを返す最初の値を返し、見つからない場合はnullを返します。
利用者が送ったHTML断片をHTML5の規則に沿って解析したい。PHP 8.4で適切なAPIはどれですか?
答え: Dom\HTMLDocumentを使い、解析後も許可リストでサニタイズする
新DOM APIは標準準拠のHTML5解析を提供しますが、解析とXSSサニタイズは別の責務です。
金額計算で浮動小数点誤差を避けたい。PHP 8.4のBcMath\Numberを使う場合の適切な考え方はどれですか?
答え: 十進文字列から生成し、丸め規則と桁数を業務仕様として明示する
任意精度十進計算でも、入力をfloat経由にせず、スケールと丸めの規則を明確にする必要があります。
PDOでSQLite固有APIを型安全に使いたい。PHP 8.4で適切な方法はどれですか?
答え: PDO::connect()で接続し、返されるPdo\SqliteサブクラスのAPIを使う
ドライバ固有PDOサブクラスは利用可能な機能を型として示し、誤ったドライバへの呼出しを減らします。
PHP 8.5のPipe演算子で文字列変換を連結する。レビュー時に確認すべき点はどれですか?
答え: 各段が前段の値を一引数で受けるcallableで、型と順序が明確である
Pipe演算子は左の値を右のcallableへ順番に渡す構文であり、並列化や入力検証を自動提供するものではありません。
PHP 8.5でreadonly値オブジェクトの一部だけを変えた新インスタンスを作りたい。適切な機能はどれですか?
答え: clone withで複製時に変更対象を指定する
clone withは不変オブジェクトのwithメソッド実装を簡潔にし、元の値を変えずに派生値を作れます。
重要な戻り値を呼出し側が捨てる事故をPHP 8.5で検出したい。適切な属性はどれですか?
答え: #[NoDiscard]
#[NoDiscard]は戻り値が消費されない場合に警告し、意図的に捨てる場合は(void)キャストで明示できます。
署名対象URLを厳密に正規化したい。PHP 8.5の新URI APIを使う際の適切な選択はどれですか?
答え: 要求仕様に合うUri\Rfc3986\Uri等を選び、解析失敗を明示的に扱う
標準に対応したURIオブジェクトを使い、成分解析と正規化の規則を署名側・検証側で一致させます。
PHP 8.5の永続cURL共有ハンドルで接続再利用を狙う。導入時に必要な運用判断はどれですか?
答え: 共有対象、接続先分離、資格情報、プロセス寿命、障害時の再生成を検証する
リクエストを越える再利用は初期化コストを減らせますが、共有範囲と長寿命状態の安全性を容量・障害設計に含めます。
PHP 8.4から8.5へ本番更新する。安全な進め方はどれですか?
答え: 移行ガイドと依存要件を確認し、非推奨警告を有効化したCI・段階配備・ロールバックを行う
マイナーバージョンでも互換性変更と非推奨化があります。実トラフィックに近い試験と段階的な切替で影響を限定します。
composer.json変更時にlockとの不一致や不適切な制約をCIで検出したい。適切なコマンドはどれですか?
答え: composer validate --strict
validateはcomposer.jsonの妥当性とlockの同期を確認し、--strictは警告も非ゼロ終了へできます。
PHP 8.5への更新を妨げるComposer依存を特定したい。適切な調査はどれですか?
答え: composer prohibits php 8.5 --treeで制約元をたどる
prohibitsは指定版を導入できない理由を依存制約から示し、--treeで根まで追跡できます。
例外のスタックトレースへAPIキー引数を出したくない。PHP 8.2以降の補助策はどれですか?
答え: 引数へ#[SensitiveParameter]を付け、ログ側の機密情報除去も併用する
#[SensitiveParameter]は対象値をトレースで伏せますが、アプリが別のログ項目へ明示出力する経路までは防がないため多層対策が必要です。
長寿命ワーカーで、オブジェクトごとの計算結果をキャッシュしたいが、オブジェクト破棄後は保持したくない。適切な構造はどれですか?
答え: WeakMapを使い、オブジェクトキーが他で参照されなくなれば項目も解放させる
WeakMapのキーはオブジェクトを生存させないため、派生キャッシュが元オブジェクトより長く残ることを防げます。
Fiberを使えば、ブロッキングI/O関数も自動的に非同期になると考えている。正しい説明はどれですか?
答え: Fiberは協調的な中断・再開機構であり、非ブロッキングI/Oには対応するイベントループやライブラリが必要
Fiberは呼出しスタックごと処理を中断できますが、スケジューリングとI/O多重化は別途必要です。
埋込みiframe内でも使うセッションCookieをPHP 8.5で設定する。Partitioned属性を使う際の前提はどれですか?
答え: Secure等のブラウザ要件を満たし、分割保存の互換性と認証フローを実ブラウザで検証する
Partitioned CookieはトップレベルサイトごとにCookieを分離しますが、Secure要件、ブラウザ対応、SameSiteやCSRF対策との組合せを確認します。