v1.6.0 試験結果
試験概要
| 項目 | 内容 |
|---|---|
| 対象アプリ | AI KeyChain |
| バージョン | v1.6.0 |
| 試験日 | 2026-04-13 |
| 試験実施者 | Claude Code (claude-opus-4-6) |
| GitHub Issue | #72 |
試験環境
| 項目 | 内容 |
|---|---|
| OS | macOS 26.2 (Darwin 25.2.0, Build 25C56) |
| アーキテクチャ | arm64 (Apple Silicon) |
| Swift | 6.3 (swiftlang-6.3.0.123.5 clang-2100.0.123.102) |
| ビルドツール | Swift Package Manager |
| コミット | ea2e24e (main) |
| テスト対象 | Release ビルド + DMG 配布物 |
総合結果
| 区分 | テスト数 | 合格 | 不合格 | スキップ | 合格率 |
|---|---|---|---|---|---|
| ビルド・配布テスト (BT) | 5 | 5 | 0 | 0 | 100% |
| Secret Reference テスト (SR) | 5 | 5 | 0 | 0 | 100% |
| i18n テスト (I18N) | 6 | 6 | 0 | 0 | 100% |
| セキュリティテスト (ST) | 4 | 4 | 0 | 0 | 100% |
| UI/UX テスト (UI) | 6 | 6 | 0 | 0 | 100% |
| 合計 | 26 | 26 | 0 | 0 | 100% |
判定: ALL PASS
全 26 件のテストに合格しました。
v1.5.1 からの差分
| 追加機能 | 関連 Issue | テスト区分 |
|---|---|---|
| Secret Reference モード | #58 | SR-001〜005 |
| 3モード選択 UI(スクロール対応) | #66 | UI-001〜003 |
| 新規キー追加フォーム修正 | #68, #69 | UI-004〜006 |
| 英語対応(i18n 81箇所) | #67 | I18N-001〜006 |
| ModeSelectView タップ範囲拡大 | — | UI-002 |
| アプリアイコン修正 | — | BT-003 |
エビデンス
Release ビルド結果
$ swift build -c release
Building for production...
[4/5] Compiling AIkeychain AIkeychainApp.swift
[4/5] Linking AIkeychain
Build complete! (6.19s)バイナリ検証
$ file .build/release/AIkeychain
.build/release/AIkeychain: Mach-O 64-bit executable arm64
$ ls -la .build/release/AIkeychain
-rwxr-xr-x 1 takehiro staff 3646584 4月 13 13:13 .build/release/AIkeychainDMG インストーラー
$ ls -lh build/AIKeyChain-v1.6.0.dmg
-rw-r--r-- 1 takehiro staff 1.9M 4月 13 13:32 build/AIKeyChain-v1.6.0.dmgセキュリティ検証
# ハードコードされたトークンなし
$ grep -rn "sk-ant-api\|ghp_[a-zA-Z0-9]{20,}" AIkeychain/ --include="*.swift"
(0 matches - ALL CLEAR)
# SecureField によるマスキング
$ grep -rn "SecureField" AIkeychain/ --include="*.swift"
AIkeychain/Views/Editor/KeyEditorView.swift:86: SecureField("Token Value", ...)
# クリップボード自動クリア (7箇所)
$ grep -rn "clearContents" AIkeychain/ --include="*.swift" | wc -l
7
# localhost 限定バインド
$ grep -n "acceptLocalOnly" AIkeychain/Services/ProxyServer.swift
28: params.acceptLocalOnly = trueアプリケーションキャプチャ
DMG インストーラー + 起動確認

メインキー一覧

モード選択ダイアログ

モード比較の詳細(スクロール)

Add Key フォーム(未選択状態)

Add Key サービス選択後

英語モード メイン画面

試験詳細
BT: ビルド・配布テスト (5件)
| No | テスト項目 | 期待結果 | 結果 | 備考 |
|---|---|---|---|---|
| BT-001 | Release ビルド | エラーなしで成功 | OK | swift build -c release (6.19s) |
| BT-002 | バイナリ形式 | Mach-O 64-bit arm64 | OK | 3.5 MB |
| BT-003 | DMG 作成 | create-dmg でグラフィカル DMG 生成 | OK | 1.9 MB, AppIcon.icns 同梱 |
| BT-004 | コード署名 | ad-hoc 署名が有効 | OK | codesign -v VALID |
| BT-005 | DMG インストール・起動 | drag-to-Applications で正常起動 | OK | xattr -cr 後に起動確認 |
SR: Secret Reference テスト (5件)
| No | テスト項目 | 期待結果 | 結果 | 備考 |
|---|---|---|---|---|
| SR-001 | akc スクリプト存在 | scripts/akc が実行可能 | OK | 4.1 KB, 162 行 |
| SR-002 | akc help | Usage が表示される | OK | akc run [--dry-run] -- <command> |
| SR-003 | akc version | バージョン表示 | OK | akc 1.0.0 |
| SR-004 | akc run (コマンドなし) | エラーメッセージ | OK | missing '--' separator |
| SR-005 | akc run --dry-run | 未登録キーでエラー表示 | OK | keychain://TEST_VAR not found |
I18N: 国際化テスト (6件)
| No | テスト項目 | 期待結果 | 結果 | 備考 |
|---|---|---|---|---|
| I18N-001 | L10n.t() キーに英語翻訳あり | 全 126 キーに en 翻訳 | OK | ja/en 各 161 キー定義 |
| I18N-002 | View にハードコード日本語なし | L10n 未使用の日本語がない | OK | シェルコメントは許容 |
| I18N-003 | appLanguage が stored property | @Observable トラッキング対象 | OK | didSet で UserDefaults 永続化 |
| I18N-004 | MainView に .id() | 言語変更でビュー再構築 | OK | .id(appState.appLanguage) |
| I18N-005 | English 切替永続化 | UserDefaults に "en" 保存 | OK | defaults read で確認 |
| I18N-006 | Japanese 切替永続化 | UserDefaults に "ja" 保存 | OK | defaults read で確認 |
ST: セキュリティテスト (4件)
| No | テスト項目 | 期待結果 | 結果 | 備考 |
|---|---|---|---|---|
| ST-001 | API キーのハードコードなし | 実キー値がソースにない | OK | grep 全ソース 0 件 |
| ST-002 | SecureField マスキング | トークン入力がマスクされる | OK | KeyEditorView.swift:86 |
| ST-003 | クリップボード自動クリア | clearContents() 呼び出し | OK | 7 箇所で確認 |
| ST-004 | localhost 限定バインド | プロキシが外部接続を拒否 | OK | acceptLocalOnly = true |
UI: UI/UX テスト (6件)
| No | テスト項目 | 期待結果 | 結果 | 備考 |
|---|---|---|---|---|
| UI-001 | ModeSelectView スクロール | DisclosureGroup 展開後スクロール可 | OK | ScrollView + ボタン固定 |
| UI-002 | ModeCard タップ範囲 | カード全体がクリック対象 | OK | contentShape(Rectangle()) |
| UI-003 | 比較リンクタップ範囲 | 行全体がクリック対象 | OK | カスタム Button + contentShape |
| UI-004 | Add Key 未選択で開始 | Service/Category が未選択 | OK | "Select a service/category..." |
| UI-005 | サービス選択で自動入力 | envVarName/Category が自動設定 | OK | onServiceChange() |
| UI-006 | 未選択時 Save 無効 | ボタンが disabled | OK | canSave バリデーション |
未実施項目と理由
| 項目 | 理由 | 対応方針 |
|---|---|---|
| computer-use E2E テスト | 通知センターがクリックをブロック | 手動確認で代替 |
| Secret Reference 実キー解決 | Keychain にテスト用キーが必要 | 手動で akc run 確認 |
| Proxy モード統合テスト | プロキシサーバー起動が必要 | v1.5.1 テスト結果を流用 |
| Xcode ユニットテスト | Xcode ライセンス未承諾 | CI で実行 |
成果物
| ファイル | 説明 |
|---|---|
docs/test/v1.6.0.md | 本試験仕様書 |
build/AIKeyChain-v1.6.0.dmg | Release ビルド DMG (1.9 MB) |
docs/test/captures/v1.6.0/ | E2E テストスクリーンショット |