2021年1月4日
プログラミング
react-native-svgを使ってReact NativeでSVGを扱う


はじめに
React NativeではSVGを表示することができません。そのため画像素材などはpngなどを用意するのが一般的でした。ですが、react-native-svgなどのライブラリを使用することでReact NativeでもSVG画像を使用することができます。今回はreact-native-svgを使用したSVG画像の使用手順についてご紹介します。
react-native-svgとはReact Native上でSVG画像を表示するためにするライブラリです。
https://github.com/react-native-svg/react-native-svg
使い方もSVGを触ったことがある人であれば難しくなく扱うことができます。
導入手順
React Native
導入についてはReact Nativeのプロジェクト内で以下のコマンドを入力してインストールします。
$ yarn add react-native-svg
React Native Expo
React Native Expoプロジェクトで追加する場合にはこちらでインストールします。
$ expo install react-native-svg
インストールが完了すれば準備完了です。
使用方法
で実際に使用手順について解説をしていきます。今回は以下のようなSVGを用意しました。
見た目
ソースコード
<svg width="100" height="100" viewBox="0 0 100 100" fill="none">
<circle cx="50" cy="50" r="50" fill="#40ff00">
</circle>
</svg>
react-native-svgはSVGファイルをReact Native用に書き換える必要があるので上記SVGファイルを元に書き換えをしていきます。まずは実際にSVGを表示したいファイルにreact-native-svgをimportします。
import Svg, {
Circle,
Ellipse,
G,
Text,
TSpan,
TextPath,
Path,
Polygon,
Polyline,
Line,
Rect,
Use,
Image,
Symbol,
Defs,
LinearGradient,
RadialGradient,
Stop,
ClipPath,
Pattern,
Mask,
} from 'react-native-svg';
これらを見て気がつく方もいるかもしれませんが、これらはすべてSVGのタグになっています。元々のSVGのタグは小文字ですがreact-native-svgではすべて頭の文字が大文字になっています。そのため、もともとのSVGファイルを表示したい箇所に貼り付けたら、SVGのタグをすべて大文字に変更します。
import Svg, { Circle } from 'react-native-svg';
const Icon = props => {
return (
<view>
<svg width="100" height="100" viewBox="0 0 100 100" fill="none">
<circle cx="50" cy="50" r="50" fill="#40ff00"></circle>
</svg>
</view>
);
}
これでsvg画像をReact Nativeで使用することができます。
SVGアイコンをコンポーネントとして活用する
react-native-svgで記述したsvgは外部からpropsを渡すことで通常のReact Native同様、値の受け取りが可能です。そのため以下のようにpropsを設定することで、アイコンの大きさや色などを可変にすることができるコンポーネントを実装することができます。
import Svg, { Circle } from 'react-native-svg';
const Icon = props => {
const { size = 80, color = "#ff0000" } = props;
return (
<view>
<svg width="{size}" height="{size}" viewBox="0 0 100 100" fill="none">
<circle cx="50" cy="50" r="50" fill="{color}/"></circle>
</svg>
</view>
);
}
まとめ
今回はreact-native-svgを使用したReact Nativeでのsvg画像の利用についてご紹介しました。SVG画像を使用することで端末によって画像が荒くなったりすることを防ぐことができますし、端末の解像度に応じて複数枚画像を用意する手間もなくなるので便利です。活用してみてはいかがでしょうか。
React Nativeのお仕事に関するご相談
Bageleeの運営会社、palanではReact Nativeに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
1
1
関連記事

2021年8月30日
React Navigation 6.0のStack Navigatorの大きく変わった箇所の変更点をまとめてみた

2021年1月4日
react-native-svgを使ってReact NativeでSVGを扱う

2019年12月23日
Expo Bare Workflow で Firebase Analytics を設定する

2018年12月6日
【React Native】キーボードで画面が隠れる場合の対処法

2018年7月13日
TypeScriptでReact Native開発をする方法2018年最新版

2018年6月29日
React Navigationのタブナビゲーションをカスタマイズしてみよう!
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ
palanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー

Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

かっきー

まりな

suzuki
miyagi

ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと
デザイナーをしています。 好きな食べ物はラーメンです。

taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。

kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya

aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

sugimoto
asama
ando
iwasawa ayane

oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!