Skip to content

NiIsanDaYo/ZenstudyTool

Repository files navigation

ZenstudyTool

ZenstudyTool は、ZEN Study(旧 N予備校)の学習ページにおけるUX向上およびオペレーション自動化の技術検証を目的に作成された非公式の概念実証(PoC)プロジェクトです。 DOM操作やデータ抽出、WebAssemblyを用いたメディア処理などの技術を用いて、学習体験をどこまで最適化できるかを研究・検証しています。

主な機能

  1. 必修教材のみを強制
  • 画面遷移後も「必修教材のみ」状態を維持します。
  1. 合計時間の表示
  • コースやチャプターなどの一覧に、必修動画の進捗時間を表示します。
  1. 1日あたりの授業時間表示
  • 期限までに必要な1日あたりの視聴時間を表示します。
  1. 教材の自動再生(自動スキップ)
  • 教材リストを上から見て、完了済みを飛ばし、次の未完了教材へ遷移します。
  1. バックグラウンド再生
  • タブ切り替え等で pause された動画を自動再開し、視聴継続を補助します。
  1. 問題文のコピー
  • 確認テスト、論述テスト、レポート画面に「問題文をコピー」ボタンを追加します。
  • コピー内容は Markdown 形式で整形します。
  1. 論述欄の文字数補助
  • 「150字以上」「500字以内」のような字数条件が明示されている入力欄で、不足や超過を設問文ベースで表示します。
  1. 動画のダウンロード
  • MP4 は元データを取得して Blob 経由で保存し、教材名と保存先フォルダを維持します。
  • M3U8 は ffmpeg.wasm で MP4 変換を試行します。
  • MP4 変換に失敗した場合は TS へ自動フォールバックします。
  • 動画モーダルの「単元動画一括保存」から、現在の単元に表示されている動画教材を順番に保存できます。
  • 同名ファイルが既にある場合は、Chrome の (1) 付き重複保存ではなく正しい保存名で上書きします。
  1. スライド画像の一括ダウンロード
  • 動画モーダル内の補助テキストやスライド画像をまとめて保存します。
  • 「単元画像一括保存」から、現在の単元に表示されている動画教材を順番に開いて画像を保存できます。
  1. AI文章校正
  • 論述テスト、レポート画面の自由記述欄に AI 校正ボタンを追加します。
  • 校正完了後に、変更箇所の差分(Diff)ハイライト表示と、元のテキストに戻す Undo 機能を備えています。
  • Gemini API キーを設定することで利用できます。

インストール

  1. Chrome で拡張機能ページを開く
  • chrome://extensions/
  1. 右上のデベロッパーモードを ON にする

  2. 「パッケージ化されていない拡張機能を読み込む」をクリックする

  3. このフォルダ(manifest.json があるフォルダ)を選択する

設定項目

拡張機能アイコンから設定ポップアップを開くと、次の項目を ON/OFF できます。 ポップアップ画面はタブ(基本 / AI / DL / 統計)で整理されており、OSのダークモード設定にも対応しています。

  • 必修教材のみを強制
  • 合計時間の表示
  • 1日あたりの授業時間表示
  • 教材の自動再生
  • バックグラウンド再生
  • 問題文のコピー
  • 動画のダウンロード
  • スライド画像の一括保存
  • AI文章校正の有効/無効

AI文章校正の設定(ポップアップ内の専用パネル):

  • Gemini API キー: Google AI Studio で発行したキーを入力して保存します。
  • モデル選択: 自動選択(バランス / 速度優先 / 精度優先)または手動指定で、使用する Gemini / Gemma モデルを選択します(自動選択のバランスを推奨)。

AI文章校正

  • 論述テスト、レポート画面の自由記述欄に AI 校正ボタンを追加します。
  • 校正が適用されると、入力欄の下に変更箇所の差分(Diff)がハイライト表示され、ボタンが「元に戻す(Undo)」に切り替わります。
  • フッターの「まとめてAI校正」は、入力済みの自由記述欄を順番にまとめて校正します。
  • 各入力欄の「AI校正」は、その欄だけを個別に校正します。
  • 自動選択(バランス)では、次の順で利用可能なモデルを試します。 gemini-3.5-flashgemini-3.1-flash-litegemini-2.5-flashgemini-2.5-flash-litegemma-4-26b-a4b-itgemma-4-31b-it
  • 自動選択(速度優先)では、次の順で利用可能なモデルを試します。 gemini-3.1-flash-litegemini-2.5-flash-litegemini-3.5-flashgemini-2.5-flashgemma-4-26b-a4b-itgemma-4-31b-it
  • 自動選択(精度優先)では、次の順で利用可能なモデルを試します。 gemini-3.5-flashgemini-2.5-flashgemma-4-31b-itgemini-3.1-flash-litegemma-4-26b-a4b-itgemini-2.5-flash-lite
  • 手動指定では、gemini-3.1-pro-preview / gemini-3.5-flash / gemini-3-flash-preview / gemini-3.1-flash-lite / gemini-3.1-flash-lite-preview / gemini-2.5-flash / gemini-2.5-flash-lite / gemini-2.5-pro / gemma-4-31b-it / gemma-4-26b-a4b-it から選択できます。
  • 思考設定は、手動指定と自動選択(バランス)では標準、自動選択(速度優先)では最速、自動選択(精度優先)では最高に設定します。
  • Gemma 系は常に -it 系の hosted model を使用します。
  • 「モデル接続テスト」で、現在の API キーとモデルモードから実際に応答できる候補を事前確認できます。
  • 校正後の文字数が設問の字数指定から外れる、または元の文章から大きく変化した場合、その欄は失敗扱いになり、元の入力内容は上書きされません。

