Google Chrome 拡張機能の開発 - 1 - はじめのいっぽ

<font color="#0000ff"><b>やりたいこと：Google Chromeの拡張機能開発でのHello World的なものを体験して開発の手掛かりにしたい</b>
</font>
<font color="#ff0000"><b>やってみたこと：[今回の成果（サンプルコード）](#result)</b></font>

# とりあえず検索
例によって「Google Chrome 拡張機能 開発」のような感じで検索してみます。結果はこちらをどうぞ→[:mag:](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=google+chrome+%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD+%E9%96%8B%E7%99%BA)

2016/01/04 時点での表示結果：
![image](https://qiita-image-store.s3.amazonaws.com/0/156225/094adef8-5d9e-2dc0-5614-93a63ccada99.png)

2つめにQiitaの記事があるので、折角ですからこちらを選びます。
[Chrome拡張の開発方法まとめ　その1：概念編](http://qiita.com/edit-mode/items/26d7a22233ecdf48fed8)
概念等を解説して下さっているものでしたので、いまはまだよいですが後々参考にしたいため、いいねをしてストックします。

では、一番最初にヒットしている記事を確認してみます。
[Chromeのオリジナル拡張機能を開発しよう（ソースコードあり） | 株式会社LIG](https://liginc.co.jp/web/tool/browser/163575)
ざっくり読んで、ソースコードも公開してくれているので、早速ダウンロードして、見よう見まねにで動かしてみます。

あいやぁ～ 簡単ですね。中身はHTMLとJavascriptなのですから、少しいじって動きを確認できました。
本当に簡単ですね。

# では、自分好みにカスタマイズ
とはいえ、いきなり難しいこともできないですし、次のネタを実行してみます。

<font color="#0000ff"><b>やりたいこと：今表示しているページのタイトルとURLを`[タイトル](URL)`でクリップボードへコピーする</b></font>

例えば、Qiitaの記事でリンクを張るとき、一応本来のタイトルでリンクを入れた方がいいだろうと思うので、さくっとHTMLでのTITLEを取得したいです。
まず間違いなく、似た便利な拡張機能が提供されていると思うので、検索してみます。→[:mag:](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=html+Title+%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B+chrome)

2016/01/04 時点での表示結果：
![image](https://qiita-image-store.s3.amazonaws.com/0/156225/37446f29-d259-170b-7756-9d9a63919120.png)

いくつかヒットしていて、タイトルを見る限りそれぞれ多少コンセプトが違う印象ですが、「表示中のページのタイトルとURLをキーボードショートカットでクリップボード ...」が一番好みに合致します。

[表示中のページのタイトルとURLをキーボードショートカットでクリップボードに保存するChrome拡張を作ってみた](http://qiita.com/satake_masaki/items/def09ca51731efa2826f)

今必要とするすべての答えがあったので、もうそのまままねっこさせてもらいます。
変更点も考慮するので、コードを一応全部自分で打ち込みます。車輪の再発明上等です。

![image](https://qiita-image-store.s3.amazonaws.com/0/156225/b5b475b0-5eca-0b42-3d6f-12b9089f0334.png)

コピーできているかどうかは、クリップボード履歴で確認しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/156225/efafa4c4-6195-aa18-989e-cc4502b2467f.png)
> [皆さんクリップボード履歴使ってますか？ テキスト編集が捗りますよ！ - Qiita](http://qiita.com/rrryutaro/items/cab2b682a2a388ae7897)

うむ。本当に簡単ですね。もっとも、これは先人が答えをくれたからなのですから、感謝いたします。

とはいえ。クリップボードへのコピーの方法がどうも好きになれません。
おそらく仕様上、実在しているオブジェクトを選択している必要があるのでしょうから仕方なさそうではあるのですが。

気に入らないので、自分で拡張できる方法を模索します。

# 一歩踏み込んだ拡張を考えてみる
<font color="#0000ff"><b>やれそうだと思うこと：文字列を引数として受け取ってクリップボードへ貼り付けるDLLを作成して、それを呼び出す。</b></font>

はい。ここからいきなり、はじめのいっぽらしからぬ内容になりますが、色々と模索していきます。
まずは検索から「chrome dll api」で検索。→[:mag:](https://www.google.co.jp/search?q=document.querySelector&oq=document.querySelector&aqs=chrome..69i57.1239j0j8&sourceid=chrome&ie=UTF-8#q=chrome%20dll%20api)

小一時間ほど見てまわって、さすがにわからないことが多いので一旦断念します。

# <a name="result">今回の成果（サンプルコード）
<font color="#ff0000"><b>このサンプルでできること：現在表示しているページを```[タイトル](URL)```でクリップボードへコピーする</b></font>
<font color="#00ff00"><b>補足：これ以上は絞れないくらい絞ったつもりのもの</b></font>
<font color="#0000ff"><b>サンプルの活用：ここから好きに装飾してもいいし、機能を追加していってもよい</b></font>

内容をとことんスリムにすることにしました。HTML的なルールとかはとことん無視しています。
例えば、アイコンとかなければないで、先頭のアルファベットがマークになるみたいですし。
というわけで、こちらが最終的にスリムにしてみたサンプルです。
jQueryもせっかくなので今時点の最新を取ってきてみています。
たったこれだけのファイルをフォルダに入れて、拡張機能として取り込むことで動くのですから本当に簡単ですね。

```json:manifest.json
{
  "manifest_version": 2,
  "name": "R Chrome Extension",
  "version": "1.0",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs",
    "clipboardWrite"
  ]
}
```

```html:popup.html
<button id="title">Title</button>
<textarea id="text"></textarea>
<script src="jquery-3.1.1.min.js"></script>
<script src="./popup.js"></script>
```
テキストエリアはどうせだから表示しておくことにします。

```js:popup.js
$(function(){
  $("#title").on("click", function(){
    chrome.tabs.getSelected(null, function(tab){
      $("#text").val("[{0}]({1})".replace("{0}", tab.title).replace("{1}", tab.url));
      $("#text").select();
      document.execCommand('copy');
    });
  });
});
```

こんな感じになりました。
![image](https://qiita-image-store.s3.amazonaws.com/0/156225/2ef6fbb4-9134-1682-f63e-da3a45a1d592.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/156225/3e3c645f-133a-c56e-ef77-a6e1b38becb8.png)


以上

|前回|一覧|次回|
|:--|:--:|--:|
|[Google Chrome の 拡張機能にまったく目を向けてこなかった](http://qiita.com/rrryutaro/items/8edb7ae829bae9466e50)|[シリーズ一覧](http://qiita.com/rrryutaro/items/015b67568ddd947ec2b5)|[早速自作したものに機能追加していく](http://qiita.com/rrryutaro/items/194bc78ad73a29daef5f)|