wheatandcatの開発ブログ

技術系記事を投稿してます

iOSの共有シートからショートカット経由で直接APIを実行させる方法の紹介

概要

Claude Code の登場以降、自分専用の作業スクリプトや小さなアプリを作る機会が増えた。
スマホのブラウザで開いている URL を直接保存・参照したい場面があるが、iPhone から他サービスへ情報を渡すには Share ExtensionApp Extension の実装が必要になる。

Share Extension App Extension

どちらも専用アプリの実装が前提で実装コストがかかる。代替として ショートカット アプリで同等のことを実現できたので手順の紹介をします。

iOSのショートカットアプリ

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料
apps.apple.com

Apple 公式の自動化アプリ。アクションを組み合わせてアプリ操作を自動化でき、「オートメーション」でボタン一つに束ねることもできる。

やりたいこと

  • 共有シートから直接 API を実行
  • 共有シートで開いている URL をクエリパラメータとしてサーバーへ渡す

事前準備

以下は検証用の最小コード(Node.js)。受け取ったパラメータをログ出力する。

import functions from "@google-cloud/functions-framework";

/**
 * iOS Shortcut用のHTTP関数
 * @param {Object} req - Express request object
 * @param {Object} res - Express response object
 */
functions.http("processRequest", (req, res) => {
  // CORS設定
  res.set("Access-Control-Allow-Origin", "*");
  res.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
  res.set("Access-Control-Allow-Headers", "Content-Type");

  if (req.method === "OPTIONS") {
    res.status(204).send("");
    return;
  }

  try {
    let url;

    if (req.method === "GET") {
      url = req.query.url;
    } else if (req.method === "POST") {
      url = req.body.url;
    } else {
      res.status(405).json({ error: "Method not allowed" });
      return;
    }

    console.log("Request parameters received:");
    console.log(`URL: ${url}`);
    console.log(`Method: ${req.method}`);
    console.log(`User-Agent: ${req.headers["user-agent"]}`);
    console.log(`Timestamp: ${new Date().toISOString()}`);

    if (!url) {
      console.log("Error: Missing required parameters");
      res.status(400).json({
        error: "Missing required parameters",
        required: ["url"],
      });
      return;
    }

    res.status(200).json({
      success: true,
      message: "Request processed successfully",
      receivedData: { url },
      timestamp: new Date().toISOString(),
    });
  } catch (error) {
    console.error("Error processing request:", error);
    res.status(500).json({
      error: "Internal server error",
      message: error.message,
    });
  }
});

動作確認コマンド例。

curl --location 'https://***.cloudfunctions.net/processRequest?url=https%3A%2F%2Ftest.com'

ショートカットの作成

iPhone のショートカットアプリから右上の「+」で新規作成。
※共有シートに出す設定は iPhone からのみ可能(Mac では設定不可)。

名称を共有シートのテストにして保存。

ホームに戻り、作成したショートカットを長押しして 詳細 を開く。

共有シートに表示 を ON にして保存。

以降、共有シートから入力を受け取れるようになる。

ここからは Mac のショートカットアプリでも編集可能。以下のアクションを順に追加。

  1. 入力からURLを取得

  2. URLエンコード(GET のクエリに乗せるためエンコード)

  3. URL(Cloud Functions のエンドポイントを指定し、クエリ url= に「URLエンコード済みのテキスト」を割り当て)

  4. URLの内容を取得(メソッドを GET に設定)

セットアップ完了後、Safari 等で任意のページを開き共有シートを表示。

作成した 共有シートのテスト をタップすると API が実行され、サーバーログに共有元の URL が記録される。

まとめ

専用の Share/App Extension を作らずに、ショートカットだけで共有シート → API 実行を実現 ができる。セキュリティ担保は難しいが、自分専用ツール用途に割り切る前提なら結構便利に使える。