RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-04-02初級

Rork アプリにネイティブ共有機能を追加する — Share Sheet 実装ガイド

Rork アプリにネイティブ Share Sheet を実装する入門ガイド。テキスト・URL・画像のシェアから SNS 連携・ディープリンク連携まで、実際のコードで丁寧に解説します。

Rork515Share SheetソーシャルシェアReact Native209Expo149iOS108Android43アプリ開発77

アプリの成長において、ユーザーが「このアプリ、友達にも教えたい」と思った瞬間を逃さないことはとても重要です。iOS や Android に標準搭載されている Share Sheet(ネイティブ共有メニュー) を活用すると、ユーザーはワンタップでコンテンツを LINE・Twitter・メール・クリップボードなど任意のアプリへ共有できます。ここでは Rork アプリに Share Sheet を実装する方法を、基礎から応用まで順を追って解説します。

Share Sheet とは — なぜ実装すべきか

Share Sheet は iOS・Android が提供するシステムレベルの共有インターフェースです。アプリ側でどのサービスに対応するかを個別に実装する必要がなく、ユーザーの端末にインストールされているすべてのアプリへ一括で共有先を提供できます。

Share Sheet の導入がアプリの成長に寄与する主な理由は三つあります。口コミ拡散の自動化として、ユーザーがアプリ内コンテンツを外部に共有するたびに新規ユーザーへのタッチポイントが生まれます。ユーザーリテンションの向上として、共有した記録がユーザーに「また戻ってきたい」という動機を生みます。開発コストの最小化として、個別の SNS SDK を導入しなくても iOS・Android 双方の共有エコシステムに対応できます。

Rork(React Native / Expo ベース)では、expo-sharing または react-native-share の二択が代表的な実装方法です。それぞれの特徴を理解して適切な方を選びましょう。

expo-sharing と react-native-share の選び方

Rork アプリで Share Sheet を実装する際の選択肢を整理します。

expo-sharing(推奨・シンプルな用途向け)は Expo SDK に含まれる公式モジュールです。テキストや URL を Share Sheet で共有する基本機能に加え、ローカルファイルの共有にも対応しています。設定ファイルの変更が不要で、expo install だけで導入できるため、Rork アプリに最も馴染みやすい選択肢です。

react-native-share(高度なカスタマイズ向け)はより多くのオプションを提供するサードパーティライブラリです。特定のアプリだけを共有先として指定したり、ソーシャルメディア専用の API に直接ポストしたりといった高度なユースケースに対応しています。ただし、Expo の Managed Workflow で使うには expo-modules-core 経由のカスタム設定が必要になるため、導入難度は高めです。

テキスト・URL を Share Sheet でシェアする

React Native には Share という組み込み API があり、追加パッケージなしでテキストや URL を Share Sheet に送れます。まずはこの方法から始めましょう。

import { Share, TouchableOpacity, Text } from 'react-native';
 
// 記事やコンテンツのURLをシェアする例
const handleShare = async (title: string, url: string) => {
  try {
    const result = await Share.share({
      // iOS: message にURLを含める(title は別フィールド)
      // Android: title + message の組み合わせが表示される
      title: title,
      message: `${title}\n\n${url}`,
      url: url, // iOS のみ有効。AirDropやメールでリンクとして扱われる
    });
 
    if (result.action === Share.sharedAction) {
      // ユーザーが実際にシェアした
      if (result.activityType) {
        // iOS: どのアプリでシェアしたかが取得できる
        console.log('Shared via:', result.activityType);
      }
    } else if (result.action === Share.dismissedAction) {
      // ユーザーがシェアをキャンセルした
      console.log('Share dismissed');
    }
  } catch (error) {
    console.error('Share error:', error);
  }
};
 
// ボタンコンポーネント例
export const ShareButton = ({ articleTitle, articleUrl }: {
  articleTitle: string;
  articleUrl: string;
}) => (
  <TouchableOpacity onPress={() => handleShare(articleTitle, articleUrl)}>
    <Text>この記事をシェアする</Text>
  </TouchableOpacity>
);

Share.share() は非同期関数なので awaittry/catch を組み合わせて呼び出します。result.action を確認することで、ユーザーが実際にシェアしたか・キャンセルしたかを把握できるため、分析イベントのトリガーとしても活用できます。

画像ファイルを Share Sheet でシェアする

画像のシェアには expo-sharing を使います。端末のローカルに保存されたファイルパスを渡すことで、Share Sheet から任意のアプリへ画像を送れます。

まずパッケージをインストールします。

npx expo install expo-sharing expo-file-system

次に、リモート画像をダウンロードしてからシェアする実装例を示します。

import * as Sharing from 'expo-sharing';
import * as FileSystem from 'expo-file-system';
 
