CLAUDE LABEN
MCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されましたMCP — 2026-07-28 仕様への対応が Claude 製品群で広がっています。双方向ステートフルなプロトコルからリクエスト・レスポンス型へ移り、MCP サーバーをサーバーレスやエッジに置けるようになりましたEXTENSIONS — 公式拡張が3種そろいました。サーバー側で UI を描く MCP Apps、非同期の長時間処理を扱う Tasks、IdP 経由で組織単位に払い出す Enterprise Managed Auth ですADOPTION — MCP の月間 SDK ダウンロードが4億を超え、年内で約4倍になりました。エージェントとアプリケーションを繋ぐ標準としての位置づけが固まりつつありますQUOTA — Claude Code 契約者向けの週次利用枠 50% 上乗せは本日8月19日が最終日です。長時間のエージェント実行を回すなら今日が最後の機会になりますPRICING — Claude Sonnet 5 の導入価格 100万トークンあたり入力2ドル・出力10ドルは8月31日で終了し、9月1日から入力3ドル・出力15ドルへ移ります。残り12日ですFIX — タイムアウトが固定されたサーバーに対し MCP v2 接続がサブスクリプションを際限なく張り直す不具合が修正され、ユーザー帰属のための forward_user_identity 設定も追加されました
記事一覧/API & SDK
API & SDK/2026-04-14上級

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

Kotlin Multiplatform(KMP)でClaude APIを統合し、iOS・Android両方でAIアシスタント機能を本番品質に仕上げるまでの実装記録です。SSE終端の落とし穴・エラーイベント処理・expect/actualの整合性・テスト戦略までを扱います。

kotlin-multiplatformkmpclaude-api81ios14android9mobile3aisdk4

プレミアム記事

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

私は個人開発でiOSとAndroidのアプリを並行して運用しており、そのうち数本にClaude APIをアプリ内アシスタントとして組み込んでいます。KMPを選んだ理由は単純で、一人で二つのプラットフォームを別々に追いかけ続けるのが現実的でなくなったからです。

ただ、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サポートが充実しているためです。

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

この記事の続きを読む

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

この記事で得られること
素直に書いた SSE 実装では `StreamEvent.Done` が一度も発火しない — Claude API のストリーム終端仕様に合わせた直し方と、置き換え前後の実測差分
公式ドキュメントには書かれていない expect/actual の型シグネチャ整合性・Kotlin/Native の GC 設定・SKIE / Swift Concurrency 連携の実運用知見
本番リリース直前に必ず通すべき実装チェックリスト 14 項目(APIキー保護・Crashlytics連携・回線品質対応)
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

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

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

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

関連記事

API & SDK2026-05-13
Claude API のモバイル統合で個人開発者が直面する設計判断 — コスト・UX・オフライン対応の実践パターン
Claude APIをiOS/Androidアプリへ組み込むときに迫られるモデル選定・非同期設計・コンテキスト管理・オフライン対応・コスト管理の判断を、動くコードと2026年9月の価格改定を織り込んだ月額試算つきでまとめました。
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駆動開発
※ アフィリエイトリンクを含みます
もっと見る →