Skip to content

Conversation

yasulab
Copy link
Member

@yasulab yasulab commented Sep 4, 2025

概要

CI でのテスト実行時に環境変数が見つからずエラーになる問題を修正しました。

問題

image

解決策

ENV.fetch の第2引数にデフォルト値を設定することで、環境変数がない場合でもテストが実行可能になります。

# Before
ENV.fetch('SACLOUD_ACCESS_TOKEN')  # 環境変数がないと KeyError

# After  
ENV.fetch('SACLOUD_ACCESS_TOKEN', 'dummy-token-for-test')  # なければダミー値

なぜこの解決策が優れているか

  1. 最小限の変更: コードの2行のみ修正(GitHub Actions の変更不要)
  2. 安全性維持:
    • 本番環境では実際のトークンを使用
    • テスト環境ではダミー値で動作
    • API呼び出し時に無効なトークンならエラー(正しい動作)
  3. Ruby らしい実装: ENV.fetch の標準機能を活用

なぜダミートークンで動作するか

現在のテスト(ip_validation_test.rb)は:

  • クラスメソッドのみをテスト(IP アドレス検証ロジック)
  • API 通信は行わない
  • インスタンス作成もしない

そのため、ENV.fetch を満足させる値があれば十分です。実際の API 操作時には適切な認証エラーが発生するため、セキュリティ上の問題はありません。

テスト結果

9 runs, 1350 assertions, 0 failures, 0 errors, 0 skips

変更内容

  • scripts/sakura_server_user_agent.rb: ENV.fetch にデフォルト値を追加(2行)

問題:
- CI テスト実行時に ENV.fetch('SACLOUD_ACCESS_TOKEN') で KeyError が発生
- 外部 PR では GitHub Secrets にアクセスできないため環境変数が設定できない

解決策:
ENV.fetch の第2引数にデフォルト値を設定することで、環境変数がない場合でも
テストが実行可能になる。実際の API 呼び出し時には適切なエラーが発生するため
安全性は保たれる。

なぜこれが動作するか:
- ip_validation_test.rb はクラスメソッドのみをテスト
- API 通信は行わず、IP アドレス検証ロジックのみ実行
- ENV.fetch はデフォルト値があれば KeyError を発生させない
@yasulab yasulab merged commit 9adf8f2 into master Sep 4, 2025
4 checks passed
@yasulab yasulab deleted the fix-test-to-pass-ci branch September 4, 2025 05:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant