4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】アプリ開発の3大原則 - 機密性・完全性・可用性をマスターしよう

Posted at

はじめに

アプリ開発で大切な3つの原則をご存知ですか?

  • 機密性(Confidentiality):大切な情報を守る
  • 完全性(Integrity):データを正しく保つ
  • 可用性(Availability):いつでも使えるようにする

これらは「CIAトライアド」と呼ばれる基本原則で、Appleの公式ガイドラインでも重要視されています。
今日は、この3つを誰でも分かるように解説します。

1. 機密性:大切な情報を守る

例えばこんなとき...

  • ユーザーのパスワードを保存したい
  • クレジットカード情報を扱いたい
  • 個人情報を保存したい

よくある間違い vs 正しい方法

// ❌ 危険な方法
class UserManager {
    // メモ帳(UserDefaults)に保存
    func savePassword(_ password: String) {
        UserDefaults.standard.set(password, forKey: "password")
        print("保存したパスワード: \(password)")  // ログにパスワードが出る!
    }
}

// ⭕️ 安全な方法(Appleガイドライン推奨)
class SecureManager {
    // 金庫(Keychain)に保存
    func savePassword(_ password: String) {
        let keychain = KeychainWrapper.standard
        keychain.set(password, forKey: "password")
        print("パスワードを安全に保存しました")  // 安全なログ
    }
}

なぜ重要?

  • 個人情報が漏れると大問題
  • アプリの信頼性が失われる
  • 法律違反になることも

参考:Apple Security Guidelines - Keychain Services

2. 完全性:データを正しく保つ

例えばこんなとき...

  • ユーザープロフィールを保存する
  • 入力フォームのチェック
  • データベースの更新

よくある間違い vs 正しい方法

// ❌ 危険な方法
struct UserProfile {
    var name: String    // 空でもOK?
    var age: Int        // マイナスでもOK?
    var email: String   // メール形式じゃなくてもOK?
}

// ⭕️ 安全な方法(Appleガイドライン推奨)
struct UserProfile {
    let name: String
    let age: Int
    let email: String
    
    init?(name: String, age: Int, email: String) {
        // 名前のチェック
        guard name.count >= 1 && name.count <= 50 else {
            return nil
        }
        
        // 年齢のチェック(WHOの統計に基づく)
        guard age >= 0 && age <= 123 else {
            return nil
        }
        
        // メールアドレスのチェック
        guard email.contains("@") && email.contains(".") else {
            return nil
        }
        
        self.name = name
        self.age = age
        self.email = email
    }
}

なぜ重要?

  • おかしなデータがあるとアプリが壊れる
  • 後から直すのが大変
  • ユーザーが困る

参考:Apple Developer Documentation - Data Validation

3. 可用性:いつでも使えるように

例えばこんなとき...

  • 写真をたくさん表示したい
  • 通信が切れた
  • メモリ不足になりそう

よくある間違い vs 正しい方法

// ❌ 危険な方法
class ImageViewer {
    var images: [UIImage] = []  // メモリをどんどん使う
    
    func addImage(_ image: UIImage) {
        images.append(image)  // 制限なし!
    }
}

// ⭕️ 安全な方法(Appleガイドライン推奨)
class ImageViewer {
    // メモリ使用量を制限
    private let imageCache = NSCache<NSString, UIImage>()
    
    init() {
        // デバイスのメモリに応じて制限(Apple推奨)
        imageCache.countLimit = 50
        
        // メモリ警告時の対応
        NotificationCenter.default.addObserver(
            forName: UIApplication.didReceiveMemoryWarningNotification,
            object: nil
        ) { [weak self] _ in
            self?.imageCache.removeAllObjects()
        }
    }
    
    func addImage(_ image: UIImage, key: String) {
        imageCache.setObject(image, forKey: key as NSString)
    }
}

なぜ重要?

  • アプリが突然終了するのを防げる
  • サクサク動作する
  • バッテリーの消費も抑えられる

参考:Apple Developer Documentation - Memory Management

この3つの関係

たとえば、銀行のアプリを考えてみましょう:

  1. 機密性

    • 残高は他人に見られない
    • パスワードは安全に保存
    • 通信は暗号化
  2. 完全性

    • 送金額は正しい
    • 取引履歴は改ざんされない
    • 計算間違いがない
  3. 可用性

    • いつでも送金できる
    • 通信エラーでも再試行
    • アプリが落ちない

実践:テストで確認しよう

QualityForwardを使って、以下をチェックします:

  1. 機密性のテスト

    • パスワードは金庫(Keychain)に保存されている?
    • 重要な情報がログに出ていない?
    • 個人情報は適切に保護されている?
  2. 完全性のテスト

    • データのチェックは適切?
    • 保存したデータは正しく読める?
    • エラー処理は適切?
  3. 可用性のテスト

    • メモリ使用量は適切?
    • 通信エラーに対応できている?
    • バックグラウンドでも正しく動く?

まとめ:これだけは覚えよう!

  1. 機密性

    • 重要な情報は必ず「金庫」に
    • ログに気をつける
    • 個人情報を大切に
  2. 完全性

    • データは必ずチェック
    • 保存時は慎重に
    • エラー処理を忘れずに
  3. 可用性

    • メモリの使用量を意識
    • エラーへの対応を考える
    • 性能を確認する

おわりに

この3つの原則は、Appleも公式ドキュメントで重視している基本中の基本です。
最初は難しく感じるかもしれませんが、この3つを意識するだけでもアプリの品質は大きく変わります!

参考資料

  1. Apple Security Documentation
  2. iOS App Development Guidelines
  3. Apple Human Interface Guidelines
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?