AngularでChrome拡張を作ってみよう
はじめに
Chrome拡張は、Webページと同じくHTML、JavaScript、CSSから構成されるため、各種フレームワークやライブラリを使用することが可能です。そこでこの記事では、Angularを使って、現在のタブの情報を表示するだけのごく簡単なChrome拡張を作る手順についてまとめてみます。
なお、この記事ではあくまでも開発手順に焦点を当てているため、Angularの踏み込んだ開発やChrome拡張のWebストアへの公開は対象外としています。Chrome拡張を公開する手順については、以下の記事が参考になりますのでチェックしてみてください。
超最低限の Chrome エクステンションを開発しウェブストアで公開するまでの手順
また、この記事では、Node.jsとnpmがあらかじめインストールされていることを前提として進めていきます。まだインストールしていない場合は、あらかじめインストールをお願いします。
Chrome拡張の開発
それでは、実際にAngularを使ったChrome拡張の開発手順について見てみましょう。
Angular CLIのインストール
Angular CLIは、Angularのソースコードやビルド環境、テスト環境などを自動的に生成してくれる非常に優秀なコマンドラインツールです。この開発手順でも、Angular CLIを使用します。
まずAngular CLIをインストールするために、ターミナルで次のコマンドを実行してください。
$ npm install @angular/cli -g
Angular CLIをインストールしたら、 ng -v
を実行してAngular CLIが正しくインストールされたことを確認してみましょう。次のようにAngular CLIのテキストがでかでかと表示されればOKです。
$ ng -v
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
@angular/cli: 1.4.4
Angularの環境構築
Angular CLIをインストール後、ターミナルで開発用のディレクトリに移動します。ここでは~/dev
というディレクトリを使用すると仮定します。
$ cd ~/dev
開発用ディレクトリに移動したら、Angular CLIを使用してAngularの開発環境を構築します。環境の構築にはng new
を使います。ターミナルで次のコマンドを実行して、chrome-ext
というディレクトリに環境を構築しましょう。
$ ng new chrome-ext
上記コマンドを実行すると、指定したディレクトリの中にAngularの環境が構築され、必要なnpmパッケージも自動的にダウンロードされます。chrome-ext
ディレクトリの中に、以下のような構成で各種ファイルが生成されていることを確認しましょう。
dev
|- chrome-ext
|- src
| |- ...
|
|- e2e
| |- ...
|
|- README.md
|- karma.conf.js
|- package-lock.json
|- package.json
|- protractor.conf.js
|- tsconfig.json
|- tslint.json
# 一部省略
マニフェストファイルの追加
Chrome拡張を作るには、拡張の内容を定義するマニフェストファイルmanifest.json
が必要となります。そのため、src
ディレクトリの中にmanifest.json
を追加し、以下の内容をコピペしてください。
{
"name": "Chrome Ext",
"manifest_version": 2,
"description": "タブの情報を表示します",
"version": "1.0",
"browser_action": {
"default_popup": "index.html"
},
"permissions": [
"tabs"
]
}
今回はタブの情報を取得する必要があるため、permissions
にtabs
を定義しています。なお、ここではマニフェストファイルの詳細については割愛しますので、詳しく知りたい方は公式のドキュメントを確認してみてください。
.angular-cli.jsonの変更
src
に追加したmanifest.json
ファイルは、ビルド時に他のファイルと共にdist
ディレクトリへと出力する必要があります。そこで、manifest.json
を出力対象とするため、.angular-cli.json
を開き、以下のようにassets
にmanifest.json
を追加してください。
{
...
"apps": [
{
...
"assets": [
"assets",
"favicon.ico",
"manifest.json"
],
}
]
}
@types/chromeのインストール
Angular + TypeScriptで開発を行うにあたって、Chromeの型を定義したパッケージ @types/chrome
をnpmで事前にインストールしておきます。これをインストールしておくことで、Visual Studio Codeなどを使用したときのオートコンプリーションが効くようになり、開発が非常に楽になります。
@types/chrome
をインストールするために、ターミナルでchrome-ext
ディレクトリに移動し、以下のコマンドを実行してください。
$ npm install @types/chrome --save-dev
これによって、@types/chrome
がインストールされ、package.json
に以下のようなdevDependenciesが追加されます。
{
...
"devDependencies": {
"@types/chrome": "0.0.48",
...
}
次に、src
ディレクトリにあるtsconfig.app.json
を開いて、compilerOptions.types
にchrome
を追加してください。
{
"compilerOptions": {
...
"types": [
"chrome"
]
}
}
ソース編集
ここからは、実際にAngularのファイルを編集していきます。
AppComponentの変更
まず、src/app
ディレクトリに定義されているAppComponent
の内容を以下のように変更します。
<div style="text-align:center">
<h1>{{tab.title}}</h1>
{{tab.url}}
</div>
<pre style="background-color:#e0e0e0">
{{tab | json}}
</pre>
import { Component, OnInit, ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
tab: chrome.tabs.Tab;
constructor(private ref: ChangeDetectorRef) { }
ngOnInit() {
// 現在のタブのオブジェクトを取得する
chrome.tabs.query({ 'active': true, 'lastFocusedWindow': true }, (tabs) => {
this.tab = tabs[0];
// 変更があったことを通知する
this.ref.detectChanges();
});
}
}
ここでは、chrome.tabs.query()
を使用して、現在開かれているタブの情報を取得しています。また、コールバック関数はAngularの管理対象外から呼び出されるため、ChangeDetectorRef
のdetectChanges()
を使用して値に変更があったことを通知します。
CSSの変更
src/styles.css
を開き、以下のようにbodyのサイズを指定します。
body {
width: 400px;
height: 400px;
}
このようにbodyのサイズを指定することで、ポップアップされる領域のサイズを決めることができます。
ビルド
最後に、作成したコードをAngular CLIでビルドします。ターミナルから以下のコマンドを実行してください。
$ ng build -aot
このコマンドでdist
ディレクトリが生成され、必要なファイルが配置されます。1
Chrome拡張の登録
最後にdist
に生成されたファイルをChrome拡張として登録します。
ChromeのURLバーにchrome://extensions
を入力して、Chrome拡張の管理画面を開きます。Chrome拡張画面右上にあるデベロッパーモード(Develper mode)にチェックを入れ、パッケージ化されていない拡張機能を読み込む(Load unpacked extension)ボタンをクリックします。
ボタンをクリックするとディレクトリが指定可能となるので、先程のビルドによって生成されたdist
ディレクトリを指定してファイルを読み込みます。
正常に読み込まれると、URLバーの隣に「C」という拡張のアイコンが表示されます。
これをクリックすると、AngularのコードがChrome拡張の中で実行され、このように現在のタブの情報が表示されます。
修正したコードの反映
以降、コードの修正を繰り返しつつ実際にChrome拡張を動作させながら開発を進めていくことになります。修正したコードの反映は、以下のステップで行うことができます。
- ビルド (
ng build -aot
) - 拡張の再読み込み
最後に
以上が、AngularによるChrome拡張の一連の手順です。Angular CLIを使うと簡単にAngularによるChrome拡張が簡単に作れるので、暇すぎて死に絶えそうな時に試してみましょう。
ちなみに、ここで使用したコードはGitHubで公開しています。
参考
Build Your Own Chrome Extension Using Angular 4.
Build a simple Emoji Chrome Extension with Angular CLI.
Using chrome extension apis in typescript
注釈
-
ここで指定している-aot
オプションは、Ahead of Timeを意味し、事前にコンパイルを行う役割を持ちます。(デフォルトではJust in Timeのコンパイルとなります) このオプションを指定しなければ、Chrome拡張実行時にJust in Timeで実行されるコンパイラの動作がエラーとなってしまいます。 ↩
-
ここで指定している
-aot
オプションは、Ahead of Timeを意味し、事前にコンパイルを行う役割を持ちます。(デフォルトではJust in Timeのコンパイルとなります) このオプションを指定しなければ、Chrome拡張実行時にJust in Timeで実行されるコンパイラの動作がエラーとなってしまいます。 ↩
Author And Source
この問題について(AngularでChrome拡張を作ってみよう), 我々は、より多くの情報をここで見つけました https://qiita.com/Tsuyoshi84/items/dee70252842813f1ce4b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .