🔥

Apple Foundation Models Frameworkを使って念能力を再現する

に公開

先日、melting-hackさん主催のApple Foundation Models Frameworkハッカソンに参加してきました! わずか4時間という短い時間で、アイデア出しから実装、発表までを行うというスリリングな体験でした。
この記事では、そのハッカソンで私たちのチームが挑戦した、大人気漫画『Hunter×Hunter』に登場する念能力「ラブリーゴーストライター(天使の自動筆記)」をAppleの最新AI技術で再現しようとした奮闘記を、技術的なつまづきや発見と共にお届けします。
この記事が、これからFoundation Models Frameworkを触ってみようと思っている方々の参考になれば幸いです!

はじめに:ハッカソンで"天使の自動筆記"に挑戦! ✍️

今回のハッカソンのお題は、もちろん「Apple Foundation Models Framework」。チームでアイデア出し、実装、テスト、発表資料作成までを、たったの4時間でやり遂げるというハードなスケジュールでした。
そんな中で私たちのチームが挑んだのは、私が大好きな漫画『Hunter×Hunter』に登場する、未来を四行詩の形で予言する念能力「ラブリーゴーストライター(天使の自動筆記)」の再現です。
Appleの新しいAI技術を使えば、あの独特でかっこいいダークな雰囲気を持つ予言詩を生成できるのではないか? そんなワクワクするアイデアから始まった開発は、予想外の壁にぶつかりながらも、多くの学びを得る貴重な機会となりました。

そもそもApple Foundation Models Frameworkとは?🤖

実装の話に入る前に、今回の主役である「Apple Foundation Models Framework」について簡単におさらいしましょう。
これは、AppleがiOS 26、iPadOS 26、macOS 26から提供を開始した、デベロッパ向けの新しいフレームワークです。Apple Intelligenceの中核をなす大規模言語モデル(LLM)を、iOSアプリから直接利用できるようにするものです。
Appleの公式発表によると、このフレームワークの最大の特徴は以下の通りです:

  • 完全なオンデバイス処理:AIの推論はすべてユーザーのデバイス内で完結。外部のサーバーにデータを送信する必要がありません。
  • 強力なプライバシー保護:ユーザーのデータがデバイスから離れることがないため、プライバシーが守られます。
  • オフラインでの利用:インターネット接続がなくてもAI機能を使えます。
  • 無料のAI推論:開発者はAPI利用料などを気にせず、AI機能をアプリに組み込めます。

「プライバシーを最優先し、安全なエコシステムの中でAIを提供する」というAppleらしいアプローチですね。

4時間の超短期決戦!ハッカソンの舞台裏 🧑‍💻🧑‍💻🧑‍💻

イベントが始まると、早速チームビルディングが行われました。私は、クラフトワークさん(@kazu725140)と同じチームになることができました。
与えられた開発時間は、自己紹介やアイデア出しの時間を除くと、実質3時間30分ほど。この超短時間で動くものを作るためには、実装の複雑さを可能な限り抑える必要があります。
最初のブレインストーミングで、私たちは「比較的実装が簡単そうな占いアプリ」をベースに開発することにしました。Foundation Models Frameworkはテキスト生成が得意だし、占い結果を生成するタスクとの相性も良さそうだったからです。

ただの占いアプリで終わらせないために 📖

でも、ただの占いアプリを作るだけでは面白くありません。ハッカソンならではの「笑いが取れる仕掛け」や、記憶に残るようなユニークな要素が欲しい。そこで、私の個人的な趣味である「漫画」と結びつけるアイデアが浮かびました。
漫画に出てくる予言や占いの能力を再現したら、面白くてインパクトがあるのではないか? 特に私が愛してやまない漫画が『Hunter×Hunter』です。
この作品には、「ラブリーゴーストライター(天使の自動筆記)」という非常に印象的な念能力が登場します。対象者の未来1ヶ月分を、4行詩の形で自動的に書き出すというもの。
技術的な観点からもこのアイデアは魅力的でした。

  • モデルの性能との相性:Appleのオンデバイスモデルは、外部の巨大なクラウドLLMほど高性能ではないという話を聞いていました。だから、長文を正確に生成するよりも、短く抽象的な「詩」を生成する方が、モデルの性能をうまく活かせるのでは? 多少曖昧な出力になっても、「詩的表現」として成立させやすいですしね。
  • 4行詩という制約:「4行詩」というフォーマットは、モデルに対する明確な指示となり、出力の安定化に繋がると思いました。

こうして、プロジェクトの方向性が決まりました。私たちは、占いアプリではなく、『Hunter×Hunter』の世界観を体験できる「念能力シミュレーター」を作ることにしたのです。

実装編:"念能力"をSwiftコードに落とし込む 💻

実装にあたっては、yakazooさんのZenn記事が非常に参考になりました。

Foundation Models Frameworkの基本的な使い方は驚くほどシンプルです。
基本的な実装の流れは以下の通り:

  1. FoundationModelsをインポート
  2. LanguageModelSessionのインスタンスを作成
  3. プロンプト(モデルへの指示文)を作成
  4. session.respond(to: prompt)Task内で呼び出し

import SwiftUI
import FoundationModels

struct ContentView: View {
    @State private var generatedPoem: String = "あなたの運命を占います..."

    var body: some View {
        VStack(spacing: 20) {
            Text(generatedPoem)
               .padding()

            Button("占う") {
                Task {
                    await generateProphecy()
                }
            }
           .buttonStyle(.borderedProminent)
           .controlSize(.large)
        }
       .padding()
    }

    private func generateProphecy() async {
        let session = LanguageModelSession()
        let prompt = """
        あなたは「Hunter x Hunter」に登場する念能力「ラヴリーゴーストライター(天使の自動筆記)」です。
        # ルール
        - 詩は常に不吉で、比喩的、抽象的な表現を用い、運命の残酷さを暗示してください。
        - 詩は4行で構成してください。
        - 対象者が3週間目までに死ぬ運命にある場合、詩は2行で終了します。
        """

        do {
            let response = try await session.respond(to: prompt)
            generatedPoem = response.content
        } catch {
            generatedPoem = "予言に失敗しました: \(error.localizedDescription)"
        }
    }
}

原作の雰囲気を忠実に再現するため、「不吉」「運命の残酷さ」「死ぬ運命」といったキーワードをふんだんに盛り込みました。これで、あのダークでカッコいい予言詩が生成されるはずでした。
しかし、現実はそう甘くありませんでした。

立ちはだかる壁①:意外な有効化の落とし穴 ⚙️

最初の壁は、コードとは全く別の場所にありました。
iOS 26とXcode 26という最新環境を整え、コードも完璧なはずなのに、下記のエラーが表示されていました。
生成に失敗しました: Detected content likely to be unsafe

焦りながら周囲の有識者やApple Evangelistの方に助けを求め、判明した原因は驚くほど単純なものでした。

「システム設定」から「Apple IntelligenceとSiri」→「Apple Intelligence」をオンにしないとApple Foundation Models Frameworkは使えない。

そう、Foundation Models Frameworkは、開発環境を整えるだけでは有効にならず、ユーザーがOSレベルでApple Intelligenceを明示的に有効化する必要があったのです。これは、この機能がただの開発者向けライブラリではなく、ユーザーが自身の意思で利用を選択するOSの機能であることを示唆しています。
ハッカソンのような時間のない状況では、こうした小さな見落としが大きなタイムロスに繋がります。

立ちはだかる壁②:厳格すぎるSafety Guardrailsとの格闘🧑‍⚖️

モデルが動くようになったのも束の間、私たちはさらに巨大で本質的な壁にぶつかりました。先ほどのプロンプトで実行すると、コンソールに無慈悲なエラーメッセージが表示されたのです。

Safety guardrails were triggered. Detected content likely to be unsafe
生成に失敗しました: Detected content likely to be unsafe

