もうコピペなんてしない。独自ショートカット作成でもっともっと便利に【Mac版ChatGPTアプリ】

# 自己紹介
データサイエンティストを目指して日々勉強している、慶應義塾大学大学院理工学研究科1年生（2024.05.01時点）
取得資格、コンペ優勝経験など、リアルタイムの情報は👇👇👇をみてね

X: <a href='https://twitter.com/A7_data'>@A7_data</a>←普段はXで活動しています。ありがたいことに、フォロワーは7500人を超えました😌
プロフィールページ👇👇👇

https://mohki7.notion.site/Mototsugu-Oki-c478f842c4de48f394e2e24b58e206bb

X👇👇👇

https://twitter.com/A7_data

# この記事でわかること
・Mac版ChatGPTアプリのインストール方法
・独自ショートカットキーの作り方
・僕が作ったショートカットたち👇👇👇（一部）
・文字選択＋ショートカット→事前設定したプロンプトで要約開始
・論文の文章選択＋ショートカット→事前設定したプロンプトで要約開始
・コードの選択＋ショートカット→事前設定したプロンプトでエラー修正開始
・ショートカット→スクショした画像についてそのまま会話開始
・文字選択＋ショートカット→現在のトークの入力部分にコピペ

使ったコード・プロンプトはコピペできるようにしておきます


# ChatGPTのMac版アプリが出た
2024年5月14日のOpenAIの発表会で新モデル「GPT-4o」とMacOSで動くChatGPTデスクトップアプリが発表されました

https://x.com/OpenAI/status/1790072070128177303

このアプリの真価は、「GPT-4o」モデルの画面認識機能（パソコンの画面を認識しながら会話できる）が出てからでしょうが、僕はすでに恩恵を受けています。

なぜならアプリになったことでショートカットキーを作成できるようになり、どの画面にいても一瞬で呼び出せるようになったから。

詳しく解説します。

## インストール方法
アプリはChatGPTを使っていると案内が表示され、インストールが可能です

https://x.com/A7_data/status/1790186685860651338

※現在はブラウザ版ChatGPTで、右上にある自分のアイコンをクリックするとこのような画面が出てくるので、ここからダウンロードが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/59171310-cafe-1ab5-e4b8-e70a14e33017.png)

ただ、インストールできたとしても<b>「Appleシリコン Macであること（M1とかM2などのMシリーズ）、OSはSonoma以上」</b>が条件になります。

ていうか、いまだにAppleシリコンじゃないMacを使ってる方、マジで買い替えた方が良いです。AppleシリコンMac、インテルチップのMacより遥かに良いです。買い換えればわかります。

https://qiita.com/mohki7/items/39c89c25ca96f75231f6

## 公式で設定されているショートカット
デフォルトでChatGPTアプリに設定されているショートカットは、MacのLauncherのようにChatGPTを呼び出せる、「⌘Space」のみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/5a367018-4094-2d29-36df-a359aab5eee4.png)

これでもいつでもどこでも簡単に呼び出せるのですが、まだまだ便利にできます。

特に画面のスクショをすぐに撮って会話できる機能もついてますが、もっと便利にできます。

これだと「⌘Space」→「クリップマークをクリック」→「スクリーンショットを撮るを選択」の三段階です。

僕のショートカットを使えば、「⌥Shift3」だけでOKにできます。

## 使ってみた所感
デスクトップアプリが出てからはアプリばかり使っていましたが、正直「別にWeb版でいいな。。。」と感じました。

このアプリの真価はGPT-4oの機能が全て解放されてからなので仕方ありませんが。。

ただ、僕は以前から使っていたアプリと組み合わせればもっとパワーアップさせられるということに気がつきました。

# 独自ショートカット作っちゃお
アプリになったということが最大のポイントで、アプリになったということはあのアプリの出番です。

## Better Touch Tools
Better Touch Toolsというアプリ、Macの作業効率化アプリとしてとても有名ですが、おすすめです。僕もMacを新しくした2年前くらいからずっと使っていますが、とても便利。

https://folivora.ai/

https://note.com/yriica/n/n9d38baeaed4a

簡単にいうと、さまざまなショートカットを作れるアプリです。キーボードだけではなく、マウスやトラックパッドでもいけます。
例えば、トラックパッドで5本指でつまむようにするとフルスクリーンにしたり、左上をダブルタップでコピーしたり。

