CLAUDE LABEN
WWDC — WWDC 2026でSiriはGoogle Geminiベースと確定。ChatGPT等への外部ハンドオフは廃止され、サードパーティAI選択はEU(DMA)で当面非対応にBILLING — 6/15の課金変更まで残り6日。Agent SDK・headless Claude Code・GitHub Actions・他社エージェントがAPIレート準拠の月次クレジットへ移行OUTAGE — claude.ai・Claude Code・Coworkで障害が報告(6月)。スケジュール実行はfallbackModelとリトライ前提の設計が安全ですDYNAMIC-WORKFLOWS — Max・TeamプランとAPIでdynamic workflowsがデフォルトON。コードベース横断のバグ探索や独立検証に活用ULTRACODE — Claude Codeの新設定ultracodeがeffortメニューに追加。xhigh固定でワークフロー判断はClaudeに委ねますOPUS4.8 — Claude Opus 4.8が主要プランのデフォルトとして定着。コーディング・エージェント・推論を強化WWDC — WWDC 2026でSiriはGoogle Geminiベースと確定。ChatGPT等への外部ハンドオフは廃止され、サードパーティAI選択はEU(DMA)で当面非対応にBILLING — 6/15の課金変更まで残り6日。Agent SDK・headless Claude Code・GitHub Actions・他社エージェントがAPIレート準拠の月次クレジットへ移行OUTAGE — claude.ai・Claude Code・Coworkで障害が報告(6月)。スケジュール実行はfallbackModelとリトライ前提の設計が安全ですDYNAMIC-WORKFLOWS — Max・TeamプランとAPIでdynamic workflowsがデフォルトON。コードベース横断のバグ探索や独立検証に活用ULTRACODE — Claude Codeの新設定ultracodeがeffortメニューに追加。xhigh固定でワークフロー判断はClaudeに委ねますOPUS4.8 — Claude Opus 4.8が主要プランのデフォルトとして定着。コーディング・エージェント・推論を強化
記事一覧/API & SDK
API & SDK/2026-04-14上級

Claude API × Kotlin Multiplatform 実装ガイド — iOS/Android共通AIアシスタント機能を本番で動かす

Kotlin Multiplatform(KMP)でClaude APIを統合し、iOS・Android両プラットフォームで動作するAIアシスタント機能を本番品質で実装する完全ガイド。ストリーミング・エラーハンドリング・テスト戦略まで網羅。

kotlin-multiplatformkmpclaude-api71ios13android7mobile5aisdk7

プレミアム記事

Kotlin Multiplatformでいちばん厄介なのは「共通コードで書きたいのに、プラットフォームごとに微妙に違う」という現実との格闘だと思います。ネットワーク処理はKtorで統一できても、実際にClaude APIのストリーミングレスポンスを受け取って、UIスレッドに渡して、エラーをきちんとハンドリングして……という一連の流れを本番水準で仕上げようとすると、詰まるポイントが予想以上に多いものです。

私自身は2013年から個人アプリ開発を続けており、iOS/Androidの壁紙アプリと癒し系アプリを中心に累計5,000万DLほどを運用してきました。AdMobの広告収益と並行してClaude APIをアプリ内アシスタントへ組み込む実装に、ここ半年ほど集中して取り組んでいます。その過程で「iOS 単独や Android 単独で書いたコードを KMP に持ち込むと、想定外のところで挙動が変わる」場面に何度もぶつかりました。

このガイドはその実装記録です。Claude API を KMP 上で「動かす」段階から、AdMob 連携アプリの中で 24 時間安定して回し続ける段階まで、私が個人開発者として実際に通った設計判断・落とし穴・運用知見を、コードと数値の両方で残しておきます。読者の方が同じ場所でつまずかないことが、書く側のいちばんの目的です。

プロジェクト構成の設計方針

まず、KMPでClaude APIを統合するときのフォルダ構成を示します。

shared/
├── src/
│   ├── commonMain/
│   │   └── kotlin/
│   │       └── com/example/ai/
│   │           ├── ClaudeClient.kt       # APIクライアント本体
│   │           ├── ClaudeModels.kt       # リクエスト/レスポンスモデル
│   │           ├── StreamingHandler.kt   # ストリーミング処理
│   │           └── RetryPolicy.kt        # リトライ・エラーハンドリング
│   ├── androidMain/
│   │   └── kotlin/
│   │       └── com/example/ai/
│   │           └── PlatformClient.android.kt  # Android固有実装
│   └── iosMain/
│       └── kotlin/
│           └── com/example/ai/
│               └── PlatformClient.ios.kt      # iOS固有実装
androidApp/
iosApp/

なぜこの構成か: Claude APIとの通信ロジック(リクエスト生成・パース・リトライ)はプラットフォーム差異がないため、commonMainに集中させます。プラットフォーム固有の処理(SSL証明書ピニング、システムキーチェーンへのAPIキー保存など)だけをandroidMain/iosMainに分離する設計です。この分離を徹底することで、バグ修正や機能追加を一箇所に留められます。

Step 1: Gradle設定とKtor Clientの導入

// shared/build.gradle.kts
plugins {
    kotlin("multiplatform")
    kotlin("plugin.serialization")
    id("com.android.library")
}
 
kotlin {
    androidTarget()
 
    listOf(
        iosX64(),
        iosArm64(),
        iosSimulatorArm64()
    ).forEach {
        it.binaries.framework {
            baseName = "shared"
        }
    }
 
    sourceSets {
        commonMain.dependencies {
            // Ktor — KMP対応のHTTPクライアント
            implementation("io.ktor:ktor-client-core:3.1.2")
            implementation("io.ktor:ktor-client-content-negotiation:3.1.2")
            implementation("io.ktor:ktor-serialization-kotlinx-json:3.1.2")
            implementation("io.ktor:ktor-client-logging:3.1.2")
 
            // kotlinx.serialization — JSONパース
            implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0")
 
            // kotlinx.coroutines — 非同期処理
            implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.1")
        }
 
        androidMain.dependencies {
            // Android向けKtorエンジン(OkHttpが推奨)
            implementation("io.ktor:ktor-client-okhttp:3.1.2")
        }
 
        iosMain.dependencies {
            // iOS向けKtorエンジン(DarwinはNSURLSessionベース)
            implementation("io.ktor:ktor-client-darwin:3.1.2")
        }
    }
}

ポイント: iOSではOkHttpは使えません。DarwinエンジンがNSURLSessionをラップしており、iOS固有のSSLやプロキシ設定と自然に統合できます。AndroidでOkHttpを選ぶのは、接続プールやHTTP/2サポートが充実しているためです。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
iOS 12 年・累計 5,000 万 DL の個人アプリ事業で気づいた、KMP × Claude API のスレッディング設計の落とし穴
公式ドキュメントには書かれていない expect/actual の型シグネチャ整合性・SKIE / Swift Concurrency 連携の実運用知見
ストア審査・本番リリース直前に必ず通すべき実装チェックリスト 14 項目(APIキー保護・Crashlytics連携・回線品質対応)
Stripe による安全な決済 · いつでもキャンセル可能
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

API & SDK2026-05-13
Claude API のモバイル統合で個人開発者が直面する設計判断 — コスト・UX・オフライン対応の実践パターン
Claude APIをiOS/Androidアプリに統合する際、個人開発者が最初に直面するモデル選定・非同期設計・コンテキスト管理・オフライン対応・コスト管理の設計判断を、10年の個人開発経験と5,000万DL超の運用知見から解説します。
API & SDK2026-05-02
iPhone のショートカットから Claude API を呼ぶ — 選択テキストを瞬時に整形する個人開発者向けの運用ノート
iPhone のショートカット.app から直接 Claude API を呼び、選択テキストを瞬時に整形・要約する実装手順を、個人開発者の運用視点でまとめました。Cloudflare Workers で API キーを保護する方法もあわせて解説します。
Claude Code2026-04-07
Claude Code × Flutter 実践アプリ開発 — Dart × AI で加速するモバイル開発
Claude Code を Flutter 開発に活かす実践ガイド。Dart コード自動生成から状態管理・UI設計・テスト自動化・App Store公開まで、個人開発者が月収を伸ばすための完全ロードマップを解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →