iOSショートカットとChatGPTアプリの連携によるJSONデータ処理の方法


## 概要

本記事では、iOSのショートカット機能を利用して、iPhoneにインストールされたChatGPTアプリと連携し、ChatGPTからの回答をJSON形式で適切に後処理する方法を詳しく解説します。
レスポンスをJSON形式にしたい場合、OpenAI が提供する ChatGPT にはレスポンスを JSON にする JSON モードがあります。しかし、ChatGPTアプリ自身にはJSONモードが存在しないため、プロンプト調整によってレスポンスをJSON形式に誘導する必要があります。


具体的な設定手順やサンプルコードを交えながら、実践的な実装方法を紹介します。

```mermaid
sequenceDiagram
    participant Shortcuts as iOSショートカット
    participant ChatGPT

    Shortcuts->>ChatGPT: プロンプト
    ChatGPT->>Shortcuts: JSONで回答
      Note over Shortcuts: JSONのキーを取り出し
    　Note over Shortcuts: JSONのキーを使って処理

```

## iOSショートカットとは

iOSショートカットは、iPhoneやiPad上で様々なタスクを自動化するためのツールです。ユーザーは「アクション」と呼ばれる個別のステップを組み合わせて、複雑な処理を一度に実行できるショートカットを作成できます。これにより、日常の作業を効率化したり、特定の操作をワンタップで実行することが可能になります。


## 今回作成したサンプル

```mermaid
sequenceDiagram
    participant Shortcuts as iOSショートカット
    participant ChatGPT

      Note over Shortcuts: 「誰について調べる？」
    Shortcuts->>ChatGPT: プロンプト
    ChatGPT->>Shortcuts: JSONで回答（年齢、概要）
      Note over Shortcuts: JSONのキー（年齢）を取り出し
    　Note over Shortcuts: JSONのキー（年齢）を使って処理

```

## 解決したい課題

iOSショートカットを利用してChatGPTから受信したJSONデータが、実装上の制約により、以下のようなコードブロック（'''json～'''）形式で返されてしまうことがあります。このままでは後続の処理においてJSONとして正しく認識されず、エラーが発生してしまいます。


```prompt

    ```json　　★ここの部分が不要
    {
      "ager": 77,
      "Description": "ドナルド・トランプは1946年6月14日生まれのアメリカ合衆国の実業家。"
    }
    ```　　★ここの部分が不要

```

```mermaid
sequenceDiagram
    participant Shortcuts as iOSショートカット
    participant ChatGPT

      Note over Shortcuts: 「誰について調べる？」
    Shortcuts->>ChatGPT: プロンプト
    ChatGPT->>Shortcuts: コードブロック形式のJSONで回答（年齢、概要）
      Note over Shortcuts: JSONのキー（年齢）を取り出し★ここでエラー！！
    　Note over Shortcuts: JSONのキー（年齢）を使って処理

```

<iframe width="560" height="315" src="https://www.youtube.com/embed/VvAAsDGcLiM?si=BR9PTzHiSXB8SeKW" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>



これを下記のようにコードブロックではない状態で帰ってくるようにプロンプトを調整したい
```json
    {
      "ager": 77,
      "Description": "ドナルド・トランプは1946年6月14日生まれのアメリカ合衆国の実業家。"
    }
```

## 試したプロンプト
JSON形式で正しくデータを取得するため、以下のようなプロンプトを設定しました：
・出力形式を明示的に指定する： 「JSON形式で提供してください。コードブロックを含まないでください。」

・具体的なフィールド名を示す：

その結果、取得したい形式でJSONを取得することができるようになりました。

```json  
＃出力形式
JSON形式で提供してください。json以外の情報は不要。
コードブロックも不要。

{
    “AnsN” : “99”,　//年齢
    “AnsT” : “ジョンは実業家”, //人物概要
}
```
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZJBfX5Z2OCc?si=P13jnzTKKOdIW4Qh" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## 留意点、デメリット

- **出力保証の不確実性**:　プロンプトによってJSON形式を指示したとしても、必ずしもその形式で返される保証はありません。時には余計な行が含まれたり、再びコードブロック形式になることがあります。実際にプロンプトを少し変えただけで形式が崩れてしまいました。もし確実にJSON形式でデータを取得したいのであれば、”ChatGPTアプリ”は使用せずに、APIを使用したほうが確実です。


## まとめ

iOSショートカットとインストールされたChatGPTアプリの連携によって、JSONデータを効率的に取得・後処理する方法を解説しました。技術的な限界を認識しつつ、プロンプト調整によって可能な範囲での制御を行うことで、日常のタスクを自動化し作業効率を向上させることができます。この記事を参考に、ぜひ自分自身のカスタマイズショートカットを作成し、iOSの可能性を最大限に引き出してください。

**参考リンク**:

- [ChatGPTに指定出力形式を与えるためのTips](https://khasegawa.hatenablog.com/entry/2023/03/23/073000)
 
- [Apple公式：ショートカットの使い方](https://support.apple.com/ja-jp/guide/shortcuts/welcome/ios)

- [Markdownでシーケンス図を書こう](https://qiita.com/run1000dori/items/90f91687cfe7ece50020)