Macで複数サイトのURLを一括コピーするショートカットの作成方法

Mac

image

複数のURLを誰かに共有したい時、皆さんどうしていますか?

ブラウザからURLをコピーして、ペーストして、またブラウザに戻ってコピーして、ペーストして…と何度も同じ作業を繰り返すことになるのではないでしょうか。

共有したいURLが2、3個くらいであれば、これでも良いかもしれません。

しかし、10個以上ある場合はどうでしょう。なかなか大変な作業になってきますよね。

今回はMacのショートカットアプリを使って、ブラウザで開いてるタブのURLを一括でクリップボードにコピーするショートカットの作成方法をご紹介します。

この記事がおすすめな人
  • Macユーザーで、特に仕事でURLを扱う機会が多い人
  • 手作業を減らして楽をしたい人

作成方法

今回は該当のブラウザのアクティブウィンドウ(最前面のウィンドウ)の全てのタブをURLを取得し、クリップボードにコピーするショートカットを作成します。

現在スクリプトを実行するアクション以外では上記を実現できるものがないので、今回はJavaScript for Automationを利用したアクションでスクリプトを実装していきましょう。

JavaScript for Automationとは

macOSのアプリケーションのさまざまな操作を自動化できる機能で、JavaScriptと同じ記法でプログラムを書くことができます。略してJXAと呼ばれることもあります。

完成イメージ

STEP

新規ショートカットの作成

ショートカットアプリを開いて、上部メニューの右側の+ボタンをクリックして新規ショートカットを作成します。

ショートカット名には適宜わかりやすい名前をつけましょう。

STEP

JXAでアクティブウィンドウの全タブのURLを取得する

  1. アクションの検索窓に「jxa」と入力し、「JavaScript for Automationを実行」をワークフローの最上部に追加します。
  2. 追加したアクションの入力欄に以下のコードを貼り付ける。
function run() {
    var chrome = Application("Google Chrome");
    var win = chrome.windows[0];
    var urls = win.tabs().map(tab => tab.url());
    return urls.join("\n");
}

このスクリプトでは例としてGoogle Chromeで開かれているタブを取得しています。
ご自身の環境に合わせて"Google Chrome"の部分をURLを取得したいブラウザに変更してください。

STEP

スクリプトの結果をクリップボードにコピーする

  • アクション検索窓に「コピー」と入力し、検索結果から「クリップボードにコピー」をワークフローに追加

この時点で「JavaScriptの結果をクリップボードにコピー」となっていればOKです。もし、そうなっていない場合は青文字部分を右クリックして「マジック変数を選択」から「JavaScriptの結果」を選択しましょう。

STEP

完了通知を設定する

  1. アクション検索欄に「通知」と入力して、表示された検索結果から「通知を表示」を選択して追加
  2. ワークフロー完了後に表示する任意の通知メッセージを入力

以上の設定で、アクティブウィンドウの全てのタブをURLを取得し、クリップボードにコピーするショートカットの作成が完了しました。

試しにGoogle、Yahoo、Bingのページを最前面のウィンドウで開き、ショートカットを実行してみましょう。

以下の内容がクリップボードにコピーされているはずです。

https://www.google.com/
https://www.yahoo.co.jp/
https://www.bing.com/?cc=jp

キーボードショートカットを設定することも可能

  • サイドメニューのショートカットの詳細設定から「キーボードショートカットを追加」を設定することでキーボードコマンドから実行することも可能です。

スクリプトの詳細

function run() {
    var chrome = Application("Google Chrome");
    var win = chrome.windows[0];
    var urls = win.tabs().map(tab => tab.url());
    return urls.join("\n");
}

1. 「function run() {}」

まずJXAではfunction run() {}の中にプログラムを書くことで、さまざまなアプリケーションの操作を実行することができます。

2. 「Application(“Google Chrome”)」

Google Chromeのアプリケーションを呼び出しています。これにより、Chromeのウィンドウやタブの情報を操作できるようになります。

3. 「var win = chrome.windows[0];」

最初の(アクティブ)ウィンドウを取得しています。

4. 「var urls = win.tabs().map(tab => tab.url());」

.tabs()はGoogle Chromeの特定のウィンドウ内にあるすべてのタブを取得するメソッド です。こちらで取得した全てのタブを.map(tab => tab.url())による繰り返し処理で、それぞれのタブから.url()でURLを抜き出しています。

5. 「return urls.join(“\n”);」

最後に抜き出したURLの配列を、改行コードの \nで連結して、関数の戻り値、つまりこのスクリプトの実行結果として返しています。

おまけ – アレンジレシピ

今回作成したショートカットを元に作成できるアレンジレシピをいくつかご紹介します。

1. タイトルを含めたURLリスト

JavaScript for Automationでは取得したタブ情報から.title()でWEBページのタイトルにアクセスできます。こちらを使うことでクリップボードへコピーするURLリストにタイトルを含めることもできます。

JavaScript for Automationの内容

function run() {
    var chrome = Application("Google Chrome");
    var win = chrome.windows[0];
    var tabs = win.tabs();
    var results = tabs.map(tab => tab.title() + "\n" + tab.url());

    return results.join("\n");
}

クリップボードにコピーされる内容

Google
https://www.google.com/
Yahoo! JAPAN
https://www.yahoo.co.jp/
検索 - Microsoft Bing
https://www.bing.com/?cc=jp

2. URLを取得するブラウザを選択できるようにする

最初にブラウザの入力を要求されるので、SafariGoogle Chromeなどの正式なアプリケーション名(FinderやLaunchpadで表示されている名前)を入力する必要があります。頭文字は小文字のままでもOKです。

このショートカットで設定しているスクリプトは、最初に設定した変数を引数として使うために「シェルスクリプトを実行」アクションを使用し、シェルスクリプトからJavaScript for Automationを利用する方法を取っています。

シェルスクリプトの内容

osascript -l JavaScript <<EOF
var chrome = Application("$1");
var win = chrome.windows[0];
var urls = win.tabs().map(function(tab) {
    return tab.url();
});
urls.join("\\n");
EOF

まとめ

いかがでしたでしょうか。

共有するURLが多いとその都度コピペしていくは結構面倒な作業になります。

単純な繰り返し作業はショートカットを作成しておくことで、時短につながるので、是非とも活用してみてください。