0
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?

[SwiftUI] 初心者が Foundation Model フレームワークを学んで AIアプリをリリースするまで - その3

Last updated at Posted at 2025-09-24

初心者同然の個人開発者が、WWDC25で発表されていたiOS26対応のFoundation Modelフレームワークについて勉強しながらAIApp開発にむけて勉強し記録として書いています。

間違いがあれば勉強になりますので是非ともコメントいただければ幸いです。

前回の内容:

引き続き勉強していきたいと思います。

対応言語の確認処理

相手はあくまでAIなので、非対応言語の入力には対応しきれず Error となってしまうため言語対応確認が必要。
人のように指示の無いことへの臨機応変さはないのがAIよね..

そのため、あらかじめユーザーの入力したプロンプトの言語が対応しているかを確認するのに、専用の unsupportedLanguageOrLocaleエラーを使うことが公式でも推奨されている。

-公式ドキュメント-

エラーハンドリングを使って事前に対応言語化どうかを確認するためのコード例:

var session = LanguageModelSession()

do {
  let answer = try await session.respond(to: userInput)
  print(answer.content)
} catch LanguageModelSession.GenerationError.unsupportedLanguageOrLocale {
  // Unsupported language in prompt.
}

let supportedLanguages = SystemLanguageModel.default.supportedLanguages
guard supportedLanguages.contains(Locale.current.language) else {
  // Show message
  return
}

Appをせっかく作っても、入力テキストの言語検出とユーザーが未対応言語を使用した場合でも、適切な案内とエラー処理を提供していないと申請時にリジェクトをくらいそうなのでここもアラート含めきちんと対応した方が良さそう。

ここも勉強を元にコード書いてまとめてみた↓

import FoundationModels
import Foundation

@available(iOS 26.0, *)
struct LanguageSupportManager {
    // サポート言語の確認
    static func isLanguageSupported() -> Bool {
        // SystemLanguageModel API で対応言語チェック
        let supportedLanguages = SystemLanguageModel.default.supportedLanguages
        return supportedLanguages.contains(Locale.current.language)
    }
    
    // 応答処理
    static func respond(to input: String) async throws -> String {
        let session = LanguageModelSession(instructions: "親切に回答してください")
        
        do {
            let response = try await session.respond(to: input)
            return response.content
        } catch LanguageModelSession.GenerationError.unsupportedLanguageOrLocale {
            throw LanguageError.unsupportedLanguage
        } catch {
            throw error
        }
    }
}

enum LanguageError: LocalizedError {
    case unsupportedLanguage
    
    var errorDescription: String? {
        switch self {
        case .unsupportedLanguage:
            return "入力された言語はサポートされていません"
        }
    }
}

これでView側で呼び出せば使えるはず...
書き方・解釈に間違いがあれば勉強になりますのでぜひコメントお願いします!

引き続きAIApp開発に向けて勉強した内容をまとめつつ記録していきます。

0
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
0
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?