Kagi Translateが気に入ったので、もっと手軽に使えるようにChrome拡張を作った！

# はじめに

昨日投稿した記事「超高機能な翻訳サービス「Kagi Translate」使ってみた！」でも紹介したKagi Translateがとても気に入ってよく使っています。しかし、まだ生まれたてのサービスのためGoogle翻訳のようなChrome拡張機能がありません。
つまり、ブラウザの中で翻訳したい内容が出てきたときはブックマークなどにあらかじめ登録したおいたサービスのリンクを開く、とかタブを固定で開いておくなどのひと手間が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/84ce818a-73f5-c698-0089-1f5dd50cd955.png)
(Google翻訳のGromeウェブストアより)

そこで「ないなら作ってみよう！」ということでやってみた記事です。

:::note info
### この記事でやること
- Chrome拡張開発
    - URLを開く
    - アイコンを設定する
- 拡張機能をローカルでテストする
:::

:::note alert
### この記事でやらないこと
- 高度な機能の実装
- Chromeウェブストアへの公開
:::

今回作った拡張機能のリポジトリは公開していますので、ご自由に参考になさってください。

# とは言ったものの、、、

私はChrome拡張を作ったことがありません。
そうだ、AIと二人三脚で作ろう！

意識したことはMVP(Minimum Viable Product)開発です。別に製品を作るわけではないですが、最小限の機能をもつ実行可能なものをつくり、段階的にやりたいことを実現していくということです。

# Step1.URLを開くだけ

まず、`https://translate.kagi.com/`というリンクを開くだけのChrome拡張を作ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/ddf25734-c938-debb-b7e1-81b3980da7a9.png)

最低限必要なファイルは`manifest.json`と`background.js`です。

```json:manifest.json
{
  "manifest_version": 3,
  "name": "Open Kagi Translate",
  "version": "1.0",
  "description": "Opens the Kagi Translate page in a new tab",
  "permissions": ["tabs"],
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_title": "Open Kagi Translate"
  }
}
```

```js:background.js
chrome.action.onClicked.addListener(() => {
  chrome.tabs.create({ url: "https://translate.kagi.com/" });
});
```

超絶シンプルですね。見たら想像がつくように`manifest.json`には拡張機能の説明や設定を記述しており、以下の部分でサービスワーカーと呼ばれる動作を記述したスクリプトを指定しているので、ここさえ一致させれば`background.js`というファイル名でなくてもよさそうというのは分かりました。

```json
  "background": {
    "service_worker": "background.js"
  },
```

`manifest.json`の書き方は以下を参照してください。

https://developer.chrome.com/docs/extensions/reference/manifest?hl=ja#minimal-manifest

`Chrome拡張API`の詳細は以下を参照してください。

https://developer.chrome.com/docs/extensions/reference/api?hl=ja


## 動かそう

ローカルでのテスト手順は公式ドキュメントを参照します。
- [Chrome](https://support.google.com/chrome/a/answer/2714278?hl=ja)
- [Edge](https://learn.microsoft.com/ja-jp/microsoft-edge/extensions-chromium/getting-started/extension-sideloading)

基本的には同じで、以下のような手順になります。
1. `chrome://extensions/`もしくは`edge://extensions/`を開く
1. デベロッパーモードを有効化
1. パッケージ化されていない拡張機能を読み込む
    - 拡張機能のソースコードがあるフォルダを選択

先ほどのコードを実際にブラウザに読み込んでみると、味気ないアイコンの拡張機能が追加できクリックすると「Kagi Translate」を開くことが確認できました！🎉

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/c4ca6fe2-ccef-acd5-3259-0ea562ab3549.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/117bca1a-d881-5e7b-d954-1764994dbb9b.png)



# Step2.アイコンを設定する

Step1の状態ではアイコンが設定されておらず素っ気ない見た目をしていたので、アイコンを設定します。
iconsのセクションを追加します。また。アイコンは適当なpngを用意します。

今回は適当にGoogle Fontsを使います。

https://fonts.google.com/icons?query=translate&selected=Material+Symbols+Outlined:translate:FILL@0;wght@400;GRAD@0;opsz@20&icon.query=translate&icon.size=16&icon.color=%235f6368

```json:manifest.json
{
  "manifest_version": 3,
  "name": "Open Kagi Translate",
  "version": "1.0",
  "description": "Opens the Kagi Translate page in a new tab",
  "permissions": ["tabs"],
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_title": "Open Kagi Translate"
  },
  "icons": {
    "16": "icon/16.png",
    "48": "icon/48.png",
    "128": "icon/128.png"
  }
}
```

すると今度はアイコンを表示できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/b8aabde1-995d-de31-8aed-9eef0da87925.png)

アイコンの形式はWebPとSVGがサポートされていないそうなので注意です⚠️
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3934352/67fb9410-16d7-743d-dc4b-004959faa2ce.png)


今回はここまで！