
技術書の輪読会をオンラインで全世界の人と — teclub を作った話
技術書を読んでも、メモは散らばり、疑問は一人で抱えがちです。
「同じ本を読んだ人と、章ごとに語り合える場所」がほしくて teclub を作りました。
MVP として公開中です。著作権を尊重し、書籍本文・図表・サンプルコード・ページ画像の転載は禁止しています。本の代替ではなく、読んだあとの学びを共有する場です。
こんな人向け
- 技術書を読んでいるが、感想や疑問を置く場所がない
- 他の人の感想や考えを知りたい
- 輪読会・読書会に興味はあるが、日程調整や参加者集めが重い
- 「理解したこと / わからなかったこと / 試したこと」を残したい
teclub でできること
- ISBN またはタイトルで技術書を検索して、サイトに追加する
- 書籍ページに、理解したこと・疑問・試したことを Markdown で投稿
- 自分のコメントを 編集・削除
- 他の読者のコメントを読む・いいねする
- 本を お気に入り(公開) / ブックマーク(非公開) に入れて見返す
進め方はシンプルです。
- 技術書をさがす
- 読んでコメントする
- 他の読者から学ぶ
一人で読むより、書く前提で読むと積読が減り、理解の穴も見えやすくなります。
技術スタック
| 領域 | 採用技術 |
|---|---|
| フレームワーク | React Router v8(Framework Mode) / React 19 / Vite |
| 言語 | TypeScript |
| UI | Tailwind CSS v4 / shadcn/ui / Lucide |
| ランタイム | Cloudflare Workers |
| DB | Cloudflare D1 + Drizzle ORM |
| ストレージ | Cloudflare R2(表紙キャッシュ / ユーザーアイコン) |
| 認証 | Auth.js(@auth/core)+ Drizzle アダプタ(メール+パスワード / Google) |
| 書籍 API | openBD / 国立国会図書館サーチ / Open Library |
| バリデーション | Zod |
| i18n | 自前辞書 + URL ロケール接頭辞 |
フロントも API も Worker 一本に載せています。サーバーレスで完結しつつ、D1・R2・Cache API まで同じプラットフォームで扱えるのが都合よかったです。
こだわったところ
1. 書籍メタデータのフォールバック
和書・洋書どちらも扱いたいので、単一 API には頼っていません。
ISBN で 1 冊を特定するとき
- openBD(和書に強い)
- Open Library(洋書・不足項目の補完)
- 国立国会図書館サーチ(上の 2 つが知らないとき)
- 表紙が無い場合はタイトル付きプレースホルダー
タイトル検索は NDL と Open Library を並列で引き、結果を交互に混ぜています。
NDL は和書に強く、Open Library は洋書に強いので、単純連結だと偏るためです。取得した ISBN は openBD で一括補正し、表紙や邦題を整え直します。
ISBN は ISBN-13 に正規化して一意キーにしています。上流障害時は null を返すだけでページ全体は止めず、「見つからない」と「取得できない」を区別して表示します。
NDL / Open Library のパース結果は Workers の Cache API に 24 時間載せています。未キャッシュだと 10〜20 秒かかることもありますが、2 回目以降は上流を叩かずに済みます。検索ページはストリーミングするので、待ち時間中もページ自体はすぐ出ます。
2. i18n は Cookie ではなく URL
以前は Cookie で言語を切り替えていましたが、それだと全言語が同じ URL を共有し、クローラーが既定言語しか見つけられません。
今は次の方針です。
- 日本語:
/books - 英語:
/en/books /ja/...はあえて 404(日本語の正規 URL を二重にしない)
辞書は TypeScript の型でキーを揃え、英語側は satisfies Messages で抜けをコンパイル時に検出します。複数形が絡む文言はテンプレート文字列ではなく関数にしています。
おわりに
teclub は、技術書を読んだあとの学びを、無理なく残せる場所を目指しています。
気になる本があれば teclub.dev で検索して、最初のコメントを残してみてください。
サイト:
