オートキャピタライゼーションは、特定のコンテキストにおいて入力テキストの最初の文字を自動的に大文字に変換するiOSのメカニズムです。UIKitはUITextInputTraitsプロトコルでautocapitalizationTypeプロパティを4つのモード(none、words、sentences、allCharacters)で提供しています。Apple Text Programming Guide(2025)によると、オートキャピタライゼーションの適切な設定はユーザーエクスペリエンスを向上させ、入力時の手動修正の回数を減らします。ほとんどのテキストフィールドにはsentencesモードを、ユーザー名やパスワードにはnoneモードを使用してください。
重要なポイント
オートキャピタライゼーションは、特定の条件が満たされたときにテキストの最初の文字を自動的に大文字に変換するiOSオペレーティングシステムの機能です。このメカニズムはautocapitalizationTypeプロパティを通じて制御され、UITextInputTraitsプロトコルを実装するすべての要素(UITextField、UITextView、UISearchBar)で利用できます。
この機能はiOSテキストエンジンレベルで動作し、各文字が入力される瞬間に有効になります。システムはカーソル位置と周囲のテキストを分析して、現在の入力文字を大文字にする必要があるかどうかを判断します。条件が満たされると、iOSはフィールドに表示される前に自動的に小文字を大文字に置き換えます。
Apple Human Interface Guidelines(2025)によると、オートキャピタライゼーションは自動修正や予測テキスト入力も含むより広範な予測入力システムの一部です。ユーザーはシステム設定(設定 > 一般 > キーボード)でこれらの機能をすべてグローバルに無効にできますが、開発者は個別のフィールドレベルでも制御できます。
自動修正とは異なり、オートキャピタライゼーションは言語モデルを使用しません — 単純なルールで動作します:ピリオドとスペースの後、テキストの先頭、改行文字の後です。例外はwordsモードで、コンテキストに関係なく各単語の最初の文字が大文字になります。
UITextAutocapitalizationTypeは、自動的な大文字/小文字変換戦略を定義する4つの値の列挙型です。各モードは特定のタイプのテキストフィールド向けに設計されており、特定のユーザーエクスペリエンスのタスクを解決します。
.noneモードは自動的な大文字/小文字変換を完全に無効にします。すべての文字はユーザーが入力した通りの形式で入力されます。このモードはパスワードフィールド、メールアドレス、ニックネーム、検索クエリ、およびサーバー側のデータ処理で大文字/小文字が重要となるあらゆるフィールドに必須です。
.wordsモードは入力された各単語の最初の文字を大文字にします。システムはスペースによって単語の境界を決定し、スペースの後の最初の文字を大文字に変換します。このモードは名前、姓、都市名、通り名など、各単語が大文字で始まるべきフィールドに便利です。
.sentencesモードが最も一般的で、ほとんどのテキストフィールドでデフォルトで使用されます。システムはピリオド、感嘆符、疑問符の後の最初の文字(スペースが続く場合)を大文字にします。このモードはメモ、メッセージ、コメント、その他の複数行テキストフィールドに最適です。
.allCharactersモードは入力されたすべての文字を大文字に変換します。このモードはCaps Lockを常に押している状態に相当し、データが大文字である必要があるフィールド(郵便番号、国コード、略語、注文番号)に使用されます。大文字のテキストは読みにくいため、注意して使用してください。
| モード | 説明 | 入力例 | 推奨 |
|---|---|---|---|
| .none | 変更なし | taro@mail.com | メール、パスワード、検索 |
| .words | 各単語 | 田中太郎 | 名前、住所、都市 |
| .sentences | 文の先頭 | こんにちは。お元気ですか? | メッセージ、メモ |
| .allCharacters | すべて大文字 | ABC-123 | コード、インデックス |
オートキャピタライゼーションのメカニズムは、キー押下の処理中、文字が画面に表示される前に起動します。ユーザーがキーを押すと、UITextInputTraitsが現在のカーソル位置を確認し、設定されたautocapitalizationTypeに従って大文字/小文字変換ルールを適用します。
.sentencesモードの場合、システムはトリガー文字を追跡します:ピリオド(.)、感嘆符(!)、疑問符(?)、および有効な場合は改行文字( )です。トリガー文字とそれに続くスペースを検出すると、システムは次の入力文字に対して「大文字期待」フラグを設定します。
.wordsモードはスペース文字をトリガーとして追跡します。各スペースの後、システムは次の単語に大文字を期待します。ただし、例外があります:ハイフン、アポストロフィ、および単語内のその他の句読点の後は、大文字は挿入されません。例えば、「O’Brien」は正しいままです。
重要な特徴は、オートキャピタライゼーションは単語の最初の文字にのみ機能することです。ユーザーが途中に大文字を含む単語(例:iPhoneやmacOS)を入力した場合、システムはそれらを変更しません。変換はトリガー後の最初の文字にのみ適用されるためです。つまり、標準的でない大文字/小文字を使用するブランド名や製品名は影響を受けません。
オートキャピタライゼーションは無効にするべきです、文字の大文字/小文字が正しいデータ処理に重要なフィールドでは。一般的なケース:メールアドレスフィールド、ニックネームとユーザー名、パスワード、検索クエリ、URL、確認コード、IMEI、シリアル番号。これらすべてのケースで、自動的な大文字/小文字の変更はサーバー側の処理でエラーを引き起こします。
検索フィールド(UISearchBar)の場合、オートキャピタライゼーションはデフォルトで無効になっており、ユーザーの期待と一致しています。検索クエリは任意の大文字/小文字で入力でき、サーバーは通常自動的に小文字に変換します。検索にオートキャピタライゼーションを有効にすると、ユーザーは毎回クエリの先頭の大文字を手動で修正する必要があります。
登録フォームでは、ユーザー名またはニックネームフィールドは.noneモードにする必要があります。多くのシステムがユーザー名で大文字/小文字を区別するためです。メールフィールドもオートキャピタライゼーションなしにする必要があります — ドメイン名は大文字/小文字を区別しませんが、メールのローカル部分は理論的に区別する可能性があります(実際には稀ですが)。
Apple Developer Documentationによると、secureTextEntry(パスワード)を持つフィールドは、開発者が明示的に別の値を設定した場合でも、自動的にautocapitalizationType = .noneを継承します。システムは安全な入力に対して最高の優先順位を持ち、パスワードフィールドのオートキャピタライゼーションを有効にしようとする試みをすべて無視します。
Swiftでのオートキャピタライゼーションの設定はautocapitalizationTypeプロパティを通じて行います。このプロパティはUITextField、UITextView、UISearchBarで利用できます。値はコード内およびInterface Builderの属性インスペクタで設定でき、モードはCapitalizationと呼ばれます。
let nameField = UITextField()
nameField.autocapitalizationType = .words
let emailField = UITextField()
emailField.autocapitalizationType = .none
連絡先フォームでは、各フィールドをその意味に従って設定します:名前 — .words、メール — .none、メッセージ — .sentences。この組み合わせにより最良のユーザーエクスペリエンスが提供され、手動での大文字/小文字修正の必要性が最小限になります。
class ContactFormViewController: UIViewController {
@IBOutlet var nameField: UITextField!
@IBOutlet var emailField: UITextField!
@IBOutlet var messageView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
nameField.autocapitalizationType = .words
emailField.autocapitalizationType = .none
messageView.autocapitalizationType = .sentences
}
}
実行時のプログラムによるモード変更には、UITextFieldDelegateデリゲートを使用します。例えば、フィールドが異なるコンテキストで使用できる場合、フォームの現在の操作モードに応じてtextFieldDidBeginEditingメソッドでautocapitalizationTypeを変更します。
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField === codeField {
textField.autocapitalizationType = .allCharacters
}
}
オートキャピタライゼーションはユーザーのキーボードに設定された入力言語に依存します。言語によって大文字/小文字の変換ルールが異なる場合があります。例えば、トルコ語では、文字「i」の大文字は「İ」(ドット付き)になり、「I」の小文字は「ı」(ドットなし)になります。iOSはこれらの特徴を自動的に処理します。
ロシア語の場合、オートキャピタライゼーションは英語と同じルールに従います:ピリオドの後、文の先頭、改行の後に大文字です。文字「yo」に関して問題が発生する可能性があります — システム辞書には存在しますが、すべてのキーボードレイアウトがメインレイヤーにそれを表示するわけではなく、オートキャピタライゼーションは「yo」を「Yo」に正しく変換します。
中国語、日本語、韓国語の場合、これらの言語には大文字/小文字の概念がないため、オートキャピタライゼーションは適用されません。対応するキーボードを使用する場合、システムはautocapitalizationTypeモードを無視し、フィールドは設定値に関係なく.noneモードと同じように動作します。
アラビア語とヘブライ語の場合も、これらの言語は大文字と小文字の区別なしに独自の文字体系を使用するため、オートキャピタライゼーションは適用されません。iOSシステムは入力言語を正しく検出し、この概念が存在しない言語についてはオートキャピタライゼーション設定を無視します。
よくある質問
はい、autocapitalizationTypeプロパティはフィールドが既にアクティブな場合でもいつでも変更できます。変更は次の文字入力時に有効になります。
はい、isSecureTextEntry = trueのフィールドの場合、システムは自動的にautocapitalizationType = .noneを設定します。この動作はプログラムで変更できません。
はい、UITextViewはautocapitalizationTypeを完全にサポートしています。これは特に.sentencesモードが最も自然に機能する複数行フィールドに役立ちます。
フィールドがsecureTextEntryとしてマークされていないがパスワード入力に使用される場合、オートキャピタライゼーションはパスワードを変更する可能性があります。大文字/小文字が重要なフィールドでは常に無効にしてください。
シミュレータでは、オートキャピタライゼーションはMacのハードウェアキーボードを介して機能し、異なる動作をする可能性があります。正しい動作を確認するには実機でテストしてください。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。