const shareImage = async (remoteUrl: string, filename: string) => {
  // Sharing が使えるかチェック(iPadOS などで制限がある場合がある)
  const isAvailable = await Sharing.isAvailableAsync();
  if (!isAvailable) {
    alert('お使いの端末では共有機能をご利用いただけません');
    return;
  }
 
  // リモート画像を一時ファイルにダウンロード
  const localUri = `${FileSystem.cacheDirectory}${filename}`;
  const downloadResult = await FileSystem.downloadAsync(remoteUrl, localUri);
 
  if (downloadResult.status !== 200) {
    alert('画像のダウンロードに失敗しました');
    return;
  }
 
  // Share Sheet を開く
  await Sharing.shareAsync(downloadResult.uri, {
    mimeType: 'image/jpeg',  // ファイルの種類に合わせて変更
    dialogTitle: 'この画像をシェアする',  // Android のみ表示されるタイトル
  });
};

FileSystem.cacheDirectory を使って一時ファイルとして保存することで、アプリのストレージ領域を圧迫しません。シェア完了後はキャッシュが自動的にクリーンアップされます。

よくあるエラーと対処法

Share Sheet の実装でつまずきやすい点をまとめます。

「Share.share() が何も表示されない(Android)」 は、Share Sheet のオプションに message が含まれていない場合に起こります。Android では message が必須フィールドのため、URL のみを渡した場合は動作しないことがあります。message: url のように明示的にメッセージを設定しましょう。

「expo-sharing で isAvailableAsync が false を返す」 は、主に iOS シミュレーターで発生します。実機テストでは問題なく動作するケースがほとんどですが、シミュレーターではファイル共有が制限されています。Rork Companion Mac App を使った実機テストを活用して確認することをおすすめします。

「シェアした URL が別アプリで正しく開かない」 は、ディープリンクの設定が不完全な場合に起きます。app.jsonscheme が設定されていないと、共有した URL からアプリが起動しません。Rork アプリでは expo-linking と組み合わせてディープリンクを設定しておく点が肝心です。

「画像シェア時にファイルが見つからないエラー」 は、FileSystem.downloadAsync の完了を待たずに Sharing.shareAsync を呼んでいることが原因です。必ず await を使って順番に実行してください。

応用:シェアイベントのトラッキング

ユーザーがどのコンテンツをどれだけシェアしているかを把握することは、アプリ改善の重要な指標になります。Share.share()result.action を利用して分析イベントを送信しましょう。

import { Share } from 'react-native';
 
const trackAndShare = async (contentId: string, contentTitle: string, url: string) => {
  const result = await Share.share({
    title: contentTitle,
    message: `${contentTitle}\n${url}`,
    url: url,
  });
 
  if (result.action === Share.sharedAction) {
    // シェア成功 — 分析サービスへイベント送信(例: Firebase Analytics)
    // analytics.logEvent('content_shared', {
    //   content_id: contentId,
    //   activity_type: result.activityType ?? 'unknown',
    // });
    console.log('✅ シェア成功:', contentId, result.activityType);
  }
};

シェアされたコンテンツの傾向を把握できると、人気コンテンツへの誘導や、シェアボタンを目立たせる UI 改善の判断材料になります。アプリのグロース戦略について体系的に学びたい方は、Rork アプリのグロース戦略 — ユーザー獲得からリテンションまでの実装パターン完全ガイドも参考にしてみてください。

全体を振り返って

Share Sheet の実装は、Rork アプリの口コミ拡散を自動化する最も手軽な手段のひとつです。まずは React Native 標準の Share API でテキスト・URL の共有から始め、必要に応じて expo-sharing で画像共有を追加していくアプローチが、開発コストを抑えながら効果的です。シェアイベントのトラッキングを組み合わせることで、ユーザーに「刺さる」コンテンツの傾向も見えてきます。

シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール2026-05-28
Rork アプリで iOS の BGTaskScheduler.submit が Error Code=1 で失敗するときの切り分け手順
Rork で作った iOS アプリで BGTaskScheduler.submit が Error Code=1 (Unavailable) を返してバックグラウンド更新が動かないときに、原因をひとつずつ潰していくための実用チェックリストです。
開発ツール2026-05-02
Rork で StatusBar の色・スタイルが反映されない時の対処法
Rork で生成したアプリの StatusBar が iOS と Android で意図通りに表示されない問題を、実装パターン別に切り分けて解決する手順をまとめました。
開発ツール2026-05-01
Rork で EAS Update を配信したのに反映されない — 原因を切り分ける5つの典型パターン
Rork で EAS Update を publish したのにアプリ側に反映されない、というのは慣れていてもうっかり詰まるトラブルです。よくある5つの原因と、ターミナルで5分以内に切り分ける手順を実例ベースで紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →