目的
私が今回取り組んだのは、iOSの「ショートカット」アプリを使ってOpenAI(ChatGPT)のAPIと連携させることで、note記事の執筆から自動添削・加筆をまとめて行う仕組みを作ることだ。
記事の草稿を手軽に作成し、そのままChatGPTに内容を送って校正や加筆をしてもらい、最終的にはサムネイル作成やタグ付けも含めて効率的に投稿できるようにすることが大きなゴールだった。
特に、いちいちPCを立ち上げずにiPhoneでフルフローが完結すれば、執筆のハードルが下がるだろうと考え試行錯誤をした。
手段
この目的を果たすために、まずはOpenAIでAPIキーを取得した。
URLから下記のページ(引用欄は翻訳後の表示)に飛び、「Create an API key in the dashboard here」からAPIを取得する。
開発者クイックスタート
ページをコピー
最初の API リクエストを行う方法を学びます。
OpenAI API は、自然言語処理、画像生成、セマンティック検索、音声認識のための最先端の AIモデルへのシンプルなインターフェースを提供します。このガイドに従って、自然言語プロンプトに対する人間のような応答を生成する方法、セマンティック検索用のベクトル埋め込みを作成する方法、テキストの説明から画像を生成する方法を学習します。
APIキーを作成してエクスポートする
ここでダッシュボードで API キーを作成します。このキーはAPI に安全にアクセスするために使用します。キーは、コンピューター上の.zshrcファイルや別のテキスト ファイルなどの安全な場所に保存します。API キーを生成したら、ターミナルで環境変数としてエクスポートします。
macOS / Linuxウィンドウズ
PowerShell で環境変数をエクスポートする
1 setx OPENAI_API_KEY “your_api_key_here”
最初のAPIリクエストを行う
OpenAI API キーを環境変数としてエクスポートしたら、最初の API リクエストを行う準備が整いました。任意の HTTP クライアントでREST API を直接使用するか、以下に示すように公式 SDKのいずれかを使用することができます。
JavaScriptパイソンカール
Node.js、Deno、Bun などのサーバーサイド JavaScript 環境で OpenAI API を使用するには、TypeScript および JavaScript 用の公式 OpenAI SDK を使用できます。まずは、 npmまたはお好みのパッケージ マネージャーを使用して SDK をインストールしてください。
npmでOpenAI SDKをインストールする
1 npm install openai
OpenAI SDK がインストールされたら、 というファイルを作成しexample.mjs、次の例のいずれかをそのファイルにコピーします。
テキストを生成する画像を生成するベクトル埋め込みを作成する
プロンプトに対して人間のような応答を作成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import OpenAI from “openai”; const openai = new OpenAI(); const completion = await openai.chat.completions.create({ model: “gpt-4o-mini”, messages: [ { role: “system”, content: “You are a helpful assistant.” }, { role: “user”, content: “Write a haiku about recursion in programming.”, }, ], }); console.log(completion.choices[0].message);
(または Deno または Bun の同等のコマンド)を使用してコードを実行しますnode example.mjs。しばらくすると、API リクエストの出力が表示されます。
次にiOSのショートカットアプリで「URLの中身を取得(Get Contents of URL)」アクションを使い、OpenAIのチャット用エンドポイント(https://api.openai.com/v1/chat/completions)にPOSTリクエストを送る仕組みを構築していく。
【実演】ショートカットの構築
①ショートカットアプリを開き、右上の「+」から新規作成

②検索欄で「テキスト」と入力し、テキストを選択

③画面下の「アクションを検索」をタップ

④「URLの内容を取得」を選択

⑤テキストの下に追加できていれば自動で「テキストの内容を取得」に」変わっているはず。変わっていればおk。
⑥青い右矢印アイコンをタップし、「方法」の項目を「GET」に設定。

⑦アクションを検索から「URLの内容を取得」を追加。
⑧URLの部分(変数名)に「https://api.openai.com/v1/chat/completions」を入力
⑨方法を「POST」に選択
⑩ヘッダー (Headers)を下記のように入力
- Authorization : Bearer sk-xxxx… (※さっき作成したAPIキー)
- ・Content-Type : application/json
⑪本文 (Body)を下記の通り入力
- model : gpt-3.5-turbo

⇧もう一つ本文を追加するのだが、注意点は「テキスト」ではなく「配列」で設定しなければいけない。
「新規フィールドを追加」→「配列」を選択したらまずkeyに「messages」と入力。「0項目」をタップし、「新規フィールドを追加」

新規フィールドをテキストで二個追加したら
- role : system”
- content : あなたはプロのエディターです。ユーザーが入力した記事を自然に添削してください。
上記の通りに設定。

⑫関係ないらしいけど、念のためURLの種類を初期設定からURLに変更。

⑬下記の状態になればChatGPTの指示の通りに設定できたはずだ。

要約すると以下のようになる。
ヘッダーにはAuthorization: Bearer sk-xxxxのようにAPIキーを設定し、コンテンツタイプをapplication/jsonにすることで、JSON形式のやり取りが可能になる。
そして「本文(Body)」の部分では、modelやmessagesといったキーを設定し、roleやcontentを入れ子構造で組み立てていく。たとえばrole: systemの要素には「あなたはプロのエディターです…」と書いてChatGPTに振る舞いを指示し、role: userの要素には実際の下書きテキストを埋め込む。これにより、ユーザーの書いた文章をChatGPTが受け取り、自然な文体に添削したり、1000文字未満なら加筆してくれたりする流れを作る。
うまくいけば、最終的に、ChatGPTが返してきた文章を「辞書として取得」アクションで解析し、choices[0].message.contentの部分だけを取り出すと、添削・加筆後のテキストを簡単に確認できるようになりました。これであれば、記事の元となる草稿をサッと書いて実行するだけで、文法ミスや表現のリファインを自動で行えるはず。
結果
結果的に、今回の試みはエラーが頻発し、何度やっても意図した動作を実現することができなかった。

失敗原因
「URL未指定」のエラー
最も大きな問題は、「URLの中身を取得」アクションが正しいURLを受け取れていないことだ。ショートカットの自動接続機能により、「テキスト」アクションの出力がそのまま「URLの中身を取得」のURLとして渡されてしまい、記事の内容がURLとして解釈されてエラーが発生した。
何度URLを打ち直しても治らない。本日分のChatGPT Plusのo1を使い果たしたが結局完成しなかった。どうでもいいけど、うまい商売だなと思った。けどさすがに一個人で3万円のプランに入会する気にはなれないので、また明日格闘しようと思う。
もし、エラーの解消方法を知っている方がいたら教えていただけると助かります。
コメント