Skip to content

Conversation

@tegnike
Copy link
Owner

@tegnike tegnike commented Feb 28, 2025

Summary by CodeRabbit

  • Documentation

    • ライセンスやLive2D/Cubism SDKに関する情報を多言語対応で整理・更新しました。
    • 使用ライブラリや契約条件に関する注意事項が明確になりました。
  • New Features

    • 環境設定で利用可能な言語オプションが拡充されました。
    • 音声入力時の無音検出タイムアウト機能が新たに追加され、タイムアウト時間の調整が可能になりました。
    • 自動翻訳機能が追加され、プルリクエストの更新に応じて多言語ファイルが自動的に更新されます。
  • Enhancements

    • AIモデル選択のオプションを最新バージョンに合わせて更新しました。

tegnike and others added 30 commits February 18, 2025 09:41
@vercel
Copy link

vercel bot commented Feb 28, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
aituber-kit ✅ Ready (Inspect) Visit Preview 💬 Add feedback Feb 28, 2025 9:40am

@coderabbitai
Copy link

coderabbitai bot commented Feb 28, 2025

Walkthrough

今回の変更では、ライセンスおよびLive2Dに関するドキュメントの追加・更新、環境設定ファイルやESLint、Prettierの設定の調整が行われました。また、GitHub Actionsによる自動翻訳と課題解析のワークフローが新規に導入され、PythonおよびTypeScriptの依存関係の更新、インポートパスの修正、音声認識処理にタイムアウト機能が追加されるなど、複数の機能改善が実施されています。

Changes

ファイル 変更概要
README.md, LICENSE, docs/license*.md, docs/README_*.md ライセンスおよびLive2D関連ドキュメントの追加・簡略化・更新(多言語対応、FAQ、商用利用条件の明記、新規貢献者の追加)
.env.example NEXT_PUBLIC_SELECT_LANGUAGE のコメントが、対応言語リスト拡大に合わせて更新
.eslintrc.json ignorePatternsscripts/**.mypy_cache/** を追加
.prettierignore フォーマッタから除外するファイル・ディレクトリのパターンを指定
.github/workflows/old/auto-translate.yml, .github/workflows/old/issue-analyzer.yml 新規GitHub Actionsワークフローの追加(自動翻訳と課題解析の実行)
locales/*/translation.json 新規翻訳エントリ(NoSpeechTimeout, NoSpeechTimeoutInfo, エラー文言)の追加および既存メッセージの更新
package.json, requirements.txt 不要な依存パッケージ(@tailwindcss/line-clamp)の削除と依存関係のバージョン更新、Python依存性リストの追加
scripts/* 自動翻訳スクリプト(auto_translate.py)とそのテストスクリプト、.gitignoreなどの追加・更新
src/components/* Live2Dコンポーネントおよび関連コンポーネントの修正(インポートパスの変更、エラーハンドリング削除、アイコンのプロパティを文字列に変換)
src/components/messageInputContainer.tsx 音声認識に5秒のタイムアウト機能を追加し、無音検出ロジックと関連状態管理を実装
src/components/settings/* 設定画面の更新(AIモデル選択オプションの変更、No Speech Timeout設定の追加)
src/features/*, src/lib/*, src/types/* インポートパスに .js 拡張子を追加、新規型定義の導入、その他依存性と構成の更新
tsconfig.json, tailwind.config.js TypeScriptのモジュール解決、型定義パス、include/excludeパターンの更新とTailwindプラグインの調整

Sequence Diagram(s)

自動翻訳ワークフロー

sequenceDiagram
    participant PR as "Pull Request イベント"
    participant GH as "GitHub Actions"
    participant AT as "AutoTranslator (auto_translate.py)"
    participant API as "GitHub/翻訳API"

    PR->>GH: プルリクエスト作成/更新
    GH->>AT: 自動翻訳ジョブ開始
    AT->>API: 対象ファイルの内容・差分取得リクエスト
    API-->>AT: ファイルデータを返却
    AT->>API: 翻訳リクエスト送信(Markdown/JSON)
    API-->>AT: 翻訳結果を返却
    AT->>API: ファイル更新・プルリクエストへのコメント投稿
Loading

音声認識タイムアウト処理

sequenceDiagram
    participant U as "ユーザー"
    participant SR as "SpeechRecognition"
    participant SD as "SilenceDetection"

    U->>SR: 音声入力開始
    SR->>SD: タイマー(5秒)開始
    SD->>SR: 無音が一定時間続く
    SR->>SR: 音声認識自動停止処理実行
    SR->>U: 結果を返却
Loading

Possibly related PRs

  • ライセンス文言更新 #203
    ライセンス文書の更新に関する変更内容が、今回のライセンスドキュメントの追加・更新と密接な関係があります。
  • ドキュメント更新 #229
    多言語対応のライセンスドキュメント更新に関する変更が、今回の実装と共通のコードレベルの改修を伴っています。
  • 本番リリース #201
    二重ライセンスモデルの明確化およびライセンス条件の修正が、今回のライセンス項目に関する変更と重なる部分があります。

📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e1b612f and 068d2d4.

📒 Files selected for processing (1)
  • src/components/slides.tsx (2 hunks)
🔇 Additional comments (4)
src/components/slides.tsx (4)

165-178: スライドサイズ計算の実装は良好です。

このcalculateSlideSize関数は、レスポンシブなスライド表示のために適切に実装されています。アスペクト比(16:9)を維持しつつ、ビューポートの高さと幅の制約内でスライドサイズを計算するアプローチは素晴らしいです。コメントも明確で理解しやすいです。


180-180: 計算結果の保存と再利用は効率的です。

関数の結果を一度変数に保存して再利用することで、再計算を避けています。この実装は効率的です。


183-186: フレックスボックスレイアウトの導入は適切です。

フラグメント(<>)からdiv要素に変更し、フレックスボックスを使用してコンテンツを中央揃えにする実装は、UIの一貫性と視覚的な整理の観点から良い選択です。Tailwindのクラスと直接のスタイル適用のバランスも良好です。


189-193: 計算されたサイズの適用は適切です。

ハードコードされた値から計算されたslideSizeの値への変更は、レスポンシブデザインの観点から適切です。スライド本体とコントロール部分の両方に一貫して適用されており、UIの整合性が保たれています。

Also applies to: 199-202

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (15)
src/components/settings/advancedSettings.tsx (1)

143-168: 音声認識タイムアウト設定UIの実装

無音検出のタイムアウト時間を調整するための設定UIが適切に実装されています。スライダーの範囲(0〜4秒)と刻み(0.1秒)は適切に設定されており、現在の値も表示されています。

ただし、152行目に「秒」という日本語のハードコードされた文字列があります。これは国際化の観点から翻訳ファイルに移動することをお勧めします。

以下のように変更することを提案します:

-            {t('NoSpeechTimeout')}: {noSpeechTimeout.toFixed(1)}秒
+            {t('NoSpeechTimeout')}: {noSpeechTimeout.toFixed(1)}{t('SecondUnit')}

そして翻訳ファイルに"SecondUnit": "秒"を追加してください。

README.md (1)

220-228: Cubism Coreのセットアップ指示についての提案
Cubism Coreの必要ファイルの設置手順が簡略かつ明確になっており、内容は良好です。なお、URLがプレーンテキスト(ベアURL)として記載されているため、Markdownのリンク記法(例:[公式サイト](https://www.live2d.com/sdk/download/web/))に変更すると可読性が向上します。

[review]

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

228-228: Bare URL used
null

(MD034, no-bare-urls)

.github/workflows/old/issue-analyzer.yml (2)

24-26: 古いバージョンのCheckoutアクションの更新提案
actions/checkout@v2 が使用されていますが、最新のバージョン(例: v3以降)に更新することで、より安定した動作や新機能の恩恵が得られる可能性があります。

🧰 Tools
🪛 actionlint (1.7.4)

25-25: the runner of "actions/checkout@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


27-29: Pythonセットアップアクションのバージョン更新の検討
actions/setup-python@v2 が使用されています。最新の安定版(例: v4)への更新を検討してください。

🧰 Tools
🪛 actionlint (1.7.4)

28-28: the runner of "actions/setup-python@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

.github/workflows/old/auto-translate.yml (2)

16-20: Checkoutアクションのバージョン見直しの提案
actions/checkout@v3 が利用されていますが、static analysisでは最新版ではない可能性が指摘されています。可能であれば、最新バージョンへの更新を検討してください。

🧰 Tools
🪛 actionlint (1.7.4)

17-17: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


21-25: Pythonセットアップアクションの確認
actions/setup-python@v4 が使用されています。こちらも利用可能な最新バージョンに更新することで、セキュリティやパフォーマンスの向上が期待できます。

🧰 Tools
🪛 actionlint (1.7.4)

22-22: the runner of "actions/setup-python@v4" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

docs/README_ko.md (2)

217-223: Cubism Coreセットアップ手順の改善提案
Cubism Coreに必要なファイルの配置手順が明記され、分かりやすくなっています。なお、ダウンロード先として記載されているURLが生のテキストとなっているので、Markdownリンク形式に変更することを検討するとより望ましいです。

[review]


225-226: ベアURLの記述に関する指摘
リンク先URLが生テキスト(ベアURL)として記載されています。Markdownのリンク記法を用いて、リンクテキストと共に表示すると、読みやすさが改善されるでしょう。

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

225-225: Bare URL used
null

(MD034, no-bare-urls)

docs/license.md (1)

62-63: Live2D利用時追加料金条項の追加確認
Live2D機能を利用する場合の基本ライセンス料金に対して25%の追加料金が発生する旨が記載されています。文章としては詳細かつ実務的な注意事項を含み、後から追加料金発生時の手続きにも言及している点が評価できます。

※必要に応じて、文中の複合形容詞のハイフン挿入など、言語表現の微調整もご検討ください。

docs/license_en.md (1)

60-60: Live2D追加料金条項の確認
Live2D機能の利用に際し、追加料金25%が発生する旨が具体的に記載されています。記述内容は明確ですが、コンパウンド形容詞のハイフン挿入など、言語ツールの指摘も参考にさらなる調整を検討してください。

🧰 Tools
🪛 LanguageTool

[uncategorized] ~60-~60: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ive2D, the conditions described in the "Third Party Licenses" section below also apply. Fo...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

scripts/test_auto_translate.py (2)

4-6: 未使用のインポートがあります

jsonbase64モジュールがインポートされていますが、コード中で使用されていません。未使用のインポートは削除することをお勧めします。

 import unittest
 from unittest.mock import patch, MagicMock
 import os
-import json
 import requests
-import base64
 import dotenv
🧰 Tools
🪛 Ruff (0.8.2)

4-4: json imported but unused

Remove unused import: json

(F401)


6-6: base64 imported but unused

Remove unused import: base64

(F401)


328-328: 未使用の変数が割り当てられています

変数result_stateが割り当てられていますが、使用されていません。

-        result_state = finalize_translation(state)
+        finalize_translation(state)
🧰 Tools
🪛 Ruff (0.8.2)

328-328: Local variable result_state is assigned to but never used

Remove assignment to unused variable result_state

(F841)

docs/auto_translate.md (1)

105-105: 表現の改善提案

「翻訳品質を向上させることができます」という表現は冗長です。より簡潔な表現に修正することを検討してください。

- - 翻訳プロンプトを調整することで、翻訳品質を向上させることができます
+ - 翻訳プロンプトを調整することで、翻訳品質を向上できます
🧰 Tools
🪛 LanguageTool

[uncategorized] ~105-~105: 「ことができる」という表現は冗長な可能性があります。
Context: ...翻訳品質に問題がある - 翻訳プロンプトを調整することで、翻訳品質を向上させることができます - scripts/auto_translate.pyの`transl...

(DOUSI_KOTOGADEKIRU)

src/components/messageInputContainer.tsx (2)

35-55: 複数のRefを用いた管理の明確化
音声解析や無音検出の状態管理に多数のRefを利用しています。対象が増えるほど混乱を招きやすいため、次の点を検討すると保守が容易になります:

  • ひとつの管理用クラスやカスタムフックにまとめる
  • ドキュメントコメントを付与して変数ごとの役割を明確化する

154-216: startSilenceDetection の定期チェック
250msごとの無音チェックは十分に細かく、かつバッテリーヘの影響も最小限と思われます。無音区間が 5 秒以上 or noSpeechTimeout を経過した際の条件に応じて送信・停止するロジックも明確です。ただしユーザー環境による計測ずれを考慮して、実際の利用状況に合わせたチューニングや追加ログの検討があるとより堅牢になります。

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c295b8f and e1b612f.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (43)
  • .cursorrules (1 hunks)
  • .env.example (1 hunks)
  • .eslintrc.json (1 hunks)
  • .github/workflows/old/auto-translate.yml (1 hunks)
  • .github/workflows/old/issue-analyzer.yml (1 hunks)
  • .prettierignore (1 hunks)
  • README.md (2 hunks)
  • docs/README_en.md (2 hunks)
  • docs/README_ko.md (2 hunks)
  • docs/README_zh.md (2 hunks)
  • docs/auto_translate.md (1 hunks)
  • docs/license-faq.md (1 hunks)
  • docs/license-faq_en.md (1 hunks)
  • docs/license.md (4 hunks)
  • docs/license_en.md (3 hunks)
  • locales/en/translation.json (2 hunks)
  • locales/ja/translation.json (2 hunks)
  • locales/ko/translation.json (1 hunks)
  • locales/zh/translation.json (1 hunks)
  • package.json (1 hunks)
  • requirements.txt (1 hunks)
  • scripts/.gitignore (1 hunks)
  • scripts/README.md (1 hunks)
  • scripts/auto_translate.py (1 hunks)
  • scripts/requirements.txt (1 hunks)
  • scripts/test_auto_translate.py (1 hunks)
  • src/components/Live2DComponent.tsx (1 hunks)
  • src/components/iconButton.tsx (2 hunks)
  • src/components/live2DViewer.tsx (1 hunks)
  • src/components/messageInputContainer.tsx (6 hunks)
  • src/components/settings/advancedSettings.tsx (2 hunks)
  • src/components/settings/modelProvider.tsx (2 hunks)
  • src/components/settings/slideConvert.tsx (1 hunks)
  • src/features/chat/openAIAudioChat.ts (1 hunks)
  • src/features/stores/settings.ts (3 hunks)
  • src/features/vrmViewer/model.ts (1 hunks)
  • src/features/vrmViewer/viewer.ts (1 hunks)
  • src/lib/VRMAnimation/VRMAnimationLoaderPlugin.ts (1 hunks)
  • src/lib/VRMAnimation/loadVRMAnimation.ts (1 hunks)
  • src/lib/VRMLookAtSmootherLoaderPlugin/VRMLookAtSmootherLoaderPlugin.ts (1 hunks)
  • src/types/charcoal-ui.d.ts (1 hunks)
  • tailwind.config.js (1 hunks)
  • tsconfig.json (1 hunks)
✅ Files skipped from review due to trivial changes (10)
  • .prettierignore
  • scripts/.gitignore
  • src/lib/VRMLookAtSmootherLoaderPlugin/VRMLookAtSmootherLoaderPlugin.ts
  • src/features/vrmViewer/viewer.ts
  • src/features/chat/openAIAudioChat.ts
  • src/lib/VRMAnimation/VRMAnimationLoaderPlugin.ts
  • src/features/vrmViewer/model.ts
  • src/lib/VRMAnimation/loadVRMAnimation.ts
  • src/components/Live2DComponent.tsx
  • requirements.txt
🧰 Additional context used
🪛 LanguageTool
docs/license_en.md

[uncategorized] ~60-~60: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ive2D, the conditions described in the "Third Party Licenses" section below also apply. Fo...

(EN_COMPOUND_ADJECTIVE_INTERNAL)


[uncategorized] ~83-~83: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ns, please contact us individually. ## Third Party Licenses ### Live2D Cubism SDK This a...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/auto_translate.md

[uncategorized] ~105-~105: 「ことができる」という表現は冗長な可能性があります。
Context: ...翻訳品質に問題がある - 翻訳プロンプトを調整することで、翻訳品質を向上させることができます - scripts/auto_translate.pyの`transl...

(DOUSI_KOTOGADEKIRU)

🪛 markdownlint-cli2 (0.17.2)
README.md

228-228: Bare URL used
null

(MD034, no-bare-urls)

docs/README_ko.md

225-225: Bare URL used
null

(MD034, no-bare-urls)

scripts/README.md

3-3: Images should have alternate text (alt text)
null

(MD045, no-alt-text)

🪛 actionlint (1.7.4)
.github/workflows/old/issue-analyzer.yml

25-25: the runner of "actions/checkout@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


28-28: the runner of "actions/setup-python@v2" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

.github/workflows/old/auto-translate.yml

17-17: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


22-22: the runner of "actions/setup-python@v4" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 Ruff (0.8.2)
scripts/test_auto_translate.py

4-4: json imported but unused

Remove unused import: json

(F401)


6-6: base64 imported but unused

Remove unused import: base64

(F401)


328-328: Local variable result_state is assigned to but never used

Remove assignment to unused variable result_state

(F841)

scripts/auto_translate.py

6-6: re imported but unused

Remove unused import: re

(F401)

🔇 Additional comments (55)
tailwind.config.js (1)

59-59: @tailwindcss/line-clampプラグインが削除されています

Tailwind CSS v3.3以降では、line-clampの機能がコアに統合されたため、このプラグインは不要になりました。この変更は適切です。

-  plugins: [require('@tailwindcss/line-clamp')],
+  plugins: [],
docs/license-faq_en.md (1)

28-29: ライセンスFAQに評価利用に関する重要な注釈が追加されました

実装前または評価フェーズ中の社内トライアル利用がライセンス料金から免除されることを明確にしています。この追加は、ユーザーにとって重要な情報を提供し、商用利用と評価利用の境界を明確にしています。

package.json (1)

68-68: @types/threeのバージョン指定が柔軟になりました

固定バージョン"0.167.1"から、キャレット記号を使った"^0.167.1"に変更されました。これにより、互換性を保ちながらマイナーバージョンの更新が可能になります。

この変更により、パッチバージョンの更新が自動的に取り込まれるようになり、依存関係の管理が容易になります。

src/components/iconButton.tsx (2)

30-33: pixiv-iconのnameプロパティに明示的な文字列変換が追加されました

アイコン名をString()を使って明示的に文字列型に変換することで、型の安全性が向上しています。この変更により、非文字列型の値が誤って渡されるのを防ぎます。


44-44: iconNameの明示的な文字列変換の追加

同様に、通常のアイコン表示時にもString(iconName)を使用して、値が確実に文字列として処理されるようになりました。これは一貫した型処理を実現し、潜在的なバグを予防します。

.eslintrc.json (1)

7-7: ignorePatternsに必要なパターンが追加されました

ESLintの設定にscripts/**.mypy_cache/**パターンを追加することで、これらのディレクトリがESLintによる検査から除外されるようになりました。これはPython関連ファイルやビルドスクリプトなどに対して適切な変更です。

src/components/settings/slideConvert.tsx (3)

139-141: AIモデルのバージョン更新が適切に行われています

gpt-4o-miniからgpt-4o-mini-2024-07-18に更新されており、日付付きの具体的なモデルバージョンを指定することで、安定性が向上します。


143-145: モデル更新が適切に実施されています

gpt-4o-2024-08-06からgpt-4.5-preview-2025-02-27への更新は、より新しいモデルへの移行を示しています。モデル名が適切に変更されています。


153-155: 新しいAnthropicモデルが追加されました

claude-3-7-sonnet-20250219オプションの追加により、ユーザーが最新のモデルを使用できるようになりました。

docs/license-faq.md (1)

28-28: ライセンスに関する重要な補足情報が追加されました

導入前や検討段階での試験的な社内利用についてはライセンス費用が発生しないという明確な説明が追加されました。これにより、ユーザーは評価期間中に製品を試用できることが明確になります。

src/components/settings/advancedSettings.tsx (1)

21-21: 新しい設定項目の状態変数が追加されました

無音検出のタイムアウト設定のための状態変数noSpeechTimeoutが適切に追加されています。

.env.example (1)

107-107: サポート言語リストの拡張を確認しました

NEXT_PUBLIC_SELECT_LANGUAGE環境変数のコメントが更新され、サポートされる言語のリストが拡張されました。これにより、より多くの言語オプションがユーザーに提供されることが明確になりました。

.cursorrules (1)

228-239: ライセンスドキュメントのセクション追加は適切です

ライセンスに関するドキュメントセクションが適切に追加されています。これにより、ライセンス関連ファイルが整理され、プロジェクトのドキュメント構造が改善されました。複数言語でのライセンス情報提供は国際的なユーザーにとって価値があります。

src/types/charcoal-ui.d.ts (1)

1-18: 型定義の追加によりタイプセーフティが向上しています

@charcoal-ui/iconsモジュールとpixiv-icon要素のための型定義の追加は適切です。これにより:

  1. KnownIconTypeインターフェースでアイコンの型安全性が確保されます
  2. JSX名前空間の拡張により、カスタム要素pixiv-iconが適切に型付けされます
  3. コンポーネント内での使用時に型チェックが機能し、バグの早期発見に役立ちます

この変更はTypeScriptのベストプラクティスに従っており、プロジェクトの型安全性を向上させます。

src/components/live2DViewer.tsx (1)

86-86:

Details

✅ Verification successful

Live2Dコンポーネントのレンダリングロジックが簡素化されました

レンダリングロジックがisCubismCoreLoadedのチェックのみに簡素化されています。これにより、不要な複雑さが排除されました。

しかし、この変更により、以前の実装で存在していたLive2Dスクリプトのロード状態チェックとエラーハンドリングロジックが削除されています。Live2Dコンポーネントが依存するすべてのリソースが適切にロードされることを確認してください。


🏁 Script executed:

#!/bin/bash
# Live2Dコンポーネントの依存関係をチェック

# Script引数のロードチェック
grep -r "isLive2dLoaded" src/
grep -r "setIsLive2dLoaded" src/

# Live2Dコンポーネント内での依存関係チェック
cat src/components/Live2DComponent.tsx 2>/dev/null || echo "Live2DComponent.tsxファイルが見つかりません"

Length of output: 6193


Live2Dコンポーネントの依存リソースチェックとエラーハンドリングについて

  • live2DViewer.tsxでは、レンダリング条件を isCubismCoreLoaded のみに変更していますが、Cubism Core自体のロード状況が外部で十分に管理されており、依存リソースの読み込みは問題なさそうです。
  • Live2DComponent.tsxloadLive2DModel 関数内で、try-catch によるエラーハンドリングが実装され、新しいモデルのロード失敗時はエラーがコンソールに記録されるため、最低限のエラー処理は確保されています。
  • ホームストアには引き続き isLive2dLoadedsetIsLive2dLoaded が存在しますが、今回のリファクタリングの意図(レンダリングロジックの簡素化)と照らすと、不要な複雑性が除去されていると判断できます。

もし将来的にユーザーへのフィードバック(エラーメッセージのUI表示等)が必要であれば、その対応を検討してくださいが、現状では依存するリソースのロード確認とエラーハンドリングは十分に行われています。

locales/ko/translation.json (2)

160-160: 翻訳の更新を確認しました!

"페이지가 새로고침됩니다." から "페이지가 다시 로드됩니다." への変更は、より自然な表現になっています。


162-163: 新しい無音検出タイムアウト機能の翻訳が追加されました!

"NoSpeechTimeout"と"NoSpeechTimeoutInfo"の韓国語訳が適切に追加されています。これにより、音声入力中の無音状態を検出して自動的に入力を終了する機能が韓国語ユーザーにも理解しやすくなります。

src/features/stores/settings.ts (3)

152-152: 新しい設定パラメータの追加!

General インターフェースに noSpeechTimeout: number を追加したことで、音声認識の無音検出タイムアウト機能を設定可能にしています。


315-316: 無音検出タイムアウトのデフォルト値設定!

環境変数 NEXT_PUBLIC_NO_SPEECH_TIMEOUT から値を取得し、設定されていない場合は 5.0 秒をデフォルト値として使用しています。これは音声認識機能の使いやすさを向上させるために適切な初期値です。


443-443: 状態の永続化に追加!

noSpeechTimeout の値を永続化することで、ユーザーの設定が保持されるようになっています。

src/components/settings/modelProvider.tsx (2)

380-393: OpenAI モデルリストの更新!

OpenAI の最新モデル構成に合わせてモデルリストが更新されています:

  • gpt-4o-mini-2024-07-18 を追加
  • gpt-4.5-preview-2025-02-27 を追加
  • 古いモデルオプションを削除

これによりユーザーが最新のAIモデルを利用できるようになります。


437-439: Anthropic の新しいモデルを追加!

Anthropic の新しいモデル claude-3-7-sonnet-20250219 が追加されています。最新のAIモデルを提供することでユーザー体験が向上します。

locales/ja/translation.json (2)

163-164: 無音検出タイムアウト機能の日本語訳を追加!

"NoSpeechTimeout"と"NoSpeechTimeoutInfo"の日本語訳が適切に追加されています。これにより、日本語ユーザーも新機能を理解しやすくなります。説明文も明確で、0秒に設定すると機能が無効になる点も明記されています。


202-203: 音声検出エラーメッセージの追加!

Toastsセクションに"NoSpeechDetected"(音声が検出されませんでした)というエラーメッセージが追加されています。これにより、音声認識中に問題が発生した場合、ユーザーに適切なフィードバックを提供できます。

README.md (2)

214-217: Live2D説明の更新に関する確認
Live2Dに関する記述が更新され、Cubism 3以降のモデルサポートや公式SDKの使用が明確に記載されています。今後SDKのバージョン更新などにも注意して情報を維持してください。


335-337: 新規貢献者リンクの追加確認
新たに「micchi99」の貢献者リンクが追加されています。一貫したスタイルで表示されており、問題ありません。

locales/zh/translation.json (1)

159-163: 翻訳文言の更新確認
「LocalStorageReset」、「LocalStorageResetInfo」、「LocalStorageResetButton」がより自然な表現に更新され、さらに「NoSpeechTimeout」と「NoSpeechTimeoutInfo」の新規追加により、無音検出タイムアウトの情報が明確になっています。全体として一貫性が保たれており、問題は見受けられません。

docs/README_ko.md (2)

211-213: Live2D仕様の説明更新確認
Live2Dに関する記述が更新され、Cubism 3 이상의 모델 지원과 공식 SDK 사용에 대한 명확한 설명이 추가되었습니다。内容が整理されており、理解しやすくなっています。


332-334: 新規貢献者リンクの追加確認
「micchi99」の貢献者リンクが追加されています。一貫性が保たれており、特に問題はありません。

docs/README_zh.md (1)

208-227: Live2D仕様セクションの追加確認
新たに「关于Live2D规格」というセクションが追加され、Live2D表示に使用する非公式ライブラリの説明、必要なファイル配置、ならびにライセンス上の留意点について明確に記載されています。内容は更新された情報と合致しており、他の言語版ドキュメントとの整合性も期待できます。

locales/en/translation.json (2)

162-164: 新規スピーチタイムアウト設定の追加確認
" NoSpeechTimeout" と "NoSpeechTimeoutInfo" のエントリが追加され、音声入力における無音時のタイムアウト動作がユーザーに対して明示されています。記述内容は簡潔かつ明確です。


201-203: エラーメッセージの拡充確認
"SpeechRecognitionError" の文言修正および "NoSpeechDetected" の追加により、音声認識時のエラーハンドリングが改善されています。全体としてフォーマットは整っており、他のローカライズファイルとの一貫性も保たれています。

docs/license.md (3)

20-20: 試験的社内利用の免除条項追加確認
「導入前や検討段階での試験的な社内利用については、ライセンス費用は発生しません」という条項が追加され、利用開始前の試用フェーズでの費用負担が免除される旨が明示されています。


29-30: 再配布条件の明確化確認
「再配布・再販は1社まで可能、再配布先での拠点数やユーザー数は無制限」という記述により、利用範囲がより詳細に明示され、利用者に対するガイドラインとして明確です。


85-98: サードパーティライセンスセクションの追加確認
「## サードパーティライセンス」セクションでは、Live2D Cubism SDKに関する利用条件と法的リスクについて詳細に説明されており、重要な留意事項が明記されています。利用者が遵守すべき条件を十分に理解できる内容となっています。

docs/license_en.md (2)

19-20: Trial internal use clauseの追加確認
「trial internal use during pre-implementation or evaluation phase は免除」という記述が追加され、初期試用フェーズにおけるライセンス費用の免除が明示されています。


83-94: Third Party Licensesセクションの追加確認
新たに追加された「## Third Party Licenses」セクションでは、Live2D Cubism SDKの利用条件や制限が詳細に記され、商用利用時の必要手続きについても明記されています。内容は十分に詳細で、利用者にとって重要な情報となっています。

🧰 Tools
🪛 LanguageTool

[uncategorized] ~83-~83: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...ns, please contact us individually. ## Third Party Licenses ### Live2D Cubism SDK This a...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

docs/README_en.md (3)

213-218: Live2D仕様のアップデート確認
Live2Dに関する記述が更新され、Cubism 3以降のモデルに対応している点や、公式SDKを使用している旨が明記されています。情報が簡潔かつ的確にまとめられており、ユーザーにとって分かりやすい内容です。


221-230: Cubism Coreファイル配置の説明確認
live2dcubismcore.min.js ファイルを public/scripts に配置する必要がある旨、及びダウンロード先と注意事項が具体的に記載されています。手順が整理されており、誤解を招くことはありません。


336-338: サポーターリストの更新確認
新たにGitHubユーザー「micchi99」がサポーターリストに追加され、コミュニティ内での支援体制の拡充が反映されています。

scripts/README.md (1)

1-66: READMEファイルの追加を確認しました

自動翻訳スクリプトとテストの説明が明確に記載されており、環境設定、必要な変数、エラーハンドリング、テスト実行方法などの重要な情報が適切に構成されています。ドキュメントは開発者にとって有用な内容です。

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

3-3: Images should have alternate text (alt text)
null

(MD045, no-alt-text)

tsconfig.json (3)

12-12: モジュール解決方式の変更が適切です

"moduleResolution": "bundler" への変更は、最新のTypeScriptモジュール解決戦略に適応しており、バンドラーベースのプロジェクト構成に適しています。


20-20: 型定義のルートディレクトリの設定が追加されました

typeRoots の設定追加により、カスタム型定義の検索場所が明示的に定義され、型解決の正確性が向上します。


27-33: includeおよびexcludeパターンの更新が適切です

src/types/**/*.d.ts の追加によりカスタム型定義ファイルが正しく認識されるようになりました。また、.mypy_cachescriptsディレクトリをコンパイル対象から除外することで、不要なファイルの処理を防ぎ、コンパイル効率が向上します。

scripts/test_auto_translate.py (2)

21-24: 環境変数の検証が適切に実装されています

OpenAI APIキーの存在確認を行い、存在しない場合は明確なエラーメッセージを表示しています。これはテスト実行の前提条件を明確にする良い実践です。


1-511: テストケースが包括的に実装されています

自動翻訳機能の各コンポーネントに対して、成功ケースとエラーケースの両方をカバーする包括的なテストが実装されています。モックを使用して外部依存関係を適切に隔離し、実際のAPIを使用するテストも含まれています。これは堅牢なテスト戦略です。

🧰 Tools
🪛 Ruff (0.8.2)

4-4: json imported but unused

Remove unused import: json

(F401)


6-6: base64 imported but unused

Remove unused import: base64

(F401)


328-328: Local variable result_state is assigned to but never used

Remove assignment to unused variable result_state

(F841)

docs/auto_translate.md (1)

1-107: 自動翻訳機能のドキュメントが適切に作成されています

機能概要、対象ファイル、実行タイミング、設定方法、動作の仕組み、トラブルシューティングなど、自動翻訳機能に関する重要な情報が明確に説明されています。ユーザーが機能を理解し設定するための十分な情報が提供されています。

🧰 Tools
🪛 LanguageTool

[uncategorized] ~105-~105: 「ことができる」という表現は冗長な可能性があります。
Context: ...翻訳品質に問題がある - 翻訳プロンプトを調整することで、翻訳品質を向上させることができます - scripts/auto_translate.pyの`transl...

(DOUSI_KOTOGADEKIRU)

scripts/requirements.txt (1)

1-36: 依存関係の固定バージョンを定期的に確認してください
このファイルでは、多くのライブラリがピン止めされています。時間が経過すると、セキュリティ脆弱性修正や機能更新が入った上位バージョンがリリースされる可能性があります。定期的にアップデートや脆弱性情報を確認し、必要に応じてバージョンを上げることをおすすめします。

src/components/messageInputContainer.tsx (7)

13-16: 初期タイムアウト常数の導入
INITIAL_SPEECH_TIMEOUT を定義している点は明確でわかりやすいです。5秒という値はユーザー体感と実装意図を踏まえて設定されているようですが、将来的にカスタマイズが必要になる場合は設定ストアに入れて変更しやすくする方法も考慮してください。


62-68: 初期音声検出タイマーのクリア関数
clearInitialSpeechCheckTimer が小さくまとまっており可読性が高いです。タイマー解除の分岐も適切に処理されています。タイマー操作周りは漏れがないか定期的に確認してください。


94-132: getVoiceLanguageCode の useCallback 化
getVoiceLanguageCodeuseCallback でラップし、依存配列を空にすることで一度だけ生成する設計ですね。現状は selectLanguage を外部から引数で受けるため、レンダリング都度問題はないかもしれませんが、将来的に内部で selectLanguage を参照する場合には依存が必要になる点だけご注意ください。


134-146: 無音検出のクリア関数とRef設定
clearSilenceDetection 関数とそれをRefに保存する流れはわかりやすいです。複数のタイマー系Refがあるため、リソースを忘れず適切に解放できているか注意してください。


148-152: stopListening の先行宣言
stopListening を先に用意してから実装を参照する構造は、依存関係の循環を避けようとする方針として良いです。万が一呼び出し順序が変化した場合でもコードが破綻しないよう、テストを十分に行うと安心です。


283-357: stopListeningImpl の実装
音声トラックの停止から MediaRecorder の処理完了待ちまでをしっかり同期的に行っており、ユーザーが意図しない途中切れが防止されています。特に audioChunksRef を使った処理フローは明確です。

  • sendAudioBufferRef.current が存在すれば送信を呼び出す設計は流用性を高めています。
  • タイマーやフラグを確実にクリアする点も好印象です。
    今のところ大きな懸念はありません。

359-421: SpeechRecognition のイベントハンドラ登録
開始時や終了時、途中のフラグ初期化などが一通り網羅されています。特に initialSpeechCheckTimerRef のクリアや無音検出の開始トリガーなどが onstart に実装されているのは合理的です。

  • onspeechstart 時のログ出力で速報を入れている点もデバッグしやすく好印象です。
  • エラー時に全タイマーをクリアし stopListening を呼ぶ設計はフェイルセーフになっています。

import requests
import base64
import difflib
import re
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

未使用の re インポートを削除してください
このファイル内では re の関数や定数が参照されていないようですので、不要であれば以下のように削除することをおすすめします。

- import re
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import re
🧰 Tools
🪛 Ruff (0.8.2)

6-6: re imported but unused

Remove unused import: re

(F401)

@tegnike tegnike merged commit 1f7a695 into develop Feb 28, 2025
4 checks passed
@tegnike tegnike deleted the feature/fix-bugs4 branch February 28, 2025 09:44
@coderabbitai coderabbitai bot mentioned this pull request Feb 28, 2025
terisuke pushed a commit to terisuke/aituber-kit that referenced this pull request Dec 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants