こんにちは!今日は初めてChrome拡張機能を作ってみたので、その記録を残しておきます。
きっかけ
普段、ブログを書いたりメモを取ったりするときに、「このページのタイトルとURL、いちいちコピペするの面倒だな…」って思うことありませんか?
タイトルバーをドラッグして選択してコピーして、次にアドレスバーをクリックして全選択してコピーして…って、地味に手間なんですよね。
それで「ワンクリックでタイトルとURLを両方コピーできたら便利じゃん!」と思って、Chrome拡張機能を作ってみることにしました。
実は拡張機能って意外と簡単に作れる
調べてみたら、Chrome拡張機能って思ったより簡単に作れるんです。基本的なHTMLとJavaScriptが書ければ大丈夫。
今回作った拡張機能は、たった3つのファイルだけで完成しました。
必要なもの
- テキストエディタ(メモ帳でもVS Codeでも何でもOK)
- Google Chrome
- 10分くらいの時間
以上です。本当にこれだけ。
作り方
ステップ1:フォルダを作る
まず、適当な場所に新しいフォルダを作ります。名前は何でもいいですが、私は「page-copy-extension」にしました。
ステップ2:必要なファイルを作る
このフォルダの中に、3つのファイルを作ります。
1. manifest.json
これは拡張機能の設定ファイルです。「この拡張機能はこういうものですよ」っていう情報を書きます。
{
"manifest_version": 3,
"name": "ページ情報コピー",
"version": "1.0",
"description": "現在のページのタイトルとURLをコピーします",
"action": {
"default_popup": "popup.html",
"default_title": "ページ情報をコピー"
},
"permissions": [
"activeTab",
"clipboardWrite"
]
}
ポイントはpermissionsのところ。「現在開いているタブの情報を読み取る権限」と「クリップボードに書き込む権限」を要求しています。
2. popup.html
拡張機能のボタンをクリックしたときに表示される画面です。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<style>
body {
width: 300px;
padding: 15px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
h3 {
margin: 0 0 10px 0;
color: #333;
}
.info {
background: #f5f5f5;
padding: 10px;
border-radius: 5px;
margin-bottom: 10px;
word-wrap: break-word;
}
.label {
font-weight: bold;
color: #666;
font-size: 12px;
}
.value {
margin-top: 5px;
font-size: 14px;
color: #333;
}
button {
width: 100%;
padding: 10px;
background: #4CAF50;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 14px;
margin-top: 10px;
}
button:hover {
background: #45a049;
}
button:active {
background: #3d8b40;
}
.success {
color: #4CAF50;
text-align: center;
margin-top: 10px;
font-size: 12px;
display: none;
}
</style>
</head>
<body>
<h3>ページ情報</h3>
<div class="info">
<div class="label">タイトル:</div>
<div class="value" id="title">読み込み中...</div>
</div>
<div class="info">
<div class="label">URL:</div>
<div class="value" id="url">読み込み中...</div>
</div>
<button id="copyBtn">コピー</button>
<div class="success" id="message">コピーしました!</div>
<script src="popup.js"></script>
</body>
</html>
普通のHTMLファイルですね。スタイルも全部インラインで書いちゃいました。
3. popup.js
実際の処理を書くJavaScriptファイルです。
// ページ読み込み時に実行
document.addEventListener('DOMContentLoaded', async () => {
// 現在のタブ情報を取得
const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
// タイトルとURLを表示
document.getElementById('title').textContent = tab.title;
document.getElementById('url').textContent = tab.url;
// コピーボタンのクリックイベント
document.getElementById('copyBtn').addEventListener('click', () => {
const text = `${tab.title}\n${tab.url}`;
// クリップボードにコピー
navigator.clipboard.writeText(text).then(() => {
// 成功メッセージを表示
const message = document.getElementById('message');
message.style.display = 'block';
// 1.5秒後にメッセージを非表示
setTimeout(() => {
message.style.display = 'none';
}, 1500);
});
});
});
chrome.tabs.query()でタブの情報を取得して、navigator.clipboard.writeText()でコピーしているだけです。シンプル!
ステップ3:Chromeに読み込ませる
さて、ファイルができたら実際にChromeに読み込ませてみましょう。
- Chromeのアドレスバーに
chrome://extensions/と入力してEnter - 右上の「デベロッパーモード」をONにする(スイッチをクリック)
- 左上に「パッケージ化されていない拡張機能を読み込む」というボタンが出るのでクリック
- さっき作ったフォルダを選択
これだけです!
使ってみる
拡張機能が読み込まれたら、ブラウザの右上(アドレスバーの右側)に拡張機能のボタンが表示されます。
どこか適当なWebページを開いて、このボタンをクリックしてみてください。
小さなポップアップが開いて、現在のページのタイトルとURLが表示されるはずです。「コピー」ボタンを押すと、両方まとめてクリップボードにコピーされます。
試しにメモ帳やメールの本文などに貼り付けてみてください。タイトルとURLが2行で貼り付けられるはずです。
つまずいたポイント
最初、manifest.jsonでmanifest_versionを2にしていて動かなかったんですよね。調べたら、今は3が推奨らしいです。古い記事を参考にすると、こういうことがあるので注意です。
あと、最初アイコンも用意しようとしたんですけど、別になくても動くし、とりあえず機能優先ということで今回は省略しました。デフォルトのアイコンでも十分です。
まとめ
思っていたより簡単にChrome拡張機能が作れました。基本的なWeb技術(HTML、CSS、JavaScript)が分かっていれば、誰でも作れると思います。
今回作った拡張機能は本当にシンプルですが、実際に使ってみると地味に便利です。ブログを書くときとか、調べ物をまとめるときとか、結構使う機会があります。
これをベースにして、もっと色々な機能を追加していくこともできます。例えば、
- Markdown形式でコピーする
- 選択したテキストも一緒にコピーする
- 複数のページをまとめてコピーする
とか。
みなさんも、「こんな機能があったらいいのに」って思うものがあったら、ぜひ作ってみてください。意外と簡単ですよ!
それでは、また次の記事でお会いしましょう。