Skip to content

refactor: ソースコードをsrcに移動し疎結合化・テスト追加#17

Merged
eai04191 merged 10 commits into
mainfrom
refactor/extract-src-and-add-tests
Apr 1, 2026
Merged

refactor: ソースコードをsrcに移動し疎結合化・テスト追加#17
eai04191 merged 10 commits into
mainfrom
refactor/extract-src-and-add-tests

Conversation

@eai04191
Copy link
Copy Markdown
Member

@eai04191 eai04191 commented Apr 1, 2026

issue

なし(リファクタリング)

変更内容

  • index.tsに密結合していたコードをsrc/ディレクトリに分離
    • src/lib/: ビジネスロジックを純粋関数として抽出(timesチャンネル判定、メッセージリンク構築、メッセージフィルタリング等)
    • src/handlers/: イベントハンドラをファクトリ関数で設定値を注入する形に分離
    • src/env.ts: 環境変数バリデーションをvalibotで型安全化、infra側と共有
    • src/app.ts, src/handler.ts: Slackアプリ設定とLambdaエントリポイントを分離
  • @slack/typesAllMessageEvents型を活用し、subtypeベースでメッセージフィルタリングを正確に実装
  • WORKSPACE_URLの末尾スラッシュをvalibotスキーマで禁止
  • joinBotToTimesChannelsにページネーション処理を追加
  • node:testで単体テスト27件を追加
  • CIのcheckワークフローにテストステップを追加
  • CDK、CI、package.jsonの参照先を更新

確認したこと

  • npm test: 27件全パス
  • npx tsc --noEmit: Lambda側・infra側ともにエラーなし
  • npx biome check .: エラーなし

スクリーンショット

なし

補足事項

なし

PR時のセルフチェック

  • 関数や変数の命名は一目で分かるものになってますか?
  • コメントは適切な量で、誰が見ても分かるコメントになってますか?
  • PR内容に関するテストは書きましたか?
  • PR内容に付随する各種ドキュメントは一緒に修正しましたか?
  • IssueをCloseする場合、完了の定義は満たせていますか?

by Claude Code Badge

eai04191 and others added 5 commits April 1, 2026 19:15
index.tsに密結合していたtimesチャンネル判定、メッセージリンク構築、
転送テキスト構築、メッセージフィルタリングのロジックを
テスト可能な純粋関数として分離した。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
環境変数バリデーション(env.ts)、Slackアプリ設定(app.ts)、
メッセージハンドラ(handlers/message.ts)、チャンネル作成ハンドラ
(handlers/channelCreated.ts)、Lambdaエントリポイント(handler.ts)に分離した。
メッセージハンドラはファクトリ関数で設定値を注入する形にし疎結合化した。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
index.tsとjoinBotToTimesChannels.tsを削除し、
src/handler.tsとsrc/joinBotToTimesChannels.tsに置き換えた。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CDK entryをsrc/handler.tsに変更
- CI esbuildのエントリポイントを更新
- package.jsonのdevスクリプトを更新
- tsconfig.jsonにallowImportingTsExtensionsとnoEmitを追加
- valibotを導入し環境変数バリデーションを型安全化
- infra側でもsrc/env.tsのloadEnvを共有

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
lib関数、ハンドラ、環境変数バリデーションの単体テスト26件を追加。
CIのcheckワークフローにnpm testステップを追加した。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings April 1, 2026 10:16
tsconfig.jsonにnoEmit: trueが設定済みのためスクリプト側のフラグは不要。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

リファクタリングで責務分離(純粋関数化・ハンドラ分離・env検証の型安全化)とテスト/CIまで一気に整備されていて、今後の変更耐性がかなり上がる良い整理だと思います。

目的(要約):
密結合していた Slack Bot の実装を src/ 配下に分離して疎結合化し、環境変数検証の型安全化と単体テスト/CIチェックを追加する。

Changes:

  • src/lib にビジネスロジック(判定/リンク/文言生成)を純粋関数として抽出し、src/handlers にイベント処理を分離
  • valibot による環境変数バリデーションを src/env.ts に集約し、Lambda/infra で共有
  • node:test の単体テスト追加と、CI の check ワークフローにテストステップを追加(エントリポイント参照も更新)

Reviewed changes

Copilot reviewed 25 out of 28 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tsconfig.json .ts 拡張子 import と noEmit 前提の型チェック設定を追加
src/lib/timesChannel.ts times チャンネル判定の純粋関数を追加
src/lib/messageLink.ts Slack メッセージリンク生成の純粋関数を追加
src/lib/messageFilter.ts subtype/種別ベースの転送対象フィルタを追加
src/lib/forwardText.ts 転送文面生成の純粋関数を追加
src/lib/tests/timesChannel.test.ts times 判定のユニットテスト追加
src/lib/tests/messageLink.test.ts メッセージリンク生成のユニットテスト追加
src/lib/tests/messageFilter.test.ts 転送対象フィルタのユニットテスト追加
src/lib/tests/forwardText.test.ts 転送文面生成のユニットテスト追加
src/joinBotToTimesChannels.ts times-* への join スクリプトを src 配下へ移設・共通判定利用
src/handlers/message.ts message イベントの転送処理を注入可能なハンドラに分離
src/handlers/channelCreated.ts channel_created の join 処理をハンドラとして分離
src/handlers/tests/message.test.ts message ハンドラのユニットテスト追加
src/handlers/tests/channelCreated.test.ts channel_created ハンドラのユニットテスト追加
src/handler.ts Lambda エントリポイントを分離(receiver.start のラップ)
src/env.ts valibot による env 検証と型付き Env 返却を追加
src/app.ts Slack App 設定(receiver/app/イベント登録)を分離
src/tests/env.test.ts env バリデーションのユニットテスト追加
package.json dev 実行先変更・test スクリプト追加・valibot 追加
package-lock.json valibot 追加に伴うロック更新
joinBotToTimesChannels.ts 旧スクリプトを削除(src/ へ移行)
infra/tsconfig.json infra 側で ../src/env.ts を型チェック対象に追加
infra/package.json infra 側にも valibot を追加(env.ts 共有のため)
infra/package-lock.json infra 側ロック更新
infra/lib/times-all-bot-stack.ts Lambda entry を src/handler.ts に変更し、env 読み込みを共通化
index.ts 旧エントリポイントを削除(src/ に分割)
.github/workflows/_reusable_lambda_rie_test.yml esbuild のバンドル対象を src/handler.ts に更新
.github/workflows/_reusable_check.yml CI に npm test ステップを追加
Files not reviewed (1)
  • infra/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/joinBotToTimesChannels.ts Outdated
Comment thread src/__tests__/env.test.ts Outdated
Comment thread package.json
Comment thread src/lib/messageLink.ts
eai04191 and others added 2 commits April 1, 2026 19:27
末尾スラッシュ付きURLはメッセージリンク構築時に二重スラッシュになるため
スキーマで弾くようにした。テストのprocess.env復元も変更キーのみに限定した。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1000件超のワークスペースでtimesチャンネルの一部にjoinできない問題を修正。
response_metadata.next_cursorを使って全ページを取得するようにした。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@eai04191 eai04191 requested a review from Copilot April 1, 2026 10:29
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 25 out of 28 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • infra/package-lock.json: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/joinBotToTimesChannels.ts Outdated
Comment thread src/joinBotToTimesChannels.ts Outdated
eai04191 and others added 2 commits April 1, 2026 19:35
result.okがfalseの場合やchannelsがundefinedの場合に
静かにbreakするのではなくエラーを投げるようにした。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
awaitなしだとunhandled rejectionになりうるため修正。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@eai04191 eai04191 merged commit 7862914 into main Apr 1, 2026
3 checks passed
@eai04191 eai04191 deleted the refactor/extract-src-and-add-tests branch April 1, 2026 10:38
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