Skip to content

芝浦工大 学生ポータルサイト「ScombZ」の機能を改善する拡張機能

License

Notifications You must be signed in to change notification settings

scombz-utilities/scombz-utilities-react

Repository files navigation

License Contributors

ScombZ Utilities

使いにくい ScombZ のサイドメニューやテストを修正したり、ADFS ボタンの自動スキップができます。よりユーザビリティに優れた ScombZ を提供します。

ScombZ Utilities

Version for Chrome Chrome Web Store Rating Chrome Users

Version for Firefox Firefox Rating Firefox Users

Version for Edge Edge Rating Edge Users

公式サイト

Chrome 版のリンク Firefox 版のリンク Edge 版のリンク

Tips

このプロジェクトは 旧 ScombZ Utilities からのリニューアル版です。 旧コードは以下のリポジトリにあります。

https://github.com/scombz-utilities/scombz-utilities-legacy

環境構築

環境構築は、ローカルで Node.js 環境を構築する方法と、Dockerを使った方法があります。
パフォーマンス上の理由からローカルでの開発を推奨しますが、環境構築の手間を省くためにDockerを使うこともできます。

ローカルでの開発

ローカルでの環境構築

注意: Nodeのバージョンは必ず.node-version記載のものに合わせること

nodeの準備

nodeのバージョンは20.11.1で固定とします。

.node-versionファイルでバージョンを指定しているため、対応したバージョン管理ツールを使ってインストールしてください。 asdfnodenvなどのバージョン管理ツールを使うとよいでしょう。 このreadmeではnodenvを使ったガイドを載せます。


asdfで実行する際の注意

asdf の場合は.node-versionを標準では読み込まないため、~/.asdfrcに以下の記述を追加してください。

legacy_version_file = yes
nodenvのインストール for Mac

① HomeBrewでnodenvのインストールを行います。

$ brew install nodenv

~/.zshrcの最終行にhookを追加します。以下のコマンド2つを実行してください。

(echoではなく、vim等で直接書き込んでも問題ありません)

$ echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(nodenv init -)"' >> ~/.zshrc

③ このままでは .zshrcが読み込まれていないので、再読み込みを行います。

$ source ~/.zshrc

.node-versionに記載されているnodeのバージョンを確認して下さい。

(記事確認時点では v20.11.1)

確認したバージョンをnodenvでインストールします。

( .node-versionに記載されているのがv20.11.1でない場合はコマンドを適切に変更してください)

$ nodenv install 20.11.1

⑤ nodenvをリフレッシュします

$ nodenv rehash

⑥ インストールされたnodeのバージョンが合っているかを確認します

$ node -v
nodenvのインストール for Windows (Ubuntu)

ここからは必ずWSL Ubuntuを使用してください

① ビルドツールが無いかもしれないのでインストールします(あればスキップで構わない)

$ sudo apt install build-essential

② 公式の手順でnodenvのインストールを行います(公式)。さらに、 nodenv install を有効にするため、node-buildもインストールします(野良記事)。

$ git clone https://github.com/nodenv/nodenv.git ~/.nodenv
$ cd ~/.nodenv && src/configure && make -C src
$ git clone https://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build

~/.bashrcの最終行にhookを追加します。以下のコマンド2つを実行してください。

(echoではなく、vim等で直接書き込んでも問題ありません)

(bash以外のシェルを使っている場合は出力先を適宜変更してください)

$ echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(nodenv init -)"' >> ~/.bashrc

③ このままでは .bashrcが読み込まれていないので、再読み込みを行います。

$ source ~/.bashrc

.node-versionに記載されているnodeのバージョンを確認して下さい。

(記事確認時点では v20.11.1)

確認したバージョンをnodenvでインストールします。

( .node-versionに記載されているのがv20.11.1でない場合はコマンドを適切に変更してください)

$ nodenv install 20.11.1
$ nodenv global 20.11.1

⑤ nodenvをリフレッシュします

$ nodenv rehash

⑥ インストールされたnodeのバージョンが合っているかを確認します

$ node -v

依存関係パッケージのインストール

このレポジトリでは基本的にパッケージ管理にはnpmを用います。 以下のコマンドを実行して依存関係をインストールしてください。

$ npm i

開発サーバーの立ち上げ

以下のコマンドで開発サーバーを立ち上げられます。 build/chrome-mv3-devを読み込んでください。 tsxファイル等を更新するとライブローディングされます。

[!TIP] WSL上での開発において、Killedと表示されて完全に終了しない場合、wslの割り当てメモリが少ない可能性があります。
初期の割り当ては搭載メモリの50%なので、.wslconfigファイルを作成、または編集し、それ以上を割り当ててください。

$ npm run dev

配布用のビルド

以下のコマンドでビルドできます。 ChromeとFireFoxに対応したビルドがそれぞれ生成されます。

$ npm run build

Dockerでの開発

Dockerでの環境構築
  1. (まだの場合は)Docker Desktopをインストールしてください。
  2. 以下のコマンドを実行して必要なモジュールをインストールしてください。makeコマンドが使えない場合は、makeをインストールするか、直接docker-composeコマンドを実行してください。
$ make i
or
$ docker compose run --rm app npm i

開発サーバーの立ち上げ

以下のコマンドで開発サーバーを立ち上げられます。 build/chrome-mv3-devを読み込んでください。 tsxファイル等を更新するとライブローディングされます。

$ make dev
or
$ docker compose run --rm app npm run dev

配布用のビルド

以下のコマンドでビルドできます。 ChromeとFireFoxに対応したビルドがそれぞれ生成されます。

$ make build
or
$ docker compose run --rm app npm run build

ストアへの公開

ScombZ utilitiesでは、Chrome Web Store、Firefox Add-ons、Microsoft Edge Add-onsにて一般用に配布しています。 全てのストアで自動的に公開するために、publish-browser-extensionを利用しています。

ストアへの公開手順

  1. .env.submit.templateファイルをコピーして.env.submitファイルを作成します。
  2. 開発リーダーに.env.submitファイルの内容を共有してもらい、必要な情報を入力します。
  3. 以下のコマンドを実行して、ストアへの公開を行います。
  4. npm run publishを実行すると、各ストアに自動的に公開されます。

VScodeでの設定

開発においてコーディングルールをeslintに定義しています。 VScodeでは自動的にルールに合っているか解析+ルールに合ったように整形を行うことができるため、以下の拡張機能をインストールしてください。 VScodeのユーザー設定は.vscodeディレクトリ内に定義済みのため特に変える必要はない(はず)です。

コーディング規則

  • 基本的にすべてのコードはsrc、すべての外部ファイルはassets内に記載します。
  • content_scriptはなるべくページ単位でcontentsディレクトリ直下に記載してください。
  • contentsファイル直下に1機能につき1つのtsもしくはtsxファイルを設置し、コンポーネントや共通モジュールを定義する場合はcomponentsutil内に記載してimportで読み込んでください。
  • Plasmoとの相性が悪いためLintではあえて指定していませんが、基本的に変数名はキャメルケースで統一します。特別な事情がない限りスネークケースは使わないでください。
  • DOM操作は可読性のためにtsxではなくtsファイル内に記述してください。同じ機能でtstsxの両方が必要になる場合、tsxでPlasmoの読み込みを行いuseEffect等でtsを読み込みます。
  • ライブラリを追加する場合、共同開発者は全員が再度npm iをする必要が生じます。影響範囲も大きいので必ず相談をしてください。
  • 関数定義の際functionは使わずアロー関数で定義します。
  • 基本的にはJSX構文ではMUIコンポーネントを使ってください。

主なライブラリ