簡易的な「あとで読む」機能を追加するChrome拡張機能「atoyomi」をつくった
Chromeの拡張機能を自作してみました。
その名も「atoyomi」。
簡易的な「あとで読む」機能を追加する拡張機能です。
作った経緯や開発で得たポイントなどをメモしておこうと思います。
atoyomiについて
atoyomiは、シンプルに「現在開いているページの情報をブラウザに保存しておく = あとで読むことができる」Chromeの拡張機能です。
- 現在開いているページのタイトルとURLを保存
- 保存されているページへ再度アクセスした際に自動的にデータを削除
- ユーザー登録不要ですぐに利用できる
- Twitterでシェアできるボタン付き
現在、Chromeストアにて配信されていますので、もし興味があればぜひ使ってみてください!
https://chrome.google.com/webstore/detail//bijbpdfpldnfnponpjmnhmmhgildmgga?hl=ja
なぜ作ったか
僕はよく休憩中や終業後にブログやメディアの投稿をチェックするのですが、読んでいる途中に急な対応が入ってくることがあり、中途半端に読んだままページを閉じてしまってそれっきりということが多々ありました。
そういった場合の一時的な対策として、「Pocketに保存する」や「Twitterに投稿しておいてあとで読む」といったブックマークサービスを利用し、とりあえずどこかに「あとで読む予定のページ情報」を退避させるようにしていました。
ただ、PocketやTwitterだとログインが面倒だったり、いちいちサービスのページへ遷移するのが面倒だったり、情報が埋もれてしまいがちだったので、もっとシンプルに管理できないかなーと考えていたところ、「ブラウザ単体で必要最低限の情報だけ表示・管理できるようにすれば良いのでは?」という結論にたどり着き、いっちょ拡張機能作ってやるか〜となった次第です。
開発の流れ
ざっくりとメモっておきます。
1. manifest.json
を書く。
|
|
manifest_version
… manifestのバージョン。現状 “2” しか存在していないようです。default_locale
… 多言語対応する場合のデフォルト値を指定。多言語対応しないのなら不要です。name
… 拡張機能の名前。ストアで表示されます。description
… 拡張機能の説明。同じくストアで表示されます。version
… 拡張機能のバージョン。icons
… アイコン画像。サイズは色々ありますが、とりあえず128pxでOK。browser_action
… URLバーの右に表示される情報の設定ができます。default_popup
でポップアップ用のHTMLを指定します。permissions
… 拡張機能がブラウザへ要求する権限の設定です。利用するAPIの種類に応じて設定します。
2. HTMLを書く
ポップアップとして表示される内容を popup.html
へ記述していきます。
JSファイルとCSSファイルを読み込ませることもお忘れなく。
jQuery等の外部ソースも利用することが可能です。
余計なmetaタグは書かないようにしましょう。
3. CSSを書く
popup.html内に適用させるためのスタイルを書いていきます。
対象ブラウザはChromeのみなので、新しいCSS3プロパティもガンガン使えます。
4. JSを書く
一番大事な部分です。
ChromeはES6構文が標準でほぼサポートされているので、Babelなどトランスパイラを挟まずともガンガン書くことが可能です。
JS内では、ChromeのAPIを利用することが可能です。
例えば、chrome.tabs
を利用することで簡単に現在開いているタブのタイトルやURLを取得することが可能です。
※APIの種類によっては、権限を許可する必要があります。
|
|
様々なAPIが提供されているので、まずは一覧からそれらしきAPIを探してみましょう。
「API名+やりたいこと」でググれば大半は解決できました。
5. 動作確認
作業しているディレクトリを拡張機能として仮インストールします。
「chrome://extensions/」へ移動し、「デベロッパーモード」にチェックを入れ、「パッケージ化されていない拡張機能を読み込む…」から作業しているディレクトリ(直下にmanifest.jsonがあるディレクトリ)を選択します。
インストール済みリストに追加され、URLバーの右側にアイコンが出現すればインストール完了です。
基本的にインストールした拡張機能をクリックして出現するポップアップを確認しながら実装していくのですが、実は下記のURLへアクセスすることで popup.html
へ直接アクセスすることができ、デバッグの効率が上がるので活用していきましょう。
もちろん、開発者ツールも利用できます。
|
|
IDの部分には、拡張機能の識別IDが入ります。
識別IDは、拡張機能一覧ページにて確認することができます。
|
|
6. 多言語対応
多言語対応を行うには、下記のように _locales
ディレクトリを追加します。
|
|
対応したい言語ごとに messages.json
を用意し、任意のキーを用意し、キーのmessage値へ言語ごとに表示を切り替えたい内容を記述していきます。
|
|
キーの名前は、すべての言語で共通になっている必要があります。
キーの命名に関しては、キャメルケースで指定する必要があるということ以外は特に制限はありません。
上記で設定したキーを、ルートディレクトリにある manifest.json
に設定します。__MSG_キーの名前__
というフォーマットで記述していきます。キーの名前
部分には、先ほど言語別で設定した manifest.json
の値を設定することで、呼び出すことができます。
ブラウザの言語環境に応じてChromeが自動判別してくれますので、分岐処理を書くなどの必要はありません。
|
|
JS内で設定した内容を呼び出したい場合は、chrome.i18n
を利用します。
言語別で設定した manifest.json
の値が返り値として戻ってきます。
|
|
HTMLは chrome.i18n
が利用できないので、別途JSのinnerTextなどで書き換える必要があるようです。
7. ストアで公開する
https://chrome.google.com/webstore/developer/dashboard?hl=ja
上記ページから拡張機能を登録することができます。
デベロッパー登録料として5ドルの課金が必要になりますが、一度払ってしまえば以降は登録し放題です。
公開までは手順に従って作業を進めていけば良いので、特に躓くポイントもありませんでした。
ただ、サムネイル画像やスクリーンショットの作成が少し面倒でした😭
https://chrome.google.com/webstore/detail//bijbpdfpldnfnponpjmnhmmhgildmgga?hl=ja
登録後、約1時間後ほどでストアに並ぶようになります。
パッケージを更新したい場合は、ダッシュボードの「編集」から「更新パッケージをアップロード」すればOKです。manifest.json
の version
値を上げておくこともお忘れなく。
意外とすんなりできた
とりあえずこれで、自分が欲しかった機能は実装できたので満足です。
ストアを経由せずとも拡張機能のディレクトリをChromeに読み込ませれば良いので、社内用のツールとか作って配布したら色々捗りそうですね。
また暇つぶしが一つ増えたのでした。
おわり。