JSTQB Foundation Level への道

  • POST
JSTQB Foundation Level を学習する中で間違えやすいポイントを備忘録として残しておく JSTQB Foundation Level シラバス キーワード 第 1章:テストの基礎 キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)カバレッジ (Coverage)テストの徹底度を測る指標。トレーサビリティを維持することで、カバレッジの評価を支援する。カバレッジ基準は、テスト目的がどの程度達成しているかを示す活動を遂行するための KPI として機能する。1.4.4, 4.2.1, 4.3.1, 4.3.2, 5.3.1デバッグ (Debugging)故障の原因(欠陥)を発見し、解析し、取り除く活動。テストとは別の活動である。1.1.2欠陥 (Defect)人間のエラーによって生み出されるもの。故障につながることもある。静的テストや動的テストで発見の支援をする。1.2.3, 5.5エラー (Error)人間が起こす誤り。エラー推測は、この発生を予測する技法である。1.2.3, 4.4.1故障 (Failure)欠陥が実行されることでシステムがすべきことをしない、またはすべきでないことをしてしまう結果。1.2.3品質 (Quality)ソフトウェアテストは、ソフトウェアの品質を評価し、運用環境で故障が発生するリスクを低減する手助けとなる。1.2.2, 5.3.1品質保証 (Quality Assurance, QA)プロセス指向の予防的アプローチであり、プロセスの実装と改善に焦点を当てる。1.2.2根本原因 (Root Cause)問題(例えばエラーにつながる状況)が発生する根底の理由。1.2.3テスト分析 (Test Analysis)テスト可能なフィーチャーを識別し、関連するテスト条件を定義し優先順位を付ける活動。1.4.1テストベース (Test Basis)テストケースを導出する元となる作業成果物など。1.4.4テストケース (Test Case)テスト条件を具現化したもの。テストケースの優先順位付けはテスト実行の順番を決める。1.4.1, 4.2, 5.1.5テスト完了 (Test Completion)プロジェクトのマイルストーンで、テストウェアの保管、教訓の識別、テスト完了レポートの作成などを行う活動。1.4.1テスト条件 (Test Condition)テストベースを分析して定義するテスト対象の要素。1.4.1, 4.2テストコントロール (Test Control)テストの目的を達成するために必要な行動(是正措置)をとる活動。1.4.1, 5.3テストデータ (Test Data)テスト実行に必要なデータ。1.4.1テスト設計 (Test Design)テスト条件をテストケースやテストチャーターなどに落とし込む活動。1.4.1テスト実行 (Test Execution)テスト実行スケジュールに従ってテストを走らせる活動。1.4.1テスト実装 (Test Implementation)テスト実行に必要なテストウェア(テストプロシジャー、自動テストスクリプト、テストデータなど)を作成または取得する活動。1.4.1テストモニタリング (Test Monitoring)すべてのテスト活動を継続的にチェックし、実際の進捗をテスト計画と比較する活動。1.4.1, 5.3テスト対象 (Test Object)テストをする対象のソフトウェアアーティファクト。1.4.1, 2.2.1テスト目的 (Test Objective)テストによって達成しようとする目的(例:欠陥の発見、品質評価、信頼の積み上げなど)。1.1.1テスト計画 (Test Planning)テスト目的を定義し、目的を最も効果的に達成するアプローチを選択する活動。テスト計画書を作成するプロセス。1.4.1, 5.1テストプロシジャー (Test Procedure)テストケースを順序立てて実行できるようにしたもの。1.4.1テスト結果 (Test Result)テストの実行により得られる結果。1.4.1テスト (Testing)欠陥を発見し、ソフトウェアアーティファクトの品質を評価するための一連の活動。1.1テストウェア (Testware)テスト活動によって出力される作業成果物(テスト計画書、テストケース、テストデータなど)。1.4.1, 1.4.3妥当性確認 (Validation)ユーザーやその他のステークホルダーのニーズを運用環境でシステムが満たしていることを確認する。1.1検証 (Verification)指定されている要件をシステムが満たすかどうかを確認する。1.1 第 2章:ソフトウェア開発ライフサイクル全体を通してのテスト キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)受け入れテスト (Acceptance Testing)妥当性確認と、デプロイの準備ができていることの実証に焦点を当てるテストレベル。2.2.1ブラックボックステスト (Black-box Testing)仕様に基づき、テスト対象の外観を示すドキュメントからテストを導出するテストタイプ。2.2.2, 4.2コンポーネント統合テスト (Component Integration Testing)コンポーネント間のインターフェース、および相互処理に焦点を当てるテストレベル。2.2.1コンポーネントテスト (Component Testing)コンポーネントを単独でテストすることに焦点を当てるテストレベル(ユニットテストとも呼ばれる)。2.2.1確認テスト (Confirmation Testing)元の欠陥が正常に修正されたことを確認するテスト。2.2.3機能テスト (Functional Testing)コンポーネント、およびシステムが実行する機能を評価するテストタイプ。2.2.2統合テスト (Integration Testing)コンポーネント統合テストやシステム統合テストなど、インターフェースや相互処理に焦点を当てるテスト。2.2.1メンテナンステスト (Maintenance Testing)システムへの変更や環境の更新に伴い実施されるテスト。2.3非機能テスト (Non-functional Testing)コンポーネント、およびシステムが実行する機能特性以外の属性(性能、信頼性、使用性など)を評価するテストタイプ。2.2.2リグレッションテスト (Regression Testing)変更によって悪影響が生じないことを確認するテスト。自動化の有力な候補となる。2.2.3シフトレフト (Shift Left)テストを SDLC の早い段階で実行するアプローチ(早期テストの原則)。2.1.5システム統合テスト (System Integration Testing)テスト対象システムと他のシステム、外部サービスとのインターフェースのテストに焦点を当てるテストレベル。2.2.1システムテスト (System Testing)システムやプロダクト全体の振る舞いや能力の全般に焦点を当てるテストレベル。2.2.1テストレベル (Test Level)系統的にまとめ、マネジメントしていくテスト活動のグループ。2.2テスト対象 (Test Object)テストをする対象のコンポーネントまたはシステム。2.2.1テストタイプ (Test Type)特定の品質特性に関連するテスト活動のグループ。2.2ホワイトボックステスト (White-box Testing)構造に基づき、システムの実装または内部構造からテストを導き出すテストタイプ。2.2.2, 4.3 第 3章:静的テスト キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)不正 (Anomaly)レビュー中に識別される、作業成果物中の誤り、不備、矛盾など。3.2.2, 5.5動的テスト (Dynamic Testing)ソフトウェアの実行を伴うテスト。静的テストと相互に補完し合う。3.1.3形式的レビュー (Formal Review)厳密な定義プロセスに従い、インスペクションなど監査証跡が必要な場合に使用するレビュー種別。3.2.4非形式的レビュー (Informal Review)定義されたプロセスに従わず、正式に文書化されたアウトプットを必要としないレビュー種別。3.2.4インスペクション (Inspection)最も形式的なレビュー種別であり、不正を最大数発見することを主な目的とする。3.2.4レビュー (Review)人手による確認を通じて作業成果物を評価する静的テスト技法。レビュープロセスは柔軟な枠組みを提供する。3.1, 3.2.2静的解析 (Static Analysis)ツールを使用して作業成果物を評価する静的テスト技法。コードの特定の欠陥を検出するために使用する。3.1, 3.1.2静的テスト (Static Testing)テスト対象のソフトウェアを実行せずに、人手やツールで評価するテスト。SDLC の初期段階で欠陥を検出できる。3.1, 3.1.2テクニカルレビュー (Technical Review)技術的に適格なレビューアによって行われ、技術的な問題に関して合意を得て判断することを目的とするレビュー種別。3.2.4ウォークスルー (Walkthrough)作成者が主導し、品質評価、不正の検出など多くの目的を達成できるレビュー種別。3.2.4 第 4章:テスト分析と設計 キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)受け入れ基準 (Acceptance Criteria)ユーザーストーリーの実装をステークホルダーが受け入れるために満たさなければならない条件。テスト条件とみなすことができる。4.5.2受け入れテスト駆動開発 (Acceptance Test-Driven Development, ATDD)テストファーストのアプローチで、顧客、開発担当者、テスト担当者などが共同でテストケースを作成する。2.1.3, 4.5.3ブラックボックステスト技法 (Black-box Test Technique)テスト対象の内部構造を参照することなく、仕様上の振る舞いの分析に基づく技法。4.1, 4.2境界値分析 (Boundary Value Analysis, BVA)同値パーティションの境界を確認することに基づいた技法。2値 BVA と 3値 BVA がある。4.2.2ブランチカバレッジ (Branch Coverage)テストケースによって通したコード内のブランチの数を計測するカバレッジ指標。4.3.2チェックリストベースドテスト (Checklist-based Testing)チェックリストのテスト条件をカバーするようにテストケースを設計、実行する経験ベースの技法。4.4.3コラボレーションベースのテストアプローチ (Collaboration-based Test Approach)コラボレーションとコミュニケーションによる欠陥の回避に焦点を当てたアプローチ。4.5カバレッジ (Coverage)テストの徹底度を測る指標。4.2, 4.3カバレッジアイテム (Coverage Item)テスト技法を適用した際に、テストによって通過させる必要がある要素。4.2, 4.3デシジョンテーブルテスト (Decision Table Testing)条件のさまざまな組み合わせがどのようにさまざまな結果をもたらすかを仕様化している要件の実装をテストするために使用する技法。4.2.3同値分割法 (Equivalence Partitioning, EP)データを同値パーティションに分割し、各パーティションから 1 つの値をテストするテストケースを作成する技法。4.2.1エラー推測 (Error Guessing)テスト担当者の知識に基づいて、エラー、欠陥、故障の発生を予測する経験ベースの技法。4.4.1経験ベースのテスト技法 (Experience-based Test Technique)テストケースの設計と実装にテスト担当者の知識と経験を効果的に利用する技法。4.4探索的テスト (Exploratory Testing)テスト担当者がテスト対象について学習しながら、テストケースを同時に設計、実行、評価する技法。4.4.2状態遷移テスト (State Transition Testing)システムの取り得る状態と有効な遷移をモデル化し、それに基づいてテストケースを導出する技法。4.2.4ステートメントカバレッジ (Statement Coverage)テストにより通過した実行可能なステートメント数を計測するカバレッジ指標。4.3.1テスト技法 (Test Technique)比較的少ないながらも十分なテストケースのセットを体系的に開発するのに役立つ手法。4.1ホワイトボックステスト技法 (White-box Test Technique)テスト対象の内部構造や処理の分析に基づく技法。4.1, 4.3 第 5章:テスト活動のマネジメント キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)欠陥マネジメント (Defect Management)報告された不正を発見から終結まで処理するためのワークフローを含むプロセス。5.5欠陥レポート (Defect Report)報告された欠陥の処理・解決のための情報を提供する、または作業成果物の品質を追跡する目的で作成する文書。5.5開始基準 (Entry Criteria)ある活動を行うための事前条件を定義するもの。アジャイルでは「準備完了(Ready)の定義」とも呼ぶ。5.1.3終了基準 (Exit Criteria)活動の完了を宣言するために何を達成しなければならないかを定義するもの。アジャイルでは「完了(done)の定義」とも呼ぶ。5.1.3プロダクトリスク (Product Risk)プロダクトの品質特性に関連するリスク。テストの深さと範囲に影響を与える。5.2.2, 5.2.3プロジェクトリスク (Project Risk)プロジェクトのマネジメントや統制に関連するリスク(例:納期遅れ、スキル不足)。5.2.2リスク (Risk)顕在化することによって悪影響が生じる、潜在的な事象。5.2.1リスク分析 (Risk Analysis)リスク識別とリスクアセスメント(可能性と影響の決定)から構成される活動。5.2.3リスクアセスメント (Risk Assessment)識別したリスクを分類し、リスクの可能性、リスクの影響、レベルを決定し、優先順位を付ける活動。5.2.3リスクコントロール (Risk Control)リスク軽減とリスクモニタリングから構成される、識別し評価したリスクに対応する手段。5.2.4リスク識別 (Risk Identification)リスクの包括的なリストを作成する活動。5.2.3リスクレベル (Risk Level)リスクの可能性とリスクの影響(損害)の二つの要素で表されるリスクの尺度。5.2.1リスクマネジメント (Risk Management)組織が目的を達成する可能性を高め、プロダクトの品質を向上させることを可能にする活動。5.2リスク軽減 (Risk Mitigation)リスクアセスメントで提案された措置を実施し、リスクレベルを低減させること。5.2.4リスクモニタリング (Risk Monitoring)リスク軽減措置が効果的であることを確認し、新たなリスクを識別する活動。5.2.4リスクベースドテスト (Risk-based Testing)リスク分析とリスクコントロールに基づいてテスト活動を選択し、優先順位を付け、マネジメントしていくテストアプローチ。5.2テストアプローチ (Test Approach)テスト計画書の構成要素(テスト戦略やテストレベル、テストタイプ、テスト技法、テスト成果物など)。5.1.1テスト完了レポート (Test Completion Report)テストの特定の段階の完了時に作成し、テスト活動を要約するレポート。5.3.2テストコントロール (Test Control)テストモニタリングからの情報を用いて、必要な補正のアクションを提供する活動。5.3テストモニタリング (Test Monitoring)テストに関する情報を収集し、進捗を評価する活動。5.3テスト計画書 (Test Plan)テストプロジェクトの目的、リソース、プロセスを表す文書。5.1.1テスト計画 (Test Planning)テスト計画書を作成するプロセス。5.1テスト進捗レポート (Test Progress Report)テストの継続的なコントロールを支援するために定期的に作成するレポート。5.3.2テストピラミッド (Test Pyramid)異なるテストレベルにおける粒度とテスト自動化の度合いを示すモデル。5.1.6テストの四象限 (Test Quadrants)テストレベルを、アジャイルソフトウェア開発における適切なテストタイプ、活動、技法、作業成果物に分類するモデル。5.1.7構成管理 (Configuration Management, CM)テストウェアなどの作業成果物を識別、コントロール、トラッキングするための規律。5.4 第 6章:テストツール キーワード概要(シラバス記載の学習対象の例)参照節(ソースの該当箇所)テスト自動化 (Test Automation)テストツールを使用し、反復作業の削減や一貫性の向上などの利点をもたらす活動。ツールの導入、保守、トレーニングが必要となる。6.2, 6.2.1

