日記

日本は iOS マジョリティ市場——iOS・Android 両対応が必要な理由

1 Mins read

日本は iOS マジョリティ市場——iOS・Android 両対応が必要な理由

アプリをリリースするとき「とりあえず Android から」「会社なので iOS だけ」と決めていないだろうか。世界規模で見ればそれでも成立するが、日本市場ではその判断がユーザーの 40〜60% を最初から捨てている

モバイル OS シェア:iOS vs Android(日本 vs 世界 2026年)

上のグラフが示すとおり、日本と世界では iOS/Android のシェアが完全に逆転している。

日本と世界、シェアの逆転

世界のモバイル OS シェアは Android が圧倒的多数を占める。StatCounter のデータ(2025年1月〜2026年3月)では Android 72.1%、iOS 27.6% と約 3:1 の差がある。インド・東南アジア・アフリカ等の低価格 Android 端末の普及が主な要因だ。

一方、日本は iOS 60.7%、Android 39.1%。iOS マジョリティの希少な市場の一つである。

地域 iOS Android
世界 27.6% 72.1%
日本 60.7% 39.1%
米国(参考) 約56% 約44%
英国(参考) 約52% 約48%

出典: StatCounter Global Stats(Jan 2025 – Mar 2026)/ 米・英は同期間の推計値

なぜ日本は iOS が多いのか

要因 内容
キャリア販売構成 NTTドコモ・au・ソフトバンクの主力端末として iPhone が長年店頭の中心にある
10〜30代の iPhone 比率 若年層ほど iPhone 比率が高く、LINE・TikTok 等の SNS 連携もその層が主導
「iPhone じゃないと仲間外れ」文化 iMessage や AirDrop を前提とした学校・職場コミュニケーションが定着している
企業支給端末 MDM 管理しやすさと企業向けセキュリティ評価から iPhone を採用する企業が多い

要因自体は根深く、短期間で覆るような変化は起きにくい。しばらくはこの構造が続きそう。

iOS だけ・Android だけ対応の損失試算

仮に日本向けアプリを iOS のみでリリースした場合、Android ユーザー約 39% にリーチできない。逆に Android のみであれば iOS ユーザー約 61% を逃す。

対応 OS 日本でリーチできるユーザー 取りこぼすユーザー
iOS のみ 60.7% 39.3%
Android のみ 39.1% 60.9%
iOS + Android 約 99.8% ほぼなし

業務系アプリ・BtoB ツール・社内システムでは「社員の一部がアクセスできない」は致命的になる。コンシューマー向けであっても、ストア評価や口コミの分断を招く。

どう動くか

ネイティブ実装を前提にする

両 OS 対応の手段として Flutter や React Native が話題に上がることは多いが、大きなプロジェクトではクロスプラットフォームのコストはかえって増える。各 OS の最新機能への追従、プラットフォーム固有のバグ対応、エンジニア採用という三点だけでも相当な重荷になる。ハリボテでいい期間限定キャンペーンアプリなら選択肢に入るかもしれないが、それ以外では iOS / Android それぞれのネイティブ実装が現実的な王道だ。

iOS 26 対応と Android 16 対応を並行して進める

2026年は両 OS にとって節目の年だ。

  • iOS 26: App Store Connect への提出に 2026年4月28日から Xcode 26 + iOS 26 SDK が必須(⚠️ 施行中)
  • Android 16: Google Play の targetSdkVersion 強制更新ロードマップで 2026年中に targetSdkVersion 36 への対応が求められる

「iOS 26 対応が終わったら Android」という直列スケジュールでは間に合わない。両プラットフォームのアップデートを並行管理するチームプロセスを作るほうが現実的。

各 OS の対応詳細は別記事で。

Read more
日記

iOS 26 対応を今すぐ終わらせる — 2026年4月28日から App Store の SDK 要件が変わる

1 Mins read

iOS 26 対応を今すぐ終わらせる — 2026年4月28日から App Store の SDK 要件が変わる

App Store Connect へのアップロードには、2026年4月28日以降 Xcode 26 および iOS 26 SDK でのビルドが必須になる。iOS 26 は 2025年9月にリリース済みで、WWDC25 発表の Liquid Glass デザインや Foundation Models framework を含む大型アップデートだ。続く iOS 27 は WWDC26(2026年6月8〜12日)で発表され、2026年9月リリース予定。この2バージョンを同時に見据えた対応順を書く。

App Store SDK 要件のスケジュール

Apple は毎年、App Store Connect への提出に必要な SDK バージョンを引き上げてくる。

施行日 必要な Xcode 必要な SDK 状態
2024年4月29日 Xcode 15 iOS 17 SDK 施行済み
2025年4月24日 Xcode 16 iOS 18 SDK 施行済み
2026年4月28日 Xcode 26 iOS 26 SDK ⚠️ 要対応
2027年(予定) Xcode 27 iOS 27 SDK WWDC26 後に正式発表

出典: <https://developer.apple.com/news/upcoming-requirements/>

iOS 26 SDK でビルドしないと、アプリアップデートを App Store Connect にアップロードできなくなる。新機能の話ではなく、既存ユーザーへの配信継続のための義務対応。

iOS 26 対応の優先順位

優先度 対応内容 理由
🔴 最高 Xcode 26 へのアップグレードとビルド確認 2026年4月28日の期限に直結
🔴 最高 TLS 1.0/1.1 接続先がある場合は 1.2 以上に移行 URLSession の最低 TLS が 1.2 に変更
🟠 高 UIScreen.mainScreen 使用箇所の置き換え iOS 26 SDK で deprecated に昇格
🟠 高 Push to Talk アプリの entitlement 確認 旧 entitlement が iOS 26 SDK で非対応に
🟡 中 Liquid Glass デザインへの適応 標準 UIKit/SwiftUI は自動適応するが独自 UI は要確認
🟡 中 CoreData の Ubiquitous キー使用確認 iOS 26 SDK でビルドエラーになる

ツールの足場をそろえる

iOS 26 対応でも iOS 27 先行検証でも、最初に詰まるのは OS の API より build 周りのことが多い。足場を先に固める。

ツール 推奨バージョン 備考
Xcode 26.4.1 以上 4月28日以降の提出に必須
Swift 6.0(Swift 5.x も引き続き対応) Swift 6 strict concurrency を推奨
SwiftUI iOS 26 SDK 同梱版 Liquid Glass 対応の新コンポーネント追加
iOS Deployment Target 16 以上を推奨 iOS 15 以下は市場シェアが急速に低下

Swift 6 モードへの移行で一番よく出るのは CoreData 周りの並行性エラー。NSManagedObject@MainActor 外から触ると警告が出るようになっているので、context.perform ブロックの中に閉じ込める形で直す。

actor DataProcessor {
    func process(context: NSManagedObjectContext) async {
        await context.perform {
            // CoreData 操作は context.perform 内で
        }
    }
}

iOS 26 で引っかかりやすい動作変更

TLS 最低バージョンの変更

iOS 26 SDK にリンクしたアプリでは URLSession と Network framework の TLS 最低バージョンが 1.0 から 1.2 に変更される。

社内システムや外部 API が古い TLS 設定のままだと、iOS 26 SDK でビルドしたアプリから通信できなくなる。

// 旧 TLS を許容する例(非推奨。やむを得ない場合の一時対処)
let config = URLSessionConfiguration.default
config.tlsMinimumSupportedProtocolVersion = .TLSv10 // 警告が出る
let session = URLSession(configuration: config)

本来は接続先サーバー側を TLS 1.2 以上に直すのが正しい対応。サードパーティ SDK 経由の通信も含めて確認しておくといい。

UIScreen.mainScreen の廃止