動画ダウンロード仕様

  • URL の自動検出

    • ページ上で再生された動画 URL(.mp4 / .m3u8)を拡張機能側で検出します。
  • 変換エンジン

    • M3U8 の MP4 化には同梱の ffmpeg.wasm を使用します(ブラウザ内で完結)。
  • 保存形式

    • .mp4: 再変換せず Blob 経由で MP4 のまま保存
    • .m3u8: MP4 変換を試行し、失敗時は TS で保存
  • 単元動画の一括保存

    • 動画モーダルの「単元動画一括保存」から、現在の単元の教材リストにある動画を順番に開いて保存
    • 各動画の保存完了を待って次へ進むため、教材名とチャプターフォルダ名を維持
    • 実行中にボタンを再度押すと、処理中の動画を終えた時点で次の動画への移動を停止
  • スライド画像の保存

    • 動画モーダルの「画像一括保存」から、補助テキスト iframe 内の画像を連番で一括保存
    • 「単元画像一括保存」から、現在の単元の教材リストにある動画を順番に開いて各教材内の画像を保存
    • 保存先は動画タイトルごとの *_slides フォルダ
  • ファイル名

    • 開いている授業タイトルをファイル名として使用
    • チャプター名は保存先フォルダ名として使用
    • OS で使えない記号は自動置換
    • 同じ保存先に同名ファイルがある場合は、動画・画像ともに上書き

必要な権限

  • storage

    • 設定値の保存に使用
  • webRequest

    • 動画 URL の検出に使用
  • downloads

    • ファイル保存に使用
  • offscreen

    • M3U8 のバックグラウンド処理に使用
  • host_permissions

    • ZEN Study 関連ドメイン、および動画配信 URL の検出に使用
    • 動画配信 CDN が可変のため、動画 URL 検出では <all_urls> を許可対象に含めています。

トラブルシューティング

  1. 設定が反映されない
  • 対象ページを再読み込みしてください。
  • 拡張機能の ON/OFF を切り替えて再試行してください。
  1. ダウンロードボタンが出ない
  • 動画モーダルを開いた状態か確認してください。
  • 設定の「動画のダウンロード」または「スライド画像の一括保存」が ON か確認してください。
  1. AI校正ボタンが出ない
  • 設定の「AI文章校正を有効化」が ON か確認してください。
  • Gemini API キーを保存済みか確認してください。
  1. ダウンロードに失敗する
  • 回線状況を確認し、もう一度実行してください。
  • サイト側の仕様変更により、一時的に動作しない場合があります。
  1. Extension context invalidated. が出る
  • 拡張機能を再読み込みまたは更新した直後に、開きっぱなしのタブで一時的に出ることがあります。
  • 対象タブを再読み込みすると解消します。

⚠️ 免責事項 (Disclaimer) - 悪用厳禁 -

本拡張機能は、Webブラウザの拡張機能API(Manifest V3)の挙動検証、およびフロントエンド技術(WebAssemblyを用いたM3U8のメディア処理、DOM操作によるUI拡張など)の学習・研究を目的として作成された概念実証(PoC:Proof of Concept)です。公式プラットフォームとは一切関係のない非公式のツールです。

以下の点に同意いただける方のみ、本リポジトリのコードを参照・利用してください。

  1. 教育および研究目的の限定: 本ツールは技術的な検証を目的としており、特定のウェブサイトの利用規約違反、著作権法に抵触する行為(ダウンロードした動画の無断共有・再配布等)、および学習の放棄を推奨・助長するものではありません。
  2. 実際の運用における禁止事項: 実際の学習プラットフォーム上での悪用は想定していません。本ツールの機能を利用して「自動再生による受講の偽装」や「問題文コピー機能を用いたカンニングや解答の共有」などの不正行為を絶対に行わないでください。
  3. 完全な自己責任: 本ツールを使用したことによって生じたいかなるトラブルや不利益(サービスのアカウント停止、退学・停学などの懲戒処分、法的措置など)、およびサイト側の仕様変更による動作不良について、開発者は一切の責任を負いません。

技術の仕組みを理解するための「教育目的」のコードです。ツールとしての悪用は絶対におやめください。

ライセンス

MIT License

About

ZEN Study の学習UXを拡張する非公式Chrome拡張(PoC)。必修教材の強制・進捗時間表示・自動再生・バックグラウンド再生・動画DL(ffmpeg.wasm)などを実装。Manifest V3 / WebAssembly の技術検証目的。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors