HTML

In HTML, <input type="password"> is a form input element designed to mask typed characters (often displayed as ●) to protect sensitive information like passwords.

<input type="password">

<input type="password">とは?

<input type="password"> は、ユーザーが入力したテキストを隠しながらフォームへ送信できる、HTML 標準の入力フォーム要素です。多くの場合、ログインフォームやサインアップフォームなど、機密情報を入力する場面で使用されます。

基本的な使い方

シンプルな例

HTML

<form action="/login" method="POST">
	<label for="password">Password:</label>
	<input type="password" id="password" name="password">
	<button type="submit">Login</button>
</form>

上記のコード例では、type="password" を設定した <input> 要素が、パスワード入力欄として機能します。ユーザーが文字を入力すると、画面上ではマスキング(●など)されます。

重要な属性

name 属性
サーバーサイドでデータを受け取る際に利用されるキー名です。通常は「password」や「pass」といった名前が付けられます。
id 属性
フォームとラベルを関連付けるときや、JavaScript で要素を取得・制御するときに使用します。<label>for と対になるように設定するのが一般的です。
placeholder 属性
文字を入力していない状態のときにヒントを表示することができます。たとえば「パスワードを入力してください」などの説明を入れます。

HTML

<input type="password" placeholder="Input Password">
required 属性
フォーム送信時に値の入力が必須になるように設定します。

HTML

<input type="password" name="password" required>
maxlength 属性
入力できる文字数の上限を設定します。パスワードの最大文字数を設けたい場合などに利用します。ただし、サーバーサイドでも入力のバリデーションを行うことが重要です。

HTML

<input type="password" name="password" maxlength="20">
autocomplete 属性
ブラウザに保存されているパスワードを自動入力させたい・させたくないなど、ブラウザのオートコンプリート機能を制御する場合に利用します。

HTML

<input type="password" name="password" autocomplete="off">

パスワード入力欄におけるユーザビリティとデザイン上の注意点

パスワードの可視化(Show/Hide 機能)

ユーザーが入力したパスワードを一時的に表示する機能を追加すると、打ち間違いを防ぎやすくなります。

以下はJavaScript を使って、パスワード表示のオン/オフを切り替える例です。

HTML

<form>
	<label for="user-password">Password : </label>
	<input type="password" id="user-password" name="user-password">
	<input type="checkbox" id="show-password">
	<label for="show-password">Show</label>
</form>

<script>
	const passwordInput = document.getElementById('user-password');
	const showPasswordCheckbox = document.getElementById('show-password');
	
	showPasswordCheckbox.addEventListener('change', () => {
		if (showPasswordCheckbox.checked) {
			passwordInput.type = 'text';
		} else {
			passwordInput.type = 'password';
		}
	});
</script>

強力なパスワードを促す

ユーザーに強力なパスワードを設定してもらうために、以下のような工夫が考えられます。

ヒントや規則の表示
「8文字以上で英数字と記号を含めてください」など、わかりやすいガイドを表示する。
リアルタイムのバリデーション
入力欄にパスワードの強度チェッカーを設置し、強度が不足している場合は警告を出す。

エラー表示

フォーム送信時に、パスワードが未入力や規定に沿っていない場合はユーザーにわかりやすいエラーを表示しましょう。HTML の標準バリデーションを使ったり、JavaScript で独自のバリデーションを行うこともできます。

セキュリティ上の考慮事項

HTTPSの利用

通信が暗号化されていない (HTTP) サイトでパスワードを送信すると、第三者に盗聴されるリスクが非常に高まります。パスワードを入力するフォームは必ず HTTPS (SSL/TLS) を利用しているページに設置し、暗号化通信を行いましょう。

サーバーサイドでのパスワード管理

ブラウザ側でパスワードを隠していても、サーバー側でパスワードを平文のまま保存していては意味がありません。サーバーサイドにおいては、以下のような対策が必須です。

フロントエンドでのパスワードバリデーション

pattern 属性やカスタム JavaScript を使ってクライアントサイドでも入力チェックを行うことは有効ですが、最終的にはサーバーサイドでの検証が必須です。クライアントサイドのチェックはユーザー体験向上のためと考えましょう。

<input type="password"> とその他の属性・イベントの活用

pattern 属性

HTML5 の pattern 属性を使うと、正規表現でパスワードの形式を指定できます。送信時に正規表現にマッチしない場合はエラーが表示され、フォーム送信がブロックされます。

HTML

<input
	type="password"
	name="password"
	pattern="(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[@$!%*?&#]).{8,}"
	title="8文字以上で、英字と数字、記号を少なくとも1つ含めてください"
	required
>

上の例では、数字・英字・特定の記号が少なくとも1つずつ含まれる、8文字以上の文字列を強制しています。

JavaScript イベント

oninput
入力中にリアルタイムでパスワードの強度をチェックし、ユーザーにフィードバックを行うなどの機能を実装できます。
onfocus / onblur
フォーカスが当たった・外れたタイミングでのガイドメッセージ切り替えなどに利用できます。

アクセシビリティへの配慮

スクリーンリーダー対応

<input type="password"> は、スクリーンリーダー上では通常テキスト入力欄と同様に扱われます。ただし、マスクされた文字は基本的に読み上げられません。<label> と適切な関連付けを行い、パスワード入力欄だと明確に伝えましょう。

視覚的ヒント

色のみに依存せず、テキストやアイコンなどで「パスワードを表示する」「パスワードを隠す」といったアクションが分かるようにすることが大切です。

フォーカスインジケータ

キーボード操作やスクリーンリーダーを利用するユーザーにも配慮し、フォーカスが当たった際の視覚的インジケータを CSS で設定するなどの工夫も大切です。

実運用時のベストプラクティス

サーバーサイドのバリデーション・セキュリティを最優先
クライアントサイドの制御はユーザーの利便性や簡易チェックのためで、あくまで補助的と考えましょう。
ユーザー入力の安全確保 (HTTPS)
HTTPS を常に使用する。ログインページだけでなく、サイト全体を HTTPS 化する (常時HTTPS) ほうが安全です。
パスワードの複雑度に関するガイダンス
ユーザーに強力なパスワードを求める場合、わかりやすい説明やリアルタイムの強度判定を活用し、ストレスを最小限にする。
ユーザーのプライバシー保護
ログインフォームやパスワード入力が必要なフォームをデザインする際は、周囲に第三者がいる可能性を考え、ラベルやエラー表示などにも配慮が必要です。
パスワードマネージャへの対応
ユーザーがパスワードマネージャを使用しやすいように、autocomplete="current-password"autocomplete="new-password" といったセマンティックな値を指定することが推奨される場合があります。

HTML

<input type="password" name="password" autocomplete="current-password" required>

まとめ

<input type="password"> は単純に “マスクされたテキスト入力欄” として使われることがほとんどですが、そこにはユーザーの大切な情報を守るという役割があります。安全な通信環境(HTTPS)であることや、ユーザーのパスワードがサーバーサイドで適切に管理されることは大前提です。また、ユーザーが使いやすいように工夫(パスワード可視化機能、強度判定、わかりやすいエラー表示など)を凝らすことで、良いユーザーエクスペリエンスと高いセキュリティを両立できます。

今後は、Web標準やブラウザの仕様変更に伴って、パスワード関連の機能(例えば新しい属性や API)が追加・変更される可能性もあります。こまめにブラウザ仕様やセキュリティ動向をチェックしつつ、最新のベストプラクティスに沿った実装を行うことが重要です。