以前から非推奨だった UIScreen.mainScreen が iOS 26 SDK で deprecated に昇格した。マルチウィンドウ・iPadOS のシーン対応との互換性のため、画面サイズは UIWindowScene から取得する方式へ移行する。

// Before(非推奨)
let screenWidth = UIScreen.main.bounds.width

// After(推奨)
if let scene = UIApplication.shared.connectedScenes
    .first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene {
    let screenWidth = scene.screen.bounds.width
}

Push to Talk entitlement の変更

com.apple.developer.pushkit.unrestricted-voip.ptt entitlement が iOS 26 SDK では動作しなくなる。iOS 16 以降の Push to Talk framework への移行が必須。

CoreData の iCloud 同期キー削除

NSPersistentStoreUbiquitousContentNameKey など、10年以上前に deprecated になっていた iCloud ubiquitous 同期用キーが iOS 26 SDK でビルドエラーになる。移行先は NSPersistentCloudKitContainer(iOS 13〜)または SwiftData(iOS 17〜)。

Liquid Glass デザインへの適応

標準の UIKit / SwiftUI コンポーネント(ナビゲーションバー、タブバー、シートなど)は自動的に新デザインに適応する。独自描画のカスタム UI は、背景ブラー・グラスエフェクトとの重なりを実機で視覚確認したほうがいい。

iOS 27 先回り確認(WWDC26 は 2026年6月8〜12日)

WWDC26 は 2026年6月8〜12日。例年どおり初日に新 OS が発表されて Beta 1 が公開される。iOS 27 のリリースは 2026年9月の見込み。

確認すべき点 優先度 対応タイミング
iOS 26 SDK 対応を先に完了させてから iOS 27 Beta 検証を開始する 🔴 最高 2026年4月28日まで
Foundation Models framework(オンデバイス LLM)の採用可否を社内で検討 🟡 中 WWDC26 以降
Declared Age Range API の対応要否(青少年向けコンテンツがある場合) 🟡 中 WWDC26 以降
App Intents の拡張(Siri・Spotlight 連携の深化) 🟡 中 WWDC26 以降
Liquid Glass 適応の完成度を iOS 27 デザイン変更に照らして再確認 🟡 中 WWDC26 以降

iOS 26・27 同時対応のテスト優先度

機能カテゴリ iOS 26 確認項目 iOS 27 beta 確認項目
ネットワーク通信 TLS 1.2 未満接続の洗い出しと修正 接続先 API の新セキュリティ要件対応
レイアウト・UI Liquid Glass と重なるカスタムビューの視覚確認 新デザインガイドライン変更の反映
データ永続化 CoreData ubiquitous キー使用有無の確認 SwiftData / CloudKit 移行の完了確認
Push 通知 APNs 証明書・Push to Talk entitlement の確認 通知 UI の iOS 27 表示崩れ確認
画面サイズ UIScreen.main 置き換えによるレイアウト変化の確認 iPadOS マルチウィンドウ対応の完全性確認
サードパーティ SDK iOS 26 対応済みバージョンへの更新 iOS 27 beta 対応の各 SDK バージョン確認

日本の業務アプリで引っかかりやすいところ

リスク項目 内容 対処方針
社内 VPN のレガシー暗号アルゴリズム DES/3DES/SHA1-96/SHA1-160 が IKEv2 VPN で非対応に。NetworkExtension 経由の VPN アプリは要確認 AES-256/SHA-256 + DH group 14以上に更新
イントラネット通信の TLS バージョン 古い社内 Web サービスや勤怠・経費精算システムが TLS 1.0/1.1 のまま残っている可能性 社内サーバー側の TLS 設定を先行して棚卸し
和暦・日本語入力の挙動変化 TextKit 2 の自然テキスト方向処理が変更された。iOS 26 SDK でビルドすると日本語テキストの方向解決ロジックが変わる場合がある 縦書き・日本語混在テキスト表示を実機確認
Apple Intelligence の公開範囲 Foundation Models framework は Apple Intelligence 対応デバイスのみで動作。日本語対応の一部機能は段階的展開 デバイス非対応時の fallback 実装を確認
社内 MDM・デバイス管理 Xcode 26 ビルドのアプリが MDM プロファイル下で正常動作するか確認が必要 社内配布環境でのテストフライト配布を IT 部門と連携して早めに実施

上げる前に見るところ

まず古い API を雑にでも洗うのが早い。

grep -R "UIScreen\.main\b\|unrestricted-voip\.ptt\|UbiquitousContentName\|UbiquitousContentURL" ./

TLS 周りも同様に引っかけておくと見落としが減る。

grep -R "TLSv10\|TLSv11\|tlsMinimumSupported\|kCFStreamSSLLevel" ./
Read more
Windows11パソコンのこと日記

リモートデスクトップ 音が出ない Windows11

1 Mins read
  • 状況
    • リモートデスクトップ接続でリモート側のアプリからホストへ音が出ない場合
    • リモート側のSleep後に音が出なくなった場合
  • 環境
    • host側:Windows11 22H2
    • remote側:Windows11 22H2
  • 対応方法
    • remote側のWindowsの検索で「service」と入力
    • サービスアプリをダブルクリックで起動する
    • 「Windows Audio」というサービスを選択し、右クリックから「サービスの再起動」
Read more
日記

Swagger EditerをDockerでローカル起動

1 Mins read

swagger

API開発で設計したDocment管理として使用できサンプルコードとしてJSONにしてくれて、よしなにPostmanみたいな動きしてくれるやつ

最近現場で使っているところが増えてる

ローカルでサーバー起動(例は3つ、外部APIサーバーが3つある場合などなど)

docker pull swaggerapi/swagger-editor
docker run -d -p 8090:8080 swaggerapi/swagger-editor
docker run -d -p 8091:8080 swaggerapi/swagger-editor
docker run -d -p 8092:8080 swaggerapi/swagger-editor

http://localhost:8090 などをブラウザで開き

ソース管理と一緒にリポジトリ内などにあるyamlファイル内容をコピペでブラウザ左Windowへ貼り付け

get、postなどテストをおこなう

※APIなので多少仕様の理解が必要となる

よく一緒に使われるのが OpenAPI

こちらはAPI設計ファイルとなったyamlファイルを読み込ませることにより指定した言語としてI/O部分のソースコードを自動でジェネレートしてくれるツール、ただし良いところばかりではなく、間違ったソースもジェネレートしてくるから地雷除去が必要な場面に出くわすこと多い

 

 

Read more
日記

AlmaLinux 8 GPG キー変更の準備をする

1 Mins read

dnfコマンドでエラー

dnf update

AlmaLinux 8 - BaseOS 485 kB/s | 3.4 kB 00:00 
GPG 鍵 0xC21AD6EA をインポート中: 
Userid : "AlmaLinux <packager@almalinux.org>" 
Fingerprint: E53C F5EF 91CE B0AD 1812 ECB8 51D6 647E C21A D6EA 
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux 
これでよろしいですか? [y/N]: y 
鍵のインポートに成功しました 
鍵をインポートしても役に立ちませんでした。鍵が間違っていませんか?

キーが新しくなった

AlmaLinux 8 GPG キーの変更

2024 年 1 月 12 日に、更新された GPG キーを使用して AlmaLinux 8 の RPM パッケージとリポデータへの署名を開始します。以下の手順を実行すると、切り替え後も引き続き問題なくアップデートを受信できるようになります。

システムに新しい AlmaLinux 8 GPG キーが既に含まれており、それを信頼していることを確認したい場合は、それをインポートするだけです。

sudo rpm --import https://repo.almalinux.org/almalinux/RPM-GPG-KEY-AlmaLinux
Read more