概要
sandboxチャンネルにてwordhero/crossword(ボード探索ゲーム)が動作していないとの報告あり (2026-07-22)。同種の不具合は過去にも#911として報告・修正済み。
調査内容
直近のmasterへのコミットは2026-07-09時点で止まっており、報告日時点で直近1〜2週間はwordhero関連のコード変更なし。よってコード自体への新規リグレッションではなく、6月末に行われた「事前ビルド化(.build/でのtsx実行→tsgoビルド済みJSでの実行)への移行」(fix: 事前ビルド移行後のstaticファイル欠落と__dirname依存パス問題を修正 #1221 , feat: Jest → Vitest 移行(Issue #1017) #1223 , fix: ricochet-robots の __dirname 依存パスを process.cwd() に変更 #1224 , fix: .build/ 実行時の __dirname 依存パス問題を追加修正 (wordhero, slack/oauth/tunnel) #1225 )の副作用の可能性が高い。
fix: .build/ 実行時の __dirname 依存パス問題を追加修正 (wordhero, slack/oauth/tunnel) #1225 (fix: .build/ 実行時の __dirname 依存パス問題を追加修正) にて、wordhero/generateCrossword.ts のRustバイナリ起動パスが spawn('../target/release/crossword_generator_main', {cwd: __dirname}) → spawn('target/release/crossword_generator_main', {cwd: process.cwd()}) に修正されている。これは .build/wordhero/ 配下で実行されると __dirname 起点の相対パスが壊れるための修正。
しかし同じファイル内の以下の箇所は未修正のまま :
const db = await sqlite . open ( {
filename : path . join ( __dirname , 'crossword.sqlite3' ) ,
driver : sqlite3 . Database ,
} ) ;
ここも __dirname に依存しているため、事前ビルド後は .build/wordhero/crossword.sqlite3 を参照してしまう。
crossword.sqlite3 は .gitignore 対象(gitで管理されていない生成物)であり、bin/copy-build-assets.mts の EXTRA_FILES にも含まれていないため、.build/wordhero/ にはコピーされない。つまり実際のDB(単語・説明文が入ったもの)は元の wordhero/crossword.sqlite3 にあるが、ビルド後の実行時には .build/wordhero/crossword.sqlite3 という別ファイル(存在しない、もしくは空)を参照することになる。
結果として generateCrossword.ts の generate() 内で db.get(...) によるdescription取得がすべて失敗/空になり、クロスワード生成が正しく行えず「動いていない」状態になっていると考えられる。
該当箇所
https://github.com/tsg-ut/slackbot/blob/master/wordhero/generateCrossword.ts#L47-L50
推定される修正方法
lib/slack.ts / oauth/index.ts / tunnel/index.ts の tokens.sqlite3 と同様に、path.join(__dirname, 'crossword.sqlite3') を path.join(process.cwd(), 'wordhero', 'crossword.sqlite3') 等、process.cwd() 起点のパスに変更する必要があると思われる。
備考
概要
sandboxチャンネルにてwordhero/crossword(ボード探索ゲーム)が動作していないとの報告あり (2026-07-22)。同種の不具合は過去にも#911として報告・修正済み。
調査内容
直近のmasterへのコミットは2026-07-09時点で止まっており、報告日時点で直近1〜2週間はwordhero関連のコード変更なし。よってコード自体への新規リグレッションではなく、6月末に行われた「事前ビルド化(
.build/でのtsx実行→tsgoビルド済みJSでの実行)への移行」(fix: 事前ビルド移行後のstaticファイル欠落と__dirname依存パス問題を修正 #1221, feat: Jest → Vitest 移行(Issue #1017) #1223, fix: ricochet-robots の __dirname 依存パスを process.cwd() に変更 #1224, fix: .build/ 実行時の __dirname 依存パス問題を追加修正 (wordhero, slack/oauth/tunnel) #1225)の副作用の可能性が高い。fix: .build/ 実行時の __dirname 依存パス問題を追加修正 (wordhero, slack/oauth/tunnel) #1225 (
fix: .build/ 実行時の __dirname 依存パス問題を追加修正) にて、wordhero/generateCrossword.tsのRustバイナリ起動パスがspawn('../target/release/crossword_generator_main', {cwd: __dirname})→spawn('target/release/crossword_generator_main', {cwd: process.cwd()})に修正されている。これは.build/wordhero/配下で実行されると__dirname起点の相対パスが壊れるための修正。しかし同じファイル内の以下の箇所は未修正のまま:
ここも
__dirnameに依存しているため、事前ビルド後は.build/wordhero/crossword.sqlite3を参照してしまう。crossword.sqlite3は.gitignore対象(gitで管理されていない生成物)であり、bin/copy-build-assets.mtsのEXTRA_FILESにも含まれていないため、.build/wordhero/にはコピーされない。つまり実際のDB(単語・説明文が入ったもの)は元のwordhero/crossword.sqlite3にあるが、ビルド後の実行時には.build/wordhero/crossword.sqlite3という別ファイル(存在しない、もしくは空)を参照することになる。結果として
generateCrossword.tsのgenerate()内でdb.get(...)によるdescription取得がすべて失敗/空になり、クロスワード生成が正しく行えず「動いていない」状態になっていると考えられる。該当箇所
https://github.com/tsg-ut/slackbot/blob/master/wordhero/generateCrossword.ts#L47-L50
推定される修正方法
lib/slack.ts/oauth/index.ts/tunnel/index.tsのtokens.sqlite3と同様に、path.join(__dirname, 'crossword.sqlite3')をpath.join(process.cwd(), 'wordhero', 'crossword.sqlite3')等、process.cwd()起点のパスに変更する必要があると思われる。備考