⚠️ これは KLPF の Fork 版です。 デフォルトのdevelopブランチには破壊的な変更や動作が不安定になる可能性のあるコードが含まれています。安定版を利用する場合は オリジナルのKLPFを使用するか、mainブランチを使用してください。TOTP実装などの一部のコード生成にAIを利用しています。
工学院大学での生活を少し怠惰にできる拡張機能。
CoursePowerからKu-LMSへの移行に伴い、従来のKALIはその多くの機能が利用できなくなりました。
KLPFは、新しいKu-LMSに対応するために開発された後継の拡張機能です。
-
ここから最新版のKLPFの ZIP ファイルをダウンロードします。

-
ダウンロードした ZIP ファイルをクリックした後に右クリックをして、任意の場所(おすすめはドキュメントフォルダー直下)に 展開 します。

-
Chrome の拡張機能ページ
chrome://extensions/にアクセスし、右上の 「デベロッパーモード」 を有効にします。 -
「パッケージ化されていない拡張機能を読み込む」 をクリックし、先ほど解凍したフォルダー内にある KLPF フォルダー を選択します。
-
拡張機能「KLPF」が表示されたら、導入終了です。
ユーザー名とパスワードを入力する際は、chrome://password-manager/passwords/kogakuin.ac.jpにアクセスすると素早く統合認証ユーザー名とパスワードを取得できます。
→Ku-LMS もしくは ku-port を開くと自動でログインされます。使用する場合は統合認証ユーザー名とパスワードを入力してください。
→www.cc.kogakuin.ac.jp へのBasic認証ダイアログに、自動ログインの認証情報を自動入力します。
→Ku-LMSで自動ログアウトされるのを無効化します。Ku-LMSを開いて放置している場合のみ無効化できます。
→未提出課題、未実施テストなどをまとめてKu-LMSホーム画面に表示します。更新には10秒ほどかかります。Googleカレンダー連携にも対応しています。
→Meet を開くと自動でカメラとマイクをオフにして参加します。
→クォーター、曜日、時間を選択し、Ku-LMSを開いておくと3分前に自動で出席ボタンを押しmeetに参加します。使用する際は自動ログアウト無効化機能もONにすることをオススメします。
→Ku-LMSホーム画面で、出席ボタンが存在する授業カードに出席バッジを表示します。
→教材ページで教材リンクの隣に一括開封ボタンを追加します。リンク先の教材をまとめて開き、参照済みにできます。
→Ku-LMSで講義絞り込み機能の設定を記憶して自動で適用します。自動で履修中科目のみ表示するチェックボックスが追加されます。
→教材ページで教材リンクの隣に一括開封のボタンを配置します。クリックするとそのリンクの中にある教材を自動で開き、参照済みにします。
→課題提出ページにドラッグ&ドロップでファイルをセットできるドロップゾーンを追加します。複数ファイルに対応しています。
→教材ページで授業実施日が本日のフォルダを青枠と「本日」バッジでハイライト表示します。
→ku-port の掲示板やシラバスなどのポップアップで、枠外クリックを閉じるボタンと同じ挙動にします。
→Ku-LMS で右上に現在時刻と、授業開始もしくは終了までの時間が表示されます。
→Ku-LMSにダークモードのテーマを適用します。
KLPF/
├─ manifest.json
├─ background.js
├─ scripts.config.js
├─ features/
│ ├─ modules/
│ ├─ pageWorld/
│ ├─ AutoLogin.js
│ ├─ attend.js
│ ├─ homeAttendance.js
│ ├─ homework.js
│ ├─ kuportDialogClose.js
│ ├─ kyozaiopen.js
│ ├─ LMSlogoutblock.js
│ ├─ meet.js
│ ├─ subject.js
│ └─ time.js
├─ setting/
│ ├─ main.js
│ ├─ options.html
│ ├─ options.css
│ └─ modules/
│ ├─ backup.js
│ ├─ settings.js
│ ├─ ui.js
│ └─ updatecheck.js
├─ gas/
├─ icon/
├─ docs/
└─ README.md
拡張機能の入口です。権限、バックグラウンドスクリプト、オプションページ、web_accessible_resources を定義します。
features/pageWorld/ 配下のような page world 用スクリプトをページへ注入するときも、ここで公開設定が必要です。
拡張機能全体の制御役です。scripts.config.js を読み、各機能の有効/無効に応じて content script を動的登録します。
初回インストール時のデフォルト設定保存、右クリックメニュー、GAS 送信、設定変更時の再登録もここが担当します。
機能一覧の定義ファイルです。
各機能について
storageKey- 読み込む JS
- どの URL に注入するか
- デフォルトで ON か
- オプション画面のどのパネルに対応するか
をまとめています。新機能を追加するときは、まずここに登録するのが入口です。
Ku-LMS / ku-port / Meet 上で動く実装本体です。基本的には「1機能1ファイル」で、scripts.config.js から動的に注入されます。
主なファイルは次のとおりです。
AutoLogin.js自動ログイン処理。LMSlogoutblock.jsKu-LMS のセッション切れ対策。homework.jsホーム画面の課題集約表示と Webhook 連携。subject.jsホーム画面の講義フィルタ保存と自動適用。homeAttendance.jsホーム画面の出席判定、出席バッジ表示、出席ポップアップ起動の content script 側本体。attend.jsβ機能の自動出席。meet.jsMeet 参加前のミュート制御。kyozaiopen.js教材一括開封。kuportDialogClose.jsku-port のポップアップを枠外クリックで閉じやすくする機能。time.js授業時間表示。darkmode.jsダークモード。
複数機能で使う共通部品です。
constants.jsLMS URL、ストレージキー、時間割定義などの共通定数。dom-utils.jswaitForElement、safeQuerySelectorなどの DOM ユーティリティ。totp.js自動ログインで使う TOTP 関連処理。
新しい機能を書くときに、複数ファイルで同じ DOM 待機や定数が必要ならここへ寄せます。
ページ自身の JavaScript と同じ world で動かす補助スクリプトです。
content script からは直接触れないページ関数を呼ぶときに使います。
現状は次があります。
homeAttendance.jsfeatures/homeAttendance.jsから渡されたイベントを受けて、LMS ページ側のdispIframe()やPostprocessに合わせて出席ポップアップを開閉します。
つまり、
features/homeAttendance.js= 拡張側の UI / 通信features/pageWorld/homeAttendance.js= LMS ページ関数との橋渡し
という分担です。
オプション画面です。
options.html設定画面の構造。options.css設定画面のスタイル。main.js設定画面の起動入口。modules/settings.js設定の読み書き、デフォルト値反映、トグル状態管理。modules/ui.js並び替えや表示更新など UI 制御。modules/backup.js設定のインポート / エクスポート。modules/updatecheck.js更新確認。
機能の ON/OFF や資格情報の保存はここから chrome.storage.sync / chrome.storage.local に書かれ、background.js がそれを読んで各 script 登録に反映します。
Google Apps Script 連携用です。
主に課題通知やセットアップ補助で使います。
GitHub Pages / 紹介サイトです。拡張本体ではなく、配布ページやドキュメント側のコードが入っています。
拡張機能アイコンです。manifest.json から参照されます。
OSS コントリビュータ向けの追加テンプレートです。
「新しい機能を最短で追加する」ことだけに絞った雛形を置いています。
templates/feature/contentScript.template.jscontent script の最小テンプレート。templates/feature/pageWorld.template.jspage world が必要な場合のテンプレート。templates/feature/scripts.config.template.txtscripts.config.jsに貼る登録雛形。
- Chrome が
manifest.jsonを読む background.jsが起動するbackground.jsがscripts.config.jsを見て、有効な content script を登録する- 対象 URL を開くと
features/配下のスクリプトが注入される - 必要に応じて
chrome.storage.sync/localを読み、各機能が動く
scripts.config.jsでhomeAttendance.jsが Ku-LMS ホームに登録されるfeatures/homeAttendance.jsがホームカードを集めるlinkKougiを順に叩いて、出席ボタンが存在する授業だけバッジを付ける- バッジ押下時は page world 側の
features/pageWorld/homeAttendance.jsに event を送る - page world 側が
dispIframe('#iframeCosa')相当を実行して、出席ポップアップを開く
chrome.storage.syncユーザー設定、機能 ON/OFF、認証情報など同期したいものchrome.storage.localローカル専用設定や一部キャッシュsessionStoragehomeAttendance.jsのようなページ内だけで十分な短時間キャッシュ- ページ側
localStorageattend.jsの一時状態管理など、特定機能がページ上で使う一時データ
- 機能追加の入口を知りたい
→scripts.config.js - 機能の登録や初期化の流れを知りたい
→background.js - 設定画面を触りたい
→setting/options.htmlとsetting/modules/settings.js - Ku-LMS ホーム系の実装を見たい
→features/homework.js,features/subject.js,features/homeAttendance.js - page world が絡む実装を見たい
→features/homeAttendance.jsとfeatures/pageWorld/homeAttendance.js
templates/feature/contentScript.template.jsをfeatures/YourFeature.jsにコピーscripts.config.jsの「新機能追加テンプレート」コメントをコピーして有効化id,storageKey,TodoFeature.js,matches,optionsPanelIdを自分の機能名に置換features/YourFeature.jsの TODO を埋める- 設定画面が必要なら
setting/options.htmlとsetting/modules/settings.jsに項目を追加 - page world が必要なら
templates/feature/pageWorld.template.jsをfeatures/pageWorld/YourFeature.jsにコピーし、manifest.jsonのweb_accessible_resourcesに追加
- 普通の DOM 改変だけで完結する
→
contentScript.template.jsだけで十分 - ページの関数を直接呼びたい
例:
dispIframe(),closeIframe(), ページのグローバル変数 →pageWorld.template.jsも使う - 設定 UI を増やしたい
→
setting/options.htmlとsetting/modules/settings.jsを合わせて編集する
scripts.config.js には、配列末尾にそのまま使えるコメントテンプレートを入れてあります。
コメントアウトを外して名前を置き換えれば登録できます。
{
id: 'TodoFeatureScript',
storageKey: 'todoFeature',
js: [MODULES.CONSTANTS, MODULES.DOM_UTILS, `${PATHS.FEATURES}TodoFeature.js`],
matches: [URLS.KOGAKUIN_LMS],
runAt: 'document_end',
enabledByDefault: false,
optionsPanelId: 'todo-feature-options',
},idBackgroundから見た script の一意名。TodoFeatureScriptのようにScriptを付けると分かりやすいです。storageKey機能 ON/OFF を保存するキー。todoFeatureのように lowerCamelCase を使います。optionsPanelIdオプション画面の対応パネル ID。todo-feature-optionsのように kebab-case を使います。features/配下のファイル名TodoFeature.jsのように機能名ベースで揃えると追いやすいです。
最初から複雑にしない方が保守しやすいです。基本は次の順番で追加します。
features/YourFeature.jsを 1 本作るscripts.config.jsに登録する- 動作確認する
- 必要なら設定 UI を足す
- 必要なら
features/modules/やfeatures/pageWorld/に分離する
つまり、最初は「コメントアウトを戻す」「名前を置換する」「JS の中身を書く」の 3 ステップで始められる状態にしています。
→Ku-LMSのヘッダーにカスタムリンクを表示します。設定からリンクを追加・削除できます。デフォルトでKUPORTへのリンクが含まれています。
→Ku-LMSに設定ページと同じパーティクルエフェクトと虹色カスタムカーソルを適用します。
→お知らせとトピックを右下の小さなフローティングウィジェットとして表示します。クリックで折りたたみ可能です。
→KUPORTの「学生時間割表」を開くと自動的に時間割データを保存し、Ku-LMSのヘッダーから時間割をモーダルで確認できます。今日の曜日列と現在の時限がハイライトされます。
userscript/ ディレクトリには、KLPFの一部機能をTampermonkey / Violentmonkey等で利用できるユーザースクリプトとして提供しています。
これらはKLPFの拡張機能版コードを基に、AIによってユーザースクリプト向けに書き直したものです。
スマートフォンやタブレット端末での実行を想定しています。
| スクリプト | 元機能 | 備考 |
|---|---|---|
AutoLogin.user.js |
自動ログイン | ユーザーID・パスワード・TOTP秘密鍵をスクリプトに直接埋め込む方式 |
SubjectFilter.user.js |
履修中科目のみ表示 | フィルター設定の保存に GM API または localStorage を使用 |
前バージョンを削除してファイルを置き換えるか、上書き保存してください。
セマンティックバージョニングに基づいてバージョンアップを行っています。
The source code is licensed MIT. The website content is licensed CC BY 4.0,see LICENSE.

