react-international-phone vs react-intl-tel-input vs react-phone-input-2 vs react-phone-number-input
国際電話番号入力コンポーネントライブラリの比較
react-international-phonereact-intl-tel-inputreact-phone-input-2react-phone-number-input

国際電話番号入力コンポーネントライブラリの比較

react-international-phonereact-intl-tel-inputreact-phone-input-2react-phone-number-inputはすべて、国際電話番号の入力機能を提供するReactコンポーネントライブラリです。これらのライブラリは、ユーザーが国コードを選択し、電話番号を入力できるUIを提供し、国際的なフォーム実装を簡素化します。ただし、それぞれのライブラリは設計思想、バリデーション精度、カスタマイズ性、メンテナンス状況において大きな違いがあります。特に、react-intl-tel-inputは非推奨となっており、新規プロジェクトでの使用は推奨されません。他の3つのライブラリはアクティブにメンテナンスされており、プロジェクトの要件に応じて適切な選択が可能です。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
react-international-phone0439107 kB613ヶ月前MIT
react-intl-tel-input0287256 kB834年前MIT
react-phone-input-201,015426 kB277-MIT
react-phone-number-input0-10.1 MB-3ヶ月前MIT

国際電話番号入力コンポーネントの比較:react-international-phone vs react-intl-tel-input vs react-phone-input-2 vs react-phone-number-input

国際電話番号を扱うUIコンポーネントは、フォーム実装でよく必要になります。しかし、それぞれのnpmパッケージには設計思想や技術的トレードオフが大きく異なります。この記事では、プロフェッショナルなフロントエンド開発者がアーキテクチャ選定を行う際に役立つ、実践的な観点から4つの主要パッケージを比較します。

📱 基本的な使用方法とAPI設計

react-international-phone

このパッケージはシンプルでモダンなAPIを提供し、valueonChangeによる制御型コンポーネントとして動作します。国コード(例: "JP")と電話番号(例: "9012345678")を別々に管理する設計です。

import { InternationalPhone } from 'react-international-phone';
import 'react-international-phone/style.css';

function App() {
  const [phone, setPhone] = useState({ country: 'JP', value: '' });

  return (
    <InternationalPhone
      defaultCountry="JP"
      value={{ country: phone.country, phone: phone.value }}
      onChange={(data) => setPhone({ country: data.country, value: data.phone })}
    />
  );
}

react-intl-tel-input

注意:このパッケージは非推奨(deprecated)です。 公式npmページおよびGitHubリポジトリに明確な非推奨通知があり、新規プロジェクトでの使用は避けるべきです。代わりにメンテナンスされている代替品を検討してください。

// 非推奨のため、新規プロジェクトでは使用しないでください
import IntlTelInput from 'react-intl-tel-input';
import 'react-intl-tel-input/dist/main.css';

<IntlTelInput
  preferredCountries={['jp']}
  onSelectFlag={(countryCode) => console.log(countryCode)}
  onPhoneNumberChange={(status, value, countryData) => {
    // 複雑なコールバック引数
  }}
/>

react-phone-input-2

非常にカスタマイズ性の高いコンポーネントで、電話番号全体を1つの文字列(例: "+819012345678")として扱います。多くのpropsオプションがあり、細かい見た目や動作の調整が可能です。

import PhoneInput from 'react-phone-input-2';
import 'react-phone-input-2/lib/style.css';

function App() {
  const [phone, setPhone] = useState('');

  return (
    <PhoneInput
      country={'jp'}
      value={phone}
      onChange={(phone, country, e, formattedValue) => setPhone(phone)}
      inputClass="custom-input"
      buttonClass="custom-button"
    />
  );
}

react-phone-number-input

このパッケージは電話番号のバリデーションとフォーマットに特化しており、libphonenumber-jsライブラリを内部で使用しています。電話番号はE.164形式(例: "+819012345678")で扱われ、正確なバリデーションが可能です。

import PhoneInput from 'react-phone-number-input';
import 'react-phone-number-input/style.css';

function App() {
  const [phone, setPhone] = useState('');

  return (
    <PhoneInput
      international
      defaultCountry="JP"
      value={phone}
      onChange={setPhone}
    />
  );
}

✅ バリデーションとフォーマットの精度

react-international-phone

基本的なフォーマット機能はありますが、厳密な電話番号バリデーションは含まれていません。独自にバリデーションルールを追加する必要があります。

react-intl-tel-input(非推奨)

内部でlibphonenumberを使用していましたが、非推奨のため信頼性に問題があります。

react-phone-input-2

フォーマット表示は優れていますが、バリデーション機能は限定的です。isValid propで基本チェックは可能ですが、完全な国際標準準拠ではありません。

<PhoneInput
  isValid={(value, country) => {
    // カスタムバリデーションが必要
    return value.length > 10;
  }}
/>

react-phone-number-input

最も正確なバリデーションを提供します。 libphonenumber-jsを使用しているため、各国の電話番号形式に厳密に従ったバリデーションが可能です。

import { isValidPhoneNumber } from 'react-phone-number-input';

// バリデーション例
if (isValidPhoneNumber(phone)) {
  // 有効な電話番号
}

🎨 カスタマイズ性とスタイル

react-international-phone

CSS Modulesを使用しており、スタイルのカスタマイズが比較的容易です。クラス名を指定して独自のスタイルを適用できます。

<InternationalPhone
  inputClassName="my-custom-input"
  dropdownClassName="my-custom-dropdown"
/>

react-phone-input-2

最も豊富なスタイルカスタマイズオプションを提供します。inputClassbuttonClassdropdownClassなど、各要素に対して個別にクラスを指定できます。

react-phone-number-input

スタイルのカスタマイズは可能ですが、他のパッケージと比べるとオプションが少ないです。主にCSSで上書きする必要があります。

🌐 国際化(i18n)対応

react-international-phone

言語ファイルをインポートすることで多言語対応が可能です。

import { InternationalPhone } from 'react-international-phone';
import 'react-international-phone/locales/ja';

react-phone-input-2

localization propで言語をカスタマイズできます。

<PhoneInput
  localization={{ jp: '日本' }}
/>

react-phone-number-input

国名の翻訳はreact-phone-number-input/localeからインポート可能ですが、設定がやや複雑です。

import ja from 'react-phone-number-input/locale/ja.json';

<PhoneInput
  labels={ja}
/>

📊 まとめ:各パッケージの特徴

パッケージメンテナンス状況バリデーション精度カスタマイズ性学習コスト
react-international-phoneアクティブ低~中
react-intl-tel-input非推奨
react-phone-input-2アクティブ
react-phone-number-inputアクティブ低~中

💡 実践的な選定ガイド

  • 正確な電話番号バリデーションが必要な場合react-phone-number-inputが最適です。金融サービスや認証システムなど、データの正確性が重要な場面で活躍します。

  • 見た目の細かいカスタマイズが必要な場合react-phone-input-2が最適です。デザインシステムに完全に統合したい場合や、ブランドに合わせたUIが必要な場合に適しています。

  • シンプルで軽量な実装が欲しい場合react-international-phoneが最適です。基本的な電話番号入力機能だけで十分な場合や、最小限の依存関係を保ちたい場合に適しています。

  • react-intl-tel-inputは非推奨のため、新規プロジェクトでは絶対に使用しないでください。

選び方: react-international-phone vs react-intl-tel-input vs react-phone-input-2 vs react-phone-number-input

  • react-international-phone:

    react-international-phoneは、シンプルでモダンなAPIを求めるプロジェクトに最適です。軽量で使いやすく、基本的な国際電話番号入力機能だけで十分な場合に適しています。ただし、厳密な電話番号バリデーションが必要な場合は、追加の実装が必要になる点に注意してください。CSS Modulesによるスタイルカスタマイズも比較的容易で、中規模以下のアプリケーションでの採用に向いています。

  • react-intl-tel-input:

    react-intl-tel-inputは公式に非推奨(deprecated)とされています。npmページおよびGitHubリポジトリに明確な非推奨通知があるため、新規プロジェクトでの使用は絶対に避けてください。既存プロジェクトで使用している場合は、早急に代替ライブラリへの移行を検討すべきです。このパッケージはメンテナンスされておらず、セキュリティや互換性の問題が発生する可能性があります。

  • react-phone-input-2:

    react-phone-input-2は、高度なカスタマイズ性を求めるプロジェクトに最適です。UIの各要素に対して詳細なスタイル制御が可能で、デザインシステムに完全に統合したい場合や、ブランドガイドラインに厳密に従った見た目にしたい場合に適しています。ただし、電話番号のバリデーション精度は高くないため、正確なバリデーションが必要な場合は追加の実装が必要になります。

  • react-phone-number-input:

    react-phone-number-inputは、電話番号の正確なバリデーションとフォーマットを重視するプロジェクトに最適です。内部でlibphonenumber-jsを使用しており、各国の電話番号形式に厳密に従ったバリデーションが可能です。金融サービス、認証システム、顧客データ管理など、データの正確性が重要な場面で特に有効です。ただし、UIのカスタマイズ性は他のライブラリと比べてやや制限がある点に注意してください。

react-international-phone のREADME

react-international-phone

🤙 International phone input component for React

npm-version build-status-badge install-size-badge codecov downloads Semantic Release stars

Live demo: Storybook

demo-gif

Features

  • 😎 Easy to integrate - Just import and use, no need for the initial setup. Integrate with any UI library using a headless hook.
  • 🔍 Country guessing - Just start typing and the component will guess the country and format the phone. Country flags are rendered using Twemoji.
  • Lightweight - Low bundle size, no third-party dependencies.
  • 🌈 Easy to customize - Customize styles and component behavior using props.
  • Caret position handling - Typing in the middle of the input, selection and deletion feels naturally.
  • ✔️ Validation - Easily validate entered phone numbers using provided functions.

Installation

$ npm i react-international-phone

Basic usage

import { useState } from 'react';
import { PhoneInput } from 'react-international-phone';
import 'react-international-phone/style.css';

const App = () => {
  const [phone, setPhone] = useState('');

  return (
    <div>
      <PhoneInput
        defaultCountry="ua"
        value={phone}
        onChange={(phone) => setPhone(phone)}
      />
    </div>
  );
};

Documentation

Find the full API reference on official documentation.

Migration

You can encounter some breaking changes after update between major versions.

Checkout migration documents that contain a list of breaking changes and ways to migrate:
Update from v3 to v4
Update from v2 to v3
Update from v1 to v2