概要
Immich開発中に遭遇した「呪われた知識」をまとめた一覧。 各種ツールや仕様の予期せぬ挙動や制限事項を紹介。 開発者が避けたい落とし穴や混乱の原因を解説。 具体的な日付と事例ごとに整理。 実際の運用や実装時の注意点を示唆。
Immich開発で得た呪われた知識一覧
-
Zitadel Actionsの呪い
- Zitadelのカスタムスクリプト機能は JSエンジン で実行されるが、 正規表現の名前付きキャプチャグループ がサポートされていない制限。
-
Entraの呪い
- Microsoft Entraは PKCEをサポート しているが、 OpenIDディスカバリドキュメント に記載がなく、クライアントがPKCE非対応と誤認識する問題。
-
EXIFメタデータの画像サイズの呪い
- EXIFメタデータの寸法情報 が実際の画像サイズと異なる場合があり、 トリミングやリサイズ 時に問題発生。
-
YAMLインデントの呪い
- YAMLの空白文字 が直感的でない方法で処理されるため、予期せぬ動作やエラーの原因。
-
Windowsの隠しファイルの呪い
- Windowsの隠しファイル は"w"フラグで開けず、さらに SMBの"hide dot files"オプション と組み合わさると混乱を招く。
-
Bashスクリプトのキャリッジリターンの呪い
- GitのLF→CRLF変換 設定により、CRLFが含まれると bashスクリプトが正常動作しない 問題。
-
Cloudflare Workers内fetchの呪い
- Cloudflare Workersのfetchリクエスト は明示的にhttpsを指定しても httpがデフォルト となり、リダイレクトループを引き起こす場合。
-
モバイルのGPS共有の呪い
- 一部スマートフォンは 位置情報権限のないアプリ が画像にアクセスすると、 GPSデータをサイレントで削除 する挙動。
-
PostgreSQL NOTIFYの呪い
- PostgreSQLは全てトランザクション内 で処理され、NOTIFYも例外でなく、 socket.io postgres-adapter 利用時は5秒ごとに WAL書き込み が発生。
-
npm scriptsの呪い
- npmスクリプト実行時 に毎回npmレジストリへ httpリクエスト が発生し、 ヘルスチェック用途に不向き。
-
50個の追加パッケージの呪い
- JavaScriptコミュニティ内に、 後方互換性のため にプロジェクトへ 50個の依存パッケージ を追加するユーザーが存在。
-
長いパスワードの呪い
- bcrypt実装 は 最初の72バイトのみ を使用し、それ以降の文字は 無視 される仕様。
-
JavaScript Dateオブジェクトの呪い
- 年・日が1始まり、月が0始まり という 不統一なインデックス 仕様。
-
ESMインポートの呪い
- Node.js v20.8以前で --experimental-vm-modules を使い、 CommonJSプロジェクトからESモジュールを経由してCommonJSをimport すると セグフォルトでクラッシュ。
-
PostgreSQLパラメータの呪い
- PostgreSQLのパラメータ上限 が 65,535 で、大量データのバルクインサート時に 失敗 する場合。
-
セキュアコンテキストの呪い
- Webの一部機能(例: クリップボードAPI) は セキュアコンテキスト(httpsまたはlocalhost) でのみ動作。
-
TypeORM削除の呪い
- TypeORMのremove実装 は 入力オブジェクトをミューテート し、 idプロパティが削除される 仕様。