Rails 8.1 リリースノートまとめ

  • POST
Rails 8.1 リリースノートについてまとめたものを備忘録として残しておく Rails 7 リリースノートまとめ Rails 7.1 リリースノートまとめ Rails 7.2 リリースノートまとめ Rails 8 リリースノートまとめ Rails 8.1 のリリースノートは以下の通り Rails 8.1 系での新機能および変更点 Railties rails credentials:fetch PATH コマンドが追加された フィクスチャで動的 ERB 式の代わりに静的 BCrypt パスワードダイジェストが生成されるようになった .gitignoreエントリが拡張され、すべてのキーファイルが無視されるようになった bin/setupに--reset オプションが追加された GitHub ActionsワークフローテンプレートのRuboCopジョブにRuboCopキャッシュ復元が追加された ActionMailerを使用しないアプリケーションで認証ジェネレータがメーラー関連ファイルの生成をスキップするようになった bin/ciが導入され、テスト、スタイルチェック、セキュリティ監査をローカルまたはクラウドで実行できるようになった 認証ジェネレータ実行時にセッションコントローラテストが生成されるようになった bin/bundler-auditとconfig/bundler-audit.ymlが追加され、アプリケーションgemの既知のセキュリティ問題を発見・管理できるようになった bin/bundlebinstubの生成が停止された SessionTestHelperモジュールが追加され、sign_in_as(user)とsign_outテストヘルパーが提供されるようになった 認証ジェネレータでパスワードリセットのレート制限が追加された rails new --minimalオプションが更新され、最近追加された機能が除外されるようになった アプリケーションレイアウトにapplication-nameメタデータが追加された ローカルでENVまたはcredentialsからsecret_key_baseが使用されるようになった 生成されたci.ymlファイルにRAILS_MASTER_KEYプレースホルダーが導入された 非標準環境でも Rails コンソールプロンプトがカラー化されるようになった 開発環境とテスト環境で YJIT が有効化されなくなった ポリシーが設定されている場合のみPermissionsPolicy::Middlewareが含まれるようになった Action Cable ActionCable::Channel#stream_for に複合チャネルを渡せるようになった 例: stream_for [ group, group.owner ] Redis のサブスクリプション接続識別子に nil を設定できるようになった Action Pack action_controller.loggerを nil または false に設定することで無効化できるようになった .md/.markdownが Markdown 拡張として追加され、デフォルトのmarkdown:レンダラーが追加された エンジンルート検査コマンドにヘッダーが追加された エラーページに「Copy as text」ボタンが追加された rate_limitメソッドにscope:オプションが追加された ActionDispatch::Executorでrack.response_finishedコールバックのサポートが追加された rescue_fromが呼び出されたときにログが生成されるようになった Rails 設定の hosts からのホストリダイレクトが許可されるようになった rate_limit.action_controller通知に追加のペイロードが含まれるようになった 組み込みヘルスコントローラーに JSON サポートが追加された ブラウザからクラッシュでソースファイルを開けるようになった クエリ文字列キーが値と同様に有効なエンコーディングかチェックされるようになった PublicExceptionsとDebugExceptionsで HEAD リクエストの空のボディが常に返されるようになった RFC 9111に従った HTTP Cache-Control リクエストディレクティブの包括的なサポートが追加された assert_in_body/assert_not_in_bodyがレスポンスボディ内のテキストをチェックする最も簡単な方法として追加された クッキー名が最大許可サイズの計算に含まれるようになった RFC 9111に従ったmust-understandディレクティブが実装された JSON レンダラーが HTML エンティティや Unicode 行区切り文字をエスケープしなくなった テストルートを挿入する前に遅延ルートセットが読み込まれるようになった レンダリング後に head が呼び出された場合にAbstractController::DoubleRenderErrorが発生するようになった Cookie Serializerがメッセージパックを使用する際にActive Support SafeBufferをシリアライズできるようになった Rails.application.reload_routes!がほぼすべてのルートをクリアする問題が修正された #resource または#resources に無効な :only または :except オプションが与えられた場合のArgumentErrorにリソース名が追加された 存在しないコントローラーを指すルートが 404 ではなく 500 を返すようになった ActionDispatch::Session::CacheStoreにcheck_collisionsオプションが追加された ExceptionWrapperでビルトインテンプレートとのバックトレース行のマッチングが改善された Mimeタイプ のシンボルでコンテンツタイプを設定できるようになった Action View preload_link_tagで生成される HTML と一致するように Link ヘッダーに fetchpriority が追加された preload_link_tagで生成される Link ヘッダーに CSP nonce が追加された current_page?がmethod:オプションで特定の HTTP メソッドとマッチできるようになった form_tag,token_tag,method_tagで生成される隠し入力から autocomplete=“off” が削除された button_to,check_box,select(multiple付き),file_fieldフォームに含まれる隠しパラメータフィールドから autocomplete=“off” が削除された Action Viewテンプレート間の依存関係を追跡する戦略の設定が有効になった relative_time_in_wordsヘルパーが導入された nonce: falseが javascript_tag, javascript_include_tag, stylesheet_link_tag から nonce 属性を削除するようになった 無制限の数のオブジェクトから dom_id のような文字列を作成する dom_target ヘルパーが追加された collection_checkboxesが隠し<input>を生成する際にhtml_options[:form]が尊重されるようになった レイアウトが render に渡されるローカル変数にアクセスできるようになった テンプレートの strict locals に関連する引数エラーがActionView::StrictLocalsErrorを発生させるようになった ERB テンプレートまたは do-end ブロック内でエラーが発生した場合のマルチライン メソッドのエラーハイライトが改善された コンパイルされたテンプレートでソーステンプレートの終端を超えた行でエラーが発生した場合の ERB テンプレートエラーハイライトのクラッシュが修正された ERB テンプレートエラーハイライトの信頼性が向上し、ハイライトでの無限ループとクラッシュが修正され、代替 ERB ハンドラーの許容性が改善された hidden_fieldとhidden_field_tagがカスタム autocomplete 値を受け入れるようになった content_security_policy_nonce_directives設定オプションで指定されたディレクティブの影響を受けるタグに nonce を自動的に追加する新しい設定content_security_policy_nonce_autoが追加された Action Mailer deliver_all_laterが追加され、複数のメールを一度にエンキューできるようになった Active Record libpq >= 18とpg < 1.6.0の互換性問題により、cancel_any_running_queryでPG::Connection#cancelの呼び出しがスキップされるようになった 新しいデータベース設定オプションkeepalive,max_age、min_connectionsが導入され、 pool が max_connections にリネームされた LIMIT 検証がクエリ生成時から limit() が呼び出された時に移動された ActiveRecord::CheckViolationエラークラスがチェック制約違反用に追加された ActiveRecord::ExclusionViolationエラークラスが排他制約違反用に追加された filter_attributesでフィルタされた属性がfilter_parametersでもフィルタされるようになった connection.current_transaction.isolationAPIが現在のトランザクションの分離レベルをチェックできるようになった #mergeと#orまたは#andと属性と SQL 文字列の混合で不正なクエリが生成される問題が修正された スキーマダンパーが :ruby 形式でダンプする際にActiveRecord.dump_schemasを考慮するようになった update_column/update_columnsメソッドに :touch オプションが追加された Active Record バッチングが範囲を使用する際にさらに最適化された インデックスとテーブル名の長さ検証のエラーメッセージに現在の文字長が含まれるようになった PostgreSQL 用の rename_schema メソッドが追加された アソシエーションの非推奨化サポートが実装された PostgreSQL アダプタの create DB が locale_provider と locale をサポートするようになった PostgreSQL で ntuples を使用して row_count を populateするようになった 永続化されていないレコードが厳密に読み込まれた has_and_belongs_to_many アソシエーションに include? されるかどうかのチェックが修正された ブロック内のすべてのプールのトランザクション分離を変更する機能が追加された 順序に依存するファインダーメソッド(#first、#last)が順序値なしで呼び出された場合にActiveRecord::MissingRequiredOrderErrorが発生するようになった 多態性 belongs_to アソシエーションで :class_name が無効になった db:migrate:reset が複数データベースをサポートするようになった ActiveRecord::Resultに affected_rows が追加された 再試行可能な SqlLiterals を #where に渡すことができるようになった insert_all/upsert_allで主キーのデフォルトが設定されるようになった ActiveRecord::DatabaseConfigurations用のロードフックactive_record_database_configurationsが追加された SQLite クエリで boolean カラムに TRUE と FALSE が使用されるようになった サポートされる SQLite の最小バージョンが 3.23.0 に引き上げられた 割り当てられた Active Record がアソシエーションをルックアップできるようになった 暗号化が属性ごとにsupport_unencrypted_data: trueを設定することをサポートするようになった モデルジェネレータがデータベース接続なしでカラムタイプを検証できるようになった 署名付き ID 検証器がRails.application.message_verifiersで設定可能になった PostgreSQLのstructure_loadでextra_flagsが前置されるようになった implicit_order_columnで主キー/制約の追加をバイパスできるようになった データベース設定でschema_formatを設定できるようになった MySQL v8.0.0+ と MariaDB v10.6.0+でインデックスの無効化がサポートされた ActiveRecord::Relation#reverse_orderでimplicit_order_columnが尊重されるようになった SQLite3 用のActiveRecord::Resultにカラムタイプが追加された 読み取り専用ロールで悲観的ロックを使用した場合にActiveRecord::ReadOnlyErrorが発生するようになった Rails アプリケーション外で SQLite3Adapter の dbconsole メソッドを使用する問題が修正された ActiveRecord::PendingMigrationアクションで複数データベースのマイグレーションが修正された 接続エラーで冪等なアソシエーションクエリの自動再試行が有効になった sql.active_record 計装に allow_retry が追加された PostgreSQL と SQLite3 で JOIN を使用した UPDATE のサポートが改善された ActiveSupport::Testing::Parallelizationに before-fork フックが導入され、既存の接続がクリアされるようになった PoolConfig が接続クラスへの参照を保持しなくなった 非同期クエリを使用する際に SQL 通知が送信されない場合がある問題が修正された PostgreSQL でダンプされたスキーマキャッシュの読み込みクエリが排除された ActiveRecord::Coder::JSONがインスタンス化できるようになった アソシエーション内の永続化されていないレコードでinsert_all/upsert_allを使用することが非推奨になった index_exists?でカラム名がオプションになった sql.active_record通知のペイロード名がeager loadingで「SQL」から「#{model.name} Eager Load」に変更された 接続エラーで冪等な#exists?クエリの自動再試行が有効になった update_allとサポートされていないメソッドの併用が非推奨になった schema.rb内のテーブルカラムがアルファベット順にソートされるようになった スキーマダンパー用のバージョンフォーマッターが導入された シリアライズされた属性が比較可能としてマークできるようになった MySQLのデフォルト関数がカラムのnullabilityを変更する際に削除される問題が修正された SQLite拡張がconfig/database.ymlで設定できるようになった ActiveRecord::Middleware::ShardSelectorが細かいデータベース接続切り替えをサポートするようになった insert_all/upsert_all後にリレーションがリセットされるようになった 並列テストデータベースのサフィックスに_Nが使用されるようになった データベース接続が最近検証されたことを記憶するようになった 複数のレコードのキャッシュカウンターをリセットできるようになった sql.active_record通知にaffected_rowsが追加された グループ化された計算でsumが修正された データベースごとにトランザクションテストの有効/無効がサポートされるようになった URL 設定を使用する際に query_cache 値がキャストされるようになった NULLS NOT DISTINCTがUNIQUE CONSTRAINTとUNIQUE INDEXの両方で動作するようになった PG::UnableToSend: no connection to the serverが接続関連の例外として再試行可能になった Active Storage GCP メタデータサーバーへの不要な呼び出しが削除された ダイレクトアップロードの進行状況がサーバー処理時間を考慮するようになった ActiveStorage::Filename#to_strが#to_sに委譲されるようになった config.active_storage.checksum_implementationを通じて代替MD5実装のサポートが追加された Blob が関連する Attachment を自動保存しなくなった Active Model バリデーションコールバックに except_on: オプションが追加された ActiveRecord::NormalizationがActiveModel::Attributes::Normalizationにバックポートされた Active Support ActiveSupport::Cache::Store#namespace=と#namespaceが追加された 並列テスト実行用のparallel_worker_idヘルパーが作成された ActiveSupport::Cache::Strategy::LocalCache::Middlewareのキャッシュが更新可能になった ActiveSupport::EventReporter用のassert_events_reportedテストヘルパーが追加された ActiveSupport::TimeZone#standard_nameメソッドが追加された Rails.eventでアクセス可能なStructured Event Reporterが追加された ActiveSupport::Loggerが#freezeフレンドリーになった ActiveSupport::Gzip.compressが入力に基づいて決定論的になった ActiveSupport::BacktraceCleaner#clean_locationsメソッドが追加された CurrentAttributesとExecutionContextの状態管理がテストケースで改善された ActiveSupport::BacktraceCleaner#first_clean_locationメソッドが追加された FileUpdateCheckerとEventedFileUpdateCheckerが Gem.path の変更を無視するようになった ActiveSupport::BacktraceCleaner#first_clean_frameメソッドが追加された CurrentAttributesインスタンスが常にクリアされるようになった 並列テストでbefore_fork_hookのパブリック API が追加された 並列テストデータベースの作成をスキップする機能が実装された 最大キャッシュキーサイズの設定が可能になった ActiveSupport::Cache::RedisCacheStoreで非ブロッキング削除にUNLINKコマンドが使用されるようになった Cache#read_counterとCache#write_counterが追加された ActiveSupport::Testing::ErrorReporterAssertions#capture_error_reportsが導入された ActiveSupport::ErrorReporter#add_middlewareが導入された 実行ラッピングがすべての例外(Exceptionを含む)を報告するように変更された ActiveSupport::Testing::Parallelization.before_fork_hookでテストワーカーフォーク直前に呼び出されるコールバックの宣言が可能になった #freeze_timeテストヘルパーが日付または時間引数を受け入れるようになった ActiveSupport::JSONがオプションを受け入れるようになった ActiveSupport::Testing::NotificationAssertionsのassert_notificationがデフォルトでペイロードサブセットとマッチするようになった nil.to_query("key")がkeyを返すようになった ActiveSupport::Cache::RedisCacheStoreで :redis オプションが既に ConnectionPool の場合に Redis を ConnectionPool でラップしないようになった ERB::Util.tokenizeが ERB タグを含まない文字列で完全な入力文字列と :PLAIN トークンを返すように変更された ERB::Util.tokenizeでマルチバイト文字の前に ERB タグがある場合の不正なトークン化バグが修正された ActiveSupport::Testing::NotificationAssertionsモジュールがActiveSupport::Notificationsのテストを支援するために追加された ActiveSupport::CurrentAttributes#attributesが各呼び出しで新しいハッシュオブジェクトを返すようになった ActiveSupport::JSON.encodeがCIDR記法をサポートするようになった ActiveSupport::FileUpdateCheckerが多くのファイル拡張子をチェックする際に高速化された Active Job ActiveJob::Serializers::ObjectSerializers#klassメソッドがパブリックになった ActiveJob::Continuablez を使用してジョブを中断・再開できるようになった enqueue_after_transaction_commitが有効な場合の ActiveJob エンキューコールバックの呼び出しがコミット後に延期されるようになった ActiveJob::Base#retry_onと#discard_onにreport:オプションが追加された ActiveJob::ConfiguredJob#perform_laterがブロックを受け入れるようになった デシリアライゼーション時に以前にシリアライズされたジョブクラスが不明な場合により具体的なエラーが発生するようになった Action Text fill_in_rich_text_areaオプションが Capybara に転送されるようになった アタッチメントアップロードの進行状況がサーバー処理時間を考慮するようになった Trix 依存関係がベンダーファイルではなく action_text-trixgem で満たされるようになった ActionText::RichText#embedsの割り当てが before_save から before_validation に変更された Action Mailbox Mail::Message に reply_to_address 拡張メソッドが追加された 非推奨および削除された機能 Action Pack 以下が削除された パラメータ名の先頭の角括弧([])をスキップする機能 クエリ文字列のセミコロン(;)区切りのサポート 複数のパスに対するルート設定のサポート Rails.application.config.action_dispatch.ignore_leading_brackets が非推奨になった Active Record 以下が削除された SQLite3 アダプターの :retries オプション MySQL の以下のカラムメソッド :unsigned_float :unsigned_decimal Active Storage azure ストレージサービスが削除された Active Job 以下が削除された ActiveJob::Base.enqueue_after_transaction_commit を :never, :always, :default に設定するサポート Rails.application.config.active_job.enqueue_after_transaction_commit 内部の SuckerPunch アダプタ

Serverless 構成で lambda ローカルデバッグ用に AWS SAM CLI を使用する

  • POST
Serverless 構成で lambda ローカルデバッグ用に AWS SAM CLI を使用する方法を調査したものを備忘録として残しておく 環境 Infrastructure: AWS lambda: nodejs(20.X) Secret Manager RDS: PostgreSQL AWS API Gateway API Key あり AWS SAM CLI Docker Compose API 仕様書 OpenAPI 3.0 AWS SAM 環境について 必要なファイルの内、重要な部分のみ記載 フォルダ構成 ├── layers/ │ ├── package.json │ └── pg-layer.zip │ ├── scripts/ │ ├── create-pg-layer.sh │ ├── init-localstack.sh │ └── local-secret.json │ ├── .env ├── docker-compose.yml └── template.yaml 実際のファイル AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Globals: Function: Runtime: nodejs20.x Timeout: 30 MemorySize: 128 Environment: Variables: DB_NAME: !Sub "${DB_NAME}" DB_HOST: !Sub "${DB_HOST}" DB_USER: !Sub "${DB_USER}" DB_PORT: !Sub "${DB_PORT}" SECRET_NAME: !Sub "${SECRET_NAME}" IS_LOCAL: !Sub "${IS_LOCAL}" NODE_ENV: !Sub "${NODE_ENV}" AWS_ENDPOINT_SECRETS_MANAGER: !Sub "${AWS_ENDPOINT_SECRETS_MANAGER}" AWS_REGION: !Sub "${AWS_REGION}" AWS_ACCESS_KEY_ID: !Sub "${AWS_ACCESS_KEY_ID}" AWS_SECRET_ACCESS_KEY: !Sub "${AWS_SECRET_ACCESS_KEY}" AWS_SDK_LOAD_CONFIG: !Sub "${AWS_SDK_LOAD_CONFIG}" AWS_STS_REGIONAL_ENDPOINTS: !Sub "${AWS_STS_REGIONAL_ENDPOINTS}" AWS_NODEJS_CONNECTION_REUSE_ENABLED: !Sub "${AWS_NODEJS_CONNECTION_REUSE_ENABLED}" Resources: # API Gateway LocalApi: Type: AWS::Serverless::Api Properties: StageName: local Cors: AllowMethods: "'*'" AllowHeaders: "'*'" AllowOrigin: "'*'" Auth: ApiKeyRequired: true DefinitionBody: Fn::Transform: Name: AWS::Include Parameters: Location: ./docs/open_api.yml # Parameterized OpenAPI 3.0 file # Lambda Function GetUserDetailFunction: Type: AWS::Serverless::Function Properties: CodeUri: functions/getUserDetail/ Handler: index.handler Layers: - !Ref PgLayer Events: ApiEvent: Type: Api Properties: RestApiId: !Ref LocalApi Path: /users/{userId} Method: GET PgLayer: Type: AWS::Serverless::LayerVersion Properties: LayerName: pg-layer Description: PostgreSQL client for Node.js ContentUri: layers/pg-layer.zip CompatibleRuntimes: - nodejs20.x services: postgres: image: postgres:13 container_name: test-postgres environment: POSTGRES_DB: ${DB_NAME} POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 localstack: image: localstack/localstack:latest ports: - "4566:4566" # LocalStack Gateway - "4510-4559:4510-4559" # External services port range environment: - DEBUG=${DEBUG} - DOCKER_HOST=${DOCKER_HOST} - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR} - PERSISTENCE=${PERSISTENCE} - SERVICES=${SERVICES} - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} volumes: - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack" - "/var/run/docker.sock:/var/run/docker.sock" - "./scripts/init-localstack.sh:/etc/localstack/init/ready.d/init-localstack.sh" - "./scripts/local-secret.json:/etc/localstack/local-secret.json" volumes: postgres_data: #!/bin/bash # LocalStackのエンドポイント ENDPOINT="http://localhost:4566" # シークレット値を外部ファイルから読み込む SECRET_STRING=$(cat /etc/localstack/local-secret.json) # シークレットの作成 aws --endpoint-url=$ENDPOINT secretsmanager create-secret \ --name local-secret \ --description "Local development secret" \ --secret-string "$SECRET_STRING" echo "LocalStack secrets initialized" { "password": "postgres" } #!/bin/bash set -e LAYER_DIR="layers/pg-layer" ZIP_FILE="layers/pg-layer.zip" mkdir -p "$LAYER_DIR/nodejs" cp layers/package.json "$LAYER_DIR/nodejs/package.json" cd "$LAYER_DIR/nodejs" npm install --production cd ../../.. rm -f "$ZIP_FILE" cd "$LAYER_DIR" zip -r "../../$ZIP_FILE" . cd ../../ echo "pg-layer の作成が完了しました: $ZIP_FILE" rm -rf "$LAYER_DIR" # Only used for local debugging # DB DB_NAME=test_db DB_HOST=host.docker.internal DB_USER=postgres DB_PORT=5432 DB_PASSWORD=postgres # SecretsManager SECRET_NAME=local-secret # Lambda IS_LOCAL=true NODE_ENV=local AWS_ENDPOINT_SECRETS_MANAGER=http://host.docker.internal:4566 AWS_REGION=ap-northeast-1 AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_SDK_LOAD_CONFIG=1 AWS_STS_REGIONAL_ENDPOINTS=regional AWS_NODEJS_CONNECTION_REUSE_ENABLED=1 # LocalStack DEBUG=1 DOCKER_HOST=unix:///var/run/docker.sock LAMBDA_EXECUTOR=docker PERSISTENCE=1 SERVICES=secretsmanager AWS_DEFAULT_REGION=ap-northeast-1 LOCALSTACK_VOLUME_DIR=./volume 使用方法 実施手順 docker-compose up -d Copy the DB in the Dev environment If the Layer is updated, do the following ./scripts/create-pg-layer.sh sam local start-api シークレットマネージャーに値が追加された場合 ローカルデバッグでは localstack を使用する