このアプリの強みは、キーボードショートカットとして用意されていないことでさえもショートカットにできること。人によってはワンクリックで仕事のセットアップを全て整えられるようにしてることも。

今回はこれを使ってChatGPTアプリをもっと便利にします。

https://www.youtube.com/watch?v=vNQioBiBHR8

興味がある人は色々調べてみてね。

ちなみに僕のイチオシ機能は、「⌘を押しながらカーソル移動」で、カーソルがウィンドウのどこにいてもそのウィンドウを移動できること、⌘⌥で、カーソルがどこにいてもウィンドウの拡大・縮小ができること、そして、過去のコピペ機能が保存されていつでもまた使える機能、です。

# 作ったショートカット
最初に、ショートカットの作り方を解説します。以下のセクションごとに、使用するApple Scriptを貼り付けておくので、作りたいショートカットを選んでコピペしてください。

## ショートカットの作り方
まず、Better Touch Toolsを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/d79f84d0-fc07-4374-b41b-b84a1856745d.png)

新しいショートカットを作るには画面下部の＋ボタンを押します
※どのアプリでも動作させるようにするには、左のタブバーで「すベてのアプリ」を選択している必要があります。
逆に指定のアプリのみで実行したい場合は左下の＋ボタンからアプリを選択してアプリ専用のショートカットキーを作成します。

ここで、作成したいショートカットを打ち込みます。画面右上の白い部分を選択し、そのままショートカットキーを押せば良いです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/b3aa9bd9-0e78-b479-45ff-8adcc5c7a2bc.png)


画面中央？の「選択したトリガーに最初の操作を割り当てる」の下の＋ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/450fd56e-9411-881f-828a-7da76b02cbe5.png)

するとこうなると思うので、検索バーに「Apple」と入力すると出てくる「Apple Scriptを実行する（ブロック）を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/8168116c-030b-a267-dc42-355816881970.png)

これは、指定されたショートカットキーが押されるとApple Scriptに書いた処理が実行される仕組みです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/c6cbddce-a4d9-ecb3-36d3-f66d0a1b6b46.png)

あとはこの白い部分にコードを書くだけです。

## 文字選択→要約開始
文字を選択し、「⌘Shift + G」で、事前に指定したプロンプトとともにChatGPTアプリに貼り付け、要約をしてもらえます。

プロンプトは「# 指示書\nあなたは一流の要約家です。\n要約して欲しい文章を送信するので、要約をしてください。\n\n# 要約対象の文章」と簡単にしています。

ここは自分なりにカスタマイズしてみてください。
```
-- 選択したテキストを取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 0.5 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_text to the clipboard

-- ChatGPTのMacアプリを開く
tell application "ChatGPT"
    activate
end tell

delay 1 -- アプリがアクティブになるのを待つ

-- 新しい会話を開始（これはChatGPTアプリの具体的な操作に依存します。以下は仮の例です。）
tell application "System Events"
    -- 新しい会話ボタンを押す (具体的なキー操作やマウスクリックが必要になる場合があります)
    -- 例えば、Cmd + N で新しいウィンドウを開く操作
    keystroke "n" using {command down}
    delay 1 -- 新しい会話が開始されるのを待つ
end tell

-- 指示書と選択したテキストをフォーマット
set instruction to "# 指示書\nあなたは一流の要約家です。\n要約して欲しい文章を送信するので、要約をしてください。\n\n# 要約対象の文章\n" & selected_text

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to instruction

-- テキストをペースト
tell application "System Events"
    keystroke "v" using {command down}
    delay 0.5 -- ペースト処理を待つ
    keystroke return
end tell
```
Gは「GPTのG」です。僕はArcというブラウザを使ってますが、ArcのショートカットキーとかぶってしまうのでGにしました。

この処理では、「⌘+Cを押していることにする」ということをしているので、このショートカットが起動しているときは実質「⌘Shift+G+C」が押されていることになり、「⌘Shift+C」と混同してしまいます。

このようなことが起きないようにショートカットは調整する必要があります。

## 文字選択→ChatGPTランチャー貼り付け
場合によっては要約以外のタスクもあるでしょう。その時は「⌘G」で選択した文字をChatGPTのランチャーに貼り付けるだけにします。

貼り付けたあと、プロンプトを書いて特定のタスクを実行しましょう。

