設計

Chrome Extension ( Chrome 拡張 ) で 理想のTodoを作成しました。

理想の拡張はなかなかないもので、プログラマなら拡張は自分で作れると楽しいな、と思います。

このTodoは、月一しかやらないが、月一には絶対に忘れずにやりたいリスト、を作成するものです。

done/undoneのチェックが行えて、迫ってくると色で教えてくれ、過ぎていると色で教えてくれます。

そして月が変わると自動的にリセットされます。

具体的には以下のような機能を盛り込みます。

・毎月行うことを日付別に記録
・日付でソートされる
・done/undoneが記録でき、ソートされる( done すると下に移動 )
・近くなったり、超過したりすると色とソート順が変化 ( 超過 -> 近い -> 普通 の順番になる )
・月を跨ぐと完了がリセットされる。

この拡張をちょっと作り直すだけで、様々なTodoや、毎日リセットされる毎日やることTodoなども出来ますので、作成しています。

作成内容を順番に記述していきます。

バージョン3とハマりどころ

Chrome 拡張は現在 version 3 になっています。マニフェストをversion3で書く必要があります。

version2の頃に出来たいくつかのことがどうやら出来なくなっています。

Evalが使えない

・eval

・new Function

これらは要するに、文字列からプログラムでプログラムを書き換える機能です。

write という 関数に対して、後で文字列から write という関数を上書き、などということができます。

vue.js が使えるとよかったのですが、vue.jsはどうやらevalを用いているようです。

sandboxにすれば使えましたが、そうするとstorage API にアクセス出来ず、記録機能が使えませんので、認証して別途サーバーに記録しなければならないでしょう。

chrome.storageを使って記録したいので、sandboxは使えません。

content_script_policy を設定してもevalが使えるようにならず、stackoverflowを調べると「eval使うなってことだよ」と書かれているので、そもそもvue.jsをやめました。

なので、このリストのリフレッシュを自前で書いていますが、この程度の大きさでしたら、全く遅延しません。

必要最低限、動くことが重要です。

外部リソースが使えない

簡単にいうと、scriptタグによって外部、例えばcdnなどからライブラリを呼べません。

よって全てDLして同梱する必要があります。

マニフェストファイルを作成する

ということでかなり不自由が増えている気がしますが、マニフェストファイルを書いてみます。

ここでdefault_popupを設定します。

そしてpopup.htmlを作成します。

この二つのファイルだけで、拡張は最低限動きます。

Chrome左上の拡張一覧からピン留めすると、アイコンが出現し、それをクリックするとpopup.htmlが呼ばれるのです。

popup.html を作成する

次に popup.css、app.js を作成します。

moment.js、 underscore.js、jquery.js はそれぞれのライブラリからDLし、同じフォルダに置く事で、読み取れます。

Chrome で読み込む

Google Chromeで 「chrome://extensions/」にアクセスすると拡張の一覧が見えます。

上のメニューバーの右側にある「デベロッパーモード」をONにすると、

「パッケージ化されていない拡張機能を読み込む」ボタンが出てきます。

ここから、該当のマニフェストが置いてあるフォルダを指定します。

フォルダ構成は

extension-folder
 ┣ manifest.json
 ┣ popup.html
 ┣ app.js
 ┣ popup.css
 ┣ jquery.js
 ┣ underscore.js
 ┗ moment.js

となっていると思いますが、その一番上の extension-folder を指定します。

完成です!!

感動的です。これは最高です!w

最終更新: 2022年12月5日