続・Chrome拡張を10分で作って公開する

## はじめに

* この記事はChrome拡張を作ったことがない人に作り方を教えるために作成したものです
* [以前公開した類似記事](https://qiita.com/yamamoto_hiroya/items/8ec3db3c47a03911aa7f)もよろしければどうぞ
* `Chrome Web Store Developer Dashboard`が新UI（まだベータ版）を公開したのでそちらに合わせて記事を作成しています

---

## Chrome拡張とは

* Chrome拡張（エクステンション）とは、Google Chrome自体に自分で機能を追加して拡張することができる仕組みのことです
* [Chromeウェブストア](https://chrome.google.com/webstore/category/extensions?hl=ja)で全世界のデベロッパーが作成した拡張を検索・追加することができます
* また、自分で拡張を作ってストアに載せて公開することもできます

---

## 前提

### 必須
* Googleアカウントを持っていること
* ChromeにGoogleアカウントでログインしていること
* `javascript`が書けること

### 推奨

[デベロッパー登録](https://chrome.google.com/webstore/developer/about_signup?hl=ja)（有償）が済んでいると一般公開ができますが、登録していない場合は「限定公開」や「非公開」、「自身の環境のみ」など公開範囲を絞ったもののみとなります。

---

## 流れ

1. 作る拡張のイメージを固める
1. 実装する
1. アイコンや公開用の設定ファイルを用意する
1. ローカルで試す
1. それらをzipに固める
1. Chromeウェブストアにアップロードする
1. 公開完了

---

## 実装

### 要件

`chromeのタブタイトルを乗っ取って別の文字にする`

シンプルで分かりやすく、初心者でもコードが書きやすいものと思い上記にしました。

---

## サンプルコード

```js:change_html_title.js
document.title = 'このタイトルは我々が乗っ取った!';
```

タイトルを変えるだけなのでものすごくシンプルですね

---

## 動作検証

chromeのconsoleを開き、先程のスクリプトを実行してみましょう。
このQiitaの記事のページで右クリック→検証でデベロッパーコンソールが開きます（Macの場合は`Cmd+Shift+j`）
下記画像のようにタイトルが変更されれば成功です。

![スクリーンショット 2018-05-09 14.13.36.png](https://qiita-image-store.s3.amazonaws.com/0/67471/0c0afe30-de54-6e39-8ab6-91fbd2fa671b.png)

![スクリーンショット 2018-05-09 14.13.45.png](https://qiita-image-store.s3.amazonaws.com/0/67471/30c1f63a-385d-579e-f5f3-b0c7ece197f8.png)

---

## 公開準備

アイコンや設定ファイルを作成しますが、ディレクトリ構成は以下のようにしてください。
アイコンは適当な画像ファイルをご用意ください（ちなみに使った画像は[これ](https://cdn.qiita.com/assets/qiita-fb-2887e7b4aad86fd8c25cea84846f2236.png)）

```bash
change_html_title
├── icons
│   └── qiita.png
├── js
│   └──change_html_title.js
└── manifest.json
```

---

## manifest.json

`manifest.json`が設定ファイルとなります。
中身は以下の通り

```json:manifest.json
{
    "manifest_version": 2,
    "name": "change_html_title",
    "version": "1.0.0",
 
    "description": "htmlのtitleを勝手に変える拡張",
 
    "icons": {
        "16": "icons/qiita.png",
        "48": "icons/qiita.png",
        "128": "icons/qiita.png"
    },
 
    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "js": ["js/change_html_title.js"],
            "run_at": "document_end"
        }
    ]
}
```

* `manifest_version`は今現在は固定値2で大丈夫です
* `version`はこの拡張のバージョンです。`1.0.0`とかってしておけば細かくバージョンを反映していけるのでオススメです。
* `matches`は適用するサイトのリンクです。今回は全てのページに適用します。

---

## ローカルで試す

Chromeの設定＞その他のツール＞拡張機能を開きます。
![スクリーンショット 2016-11-16 18.54.15.png](https://qiita-image-store.s3.amazonaws.com/0/67471/eef713fc-0922-fafe-138b-e56ac4e682ac.png)

「パッケージ化されていない拡張機能を読み込む」ボタンを押して`change_html_title`ディレクトリを選択してください。
そうすると自分のChromeにだけ今の拡張機能が入ります。
拡張一覧に`change_html_title`が出ていれば成功です。
![スクリーンショット 2018-05-09 14.27.10.png](https://qiita-image-store.s3.amazonaws.com/0/67471/208a62ef-22cb-f365-ce47-27e197ba10e9.png)

適当なページを開いてみてtitleが変更されていたら成功です。

---

## ストアにアップする1

今のままでは自分しか使えませんのでストアに公開しましょう。
`change_html_title`をzipに固めます。
[chrome web store](https://chrome.google.com/webstore/category/extensions)にアクセス。
右上の歯車ボタンから「デベロッパーダッシュボード」をクリック。
![スクリーンショット 2016-11-16 18.58.00.png](https://qiita-image-store.s3.amazonaws.com/0/67471/987e38be-6396-b548-3609-150d561c3e2a.png)

---

## ストアにアップする2

そこから「新しいアイテムを追加する」を選択。
そこから先程のzipファイルをアップロード
この時点で何か問題があればバリデーションで弾かれてアップロードできません。エラーメッセージを見て適宜修正を加えてください。

![スクリーンショット 2018-05-09 14.33.10.png](https://qiita-image-store.s3.amazonaws.com/0/67471/b78dd608-31fc-496b-c48f-c063c6feb42f.png)

---

## ストアにアップする3

この拡張について必要な事項を入力します。
詳細説明・カテゴリ・言語を入力

![スクリーンショット 2018-05-09 14.36.43.png](https://qiita-image-store.s3.amazonaws.com/0/67471/62d31cfd-eff9-c180-4e6c-8d810b03e9db.png)

---

## ストアにアップする4

次に「価格と配布対象地域」を選択。
デベロッパー登録している人は「公開」、デベロッパー登録していない人は「限定公開」を選びます。

![スクリーンショット 2018-05-09 14.37.47.png](https://qiita-image-store.s3.amazonaws.com/0/67471/b3698074-d299-5f27-fd71-87c6d619bd6b.png)

---

## ストアにアップする5

アイテムを公開ボタンを押せば公開されます。

![スクリーンショット 2018-05-09 14.42.06.png](https://qiita-image-store.s3.amazonaws.com/0/67471/84a7ce3f-b47f-fd41-d1ef-e8615f7bf1eb.png)


あとはストアに反映されるのを待ち、ストアから自身のChromeに拡張を追加することで利用可能となります。
ストアのリンクを共有すればあらゆる人に拡張を使ってもらうことが可能となります。

![スクリーンショット 2018-05-09 14.43.34.png](https://qiita-image-store.s3.amazonaws.com/0/67471/cb3dbf32-a5eb-2e8b-ee8f-54bec43df9db.png)

新UIになってからか分かりませんが、以前より公開される速度/更新パッケージが反映される速度が上がった気がします。
特に更新した際には即時で反映されるので開発側としてはとてもありがたいです:smile: 

---

## 注意事項

「ローカルで試す」の手順で入れたものはたまに「これはストアから入れたものではないので無効化しました」のようにChrome側から勝手に無効化されることがあります。
なのでずっと使い続けたい場合にはストアに公開することをオススメします。
また、公開後に修正を入れたい場合にはmanifestのバージョンを必ず更新する必要がある点にも注意です。

---

## おわりに

Chrome拡張は「手軽に」「素早く」「効率化」できる点が非常に優れていると思います。
他の人の拡張を利用するだけでも良いですし、自分で作成してみることもオススメします。
また、拡張を作る際に入れたいページのDOM要素を眺めることになるので、他のサービスがどのような構成になっているか・命名はどんな感じか、を知ることができるのも面白い要素かなと思います。
あと新UIはまだ慣れないですが結構いいデザインな気がしました。

それでは快適な拡張ライフを！:smile: