Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
ISBN から、登録した複数の図書館の蔵書と貸出状況を一度に確認できます。
Translation pending
LifestyleTypeScript · JavaScriptGitHub @satoryuOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗カメラでISBNのバーコードを撮影し、普段利用している図書館に蔵書があるかどうかを確認するWebアプリケーション。
カメラを利用できるモダンブラウザ(スマートフォン・PC)。HTTPS もしくは localhost 上で動作します。
利用には Google アカウントでのログインが必要です(登録図書館・検索履歴を端末間で同期するため)。
@emotion)PNG には draw.io の図面 XML が埋め込まれているため、draw.io(デスクトップアプリ or app.diagrams.net)で開くとそのまま編集できます。
Clean Architecture に基づく3層構成。
.
├── index.html # エントリーHTML
├── src/
│ ├── main.tsx # エントリーポイント
│ ├── App.tsx # アプリケーションルート
│ ├── app/ # ルーター・DI(dependencies)
│ ├── domain/ # ドメイン層
│ │ ├── models/ # ドメインモデル
│ │ ├── repositories/ # リポジトリインターフェース
│ │ ├── data/ # ドメインデータ(都道府県等)
│ │ └── utils/ # ISBN バリデーション等
│ ├── data/ # データ層
│ │ ├── datasources/ # API クライアント
│ │ ├── repositories/ # リポジトリ実装
│ │ ├── models/ # レスポンスモデル
│ │ ├── providers/ # データ層プロバイダ
│ │ └── exceptions/ # カスタム例外
│ └── presentation/ # プレゼンテーション層
│ ├── pages/ # 画面
│ ├── widgets/ # 共通ウィジェット
│ ├── auth/ # 認証(Google ログイン・AuthProvider 等)
│ ├── hooks/ # UI 状態フック
│ ├── theme/ # テーマ・配色
│ └── utils/ # エラーメッセージ解決等
├── public/
│ └── _redirects # Cloudflare Pages の SPA フォールバック
├── functions/ # Cloudflare Pages Functions(Workers ランタイム)
│ ├── _shared/ # 共有(googleAuth: ID トークン検証)
│ └── api/
│ ├── calil/[action].js # カーリル API プロキシ(library / check のみ許可)
│ ├── me.js # ログインユーザー情報
│ ├── registered-libraries.js # 登録図書館の取得 / 保存(D1)
│ └── search-history.js # 検索履歴の取得 / 保存(D1)
└── infra/
├── d1/migrations/ # D1 スキーマのマイグレーション(追加手順は infra/d1/README.md)
└── *.bicep # 旧 Azure 用 IaC(撤去予定 #78)
カーリル API の appkey は サーバ側でのみ 注入され、クライアントのバンドルには含まれません。
登録図書館・検索履歴はログインユーザー単位で Cloudflare D1 に永続化されます。
詳細は DEPLOY.md を参照してください。
# 依存パッケージのインストール
npm install
cp .env.local.example .env.local # CALIL_APP_KEY=... を記入
npm run dev # http://localhost:5173
本番と同一構成(静的配信 + Pages Functions)で確認したい場合は npm run pages:dev(Cloudflare Pages のローカルエミュレーション)を利用します。
手順の詳細は DEPLOY.md を参照してください。
# ユニットテスト・コンポーネントテスト(Vitest + Testing Library)
npm test
# ウォッチモード
npm run test:watch
# 型チェック
npx tsc -b
# 型チェック + プロダクションビルド(出力先: dist/)
npm run build
# ビルド成果物のプレビュー
npm run preview
main への push で .github/workflows/cloudflare-pages.yml が Cloudflare Pages へ自動デプロイします(デプロイ前に D1 マイグレーションを --remote で適用)。
PR では ci.yml(型チェック + テスト)と d1-migrate.yml(マイグレーションの --local 検証)が走ります。
リソース作成・シークレット登録・手動デプロイの手順は DEPLOY.md、スキーマ運用は infra/d1/README.md を参照してください。
GitHub Flow を採用。
main: プロダクションブランチ。テスト済み・レビュー済みのコードのみマージされるfeature/[ISSUE番号]-[短い説明]: 機能開発用ブランチ。main から作成し、完了後 main へマージmain から feature/[ISSUE番号]-[短い説明] ブランチを作成するnpm test と npx tsc -b が通ることを確認するnpx tsc -b でエラーが出ない状態を維持するnpm test)が通っていること