🔤

Macショートカット + OpenAI APIで「テキスト選択 → 英訳」を実行する

に公開

はじめに

オフショア開発メンバーへのチャット返信や、米国企業への問い合わせメールを書くたびに 「日本語 → 英語」 の翻訳を繰り返すのは面倒です。
macOS の ショートカット AppOpenAI API を組み合わせれば、
⌘C⌘⌥Eなどのキーボード操作で、選択中の日本語を即座に英訳し、そのまま置換まで行えます。
DeepLのappでも同じようなことができますが、 gpt の翻訳のほうが精度が高いので、自作しました。

本記事では、下記シェルスクリプトを Shortcuts から呼び出す方法と、ハマりどころを解説します。

export OPENAI_API_KEY=<APIキー>
export LANG=ja_JP.UTF-8        # ★必須ポイント
pbpaste | \
/opt/homebrew/bin/jq -Rs --arg inst 'Translate the input to English and return only the translated text.' \
  '{model:"gpt-4o-mini", instructions:$inst, input:., temperature:0}' | \
curl -sS https://api.openai.com/v1/responses \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer ${OPENAI_API_KEY}" \
     -d @- | \
/opt/homebrew/bin/jq -r '.output[0].content[0].text'

想定ユースケース

シーン 活用例
オフショア開発チームへの素早いフィードバック VS Code や GitHub 上で日本語コメントを英語に変換
海外 SaaS サポートへの問い合わせ返信 Mail や web form で下書き中の日本語文を英語に変換
Slack/Teams での日英混在チャット 投稿時に日本語で入力して英語に変換

手順

1. jqのインストール (未インストールの場合)

brew install jq     # 未インストールなら

Apple シリコン環境ではデフォルトで /opt/homebrew/bin/jq になります。
which jq でパスを確認し、スクリプトにフルパスで書き込んでください。

2. ショートカット App で「クイックアクション」を新規作成

  1. ショートカット App+ 新規ショートカット を追加
  2. 右側ペインのアクション検索欄で「シェルスクリプトを実行」を追加し、上記スクリプトを貼り付け

※ OpenAI の API key は自身のものに置き換えてください

3. スクリプト中のポイント

解説
export LANG=ja_JP.UTF-8 Shortcuts から実行される zsh は LANG が日本向けになっていない。これが無いと日本語が文字化けして API に渡りません。
/opt/homebrew/bin/jq Shortcuts の zsh は PATH がほぼ素の状態。jqコマンドだけで呼ぶと jq: command not found になるので、フルパスで指定します。

4. キーボードショートカットの割り当て

右側ペイン上部の i ボタン → キーボードショートカットを追加⌘⌥Eなどの好きなショートカットを割り当てます。

5. 「出力を提供」を ON

右側ペイン上部の i ボタン → 出力を提供 を有効化すると
翻訳後のテキストが そのまま選択範囲を置き換えて くれます。

完成

以下の画像のように設定できればOKです。

使ってみる

  1. 任意アプリで日本語を選択して ⌘C でコピー
  2. ⌘⌥E でショートカットを起動
  3. 数秒後、選択範囲が英語に置き換わる

⌘C → ⌘⌥E もまとめたい場合

筆者は選択範囲の置換を1コマンドでやりたかったので、 betterTouchTool で ^⌘E に割り当てました。
未検証ですが Karabiner-Elements でも同じようなことができそうです。


応用: 英語の文字列を翻訳して表示する

プロンプトと出力先を変更すれば、同じように英語の文字列を日本語に翻訳して表示させることも可能です。


まとめ

ちょっとした翻訳タスクでも、手元でコピー → ブラウザ → ペースト … を繰り返すのは面倒です。
ショートカット App と OpenAI API を組み合わせるだけで、
「選択 → 翻訳 → 置換」 の 1 アクション化が可能になります。
ぜひ日々のコミュニケーション効率化に活用してください。

Discussion