```
-- 選択したテキストを取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 0.5 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_text to the clipboard

-- 文章を「」でくくる
set formatted_text to "「" & selected_text & "」"

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to formatted_text

-- ChatGPTのランチャーを開く
tell application "System Events"
    keystroke space using {command down}
    delay 1 -- ランチャーが開くのを待つ
end tell

-- クリップボードの内容をランチャーにペースト
tell application "System Events"
    keystroke "v" using {command down}
end tell
```

## コード選択→コードの説明（＋docstrings）を作成
プログラミングをしていると、コードを読む機会がたくさんあると思います。その時に全て読んでいては疲れてしまうので、GPTに説明してもらいたいものです。

「⌘Shift + M」で選択部分のコードの説明をします。docstringsの作成もしてくれます。

```
-- 選択したコードを取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 0.5 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_code to the clipboard

-- ChatGPTのMacアプリを開く
tell application "ChatGPT"
    activate
end tell

delay 1 -- アプリがアクティブになるのを待つ

-- 新しい会話を開始（具体的な操作に依存します。以下は仮の例です。）
tell application "System Events"
    -- 新しい会話ボタンを押す (具体的なキー操作やマウスクリックが必要になる場合があります)
    -- 例えば、Cmd + N で新しいウィンドウを開く操作
    keystroke "n" using {command down}
    delay 1 -- 新しい会話が開始されるのを待つ
end tell

-- 指示書と選択したコードをフォーマット
set instruction to "# 指示書\nあなたは一流のプログラマーです。以下にプログラムを貼り付けるので、何をしているか、マークダウン方式で説明してください。\nただ、以下の点に注意してください。\n・関数が渡された場合、中身の説明のマークダウンと、docstringsを生成してください。\n・クラスが渡された場合、そのクラスのdocstringsと、その中の各メソッドのdocstringsを生成してください。また、全体の処理の流れも教えてください。\n・関数単位でもクラス単位でもない場合、つまりただコードの一部が渡された場合、そのコードの処理内容を教えてください。わかりやすい具体例とともに教えるようにしてください。\n\n# プログラム\n" & selected_code

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to instruction

-- テキストをペースト
tell application "System Events"
    keystroke "v" using {command down}
    delay 0.5 -- ペースト処理を待つ
    keystroke return
end tell
```
これもプロンプトを自分で調整してみてください。

## コード選択→エラー修正開始
これも同様、エラー修正もいちいちエラーコードをコピペして「エラーが出ています。修正してください」はめんどくさいですよね。

```
-- 選択したコードを取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 1 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_code to the clipboard

-- ChatGPTのMacアプリを開く
tell application "ChatGPT"
    activate
end tell

delay 1 -- アプリがアクティブになるのを待つ

-- 新しい会話を開始（具体的な操作に依存します。以下は仮の例です。）
tell application "System Events"
    -- 新しい会話ボタンを押す (具体的なキー操作やマウスクリックが必要になる場合があります)
    -- 例えば、Cmd + N で新しいウィンドウを開く操作
    keystroke "n" using {command down}
    delay 1 -- 新しい会話が開始されるのを待つ
end tell

-- 指示書と選択したコードをフォーマット
set instruction to "# 指示書\nあなたは一流のプログラマーです。以下にエラーが発生しているプログラムのコードを送信するので、エラーを修正してください。\n\n# プログラム\n" & selected_code

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to instruction

-- テキストをペースト
tell application "System Events"
    keystroke "v" using {command down}
    delay 0.5 -- ペースト処理を待つ
    keystroke return
end tell
```

## 論文の文章選択→わかりやすく要約開始
僕は論文もGPTと読みます。（Claudeの方が多いけど）
GPTと読むときの一番のメリットは、その論文の前提知識はGPTが持っているので、聞けること。

論文を読んでると「ん？どゆこと？」ってなることがあるので、そういう時に使います。

