react-native-vector-icons
@amazon-devices/react-native-vector-iconsは、Vegaでのreact-native-vector-icons(英語のみ)のサポートを提供します。このライブラリは、ボタン、ロゴ、ナビゲーションバー、タブバーを装飾するために最適な、カスタマイズ可能なベクターアイコンを提供します。これらのアイコンをプロジェクトにシームレスに統合できます。アイコンは適応性が高く、拡大やスタイル設定を簡単に行うことができます。
このライブラリはシステムにデプロイされるため、別途インストールプロセスを必要とすることなくVega向けReact Nativeアプリで利用できます。これは、アプリが実行時にリンクする自動リンクライブラリとしてデプロイされます。ライブラリとVega向けReact Nativeとの互換性は、ライブラリがターゲットとしているVega向けReact Nativeバージョンとの間でのみ保証されます。
アプリのビルドに使用しているVega向けReact Nativeのバージョンを上げる場合は、ベストプラクティスとして、依存するライブラリのバージョンも上げることをお勧めします。
このライブラリとAPIの詳細については、GitHubリポジトリにあるREADME.md(英語のみ)を参照してください。
インストール
- package.jsonファイルにJavaScriptライブラリの依存関係を追加します。
"dependencies": { ... "@amazon-devices/react-native-vector-icons": "~2.0.0" } -
npm installコマンドを使用して、依存関係を再インストールします。 - フォントファイルを
<アプリパッケージのルート>/assets/fontsに追加します。
アップグレード
このパッケージをアップグレードするときは、多くの場合、プロジェクトにリンクされているフォントファイルのアップデートも必要になります。自動リンクが有効な場合は、これを再実行するとフォントがアップデートされます。それ以外の場合は、インストールセクションに記載されている手順に従う必要があります。
例
IconExplorer
GitHub react-native-vector-iconsリポジトリのpackages/icon-explorer(英語のみ)でIconExplorerプロジェクトを試してください。そこでは、任意のアイコンを検索することもできます。

基本的な例
以下は、アイコンを返す基本的な例を示しています。
import Icon from '@amazon-devices/react-native-vector-icons/Ionicons';
function ExampleView(props) {
return <Icon name="ios-person" size={30} color="#4F8EF7" />;
}
TabBar
以下の例は、TabBarの実装方法を示しています。
これは、react-navigationの例(英語のみ)を抜粋して一部翻訳したものです。
import { createBottomTabNavigator } from '@amazon-devices/react-navigation/bottom-tabs';
import MaterialCommunityIcons from '@amazon-devices/react-native-vector-icons/MaterialCommunityIcons';
const Tab = createBottomTabNavigator();
function MyTabs() {
return (
<Tab.Navigator
initialRouteName="Feed"
screenOptions={{
activeTintColor: '#e91e63',
}}
>
<Tab.Screen
name="Feed"
component={Feed}
options={{
tabBarLabel: 'ホーム',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="home" color={color} size={size} />
),
}}
/>
<Tab.Screen
name="Notifications"
component={Notifications}
options={{
tabBarLabel: '更新情報',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="bell" color={color} size={size} />
),
tabBarBadge: 3,
}}
/>
<Tab.Screen
name="Profile"
component={Profile}
options={{
tabBarLabel: 'プロフィール',
tabBarIcon: ({ color, size }) => (
<MaterialCommunityIcons name="account" color={color} size={size} />
),
}}
/>
</Tab.Navigator>
);
}
APIサポート
Iconコンポーネント
ライブラリに付属しているアイコンのいずれかを使用するか (たとえば、以下の例では FontAwesome.js のアイコンを使用しています)、独自のカスタムフォントを作成できます。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome';
const myIcon = <Icon name="rocket" size={30} color="#900" />;
プロパティ
任意のTextのプロパティ(英語のみ)および以下のプロパティを使用できます。
| プロパティ | 説明 | デフォルト |
|---|---|---|
size |
アイコンのサイズ。スタイルオブジェクトのfontSizeとして渡すこともできます。 |
12 |
name |
表示するアイコン。Icon Explorerアプリまたはreact-native-vector-iconsのドキュメントを参照してください。 | (なし) |
color |
アイコンの色。 | (継承) |
静的メソッド
| プロパティ | 説明 |
|---|---|
getFontFamily |
アイコンをテキストとして取得するために現在使用されているフォントファミリーを返します。使用方法:const fontFamily = Icon.getFontFamily() |
getImageSource |
Imageコンポーネントなどで使用するために、アイコンのビットマップバージョンのソースに解決されるプロミスを返します。使用方法:const source = await Icon.getImageSource(name, size, color) |
getImageSourceSync |
getImageSourceと同じですが、同期的に動作します。使用方法:const source = Icon.getImageSourceSync(name, size, color) |
getRawGlyphMap |
アイコンセットの未加工のグリフマップを返します。使用方法:const glyphMap = Icon.getRawGlyphMap() |
hasIcon |
指定された名前が現在のアイコンセットで有効かどうかを確認します。使用方法:const isNameValid = Icon.hasIcon(name) |
スタイル
IconはTextコンポーネントをベースとして構築されているため、ほとんどのスタイルプロパティ(英語のみ)は想定どおりに機能します。よく使用されるものには以下があります。
backgroundColorborderWidthborderColorborderRadiuspaddingmargincolorfontSize
これらのいくつかを組み合わせると、たとえば次のようなアイコンを作成できます。