これが、Appleの「Safety Guardrails(安全保護機能)」が発動した瞬間。私たちのプロンプトに含まれる原作のダークな表現が、Appleの安全基準に抵触し、コンテンツの生成が完全にブロックされてしまったのです。

🔍 なぜHunter×Hunterのダークな雰囲気がブロックされたのか

Appleの安全保護機能が、以下の表現を「安全でない可能性のあるコンテンツ」と判断し、詩の生成をブロックしていました。

🚫 Appleがブロックした表現

  • 「不吉」
  • 「死ぬ運命」
  • 「運命の残酷さ」
  • 「貴方は大切なものを失う」
  • 「過酷な未来」

このままではアプリが全く動かないため、プロンプトを修正せざるを得ませんでした。

✅ 修正後のプロンプト(Safety Guardrails対応)

あなたは創造的な詩人として、対象者の1ヶ月間の「運命の流れ」を4行の詩で表現してください。

# 制約条件
- 比喩的で抽象的な表現を使用してください
- 象徴や暗示を用いた文学的な表現にしてください
- 詩的で神秘的な雰囲気を持たせてください

# 表現のスタイル
- 自然現象(月、星、風、霧など)を使った比喩
- 時間の流れ(季節の変化、時計、カレンダーなど)
- 選択と変化(扉、道、分岐点など)

この変更により、私たちは大きなトレードオフを迫られました。

項目 Hunter×Hunter風 現在の実装
雰囲気 ✅ ダークで残酷 ❌ 中立的で詩的
原作再現 ✅ 高い ❌ 低い
動作 ❌ エラーで生成不可 ✅ 正常に動作
Safety Guardrails ❌ 違反 ✅ 適合

ハッカソンという時間的制約の中で、私たちは「原作の雰囲気」を犠牲にして「正常な動作」を選択しました。
これは技術的なエラーではなく、Appleが提供するAI体験の根幹にある思想の表れなんだと思います。「ユーザーを不快にさせたり、危険に晒したりする可能性のあるコンテンツは、たとえ創作物であっても許容しない」という強い意志ですね。

チーム開発の神髄:Metalによる演出強化 ✨

AIによるテキスト生成で原作の雰囲気を再現できなくなった一方で、チーム開発の強みが光りました。チームメイトのクラフトワークさんは、なんとMetalのプロフェッショナルだったのです。
彼が、占いアプリに最適な、怪しく美しいビジュアルエフェクトをMetalで実装してくれました。テキストから失われてしまった「神秘的」で「不穏」な雰囲気を、見事にビジュアルで補ってくれたのです。
AIの制約を、別の技術領域の専門知識でカバーする。これぞチーム開発の醍醐味だなと感じた瞬間でした。何とか3時間30分で実装と発表資料の作成を終え、プレゼンに臨むことができました。
実際のMetalのエフェクトはこちらをご覧ください!

まとめ:ハッカソンで得られた知見と感謝 🙏

今回のApple Foundation Modelsハッカソンは、技術的な学びと開発の楽しさが凝縮された、非常に密度の濃い4時間でした。

技術的な知見Foundation Models FrameworkはAPIがシンプルで導入しやすい一方、その真の難しさはプロンプトエンジニアリングと、Appleが定める「Safety Guardrails」という見えざる壁の攻略にあることを痛感しました。
Appleの思想:AppleのAI開発は、技術提供だけではなく、「安全でプライベートな体験」という思想の延長線上にあります。この思想を理解することが、フレームワークを使いこなす上で本当に大切だなと気づきました。
コミュニティの価値:一人では解決できない問題も、会場にいるApple Evangelistの方々や他の参加者という有識者に質問することで、すぐに解決の糸口が見つかりました。こういうイベントの価値って本当に大きいです。

運営の皆様、そしてチームを組んでくださったクラフトワークさん、本当にありがとうございました!他のチームの発表も、それぞれが面白いアイデアでFoundation Modelsを活用しており、非常に刺激的でした。
最後に。
Hunter×Hunter早く再開してほしい。

Discussion