This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
画像ピッカーを使用する
ページを編集
このチュートリアルでは、Expo Image Picker を使って、Android、iOS、Web の React Native アプリでメディアライブラリから画像を選択し、表示する方法を学びます。
React Native は、<View>、<Text>、<Pressable> などの組み込みコンポーネントを標準的な構成要素として提供しています。ここで作成するのは、デバイスのメディアライブラリから画像を選択する機能です。これはコアコンポーネントだけでは実現できないため、この機能をアプリに追加するためにライブラリが必要になります。
Expo SDK のライブラリである expo-image-picker を使用します。
expo-image-pickerは、デバイスのメディアライブラリから画像や動画を選択するためのシステム UI へのアクセスを提供します。

expo-image-picker を使ってデバイスのメディアライブラリから画像を選択する方法を学びます。
1
expo-image-picker をインストールする
expo-image-picker ライブラリをインストールするには、ターミナルで Ctrl + C を押して開発サーバーを停止してから、次のコマンドを実行します。
npx expo install コマンドは、ライブラリをインストールし、package.json のプロジェクトの依存関係に追加します。
ヒント: プロジェクトに新しいライブラリをインストールするときは、ターミナルで Ctrl + C を押して開発サーバーを停止してから、インストールコマンドを実行します。インストールが完了したら、
npx expo startを実行して開発サーバーを再起動します。
2
デバイスのメディアライブラリから画像を選択する
expo-image-picker は、デバイスのメディアライブラリから画像や動画を選択するためのシステム UI を開く launchImageLibraryAsync() メソッドを提供します。このメソッドを呼び出す関数を作成し、前の章の primary ボタンに接続します。
src/app/(tabs)/index.tsx で expo-image-picker ライブラリをインポートし、Index コンポーネント内に pickImageAsync() 関数を作成します。
上記のコードが何をしているのか確認しましょう。
launchImageLibraryAsync()メソッドは、さまざまなオプションを指定するためのオブジェクトを受け取ります。このオブジェクトはImagePickerOptionsオブジェクトで、メソッドを呼び出すときに渡します。allowsEditingをtrueに設定すると、Android と iOS では選択時に画像をトリミングできます。Web では、トリミングの手順なしでブラウザのファイルピッカーが開きます。
3
ボタンを画像ピッカーに接続する
前の章の Button コンポーネントは、すでに onPress プロパティを受け取れます。src/app/(tabs)/index.tsx で、1 つ目の <Button> の onPress プロパティに pickImageAsync() 関数を渡します。
pickImageAsync() 関数は ImagePicker.launchImageLibraryAsync() を呼び出し、その結果を処理します。launchImageLibraryAsync() メソッドは、選択された画像に関する情報を含むオブジェクトを返します。
result オブジェクトとそのプロパティの例を次に示します。
{ "assets": [ { "assetId": null, "base64": null, "duration": null, "exif": null, "fileName": "ea574eaa-f332-44a7-85b7-99704c22b402.jpeg", "fileSize": 4513577, "height": 4570, "mimeType": "image/jpeg", "rotation": null, "type": "image", "uri": "file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252FStickerSmash-13f21121-fc9d-4ec6-bf89-bf7d6165eb69/ImagePicker/ea574eaa-f332-44a7-85b7-99704c22b402.jpeg", "width": 2854 } ], "canceled": false }
{ "assets": [ { "assetId": null, "base64": null, "duration": null, "exif": null, "fileName": null, "fileSize": 1117716, "height": 804, "mimeType": "image/jpeg", "pairedVideoAsset": null, "type": "image", "uri": "file:///Users/your-username/Library/Developer/CoreSimulator/Devices/5119422D-B277-4A92-A3A7-486CE7DAE180/data/Containers/Data/Application/31FB73D4-CBA3-4A39-B487-10D01CE6E8DD/Library/Caches/ImagePicker/DAA4F160-F5D7-41EC-B8CE-7AD0E52EA6BD.jpg", "width": 1205 } ], "canceled": false }
{ "assets": [ { "file": {}, "fileName": "test-photo.jpg", "fileSize": 104756, "height": 1600, "mimeType": "image/jpeg", "type": "image", "uri": "blob:http://localhost:8081/b139661f-8776-484e-a838-165e95a9a84c", "width": 1200 } ], "canceled": false }
4
選択した画像を使用する
result オブジェクトには assets 配列があり、その中に選択された画像の uri が含まれています。この値を画像ピッカーから取得して、選択された画像をアプリに表示します。
src/app/(tabs)/index.tsx ファイルを変更します。
- React の
useStateフックを使って、selectedImageという状態変数を宣言します。この状態変数は選択された画像の URI を保持するために使います。 pickImageAsync()関数を更新して、画像の URI をselectedImage状態変数に保存します。selectedImageをプロパティとしてImageViewerコンポーネントに渡します。
プレースホルダー画像の代わりに選択された画像を表示するために、selectedImage プロパティを ImageViewer コンポーネントに渡します。
- src/components/image-viewer.tsx ファイルを変更して、
selectedImageプロパティを受け取れるようにします。 - 画像のソースが長くなっているので、
imageSourceという別の変数に切り出します。 Imageコンポーネントのsourceプロパティの値としてimageSourceを渡します。
上記のスニペットでは、Image コンポーネントは条件演算子を使って画像のソースを読み込みます。選択された画像は、プレースホルダー画像のようなローカルアセットではなく、uri 文字列 です。
アプリの状態を確認してみましょう。
このチュートリアルのサンプルアプリで使用されている画像は Unsplash から取得しました。
まとめ
第 4 章:画像ピッカーを使用する
デバイスのメディアライブラリから画像を選択する機能の追加が完了しました。
次の章では、絵文字ピッカーのモーダルコンポーネントを作成する方法を学びます。