```
-- 選択した文章を取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 0.5 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_text to the clipboard

-- ChatGPTのMacアプリを開く
tell application "ChatGPT"
    activate
end tell

delay 1 -- アプリがアクティブになるのを待つ

-- 新しい会話を開始（具体的な操作に依存します。以下は仮の例です。）
tell application "System Events"
    -- 新しい会話ボタンを押す (具体的なキー操作やマウスクリックが必要になる場合があります)
    -- 例えば、Cmd + N で新しいウィンドウを開く操作
    keystroke "n" using {command down}
    delay 1 -- 新しい会話が開始されるのを待つ
end tell

-- 指示書と選択した文章をフォーマット
set instruction to "# 指示書\nあなたは深層学習・機械学習・AI・統計・データサイエンスの世界的な教授です。\nこれから、論文の一部を渡すので、のちに設定する想定読者にとってわかりやすく解説してください。\n\n# 想定読者\n私はデータサイエンスを学んでいる大学生で、深層学習や機械学習、AIや統計の基礎レベルは理解していますが、専門的な分野にはあまり詳しくありません。\n\n# 論文の文章\n" & selected_text

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to instruction

-- テキストをペースト
tell application "System Events"
    keystroke "v" using {command down}
    delay 0.5 -- ペースト処理を待つ
    keystroke return
end tell
```
論文を読むときのプロンプトはまた今度解説します。

## スクショ撮ったらそのスクショでトーク開始
部分スクショも全体スクショも作りました。
部分スクショは特によく使います。

普通なら「⌘Shift + 4」で部分スクショして、それをクリックしてコピーして、ChatGPTのアプリを開いてペーストする、という作業が必要で、さらにスクショはデスクトップに残ってしまいます。全然スマートじゃない。

僕は「⌥Shift + 4」で部分スクショしたらそのままChatGPTアプリに貼り付けが完了するようにしました。スクショも残りません。

```
-- 選択部分のスクリーンショットを撮り、直接クリップボードに保存
do shell script "screencapture -i -c"

-- ChatGPTのランチャーを開く
tell application "System Events"
    keystroke space using {command down}
    delay 1 -- ランチャーが開くのを待つ
end tell

-- クリップボードのスクリーンショットをランチャーにペースト
tell application "System Events"
    keystroke "v" using {command down}
end tell
```

全画面バージョンも置いておきます。

```
-- 全画面のスクリーンショットを撮り、直接クリップボードに保存
do shell script "screencapture -c"

-- ChatGPTのランチャーを開く
tell application "System Events"
    keystroke space using {command down}
    delay 1 -- ランチャーが開くのを待つ
end tell

-- クリップボードのスクリーンショットをランチャーにペースト
tell application "System Events"
    keystroke "v" using {command down}
end tell
```
正直これがいちばん便利ですね。

## 選択部分をChatGPTの今のトークに貼りつけ
さて、今までのショートカットを作った方はわかったかもしれませんが、全て、新規の会話に貼り付けられてしまいます。これでは、ChatGPTの強みである「会話」の良さが活かせません。

ということで、選択部分をChatGPTで今開いているトークに貼り付けるショートカットも作成しました。
これがあれば、例えば先ほどの要約ショートカットを使って要約したあと、別の部分に対してもこのショートカットを使うことでその続きとして会話ができます。

```
-- 選択したテキストを取得
tell application "System Events"
    keystroke "c" using {command down}
    delay 0.5 -- コピー処理を待つ
end tell

-- クリップボードの内容を取得
set selected_text to the clipboard

-- 文章を「」でくくる
set formatted_text to "「" & selected_text & "」"

-- フォーマットされたテキストをクリップボードに設定
set the clipboard to formatted_text

-- ChatGPTのMacアプリを開く
tell application "ChatGPT"
    activate
end tell

delay 1 -- アプリがアクティブになるのを待つ

-- クリップボードの内容をトーク部分にペースト
tell application "System Events"
    keystroke "v" using {command down}
end tell
```

# ショートカットの作り方
もちろんGPT先生です。

今回使うコードも全てGPT-4oに作ってもらいました。

何か自分独自のショートカットを作りたい人はぜひGPTに聞いてみてください。簡単にできます。
やりたいことを素直にGPTに伝えるだけでコードが出てくるから、それをコピペするだけです。

# 最後に
いかがでしたか？自分好みのショートカットでもっとGPTを便利にできましたか？

X(Twitter)では日々データサイエンスやAIに関する勉強記録・情報発信をしています。フォロワーは7500人を超えました。

https://twitter.com/A7_data

少しでも刺激になるようなことを発信できたらいいなと思っているので、気になった方は見てみてください🔥

Kaggle奮闘記もどんどん発信していきます。

では👋