Icon.Buttonコンポーネント
左側にアイコンが付いたボタンを作成する便利なコンポーネントです。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome';
const myButton = (
<Icon.Button
name="facebook"
backgroundColor="#3b5998"
onPress={this.loginWithFacebook}
>
Facebookでログイン
</Icon.Button>
);
const customTextButton = (
<Icon.Button name="facebook" backgroundColor="#3b5998">
<Text style={{ fontFamily: 'Arial', fontSize: 15 }}>
Facebookでログイン
</Text>
</Icon.Button>
);

プロパティ
以下のプロパティに加えて、Text(英語のみ)、TouchableHighlight(英語のみ)、TouchableWithoutFeedback(英語のみ)のプロパティを使用できます。
| プロパティ | 説明 | デフォルト |
|---|---|---|
color |
テキストとアイコンの色。別々の色を適用する必要がある場合は、iconStyleを使用するか、Textコンポーネントを入れ子にしてください。 |
white |
size |
アイコンのサイズ。 | 20 |
iconStyle |
アイコンにのみ適用されるスタイル。余白や別の色を設定するために適しています。注:余白にはiconStyleを使用してください。そうしない場合、動作が不安定になります。 |
{marginRight: 10} |
backgroundColor |
ボタンの背景色。 | #007AFF |
borderRadius |
ボタンの境界線の半径。0に設定すると無効になります。 |
5 |
onPress |
ボタンが押されたときに呼び出される関数。 | (なし) |
PNG画像/ソースオブジェクトとしての使用方法
スケーラブルベクターアイコンではなくビットマップ画像に依存するほかのコンポーネントへの入力として使用するには、以下の方法が便利です。上で説明したように、引数としてname、size、colorを受け取ります。
Icon.getImageSource('user', 20, 'red').then(source =>
this.setState({ userIcon: source })
);
レンダリングの不具合を回避するために、代わりに同期メソッドのIcon.getImageSourceSyncを使用することもできます。これはブロッキングメソッドのため、パフォーマンスの低下を招く可能性があることに注意してください。ただし、後続の呼び出しではキャッシュが使用されます。
マルチスタイルフォント
FontAwesome 5など、最近のフォントには複数のスタイルを使用するものがあります。このライブラリは、このようなフォントをサポートしています。使用方法は標準のIconコンポーネントとほとんど同じです。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome5';
const myIcon1 = <Icon name="comments" size={30} color="#900" />; // デフォルトのレギュラーを使用
const myIcon2 = <Icon name="comments" size={30} color="#900" solid />;
const myIcon3 = <Icon name="comments" size={30} color="#900" light />; // FA5 Proのみ
静的メソッド
Iconの静的メソッドはすべて、マルチスタイルフォントでもサポートされます。
| プロパティ | 説明 |
|---|---|
getFontFamily |
アイコンをテキストとして取得するために現在使用されているフォントファミリーを返します。使用方法:const fontFamily = Icon.getFontFamily(style) |
getImageSource |
Imageコンポーネントなどで使用するために、アイコンのビットマップバージョンのソースに解決されるプロミスを返します。使用方法:const source = await Icon.getImageSource(name, size, color) |
getImageSourceSync |
getImageSourceと同じですが、同期的に動作します。使用方法:const source = Icon.getImageSourceSync(name, size, color) |
getRawGlyphMap |
アイコンセットの未加工のグリフマップを返します。使用方法:const glyphMap = Icon.getRawGlyphMap(style) |
hasIcon |
指定された名前が現在のアイコンセットで有効かどうかを確認します。使用方法:const isNameValid = Icon.hasIcon(name, style) |
getStyledIconSet |
単一のスタイルが適用されたIconコンポーネントを取得します。使用方法:const StyledIcon = Icon.getStyledIconSet(style) |
style引数を指定しない場合(またはstyle引数が無効な場合)、デフォルトで定義済みのフォールバックが使用されます。
コンポーネント
Icon.Buttonがサポートされます。使用方法はIconと同様です。
import Icon from '@amazon-devices/react-native-vector-icons/FontAwesome5';
const myButton = (
<Icon.Button name="facebook" onPress={this.loginWithFacebook} solid>
Facebookでログイン
</Icon.Button>
);
カスタムフォント
createIconSet(glyphMap, fontFamily[, fontFile])
glyphMapに基づく独自のカスタムフォントを返します。マップのキーはアイコン名、値はUTF-8文字またはその文字コードです。fontFamilyはフォントの名前であり、ファイル名ではありません。フォント名を調べるには、Font Bookアプリや同様のツールでフォントを開きます。
import { createIconSet } from '@amazon-devices/react-native-vector-icons';
const glyphMap = { 'icon-name': 1234, test: '∆' };
const Icon = createIconSet(glyphMap, 'FontName', 'font-name.ttf');
createIconSetFromFontello(config[, fontFamily[, fontFile]])
fontello(英語のみ)の構成ファイルに基づいてカスタムフォントを作成する便利なメソッドです。前述の手順に従って忘れずにフォントをインポートし、config.jsonをプロジェクト内の適切な場所に配置してください。
import { createIconSetFromFontello } from '@amazon-devices/react-native-vector-icons';
import fontelloConfig from './config.json';
const Icon = createIconSetFromFontello(fontelloConfig);
createIconSetFromIcoMoon(config[, fontFamily[, fontFile]])
import { createIconSetFromIcoMoon } from '@amazon-devices/react-native-vector-icons';
import icoMoonConfig from './selection.json';
const Icon = createIconSetFromIcoMoon(
icoMoonConfig,
'LineAwesome',
'line-awesome.ttf'
);
IcoMoon(英語のみ)でDownloadオプションを使用し、ダウンロードした.zipに含まれている.jsonファイルを使用してください。また、前述の手順に従って.ttfフォントファイルをプロジェクトにインストールする必要もあります。
createMultiStyleIconSet(styles [, options])
import { createMultiStyleIconSet } from '@amazon-devices/react-native-vector-icons';
/*
* これはあくまでもサンプルコードです。好みに応じて
* 自由にグリフマップとスタイルをデザインできます。
*/
import glyphmap from './glyphmap.json';
/*
* glyphmap = {
* "style1": [
* "hello",
* "world"
* ],
* "style2": [
* "foo",
* "bar"
* ]
* }
*/
const glyphKeys = Object.keys(glyphmap); /* ["style1", "style2"] */
const options = {
defaultStyle: 'style1',
glyphValidator: (name, style) => glyphKeys.indexOf(name) !== -1,
fallbackFamily: (name) => {
for (let i = 0; i < glyphKeys.length; i++) {
const style = glyphKeys[i];
if (glyphmap[style].indexOf(name) !== -1) {
return style;
}
}
/* 常に何らかのファミリーを返します */
return glyphKeys[0];
}
};
/*
* stylesオブジェクトは、後でスタイルとして使用される
* キーと、フォントに適用するスタイルオブジェクト
* として使用されるオブジェクトで構成されます。適切な
* スタイルが選択されるように、スタイルにはフォント
* ごとに固有の特性を含める必要があります。
* FontAwesome 5では、5.7.0からスタイルを区別する
* ためにフォントの太さを使用していますが、その他の
* プロパティ(fontFamilyなど)も使用できます。
* これは標準のRNスタイルオブジェクトです。
*/
const styles = {
style1: {
fontWeight: '700'
},
style2: {
fontWeight: '100'
}
};
const Icon = createMultiStyleIconSet(styles, options);
/* デフォルトのスタイル(style1)を使用します */
<Icon name={'hello'} />
<Icon name={'world'} style1 />
/* デフォルトのスタイルはstyle1ですが、これはstyle2にフォールバックします */
<Icon name={'foo'} />
/* これもstyle2にフォールバックします */
<Icon name={'foo'} style1 />
/* style2を普通に使用します */
<Icon name={'bar'} style2 />
| オプション | 説明 | デフォルト |
|---|---|---|
| defaultStyle | レンダリング中にスタイルが指定されなかった場合に使用するスタイルの名前。 | Object.keys(styles)[0] |
| fallbackFamily | グリフを使用できない場合にファミリーを選択する関数。この関数は、パラメーターとしてグリフのnameを受け取る必要があります。ファミリーの名前を返します。 |
(name) => Object.keys(styles)[0] |
| glyphValidator | 選択されたスタイルでグリフが使用可能かどうかを検証する関数。パラメーターとして、nameとstyleをこの順番で受け取ります。グリフが有効な場合はtrueを返し、有効でない場合はfalseを返します。 |
(name, style) => true |
アニメーション
React Nativeには、Animatedというアニメーションライブラリが付属しています。アイコンでこれを使用するには、const AnimatedIcon = Animated.createAnimatedComponent(Icon)というコード行でアニメーションコンポーネントを作成するだけです。
サポートされているバージョン
| パッケージ名 | Amazon NPMライブラリのバージョン | Vega OSのビルド番号 | Vega SDKバージョン | リリースノート |
|---|---|---|---|---|
@amazon-devices/react-native-vector-icons |
2.0.1+9.2.0 | OS 1.1 (201010438050) |
0.20 |
Last updated: 2025年9月30日

