本書の目的
0.1 目的
本書は、高田工業所様「日報モバイルアプリ」にメールOTP認証機能を追加するにあたり、次の3点を定めることを目的とします。
| No | 定めること | 該当章 |
|---|---|---|
| 1 | 追加する機能の内容と範囲(要件定義) | 第2章〜第5章 |
| 2 | Platio Canvas 上での実現方法(基本設計) | 第5章〜第7章 |
| 3 | 開発・テストの役割分担とお見積りの前提 | 第9章・第10章 |
本書の承認をもって要件確定とし、以降の開発およびテストの基準とします。日報モバイルアプリの既存の要件定義資料を前提とし、それらの内容は本書では繰り返しません。
ふえん様にお願いする事項は、巻末の「ふえん様へのご依頼事項」に一覧化しています。お願いするのは本書のご確認と結合テストの2点で、それ以外はソウゾウにて実施します。
0.2 文書情報
| 文書名 | メールOTP認証機能 要件定義書 兼 基本設計書 |
|---|---|
| 対象システム | 高田工業所様 日報モバイルアプリ(Platio Canvas) |
| 対象アプリ | 社員ワークレポート/協力会社ワークレポート/マスタアプリ/作業管理アプリ(社員)/作業管理アプリ(協力会社) 計5アプリ |
| 版数 | Ver 0.2(ドラフト・レビュー用) |
| 作成 | ソウゾウ合同会社(西澤志門/菊池星哉) |
| 提出先 | 株式会社ふえん 安藤昭太 様 |
| 見積 | ¥180,000(税抜)/要件定義開始から5営業日 |
0.3 本書の範囲
| ID | 項目 | 区分 |
|---|---|---|
| S-01 | ログイン時のメールOTP(ワンタイムパスワード)認証 | 対象 |
| S-02 | 認証コードの発行・メール送信・照合(すべてPlatio Canvas内で実装) | 対象 |
| S-03 | 認証コードの有効期限(5分)判定 | 対象 |
| S-04 | 失敗回数のカウントとアカウントロック | 対象 |
| S-05 | ユーザーマスタへのフィールド追加 | 対象 |
| X-01 | 一定時間経過による強制ログアウト | 別紙 |
| X-02 | アカウントロックの解除画面(既存マスタアプリで対応) | 対象外 |
| X-03 | 新規登録・アカウント削除・パスワード再発行申請フローの改修 | 対象外 |
| X-04 | Platio Canvas 標準ログイン機能自体の改修 | 対象外 |
| X-05 | 外部サーバー・外部APIの構築 | 対象外 本方式では不要 |
0.4 確定事項
| No | 確定内容 | 決定者 | 関連 |
|---|---|---|---|
| 1 | 実装はPlatio Canvas内で完結させる。使用する機能はメール送信・ページ遷移・条件による出し分けに限る | ソウゾウ | 2.1 |
| 2 | OTPは対象5アプリすべてに適用する(作業管理アプリは社員用・協力会社用の2本) | ふえん様 | 1.1 |
| 3 | お見積り ¥180,000(税抜)/5営業日は変更しない | ふえん様 | 第10章 |
| 4 | 単体テストはソウゾウ、結合テストはふえん様が実施する | 両社 | 9.1 |
| 5 | 仕様の詳細はソウゾウにて決定する。ふえん様には内容のご確認と結合テストをお願いする | ソウゾウ | 11.1・A.1 |
| 6 | 通信環境への依存は考慮しない(Platio Canvas は通信環境がなければ起動しないため) | ソウゾウ | 2.4 |
現行システムの整理
1.1 対象アプリ
| ID | アプリ | 主な利用者 | OTP適用 |
|---|---|---|---|
| AP-01 | 社員ワークレポート(作業日報) | 高田工業所 社員 | 適用 |
| AP-02 | 協力会社ワークレポート(作業従事者報告書) | 協力会社 社員・作業管理者 | 適用 |
| AP-03 | マスタアプリ | システム管理者・各所属 | 適用 |
| AP-04 | 作業管理アプリ(社員) | 社員作業管理者・承認者・調達課 | 適用 |
| AP-05 | 作業管理アプリ(協力会社) | 社員作業管理者・承認者・協力会社作業管理者 | 適用 |
作業管理アプリは社員ワークレポート用と協力会社ワークレポート用が分かれているため、対象は合計5アプリです。5アプリすべてに同一の仕組みを実装します。1アプリ目で仕様を確定させ、2〜5アプリ目は同じ構成を展開します。
1.2 利用者区分
ユーザーマスタの権限区分(システム管理者・作業管理者・承認者・一般)と、ユーザー区分(社員・協力会社)に基づく利用者は次のとおりです。本機能は区分によらず全利用者に同一の認証を適用します。
| No | 組織 | 区分 | 主な利用アプリ |
|---|---|---|---|
| 1 | 高田工業所 | システム管理者 | マスタ、作業管理(社員・協力会社) |
| 2 | 社員作業管理者(管理課・調達課) | 社員WR、マスタ、作業管理(社員・協力会社) | |
| 3 | 承認者(工事担当者) | 社員WR、作業管理(社員・協力会社) | |
| 4 | 社員(日報入力者) | 社員WR | |
| 5 | 協力会社 | 協力会社作業管理者 | 協力会社WR、作業管理(協力会社) |
| 6 | 協力会社社員(作業従事者) | 協力会社WR |
1.3 既存のアカウント運用フローとの整合
既存要件定義(資料6)では次が定義されています。本機能はこれらと矛盾しない形で追加します。
| フロー | 既存の定義 | OTP追加による影響 |
|---|---|---|
| 新規登録 | アプリから情報の登録を行なう。完了メールを受領し、その内容をもとにログインを行なう | 初回ログイン時からOTPが必要になる。完了メールの案内文に追記が必要 |
| 再発行申請 | アプリから再発行申請を行なう。メールアドレス宛に再発行依頼が届く | 再発行後の初回ログインでもOTPが必要。運用マニュアルに追記が必要 |
| アカウント削除 | アプリから削除申請を行ない、完了メールを受領する | 影響なし |
| 権限変更 | アカウント管理者へ申請し、管理者が変更を行なう | 影響なし |
実装方式
2.1 基本方針
認証コードの発行・保管・照合を、ユーザーマスタのフィールドとアクションだけで実現します。外部サーバーやデータベースは使用しません。
| 使用するPlatio Canvasの機能 | 用途 |
|---|---|
| ランダム関数 | 6桁の認証コードを生成する |
| レコード更新 | 生成したコード・送信日時・失敗回数をユーザーマスタへ書き込む |
| メール送信 | 認証コードを利用者のメールアドレスへ送信する |
| ページ遷移 | 認証画面・ホーム画面・エラー画面へ振り分ける |
| 条件による出し分け | コードの一致判定、有効期限判定、失敗回数判定を行なう |
2.2 全体の流れ
2.3 失敗回数の考え方
失敗回数はログインボタンの押下と同時に0へリセットします。したがって、1回のログイン操作あたり5回まで入力を誤ることができます。
2.4 通信環境について
Platio Canvas のWebアプリは通信環境がなければ起動しないため、オフライン時の動作は考慮の対象外とします。認証コードの生成・送信・照合はいずれも通信を前提とした処理であり、アプリが起動できる状況であれば実行可能です。
2.5 複数アプリでの動作
5アプリすべてに同じ仕組みを実装するため、アプリを起動するたびに認証が発生します。複数アプリを使用する利用者(社員作業管理者など)は、アプリごとに認証コードの入力が必要です。
機能要件
3.1 機能要件一覧
| ID | 要件 | 仕様 | 優先 |
|---|---|---|---|
| FR-01 | ロック判定 | ログインボタン押下時、最初にロック状態を判定する。ロック中はアカウントロック画面へ遷移し、認証コードを発行しない | 必須 |
| FR-02 | 認証コードの生成 | ランダム関数により6桁の数字を生成する | 必須 |
| FR-03 | 認証コードの保管 | 生成したコードをユーザーマスタの認証コードフィールドへ書き込む | 必須 |
| FR-04 | 送信日時の記録 | メール送信と同時に、コード送信日時フィールドへ現在日時を記録する | 必須 |
| FR-05 | 失敗回数のリセット | ログインボタン押下と同時に、失敗回数フィールドを0へ更新する | 必須 |
| FR-06 | メール送信 | ユーザーマスタに登録されたメールアドレス宛に、認証コードを本文に含むメールを送信する | 必須 |
| FR-07 | 認証画面への遷移 | コード発行後、認証コード入力画面へ遷移する | 必須 |
| FR-08 | 有効期限の判定 | 認証ボタン押下時、コード送信日時から5分以内であることを判定する。超過している場合は有効期限切れ画面へ遷移し、認証を成立させない | 必須 |
| FR-09 | コードの照合 | 入力値とユーザーマスタの認証コードフィールドが一致することで認証成立とする | 必須 |
| FR-10 | 認証成功時の動作 | 認証コードフィールドをクリアし、ホーム画面へ遷移する | 必須 |
| FR-11 | 認証失敗時の動作 | 失敗回数を1加算し、認証コード入力画面へ戻す。エラーメッセージと残り回数を表示する | 必須 |
| FR-12 | 失敗回数の上限 | 5回。再送をはさんでも通算する。上限に達した場合はロック状態をONにし、アカウントロック画面へ遷移する | 必須 |
| FR-13 | 認証コードの再送 | 認証コード入力画面から再送を選択できる。再送時は新しいコードを生成し、認証コードフィールドとコード送信日時を更新のうえメールを送信する | 必須 |
| FR-14 | 再送時の失敗回数 | 再送では失敗回数をリセットしない(リセットはログインボタン押下時のみ)。これにより、再送に個別の回数制限を設けなくても試行は通算5回に制限される | 必須 |
| FR-15 | ロックの解除 | システム管理者がマスタアプリからロック状態をOFF、失敗回数を0に更新することで解除する | 必須 |
| FR-16 | 未認証時のアクセス防止 | 認証を経ずにホーム画面・業務画面へ到達できないこと | 必須 |
3.2 パラメータ一覧
| No | 項目 | 値 | 補足 |
|---|---|---|---|
| 1 | 認証コードの桁数 | 6桁(半角数字) | — |
| 2 | 認証コードの有効期限 | 5分 | コード送信日時からの経過時間で判定する |
| 3 | 失敗回数の上限 | 5回 | 再送をはさんでも通算する。上限に達した時点でアカウントをロックする |
| 4 | 失敗回数のリセット契機 | ログインボタン押下時のみ | 再送ではリセットしない |
| 5 | 再送の回数制限 | 個別には設けない | 再送しても失敗回数は引き継がれるため、上限5回によって通算で制限される |
上記の値は設定項目としては持たず、アクション内に組み込みます。変更にはアクションの修正が必要です。
3.3 通知メール仕様
| 差出人名 | 高田工業所 日報アプリ C-03 |
|---|---|
| 送信元アドレス | Platio Canvas のメール送信機能に依存 C-01 |
| 件名 | 【認証コード】日報アプリ ログイン認証 |
| 本文(案) | 日報アプリの認証コードをお知らせします。 認証コード:123456 有効期限:発行から5分間 この操作に心当たりがない場合は、パスワードを変更のうえ、システム管理者へご連絡ください。 ※本メールは送信専用です。 |
| 形式 | テキストメール |
| 送信タイミング | ログインボタン押下時、および再送ボタン押下時 |
3.4 異常系
| ID | 事象 | システムの振る舞い | 表示文言(案) |
|---|---|---|---|
| E-01 | コード不一致 | 失敗回数を1加算し、認証コード入力画面に留まる | 認証コードが正しくありません。残り試行回数:n回 |
| E-02 | 有効期限切れ | 有効期限切れ画面へ遷移。失敗回数は加算しない | 認証コードの有効期限が切れました。認証コードを再送してください。 |
| E-03 | 失敗回数が上限に到達 | ロック状態をONにし、アカウントロック画面へ遷移 | 認証に5回失敗したため、アカウントをロックしました。システム管理者へお問い合わせください。 |
| E-04 | ロック中のログイン | アカウントロック画面へ遷移。認証コードは発行しない | このアカウントはロックされています。システム管理者へお問い合わせください。 |
| E-05 | 入力形式の誤り(桁数不足・文字種違い) | 照合を行なわず、入力画面に留まる。失敗回数は加算しない | 認証コードは6桁の数字で入力してください。 |
| E-06 | メール送信の失敗 | 認証コード入力画面へ遷移し、再送を促す | 認証コードを送信できませんでした。再送してください。 |
画面設計
4.1 画面一覧
| ID | 画面名 | 区分 | 概要 |
|---|---|---|---|
| SCR-01 | ログイン画面 | 既存 | ログインボタン押下でACT-01を実行する |
| SCR-02 | 認証コード入力画面 | 新規 | 6桁コードの入力・認証・再送 |
| SCR-03 | 有効期限切れ画面 | 新規 | 期限超過時に表示。再送への導線を持つ |
| SCR-04 | アカウントロック画面 | 新規 | ロック時に表示。問い合わせ先を案内する |
| SCR-05 | ホーム画面 | 既存 | 認証成功後の遷移先 |
SCR-03 はモーダル表示でも構いません。実装のしやすさに応じて選択します。
4.2 SCR-02 認証コード入力画面
4.3 画面項目定義(SCR-02)
| No | 項目 | 種別 | 必須 | 仕様 |
|---|---|---|---|---|
| 1 | 説明文 | 表示 | — | 認証コードを送信した旨を案内する |
| 2 | 認証コード | 入力 | ○ | 半角数字6桁。数値キーボードを既定表示する |
| 3 | メッセージ領域 | 表示 | — | E-01・E-05・E-06 の文言と残り試行回数を表示する |
| 4 | 認証するボタン | ボタン | — | ACT-02(認証)を実行する |
| 5 | 再送ボタン | ボタン | — | ACT-03(再送)を実行する |
| 6 | 補足ガイド | 表示 | — | 迷惑メールフォルダの確認案内を常時表示し、問い合わせを削減する |
本画面には業務画面への導線を設けません。ログイン画面へ戻る場合は Platio Canvas 標準のログアウト操作を使用します。
4.4 SCR-03 有効期限切れ画面
| No | 項目 | 仕様 |
|---|---|---|
| 1 | メッセージ | 認証コードの有効期限が切れました。認証コードを再送してください。 |
| 2 | 再送ボタン | ACT-03(再送)を実行し、SCR-02 へ遷移する |
4.5 SCR-04 アカウントロック画面
| No | 項目 | 仕様 |
|---|---|---|
| 1 | メッセージ | 認証に5回失敗したため、アカウントをロックしました。 解除にはシステム管理者による対応が必要です。 |
| 2 | 問い合わせ先 | システム管理者の連絡先を表示する C-02 |
本画面には再送ボタンも認証ボタンも配置しません。ロック中は認証コードを発行しないため(FR-01)、利用者が自力で復帰する導線を持たせない設計とします。
4.6 画面遷移図
データ設計
5.1 ユーザーマスタへの追加フィールド
既存のユーザーマスタに次の4フィールドを追加します。新規テーブルの作成は行ないません。
| No | フィールド名 | データ型 | 初期値 | 用途 |
|---|---|---|---|---|
| 1 | 認証コード | テキスト(6桁) | 空 | 発行中の認証コードを保持する |
| 2 | コード送信日時 | 日時 | 空 | 有効期限(5分)の判定基準 |
| 3 | 失敗回数 | 数値 | 0 | 認証失敗の連続回数 |
| 4 | ロック状態 | 単一選択(ロック中/解除) | 解除 | アカウントのロック有無 |
認証コードはテキスト型とします。数値型では先頭の0が失われ、6桁を維持できないためです。
5.2 権限設定(アプリ項目一覧への追加行)
既存の「アプリ項目一覧」の形式に合わせた追加行は次のとおりです。
| No | マスタ名 | 入力情報 | データ型 | システム 管理者 | 社員作業 管理者 | 承認者 | 社員 | 協力会社 作業管理者 | 協力会社 社員 | 備考 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ユーザーマスタ | 認証コード | テキスト | 非表示 | 非表示 | 非表示 | 非表示 | 非表示 | 非表示 | アクション内でのみ参照。全権限で非表示とする |
| 2 | ユーザーマスタ | コード送信日時 | 日時 | 表示 | 非表示 | 非表示 | 非表示 | 非表示 | 非表示 | 障害調査のためシステム管理者のみ表示 |
| 3 | ユーザーマスタ | 失敗回数 | 数値 | 入力 | 非表示 | 非表示 | 非表示 | 非表示 | 非表示 | ロック解除時に0へ戻す |
| 4 | ユーザーマスタ | ロック状態 | 単一選択 | 入力 | 非表示 | 非表示 | 非表示 | 非表示 | 非表示 | ロック解除時に「解除」へ変更する |
上記は既存資料「_v5_Platioマスタ関係」のアプリ項目一覧へそのまま追記できる形式で記載しています。
5.3 既存フィールドの参照
本機能は既存フィールドを参照するのみとし、変更は行ないません。
| 既存フィールド | 本機能での用途 |
|---|---|
| ユーザーコード | 認証対象レコードの特定 |
| ユーザー氏名 | メール本文の宛名(使用有無は C-03) |
| メールアドレス | 認証コードの送信先 |
| 権限区分 | ロック解除操作の権限判定(システム管理者のみ) |
アクション定義
6.1 アクション一覧
| ID | アクション | 起動契機 | 配置 |
|---|---|---|---|
| ACT-01 | ログイン(コード発行) | SCR-01 のログインボタン押下 | 各アプリ |
| ACT-02 | 認証 | SCR-02 の認証ボタン押下 | 各アプリ |
| ACT-03 | 認証コードの再送 | SCR-02・SCR-03 の再送ボタン押下 | 各アプリ |
| ACT-04 | ロック解除 | マスタアプリでのレコード編集 | マスタアプリのみ |
6.2 ACT-01:ログイン(コード発行)
- ログインした利用者のユーザーマスタのレコードを取得する
- ロック状態を判定する。「ロック中」の場合は SCR-04(アカウントロック画面)へ遷移し、以降の処理を行なわずに終了する
- ランダム関数により6桁の数字を生成し、変数へ格納する
- ユーザーマスタのレコードを更新する
・認証コード ← 生成した6桁
・コード送信日時 ← 現在日時
・失敗回数 ← 0 - メール送信アクションを実行する。宛先は当該レコードのメールアドレス、本文に生成した6桁を差し込む
- SCR-02(認証コード入力画面)へ遷移する
6.3 ACT-02:認証
- 入力値を変数へ格納する
- 入力形式を判定する。6桁の半角数字でない場合は E-05 を表示し、失敗回数を加算せずに SCR-02 に留まる
- ユーザーマスタのレコードを取得する
- 有効期限を判定する。現在日時 − コード送信日時 が5分を超えている場合は SCR-03(有効期限切れ画面)へ遷移し、以降の処理を行なわずに終了する
- コードを照合する。入力値 = 認証コードフィールド の場合はステップ6へ、不一致の場合はステップ8へ進む
- ユーザーマスタのレコードを更新する
・認証コード ← 空(クリア)
・失敗回数 ← 0 - SCR-05(ホーム画面)へ遷移して終了する
- 失敗回数を1加算してレコードを更新する
- 失敗回数を判定する。5回に達した場合はステップ10へ、5回未満の場合はステップ11へ進む
- ロック状態を「ロック中」に更新し、SCR-04(アカウントロック画面)へ遷移して終了する
- E-01 のメッセージと残り試行回数(5 − 失敗回数)を表示し、SCR-02 に留まる
6.4 ACT-03:認証コードの再送
- ユーザーマスタのレコードを取得する
- ランダム関数により6桁の数字を生成し、変数へ格納する
- ユーザーマスタのレコードを更新する
・認証コード ← 生成した6桁
・コード送信日時 ← 現在日時
・失敗回数は更新しない - メール送信アクションを実行する
- SCR-02(認証コード入力画面)へ遷移する
ACT-01 との違いは、失敗回数をリセットしない点のみです(FR-14)。再送で失敗回数が戻る仕様にすると、再送を繰り返すことで無制限に試行できる状態になるため、リセットはログインボタン押下時に限定します。
6.5 ACT-04:ロック解除(運用操作)
専用のアクションは作成せず、マスタアプリの標準的なレコード編集で対応します。
- システム管理者がマスタアプリでユーザーマスタの該当レコードを開く
- ロック状態を「解除」に変更する
- 失敗回数を0に変更する
- 保存する
この2フィールドはシステム管理者のみ入力可能に設定するため(5.2)、他の権限区分では解除操作を行なえません。
6.6 実装数量
| No | 要素 | 1アプリあたり | 5アプリ合計 |
|---|---|---|---|
| 1 | ページ(SCR-02・03・04) | 3 | 15 |
| 2 | アクション(ACT-01〜03) | 3 | 15 |
| 3 | ユーザーマスタへの追加フィールド | 4(共通マスタの場合は1回のみ) | |
| 4 | メール送信設定 | 1 | 5 |
ユーザーマスタが5アプリ共通の場合、フィールド追加は1回で済みます。アプリごとに独立している場合は5回必要です。いずれであるかは、ソウゾウにて着手前に確認します。
6.7 事前確認事項
着手前に Platio Canvas 上で確認する項目です。すでに実績のある機能であれば確認は不要です。
| ID | 確認項目 | 用途 |
|---|---|---|
| P-01 | ランダム関数で6桁の数字を生成できるか | ACT-01 ステップ3 |
| P-02 | メール送信の本文に変数(生成したコード)を差し込めるか | ACT-01 ステップ5 |
| P-03 | 日時フィールドの差分を分単位で判定できるか | ACT-02 ステップ4 |
| P-04 | ログインボタンの押下時にアクションを実行できるか | ACT-01 の起動 |
| P-05 | 認証画面から標準操作でホーム画面へ到達できないか | FR-16(認証迂回の防止) |
セキュリティ上の留意点
7.1 認証コードフィールドの非表示(最重要)
あわせて、レコード一覧のカード表示・検索結果・CSV出力など、フィールドが露出しうる箇所をすべて確認します。単体テストの必須項目とします(TST-06)。
7.2 認証成功後のコードのクリア
認証に成功した時点で認証コードフィールドを空にします(ACT-02 ステップ6)。クリアしない場合、同じコードで繰り返し認証できる状態が残ります。ログインをやり直せば新しいコードが発行されるため影響は限定的ですが、使用済みのコードを保持し続ける理由がないためクリアします。
7.3 有効期限判定に用いる日時
有効期限は「コード送信日時」と「現在日時」の差分で判定します。この現在日時が端末の時計を参照する場合、端末の日時を変更することで期限判定を回避できる可能性があります。
| 想定される影響 | 評価 |
|---|---|
| 期限切れのコードを有効なものとして扱える | 限定的。コードを知っている必要があるため、単独では成立しない |
| 期限を過ぎたコードでの認証 | コードはログインのたびに更新されるため、悪用の余地は小さい |
実務上の影響は小さいため、本開発では対策を行ないません。Platio Canvas の現在日時がサーバー時刻を参照する仕様であれば、この論点自体が発生しません(P-03 で確認)。
7.4 認証を経ないホーム画面への到達
認証コード入力画面から Platio Canvas の標準操作でホーム画面や業務画面へ到達できると、OTPが形骸化します。
| No | 想定される経路 | 対策 |
|---|---|---|
| 1 | 標準の戻る操作 | 認証画面より前に業務画面を配置しない構成とする |
| 2 | レコード一覧への直接遷移 | 認証前の状態で到達しうる画面を洗い出し、遷移元を塞ぐ |
| 3 | アプリの再起動 | 起動時は必ずログイン画面から開始するため、迂回できない |
P-05 で実際の挙動を確認し、単体テスト(TST-07)で網羅的に検証します。
7.5 本方式で対応しない事項
次の項目は本方式では対応しません。いずれも実装の複雑化に見合う効果が得られないと判断したものです。必要が生じた場合は追加開発としてご相談ください。
| No | 項目 | 不採用の理由 |
|---|---|---|
| 1 | 認証コードのハッシュ化保存 | アプリ内で照合を行なうため、ハッシュ化すると比較処理を組めない |
| 2 | 再送回数の個別制限 | 再送では失敗回数がリセットされないため、通算5回の上限によって既に制限されている(3.2) |
| 3 | 認証ログの記録 | ロック状態と失敗回数がユーザーマスタに残るため、事後確認は可能 |
| 4 | 端末の記憶(一定期間の再認証省略) | ログインのたびに認証する仕様とするため不要 |
運用設計
8.1 導入前に必要な準備
| No | 準備事項 | 担当 |
|---|---|---|
| 1 | Platio Canvas のメール送信元アドレスの確認と、必要な場合の設定 | ソウゾウ |
| 2 | 認証コードメールが社内メールフィルタを通過することの確認 C-01 | 高田工業所様 |
| 3 | 協力会社側のメール受信環境の確認(受信拒否設定の解除依頼) C-01 | 高田工業所様→協力会社 |
| 4 | ロック解除の運用ルールと問い合わせ窓口の決定 C-02 | 高田工業所様 |
| 5 | 利用者向け案内文の作成 | 記載内容:ソウゾウ/展開:高田工業所様 |
8.2 利用者への案内が必要な事項
| No | 案内内容 | 対象 |
|---|---|---|
| 1 | ログインのたびに認証コードの入力が必要になること | 全利用者 |
| 2 | 認証コードは登録メールアドレス宛に届き、有効期限は5分であること | 全利用者 |
| 3 | 5回失敗するとアカウントがロックされ、自力では解除できないこと | 全利用者 |
| 4 | ロックされた場合の問い合わせ先 | 全利用者 |
| 5 | メールが届かない場合の確認手順(迷惑メールフォルダ、受信設定) | 全利用者 |
| 6 | 期限が切れた場合は再送を行なうこと | 全利用者 |
既存スケジュールの「6. 運用マニュアル」への追記をご検討ください。
8.3 定常運用
| No | 運用業務 | 担当 | 頻度 |
|---|---|---|---|
| 1 | アカウントロックの解除(マスタアプリでのレコード編集) | 高田工業所様(システム管理者) | 随時 |
| 2 | 「認証コードが届かない」問い合わせの一次対応 | 高田工業所様(システム管理者) | 随時 |
| 3 | ユーザーマスタのメールアドレスの保守 | 高田工業所様 | 随時 |
本方式は外部サーバーを使用しないため、ソウゾウ側での稼働監視・保守は発生しません。運用は高田工業所様の既存のマスタ管理業務の中で完結します。
8.4 想定される問い合わせと一次回答
| 問い合わせ | 確認事項 | 一次回答 |
|---|---|---|
| 認証コードが届かない | 迷惑メールフォルダ/登録アドレスの正誤 | 再送を案内する。改善しない場合はユーザーマスタのメールアドレスを確認する |
| コードを入れても通らない | 有効期限切れの可能性 | 再送し、5分以内に入力するよう案内する |
| アカウントがロックされた | 失敗回数が5回に達している | マスタアプリでロック状態を「解除」、失敗回数を0に変更する |
| メールアドレスを変更したい | ユーザーマスタの登録内容 | 既存の変更申請フローに従って対応する |
テスト計画
9.1 役割分担
| テストレベル | 実施 | 目的 | 成果物 |
|---|---|---|---|
| 単体テスト | ソウゾウ | 画面・アクション単位で、仕様どおりに動作することを確認する | 単体テスト仕様書、単体テスト結果報告書(エビデンス付き) |
| 結合テスト | ふえん様 | 業務シナリオを通した動作、既存機能への影響を確認し品質を担保する | 結合テスト仕様書・結果(ふえん様作成) |
| 受入テスト | 高田工業所様 | 業務要件の充足確認 | — |
結合テストで検出された不具合のうち、原因が本開発範囲にあるものはソウゾウが無償で修正します。
9.2 単体テスト観点(ソウゾウ実施)
| ID | 対象 | 観点 | ケース数目安 |
|---|---|---|---|
| TST-01 | ACT-01 ログイン | コードが6桁で生成される、レコードが更新される、失敗回数が0になる、メールが届く、ロック中は発行されない | 10 |
| TST-02 | 有効期限判定 | 境界値(4分59秒/5分00秒/5分01秒)、送信日時が空の場合 | 8 |
| TST-03 | コード照合 | 一致、不一致、他の利用者のコード、クリア済みコードでの認証 | 8 |
| TST-04 | 失敗回数とロック | 境界値(4回目/5回目/6回目)、ロック後のログイン、ログインでのリセット、再送でリセットされないこと | 12 |
| TST-05 | ACT-03 再送 | コードが更新される、送信日時が更新される、旧コードで認証できない、失敗回数が維持される | 8 |
| TST-06 | 権限設定 | 全権限区分で認証コードが表示されないこと(レコード詳細・一覧・検索結果・CSV出力) | 12 |
| TST-07 | 認証迂回 | 標準の戻る操作、レコード一覧への直接遷移、アプリ再起動での迂回不可を確認する | 8 |
| TST-08 | 入力チェック | 5桁/6桁/7桁/英字/空欄、形式誤りで失敗回数が加算されないこと | 8 |
| TST-09 | メール | 件名・本文・差出人、コードの差し込み、到達時間、迷惑メール判定の有無 | 8 |
| TST-10 | ロック解除 | システム管理者による解除後、正常にログインできること | 4 |
合計 86ケース程度を想定しています。境界値は「規定値の直前・当該値・直後」の3点を必ず含めます。画面・アクションのテストは5アプリすべてで実施しますが、1アプリ目で仕様を確定させたうえで2〜5アプリ目は差分確認とし、記載ケース数は代表1アプリ分としています。
9.3 結合テストの推奨シナリオ(ふえん様向け参考)
| No | シナリオ | 想定利用者 |
|---|---|---|
| 1 | ログイン → 認証コード入力 → 日報入力 → 提出 → 正常完了 | 協力会社社員 |
| 2 | コードを4回誤入力 → 5回目に正しく入力 → 認証成功 | 全区分 |
| 3 | コードを5回誤入力 → ロック → 管理者が解除 → 再ログイン | 全区分・システム管理者 |
| 4 | コード受領後6分経過 → 認証 → 期限切れ画面 → 再送 → 認証成功 | 全区分 |
| 5 | ログイン → 3回失敗 → 再送 → さらに2回失敗 → ロックされる(再送でリセットされない確認) | 全区分 |
| 6 | ログイン → 3回失敗 → ログアウト → 再ログイン → 失敗回数が0に戻っている | 全区分 |
| 7 | 5アプリそれぞれでログインし、認証が正しく動作する | 社員作業管理者 |
| 8 | 承認者による差戻し → 協力会社社員が修正・再申請(既存フローへの影響確認) | 承認者・協力会社社員 |
| 9 | 既存の主要業務フローに影響がないこと(リグレッション) | 全区分 |
9.4 テスト環境の配慮
失敗回数の上限(5回)についても、テスト環境で一時的に2回等へ変更すると検証が容易になります。同様に、本番反映時の戻し忘れに注意します。
見積・スケジュール
10.1 工数内訳
| No | 作業 | 人日 | 備考 |
|---|---|---|---|
| 1 | 要件定義(本書の確定) | 0.25 | 本書の作成により実質完了しているため |
| 2 | ユーザーマスタのフィールド追加・権限設定 | 0.25 | 共通マスタの場合 |
| 3 | 画面・アクション実装(1アプリ目) | 0.75 | SCR-02〜04、ACT-01〜03 |
| 4 | 2〜5アプリ目への展開 | 1.0 | 0.25人日 × 4アプリ |
| 5 | 単体テスト・仕様書・結果報告書 | 0.75 | ふえん様への提出物 |
| — | 合計 | 3.0 | ¥180,000(税抜) |
設計工程は独立して設けず、本書をもって基本設計書とします。外部サーバーの構築・API開発・データベース設計が不要なため、この工数に収まります。
10.2 スケジュール(案)
| Day | 工程 | 主担当 | マイルストーン |
|---|---|---|---|
| D1 | 要件定義(本書レビュー・未決事項の確定)、事前確認(P-01〜P-05) | 両社 | 本書 Ver 1.0 承認 |
| D2 | ユーザーマスタ改修、1アプリ目の実装 | ソウゾウ | — |
| D3 | 1アプリ目の完成、2・3アプリ目への展開 | ソウゾウ | — |
| D4 | 4・5アプリ目への展開 | ソウゾウ | 実装完了 |
| D5 | 単体テスト、仕様書・結果報告書の作成 | ソウゾウ | 単体テスト成果物の提出 |
| D6〜 | 結合テスト | ふえん様 | 結合テスト結果 |
導入前の準備(8.1)は、開発と並行して高田工業所様側で進めていただく前提です。
10.3 お見積りの前提
上記の金額・期間は、次の前提が成立する場合のものです。前提が崩れた場合は、速やかにふえん様へご連絡のうえ、変更管理(10.4)としてお取り扱いいただきます。
| ID | 前提 | 崩れた場合の影響 |
|---|---|---|
| B-01 | 事前確認 P-01〜P-04(ランダム関数・メール送信・日時差分・ログイン時アクション)がいずれも標準機能で実現できること | 代替方式の検討が必要となり、工数が増加する |
| B-02 | 事前確認 P-05(認証迂回の防止)が成立すること | 全画面への個別対応が必要となり、工数が大幅に増加する |
| B-03 | ユーザーマスタが5アプリ共通であること | アプリごとのフィールド追加が必要となり、0.5人日程度増加する |
| B-04 | 対象アプリが5本であること | 1本増えるごとに 0.25人日(¥15,000) |
| B-05 | 開発・テスト用の Platio Canvas 環境とテストアカウント(各権限区分1名以上)を利用できること | 環境準備の工数が発生する |
| B-06 | 本書 Ver 1.0 承認後、仕様変更が発生しないこと | 変更管理による別途お見積り |
B-01・B-02 はD1(初日)に確認し、その日のうちにご報告します。成立しない場合も着手直後に判明するため、対応の選択肢が残ります。
10.4 変更管理
本書 Ver 1.0 承認後の仕様変更は、次の手順で取り扱います。
- ふえん様より変更依頼をご連絡
- ソウゾウにて影響範囲・工数・納期影響を2営業日以内に回答
- 合意のうえ変更を反映(追加費用が発生する場合は別途お見積り)
決定事項・確認事項
11.1 ソウゾウにて決定した仕様
次の項目はソウゾウにて決定しました。この内容で実装します。相違があればご指摘ください。
| No | 項目 | 決定内容 | 該当 |
|---|---|---|---|
| 1 | 認証コードの桁数 | 6桁(半角数字) | 3.2 |
| 2 | 認証コードの有効期限 | 5分 | 3.2 |
| 3 | 失敗回数の上限 | 5回。再送をはさんでも通算する | 3.2 |
| 4 | 失敗回数のリセット契機 | ログインボタン押下時のみ | 3.2 |
| 5 | 再送の回数制限 | 個別には設けない | 3.2 |
| 6 | 認証成功時の動作 | 認証コードをクリアし、ホーム画面へ遷移する | FR-10 |
| 7 | 有効期限切れ時の失敗回数 | 加算しない | E-02 |
| 8 | 入力形式の誤り時の失敗回数 | 加算しない | E-05 |
| 9 | 有効期限切れの表示方法 | 画面遷移とモーダルのいずれか。実装のしやすい方を採用する(挙動は同じ) | 4.1 |
| 10 | ロック解除の方法 | マスタアプリでのレコード編集。専用画面は設けない | 6.5 |
| 11 | 認証コードフィールドの権限 | 全権限区分で非表示 | 5.2 |
| 12 | 認証ログの記録 | 行なわない。ロック状態と失敗回数で事後確認する | 7.5 |
| 13 | ユーザーマスタの構成確認 | 5アプリ共通かどうかは、ソウゾウにて着手前に確認する | 6.6 |
| 14 | 運用マニュアル・業務フロー図への反映 | 記載内容はソウゾウが提供し、反映はふえん様にて実施する | 8.2 |
11.2 ご回答をお願いしたい事項
高田工業所様の環境・運用に依存するため、ソウゾウでは決められない項目です。この2点のみご回答をお願いします。
| ID | 確認事項 | 必要な理由 | 期限 |
|---|---|---|---|
| C-01 | Platio Canvas からの認証コードメールが、高田工業所様および協力会社様のメール環境で受信できるか | 受信できない場合、ログインそのものができなくなる。受信拒否設定の解除等が必要になる可能性がある | 着手前 |
| C-02 | アカウントロック解除の問い合わせ窓口(アカウントロック画面に表示する連絡先) | ロックされた利用者の復帰手段を画面上に示すため | 実装開始まで |
あわせて、メールの差出人名・件名・本文(3.3)につきましては案を記載していますので、修正のご希望があればご指摘ください(C-03)。ご指摘がなければ記載の案で実装します。
11.3 前提条件
| ID | 前提 |
|---|---|
| A-01 | Platio Canvas にメール送信機能・ランダム関数が標準で備わっていること |
| A-02 | 全利用者が、受信可能なメールアドレスをユーザーマスタに登録していること |
| A-03 | 認証コードメールが、高田工業所様および協力会社様のメール環境で受信できること |
| A-04 | 開発・テスト用の環境とテストアカウントを利用できること |
| A-05 | ユーザーマスタへのフィールド追加が可能であること(既存データへの影響がないこと) |
11.4 リスクと対応
| ID | リスク | 影響 | 対応方針 |
|---|---|---|---|
| R-01 | 認証コードフィールドの非表示設定が漏れる | 大 | 単体テスト TST-06 を必須項目とし、全権限区分・全表示箇所を網羅して確認する |
| R-02 | 認証メールが迷惑メールに振り分けられる | 大 | テスト工程で高田工業所様・協力会社様の主要ドメイン宛の到達確認を実施する |
| R-03 | 協力会社側でメール受信環境が整っていない | 大 | 導入前準備(8.1 No.3)として、協力会社様への事前確認を高田工業所様より実施いただく |
| R-04 | ロック解除の依頼が想定より多く、管理者の負担になる | 中 | 利用者への事前案内(8.2)を徹底する。多発する場合は上限回数の見直しを検討する |
| R-05 | 事前確認(P-01〜P-05)で標準機能による実現が困難と判明する | 中 | D1に確認し、当日中に代替方式を提示する |
| R-06 | Platio Canvas のバージョンアップにより実装が影響を受ける | 低 | 標準機能のみで構成するため、影響は限定的 |
ふえん様へのご依頼事項
A.1 ご依頼事項
| No | ご依頼事項 | 内容 | 時期 | 該当 |
|---|---|---|---|---|
| 1 | 本書のご確認 | 仕様に相違がないかご確認ください。ご指摘を反映したものを最終版として着手します | 着手前 | 全章・11.1 |
| 2 | 結合テストの実施 | 単体テスト成果物の受領後、業務シナリオに沿った結合テストをお願いします。推奨シナリオは 9.3 に記載しています | 単体テスト完了後 | 9.1・9.3 |
A.2 ご回答をお願いしたい事項
高田工業所様の環境・運用に依存するため、ソウゾウでは決められない項目です。この2点のみご回答をお願いします。
| ID | 確認事項 | 期限 | 該当 |
|---|---|---|---|
| C-01 | 認証コードメールが、高田工業所様および協力会社様のメール環境で受信できるか | 着手前 | 11.2 |
| C-02 | アカウントロック解除の問い合わせ窓口(画面に表示する連絡先) | 実装開始まで | 11.2 |
メールの差出人名・件名・本文(3.3)は案を記載しています。修正のご希望があればご指摘ください。ご指摘がなければ記載の案で実装します。
A.3 高田工業所様にてご準備いただきたい事項
ふえん様よりお伝えいただきたい事項です。開発と並行して進めていただく前提としています。
| No | 準備事項 | 担当 |
|---|---|---|
| 1 | 認証コードメールが社内メールフィルタを通過することの確認 | 高田工業所様 |
| 2 | 協力会社側のメール受信環境の確認(受信拒否設定の解除依頼) | 高田工業所様→協力会社 |
| 3 | ロック解除の運用ルールの決定 | 高田工業所様 |
| 4 | 利用者向け案内文の展開 | 高田工業所様 |
A.4 ソウゾウにて実施すること(ご依頼は不要です)
| No | 実施事項 | 該当 |
|---|---|---|
| 1 | 着手前の事前確認(P-01〜P-05) | 6.7 |
| 2 | ユーザーマスタが5アプリ共通かどうかの確認 | 6.6 |
| 3 | ユーザーマスタへのフィールド追加・権限設定 | 5.1・5.2 |
| 4 | 画面・アクションの実装(5アプリ分) | 第4章・第6章 |
| 5 | 単体テストの実施 | 9.2 |
| 6 | 単体テスト仕様書・結果報告書の作成と提出 | 9.1 |
| 7 | 結合テストで検出された不具合の修正(本開発範囲に原因があるもの) | 9.1 |
| 8 | 運用マニュアルへの記載内容の提供 | 8.2 |
| 9 | メール送信元アドレスの確認・設定 | 8.1 |
A.5 進め方
| No | 進め方 |
|---|---|
| 1 | 本書のご確認は1回とします。ご指摘を反映したものを最終版とし、着手します |
| 2 | 着手初日に事前確認(P-01〜P-05)を実施し、当日中に結果をご報告します |
| 3 | 実装完了後、単体テストを実施し、仕様書と結果報告書を提出します |
| 4 | 結合テストで検出された不具合のうち、原因が本開発範囲にあるものは無償で修正します |
| 5 | 仕様変更のご依頼があった場合は、影響範囲・工数・納期影響を2営業日以内に回答します |