【Vue.js】リアルタイム文字カウント機能を作る|入力制限と残り文字数表示

【Vue.js】リアルタイム文字カウント機能を作る|入力制限と残り文字数表示 Vue.js

Vue.jsを使えば、フォーム入力欄に対してリアルタイムで文字数をカウントし、残りの入力可能文字数を表示する機能も簡単に実装できます。本記事では、最大文字数制限とともに、残り文字数の表示や制限超過時の警告を含む実用的な文字カウント機能を紹介します。

リアルタイム文字カウントの用途

文字カウント機能は、SNS投稿欄、プロフィール入力、問い合わせフォームなど、入力上限が決まっている場面でよく使用されます。Vue.jsのv-modelcomputedを活用することで、リアクティブな文字数の把握とUI反映が容易に行えます。

基本的な実装例(Vue 3 Composition API)

<template>
  <div class="counter-container">
    <label>自己紹介({{ remaining }}文字残り)</label>
    <textarea
      v-model="text"
      :maxlength="maxLength"
      rows="4"
      placeholder="最大100文字まで入力できます"
    ></textarea>
    <p :class="{ warning: remaining <= 10 }">{{ text.length }} / {{ maxLength }} 文字</p>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

const text = ref('');
const maxLength = 100;

const remaining = computed(() => {
  return maxLength - text.value.length;
});
</script>

<style scoped>
.counter-container {
  max-width: 500px;
  margin: 2rem auto;
}
textarea {
  width: 100%;
  padding: 0.5rem;
  font-size: 1rem;
  border: 1px solid #ccc;
  border-radius: 4px;
}
p {
  text-align: right;
  font-size: 0.9rem;
  margin-top: 0.3rem;
}
.warning {
  color: red;
  font-weight: bold;
}
</style>

実装のポイント

  • v-model: テキストエリアとリアルタイムでバインド
  • maxlength属性: 入力自体に制限をかける
  • computed: 残り文字数を計算して表示
  • :classの条件分岐: 残り文字数が少ない場合に警告表示

応用のアイデア

  • 文字数オーバー時に送信ボタンを無効化
  • 複数項目に対して個別のカウンターを設置
  • リアルタイムでバイト数を計算(日本語2バイト、英数字1バイトなど)

まとめ

リアルタイム文字カウントは、Vue.jsのv-modelcomputedを組み合わせることで簡潔かつ効果的に実装できます。入力制限や視覚的な警告を加えることで、ユーザーにとってわかりやすく使いやすいフォームを提供できます。実際のフォーム設計に取り入れて、UXの向上を目指しましょう。