プラグインからわんコメ内 node_modules を参照する実装についての確認

対象

わんコメ / プラグイン/ テンプレート / その他

利用OS

Windows

利用バージョン: Windows、わんコメやOBSのバージョン

Windows: 11
わんコメ: 8.0.7
OBS: 32.0.4

PRO版を利用

していない

過去ログ確認 (検索はこちらから)

していない

ドキュメント確認 (公式サイト)

した

内容

現在、わんコメ用のプラグインを開発しており、
plugin をバックエンドとして動作させ、template 側の HTML + JavaScript にデータを渡す構成で実装しています。

当初は websocket や sqlite を通常の npm install で利用しようとしたのですが、
ビルド後にエラーが発生してしまうため、
AIの提案を参考にして、以下の方法で websocket と sqlite を取得する実装を試しています。

const WS = eval("require").cache
const key = Object.keys(WS).find(k => k.includes('node_modules\\ws\\') && k.endsWith('websocket.js'))
const ws_module = key ? WS\[key\].exports : eval("require")('ws')

この方法は、わんコメ内部の node_modules からモジュールを取得する形になるため、
規約にあるリバースエンジニアリング等に該当する可能性があるのではないかと考え、
このような取得方法が許容されるものか確認させていただきたいと思い、質問いたしました。

現在、GitLab 上の plugin リポジトリは一度削除してありますが、
もし必要であれば現在の plugin の実装内容を共有することも可能です。

なお、現在の構成は以下のようになっています。

・plugin 側で SQLite データベースと WebSocket(port 19199)を起動
・OnePlugin の subscribe(‘comments’) を使用してコメントイベントを取得
・plugin の request API を用いて、贊助金額の累計と目標金額を管理し、SQLite に保存
・金額が更新された際に WebSocket で通知し、template 側の募資バー(Goal Bar)やコントロール表示を更新

取得したデータはすべてローカルでのみ使用しており、
外部サーバーや外部サービスへの送信は行っていません。

このような実装方法について、問題がある場合や
推奨される別の方法があればご教示いただけますと幸いです。
よろしくお願いいたします。

この方法は、わんコメ内部の node_modules からモジュールを取得する形になるため、
規約にあるリバースエンジニアリング等に該当する可能性があるのではないかと考え、
このような取得方法が許容されるものか確認させていただきたいと思い、質問いたしました。

非公開の内部APIやモジュールは参照しないようお願いいたします
規約ももちろんですが、利用者の方が公式のサポートを受けられなくなってしまいます


SQLiteとWebSocketに関しては各々のプラグインプロジェクトとしてインストールして頂き、それらも含めてプラグインにバンドルしてください

当初は websocket や sqlite を通常の npm install で利用しようとしたのですが、
ビルド後にエラーが発生してしまうため、

ここでエラーの内容を確認しビルドを修正すべき段階かと思いますが、AIの誤った提案で違反を促された形になっているかと思います
一度この段階まで戻って頂きエラーを再度確認ください

おそらく発生したエラーについては正攻法で解消可能なものです
わんコメ手書きプラグインではwsを用いてサーバーを立ててテンプレートとやり取りを行なっています

esbuildでのビルド例

const esbuild = require('esbuild')

esbuild
  .build({
    entryPoints: ['src/index.ts'],
    bundle: true,
    platform: 'node',
    target: ['node20'],
    format: 'cjs',
    outfile: '../app/public/plugin.js',
    external: [], // ← ws もビルドコードに含める
    minify: true,
  })
  .catch(() => process.exit(1))

また累計と目標額の設定でだけであればSQLiteではなくプラグインから提供しているstoreを通してjsonファイルとして記録する方が簡単かと思いました

おはようございます、ASTIE様。

SQLite の読み込み方法についてですが、
better-sqlite3.node を参照しにいく挙動があるようで、
プラグインに組み込んだ際に better-sqlite3.node が見つからないというログ が出続けてしまう状況でした。

そのため、その他の部分については AI によって自動的に調整されたものになります。

WebSocket のみを単独で利用する構成については、
現在のところ特に問題なく動作しているようです。

また、データ保存の部分については、
ご提案いただいた通り .json で管理する方法の方が扱いやすいと感じましたので、現在はそちらの方式に変更して対応しています。

ビルドについては、
ひとまず 現状の webpack.config.js を使用した方法のままで運用する予定です。

ご丁寧にご回答いただきありがとうございました。
大変参考になりました。

※本内容の日本語は GPT による翻訳の補助を利用しています。

このトピックは最後の返信から 24 時間が経過したので自動的にクローズされました。新たに返信することはできません。