自動修正は、テキスト入力時のスペルミスを自動的に修正するiOSの組み込みメカニズムです。UIKitはUITextInputTraitsプロトコルのautocorrectionTypeプロパティを通じて自動修正の動作を管理し、デフォルト、有効、無効の3つのモードをサポートしています。Apple Text Programming Guide(2025)によると、自動修正はシステム辞書とデバイス上の機械学習に基づいて入力テキストを分析します。各テキストフィールドに個別にautocorrectionTypeを使用してください。これにより、入力データの特性に合わせて動作を適応させることができます。
重要なポイント
自動修正は、スペルミスが検出されたときに入力された単語を自動的に正しいと思われる代替候補に置き換えるiOSオペレーティングシステムの機能です。このメカニズムはUIKitテキストフィールドのレベルで機能し、標準のUITextFieldおよびUITextView入力要素を使用するすべてのアプリケーションで利用できます。
自動修正の中心には、サポートされている各言語の何百万ものテキスト例でトレーニングされた言語モデルがあります。このモデルはデバイス上で完全に動作し(on-device)、入力データの機密性を保証します。テキストは分析のためにAppleサーバーに送信されません。iOSのアップデートごとに、モデルは新しい単語とルールで洗練および拡張されます。
自動修正は、開発者が明示的に無効にしない限り、すべてのテキストフィールドで自動的に有効になります。ユーザーはシステム設定(設定 > 一般 > キーボード > 自動修正)で自動修正を完全に無効にできますが、開発者はautocorrectionTypeプロパティを通じて個々のフィールドのこの動作を制御することもできます。
WWDC 2023セッション204によると、AppleはTransformerベースの改良された自動修正言語モデルを発表しました。これは最後の単語だけでなく、文全体のコンテキストを考慮します。これにより、以前のn-gramベースのモデルと比較して誤った修正が30%削減されました。
UITextAutocorrectionTypeは、特定のテキストフィールドの自動修正動作を決定する3つの値を持つ列挙型です。各値はautocorrectionTypeプロパティを通じて設定され、Interface Builderとフィールド作成時のコードの両方でアクセスできます。
.default値は、フィールドがキーボードのシステムパラメータからグローバルな自動修正設定を継承することを意味します。このモードはユーザーの選択を尊重するため、ほとんどのテキストフィールドに推奨されます。ユーザーが設定で自動修正を無効にしている場合、.defaultのフィールドも自動修正を使用しません。
.yes値は、システム設定に関係なくフィールドの自動修正を強制的に有効にします。このモードは、スペルの正確さが重要なフィールド(テキストエディタ、メモ入力フィールド、メッセージなど)でのみ使用する必要があります。Appleは.yesを慎重に使用することを推奨しています。強制的な有効化はユーザーの期待に反する可能性があるためです。
.no値は、特定のフィールドの自動修正を無効にします。このモードは、パスワードフィールド(セキュアテキスト入力)、メールアドレス、確認コード、検索クエリに必須です。これらのフィールドでは、自動修正は役に立たないだけでなく、有害です。正しく入力されたデータを誤った代替候補に置き換える可能性があります。
| モード | 値 | 推奨 |
|---|---|---|
| .default | システム設定を継承 | ほとんどの入力フィールド |
| .yes | 強制的に有効 | テキストエディタ、メモ |
| .no | 強制的に無効 | パスワード、メール、検索、コード |
iOS自動修正の言語モデルは、静的辞書と動的にトレーニングされるモデルの組み合わせを使用します。システム辞書には各言語の最も一般的な単語が含まれ、Transformerベースの言語モデルがコンテキストと置換確率を分析します。モデルはユーザーが入力したテキストに基づいてデバイス上でトレーニングされます。
ユーザーはキーボード設定(設定 > 一般 > キーボード > テキスト置換)を通じて個人辞書に単語を追加できます。追加された単語はiCloudに保存され、同じApple IDを使用してデバイス間で同期されます。システムは個人辞書の単語を修正しないため、名前、ブランド、技術用語に便利です。
専門分野(医療、法律、技術)の場合、標準辞書には不十分な用語しか含まれていない可能性があります。そのようなアプリケーションでは、関連フィールドの自動修正を無効にするか、iOS 17+の場合はUIResponderメソッド.replacementDictionaryを使用したカスタムテキスト置換を使用することをお勧めします。
Apple Machine Learning Research(2024)によると、Transformerアーキテクチャに基づく新しい自動修正モデルは、最大10のコンテキストトークンを処理し(以前のモデルでは3トークン)、ユーザーの意図をより正確に判断できます。モデルはスペルだけでなく、文の文法構造も考慮します。
Safe Keyboardは、secureTextEntry = trueのフィールドで自動的に有効になる保護された入力モードです。このモードでは、自動修正、自動大文字化、予測入力がシステムによって無効になり、設定されたautocorrectionTypeの値は無視されます。システムはユーザー辞書とテキスト置換へのアクセスもブロックします。
Safe Keyboardは、自動修正メカニズムを通じた入力データの漏洩を防ぎます。パスワードフィールドで自動修正が有効だった場合、システムは入力されたパスワードをユーザー辞書に保存したり、モデルトレーニングのためにAppleサーバーに送信したりする可能性があります。Safe Keyboardは機密データがアプリケーションの外部に漏れないことを保証します。
金融アプリケーションの場合、Safe KeyboardはsecureTextEntryのあるフィールドでのみ自動的に有効になります。カード番号、有効期限、CVVコードの入力フィールドでは、開発者がautocorrectionType = .noとkeyboardType = .numberPadまたは.phonePadを設定して、手動で自動修正を無効にする必要があります。
iOS 17以降、Safe Keyboardはサードパーティキーボードを介した傍受からの保護をサポートしています。ユーザーがApp Storeからキーボードをインストールしている場合、secureTextEntryが有効になると、デフォルトで選択されていたとしても、システムキーボードが自動的にサードパーティキーボードを置き換えます。これにより、パスワードは安全なシステムキーボードを介してのみ入力されることが保証されます。
Swiftでの自動修正の管理は、UITextFieldおよびUITextViewオブジェクトのautocorrectionTypeプロパティを通じて行われます。このプロパティは読み取りと書き込みの両方が可能で、入力コンテキストに応じて動的に変更できます。Interface Builderによる設定は、属性インスペクターのCorrectionという名前で利用できます。
let textField = UITextField()
textField.autocorrectionType = .no
ログインフォームの場合、パスワードフィールドの自動修正は無効にし、ログインフィールドはデフォルトで有効にする必要があります。メールフィールドも自動修正なしで残すことをお勧めします。@記号とドメイン名が誤って置き換えられることが多いためです。ユーザー名フィールドについては、ユーザー名が読み取り可能な単語である場合、自動修正を有効にできます。
class RegistrationViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocorrectionType = .yes
emailField.autocorrectionType = .no
emailField.textContentType = .emailAddress
}
}
UITextViewの場合、自動修正の設定も同様に行われます。これは、コメント、メッセージ、メモのマルチライン入力フィールドで特に重要です。これらのフィールドでは自動修正が最も有益ですが、技術用語やコードを入力する際に不便を生じることもあります。
let textView = UITextView()
textView.autocorrectionType = .default
動的な変更には、UITextFieldDelegateプロトコルを使用します。textFieldDidBeginEditingメソッドはフィールドがアクティブになったときに呼び出され、その中で現在のコンテキストやフィールドの役割に応じてautocorrectionTypeを変更できます。フィールドの役割はアプリケーションの動作中に変更される可能性があります。
自動修正は無効にする必要があります。入力データの正確性が重要で、システムがユーザーの意図を正しく判断できないフィールドでは特にそうです。主なケース:パスワードとセキュアデータフィールド、メールアドレス入力フィールド、検索文字列、コード入力フィールド、プログラムコード入力フィールド、および非標準データ形式のフィールド。
検索バー(UISearchBar)の場合、自動修正はデフォルトで無効になっており、これはユーザーの期待に合致します。検索時、ユーザーは不完全な単語、技術用語、異なる言語のクエリを入力することがあり、自動修正は邪魔になるだけです。URLやドメイン名の入力フィールドも同様です。
メッセンジャーやコミュニケーションアプリでは、自動修正は通常有効ですが、スラング、略語、インフォーマルな語彙の入力には不便を生じることがあります。そのような場合、ユーザーはキーボード設定から自動修正を無効にするか、開発者がアプリケーションインターフェースに直接トグルを提供することができます。
AppleのHuman Interface Guidelinesによると、入力データがシステム辞書にない可能性があるフィールド(注文番号、予約コード、識別子、IMEI、MACアドレス)では自動修正を無効にする必要があります。フィールドが非標準形式の英数字データを受け入れる場合は、自動修正を無効にしてください。
よくある質問
アプリケーション全体の自動修正をグローバルに無効にする方法はありません。各テキストフィールドに個別にautocorrectionType = .noを設定するか、オーバーライドされた値を持つUITextFieldのサブクラスを作成する必要があります。
シミュレータはMacキーボードの簡略化された入力モデルを使用します。シミュレータでは自動修正の言語モデルがアクティブではありません。テストには実際のデバイスを使用してください。
ユーザーは設定 > 一般 > キーボード > テキスト置換から単語を追加できます。アプリケーションがシステムの自動修正辞書にプログラムで単語を追加するAPIはありません。
いいえ、keyboardTypeは自動修正に影響しません。.numberPadキーボードでも、autocorrectionTypeで明示的に無効にしない限り、自動修正は有効になる可能性があります。
サードパーティキーボードには独自の自動修正メカニズムがあり、システムのUITextAutocorrectionTypeは使用しません。動作は特定のキーボードの実装に依存します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。