éåèæ§ã¡ãŒã«ïŒæå·åãããSQLiteã¡ãŒã«ããã¯ã¹ã䜿ã£ãŠããªãã®ã¡ãŒã«ãå®å šã«ä¿ã€æ¹æ³
åºæ
Important
ç§ãã¡ã®ã¡ãŒã«ãµãŒãã¹ã¯100%ãªãŒãã³ãœãŒã¹ã§ãããå®å šãã€æå·åãããSQLiteã¡ãŒã«ããã¯ã¹ãéããŠãã©ã€ãã·ãŒã«é æ ®ããŠããŸãã
IMAPãµããŒããéå§ãããŸã§ã¯ãæ°žç¶çãªããŒã¿ã¹ãã¬ãŒãžã«ã¯MongoDBã䜿çšããŠããŸããã
ãã®æè¡ã¯çŽ æŽããããçŸåšã䜿çšããŠããŸãããMongoDBã§ã®ä¿åææå·åãå©çšããã«ã¯ãDigital OceanãMongo Atlasã®ãããªMongoDB EnterpriseãæäŸãããããã€ããŒã䜿ããããšã³ã¿ãŒãã©ã€ãºã©ã€ã»ã³ã¹ãè³Œå ¥ããå¿ èŠããããŸãïŒãã®å Žåãå¶æ¥ããŒã ãšã®ããåãã«æéãããããŸãïŒã
Forward Emailã®ããŒã ã¯ãIMAPã¡ãŒã«ããã¯ã¹çšã«éçºè ã«åªãããã¹ã±ãŒã©ãã«ã§ä¿¡é Œæ§ãé«ããæå·åãããã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãå¿ èŠãšããŠããŸããããªãŒãã³ãœãŒã¹éçºè ãšããŠãä¿åææå·åæ©èœãåŸãããã«ã©ã€ã»ã³ã¹æãæ¯æãå¿ èŠãããæè¡ã䜿ãããšã¯ç§ãã¡ã®ååã«åããããããããã®ããŒãºã解決ããããã«æ°ãããœãªã¥ãŒã·ã§ã³ãäžããç ç©¶ã»éçºããŸããã
å ±æããŒã¿ããŒã¹ã䜿ã£ãŠã¡ãŒã«ããã¯ã¹ãä¿åãã代ããã«ãç§ãã¡ã¯ããªãã®ãã¹ã¯ãŒãïŒããªãã ããç¥ã£ãŠããïŒã§åå¥ã«ã¡ãŒã«ããã¯ã¹ãä¿åãæå·åããŠããŸããç§ãã¡ã®ã¡ãŒã«ãµãŒãã¹ã¯éåžžã«å®å šã§ããã¹ã¯ãŒããå¿ãããšã¡ãŒã«ããã¯ã¹ã倱ããŸãïŒãªãã©ã€ã³ããã¯ã¢ããã§åŸ©å ããããæåããããçŽãå¿ èŠããããŸãïŒã
以äžã§ãã¡ãŒã«ãµãŒãã¹ãããã€ããŒã®æ¯èŒããµãŒãã¹ã®ä»çµã¿ãæè¡ã¹ã¿ãã¯ãªã©ã詳ãã解説ããŸãã
ã¡ãŒã«ãµãŒãã¹ãããã€ããŒæ¯èŒ
ç§ãã¡ã¯ãåå¥ã«æå·åãããSQLiteã¡ãŒã«ããã¯ã¹ãä¿åããç¡å¶éã®ãã¡ã€ã³ããšã€ãªã¢ã¹ããŠãŒã¶ãŒãæäŸããéä¿¡SMTPãIMAPãPOP3ããµããŒãããå¯äžã®100%ãªãŒãã³ãœãŒã¹ãã€ãã©ã€ãã·ãŒéèŠã®ã¡ãŒã«ãµãŒãã¹ãããã€ããŒã§ãã
ä»ã®ã¡ãŒã«ãããã€ããŒãšã¯ç°ãªããForward Emailã§ã¯ãã¡ã€ã³ããšã€ãªã¢ã¹ããšã«ã¹ãã¬ãŒãžæéãæ¯æãå¿ èŠã¯ãããŸããã ã¹ãã¬ãŒãžã¯ã¢ã«ãŠã³ãå šäœã§å ±æããããããè€æ°ã®ã«ã¹ã¿ã ãã¡ã€ã³åãããããã«è€æ°ã®ãšã€ãªã¢ã¹ãããå Žåã«æé©ãªãœãªã¥ãŒã·ã§ã³ã§ããå¿ èŠã«å¿ããŠããã¡ã€ã³ããšã€ãªã¢ã¹ããšã«ã¹ãã¬ãŒãžå¶éãèšå®ããããšãå¯èœã§ãã
ã¡ãŒã«ãµãŒãã¹æ¯èŒãèªã
ä»çµã¿
-
Apple MailãThunderbirdãGmailãOutlookãªã©ã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ãã䜿ãããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã§ç§ãã¡ã®å®å šãªIMAPãµãŒããŒã«æ¥ç¶ããŸãïŒ
- ãŠãŒã¶ãŒåã¯
hello@example.comã®ããã«ãã¡ã€ã³ãå«ããã«ãšã€ãªã¢ã¹ã§ãã - ãã¹ã¯ãŒãã¯ã©ã³ãã ã«çæããã ãã¹ã¯ãŒããçæãã¯ãªãã¯ãããš30ç§éã ã衚瀺ãããŸããå Žæã¯ãã€ã¢ã«ãŠã³ã ãã¡ã€ã³ ãšã€ãªã¢ã¹ã§ãã
- ãŠãŒã¶ãŒåã¯
-
æ¥ç¶ã確ç«ããããšãããªãã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ãã¯IMAPãããã³ã«ã³ãã³ããåœç€Ÿã®IMAPãµãŒããŒã«éä¿¡ããã¡ãŒã«ããã¯ã¹ãåæç¶æ ã«ä¿ã¡ãŸããããã«ã¯ãäžæžãã¡ãŒã«ã®äœæã»ä¿åããã¡ãŒã«ã«ãéèŠãã©ãã«ãä»ããããã¹ãã /è¿·æã¡ãŒã«ãšããŠãã©ã°ãç«ãŠãããããªã©ã®æäœãå«ãŸããŸãã
-
ã¡ãŒã«äº€æãµãŒããŒïŒäžè¬ã«ãMXããµãŒããŒãšåŒã°ããŸãïŒã¯ãæ°ããåä¿¡ã¡ãŒã«ãåãåããããªãã®ã¡ãŒã«ããã¯ã¹ã«ä¿åããŸãããããè¡ããããšãããªãã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ãã«éç¥ãå±ããã¡ãŒã«ããã¯ã¹ãåæãããŸããåœç€Ÿã®ã¡ãŒã«äº€æãµãŒããŒã¯ãããªãã®ã¡ãŒã«ã1人以äžã®åä¿¡è ïŒwebhooksãå«ãïŒã«è»¢éããããæå·åãããIMAPã¹ãã¬ãŒãžã«ä¿åãããããã®äž¡æ¹ãè¡ãããšãã§ããŸãïŒ
Tip
詳ããç¥ãããã§ããïŒã¡ãŒã«è»¢éã®èšå®æ¹æ³ãåœç€Ÿã®ã¡ãŒã«äº€æãµãŒãã¹ã®ä»çµã¿ããŸãã¯åœç€Ÿã®ã¬ã€ãããèªã¿ãã ããã
-
è£åŽã§ã¯ãåœç€Ÿã®å®å šãªã¡ãŒã«ã¹ãã¬ãŒãžèšèšã¯ãããªãã®ã¡ãŒã«ããã¯ã¹ãæå·åããããªãã ããã¢ã¯ã»ã¹ã§ããããã«ããããã«2ã€ã®æ¹æ³ã§æ©èœããŠããŸãïŒ
-
éä¿¡è ããããªãå®ã«æ°ããã¡ãŒã«ãå±ããšãåœç€Ÿã®ã¡ãŒã«äº€æãµãŒããŒã¯ããªãå°çšã®äžæçã§æå·åãããåå¥ã®ã¡ãŒã«ããã¯ã¹ã«æžã蟌ã¿ãŸãã
-
ããªããã¡ãŒã«ã¯ã©ã€ã¢ã³ãã§åœç€Ÿã®IMAPãµãŒããŒã«æ¥ç¶ãããšãããªãã®ãã¹ã¯ãŒãã¯ã¡ã¢ãªå ã§æå·åãããã¡ãŒã«ããã¯ã¹ã®èªã¿æžãã«äœ¿çšãããŸããã¡ãŒã«ããã¯ã¹ã¯ãã®ãã¹ã¯ãŒãã§ã®ã¿èªã¿æžãå¯èœã§ããããªãããã®ãã¹ã¯ãŒããå¯äžç¥ã£ãŠãããããããªã以å€ã¯ã¢ã¯ã»ã¹ã§ããŸãããæ¬¡ã«ã¡ãŒã«ã¯ã©ã€ã¢ã³ããã¡ãŒã«ã®ããŒãªã³ã°ãåæã詊ã¿ãéãæ°ããã¡ãã»ãŒãžã¯ãã®äžæçãªã¡ãŒã«ããã¯ã¹ãã転éãããããªããæäŸãããã¹ã¯ãŒãã䜿ã£ãŠå®éã®ã¡ãŒã«ããã¯ã¹ãã¡ã€ã«ã«ä¿åãããŸãããã®äžæçãªã¡ãŒã«ããã¯ã¹ã¯ãã®åŸæ¶å»ã»åé€ããããããã¡ãã»ãŒãžã¯ãã¹ã¯ãŒãã§ä¿è·ãããã¡ãŒã«ããã¯ã¹ã«ã®ã¿ååšããŸãã
-
IMAPã«æ¥ç¶ããŠããå ŽåïŒäŸïŒApple MailãThunderbirdãªã©ã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ãã䜿çšããŠããå ŽåïŒãäžæçãªãã£ã¹ã¯ã¹ãã¬ãŒãžã«æžã蟌ãå¿ èŠã¯ãããŸããã代ããã«ãã¡ã¢ãªå ã§æå·åãããIMAPãã¹ã¯ãŒããååŸãã䜿çšãããŸãããªã¢ã«ã¿ã€ã ã§ã¡ãã»ãŒãžãé ä¿¡ãããããšãããšãããã¹ãŠã®IMAPãµãŒããŒã«å¯ŸããŠWebSocketãªã¯ãšã¹ããéããããªãã®ã¢ã¯ãã£ããªã»ãã·ã§ã³ãããã確èªããŸãïŒãããååŸéšåã§ãïŒããã®åŸãæå·åãããã¡ã¢ãªå ãã¹ã¯ãŒããæž¡ããããäžæçãªã¡ãŒã«ããã¯ã¹ã«æžã蟌ãå¿ èŠã¯ãªããæå·åããããã¹ã¯ãŒãã䜿ã£ãŠå®éã®æå·åã¡ãŒã«ããã¯ã¹ã«æžã蟌ãããšãã§ããŸãã
-
-
æå·åãããã¡ãŒã«ããã¯ã¹ã®ããã¯ã¢ããã¯æ¯æ¥äœæãããŸãããã€ã§ãæ°ããããã¯ã¢ããããªã¯ãšã¹ããããããã€ã¢ã«ãŠã³ã ãã¡ã€ã³ ãšã€ãªã¢ã¹ããææ°ã®ããã¯ã¢ãããããŠã³ããŒãããããšãå¯èœã§ããå¥ã®ã¡ãŒã«ãµãŒãã¹ã«åãæ¿ããå Žåã§ããã¡ãŒã«ããã¯ã¹ãããã¯ã¢ããã®ç§»è¡ãããŠã³ããŒãããšã¯ã¹ããŒããåé€ããã€ã§ãç°¡åã«è¡ããŸãã
æè¡
ããŒã¿ããŒã¹
ä»ã®ããŒã¿ããŒã¹ã¹ãã¬ãŒãžå±€ãæ€èšããŸããããSQLiteã»ã©åœç€Ÿã®èŠä»¶ãæºãããã®ã¯ãããŸããã§ããïŒ
| Database | Encryption-at-rest | Sandboxed Mailboxes | License | Used Everywhere |
|---|---|---|---|---|
| SQLite â | â SQLite3MultipleCiphers ã§å¯Ÿå¿æžã¿ | â | â ãããªãã¯ãã¡ã€ã³ | â |
| MongoDB | â "MongoDB Enterpriseã®ã¿ã§å©çšå¯èœ" | â ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ | â AGPL ããã³ SSPL-1.0 |
â |
| rqlite | â ãããã¯ãŒã¯ã®ã¿ | â ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ | â
MIT |
â |
| dqlite | â æªæ€èšŒãã€æªå¯Ÿå¿ïŒ | â æªæ€èšŒãã€æªå¯Ÿå¿ïŒ | â
LGPL-3.0-only |
â |
| PostgreSQL | â å¯Ÿå¿æžã¿ | â ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ | â
PostgreSQL ïŒBSD ãŸã㯠MIT ã«é¡äŒŒïŒ |
â |
| MariaDB | â InnoDBã®ã¿å¯Ÿå¿ | â ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ | â
GPLv2 ããã³ BUSL-1.1 |
â |
| CockroachDB | â Enterpriseé宿©èœ | â ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ | â BUSL-1.1 ãªã© |
â |
ãã¡ãã¯äžèšã®è¡šã«ããè€æ°ã®SQLiteããŒã¿ããŒã¹ã¹ãã¬ãŒãžãªãã·ã§ã³ãæ¯èŒããããã°èšäºã§ãã
ã»ãã¥ãªãã£
åžžã« encryption-at-restïŒAES-256ïŒãencryption-in-transitïŒTLSïŒãð Tangerine ã䜿ã£ã DNS over HTTPSïŒãDoHãïŒãããã³ã¡ãŒã«ããã¯ã¹ã«å¯Ÿã㊠sqleetïŒChaCha20-Poly1305ïŒæå·åã䜿çšããŠããŸããããã«ãããŒã¯ã³ããŒã¹ã®äºèŠçŽ èªèšŒïŒäžéè æ»æã®åœ±é¿ãåããããSMSã§ã¯ãªãïŒãã«ãŒãã¢ã¯ã»ã¹ãç¡å¹åããSSHããŒã®ããŒããŒã·ã§ã³ãå¶éãããIPã¢ãã¬ã¹ããã®ãµãŒããŒãžã®æä»çã¢ã¯ã»ã¹ãªã©ã宿œããŠããŸãã æªæã®ããã¡ã€ãæ»æããµãŒãããŒãã£ã®ãã³ããŒããã®äžæ£ãªåŸæ¥å¡ãçºçããå Žåã§ããããªãã®ã¡ãŒã«ããã¯ã¹ã¯ããªããçæãããã¹ã¯ãŒãã§ã®ã¿éãããšãã§ããŸãããå®å¿ãã ãããåœç€Ÿã¯CloudflareãDataPacketãDigital OceanãGitHubãVultrã®SOCã¿ã€ã2æºæ ã®ãµãŒããŒãããã€ããŒä»¥å€ã®ãµãŒãããŒãã£ãã³ããŒã«ã¯äŸåããŠããŸããã
åœç€Ÿã®ç®æšã¯ãåäžé害ç¹ãã§ããã ãå°ãªãããããšã§ãã
ã¡ãŒã«ããã¯ã¹
èŠçŽ; åœç€Ÿã®IMAPãµãŒããŒã¯ãåã¡ãŒã«ããã¯ã¹ããšã«åå¥ã«æå·åãããSQLiteããŒã¿ããŒã¹ã䜿çšããŠããŸãã
SQLiteã¯éåžžã«äººæ°ã®ããçµã¿èŸŒã¿ããŒã¿ããŒã¹ã§ãçŸåšããªãã®ã¹ããŒããã©ã³ãã³ã³ãã¥ãŒã¿ãŒã§åäœããŠãããã»ãŒãã¹ãŠã®äž»èŠæè¡ã§äœ¿çšãããŠããŸãã
äŸãã°ãåœç€Ÿã®æå·åããããµãŒããŒäžã«ã¯ãlinux@example.comãinfo@example.comãhello@example.comãªã©ã®SQLiteããŒã¿ããŒã¹ã¡ãŒã«ããã¯ã¹ããããããããã.sqliteããŒã¿ããŒã¹ãã¡ã€ã«ãšããŠååšããŸããããŒã¿ããŒã¹ãã¡ã€ã«åã¯ã¡ãŒã«ã¢ãã¬ã¹ã§ã¯ãªããBSON ObjectIDããŠããŒã¯ãªUUIDã䜿çšããŠãããã©ã®ã¡ãŒã«ããã¯ã¹ã«å±ããããã¡ãŒã«ã¢ãã¬ã¹ãäœã§ãããã¯ç¹å®ã§ããŸããïŒäŸïŒ353a03f21e534321f5d6e267.sqliteïŒã
ãããã®åããŒã¿ããŒã¹ã¯ãããªãã®ãã¹ã¯ãŒãïŒããªãã ããç¥ã£ãŠããïŒã䜿ã£ãŠsqleetïŒChaCha20-Poly1305ïŒã§æå·åãããŠããŸããã€ãŸããããªãã®ã¡ãŒã«ããã¯ã¹ã¯åå¥ã«æå·åãããèªå·±å®çµåã§ããµã³ãããã¯ã¹åãããŠãããããŒã¿ãã«ã§ãã
åœç€Ÿã¯ä»¥äžã®PRAGMAã§SQLiteãæé©åããŠããŸãïŒ
PRAGMA |
ç®ç |
|---|---|
cipher=chacha20 |
ChaCha20-Poly1305 SQLiteããŒã¿ããŒã¹æå·åã詳现ã¯Projectsã®better-sqlite3-multiple-ciphersãåç
§ããŠãã ããã |
key="****************" |
ããã¯ããªãã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ãã®IMAPæ¥ç¶ãéããŠåœç€ŸãµãŒããŒã«æž¡ããããã¡ã¢ãªäžã§ã®ã¿åŸ©å·ããããã¹ã¯ãŒãã§ããèªã¿æžãã»ãã·ã§ã³ããšã«æ°ããããŒã¿ããŒã¹ã€ã³ã¹ã¿ã³ã¹ãäœæã»ééããããµã³ãããã¯ã¹åãšåé¢ãä¿èšŒããŸãã |
journal_mode=WAL |
æžã蟌ã¿å è¡ãã°ïŒ"WAL") ã§ããã©ãŒãã³ã¹ãåäžãããåæèªã¿åãã¢ã¯ã»ã¹ãå¯èœã«ããŸãã |
busy_timeout=5000 |
æžã蟌ã¿äžã®ããã¯ãšã©ãŒã鲿¢ããŸããä»ã®æžã蟌ã¿ãè¡ãããŠããéã |
synchronous=NORMAL |
ãã©ã³ã¶ã¯ã·ã§ã³ã®èä¹ æ§ãé«ããããŒã¿ç Žæã®ãªã¹ã¯ãæžãããŸãã |
foreign_keys=ON |
å€éšããŒåç §ïŒäŸïŒããããŒãã«ããå¥ã®ããŒãã«ãžã®é¢ä¿ïŒã匷å¶ããŸããSQLiteã§ã¯ããã©ã«ãã§ç¡å¹ã§ãããæ€èšŒãšããŒã¿æŽåæ§ã®ããã«æå¹ã«ãã¹ãã§ãã |
encoding='UTF-8' |
éçºè ã®å©äŸ¿æ§ã確ä¿ããããã®ããã©ã«ããšã³ã³ãŒãã£ã³ã°ã |
ãã®ä»ã®ããã©ã«ãèšå®ã¯ãå ¬åŒPRAGMAããã¥ã¡ã³ãã«èšèŒãããŠããSQLiteã®ä»æ§ã«æºããŸãã
åæå®è¡
èŠçŽ; æå·åãããSQLiteã¡ãŒã«ããã¯ã¹ãžã®åæèªã¿æžãã«ã¯
WebSocketã䜿çšããŠããŸãã
èªã¿åã
æºåž¯ã®ã¡ãŒã«ã¯ã©ã€ã¢ã³ã㯠imap.forwardemail.net ãåœç€Ÿã®Digital Oceanã®IPã¢ãã¬ã¹ã®ããããã«è§£æ±ºããããšãããããã¹ã¯ãããã¯ã©ã€ã¢ã³ãã¯å¥ã®ãããã€ããŒã®ç°ãªãIPã解決ããå ŽåããããŸãã
ã©ã®IMAPãµãŒããŒã«æ¥ç¶ããŠããããŒã¿ããŒã¹ãããªã¢ã«ã¿ã€ã ãã€100%æ£ç¢ºã«èªã¿åããæ¥ç¶ãç®æããŠããŸããããã¯WebSocketãéããŠå®çŸããŠããŸãã
æžã蟌ã¿
ããŒã¿ããŒã¹ãžã®æžã蟌ã¿ã¯å°ãç°ãªããŸããSQLiteã¯çµã¿èŸŒã¿ããŒã¿ããŒã¹ã§ãããã¡ãŒã«ããã¯ã¹ã¯ããã©ã«ãã§åäžãã¡ã€ã«ã«æ ŒçŽãããŠããããã§ãã
litestreamãrqliteãdqliteãªã©ã®éžæè¢ãæ€èšããŸããããããããèŠä»¶ãæºãããŸããã§ããã
æžã蟌ã¿å è¡ãã°ïŒ"WAL"ïŒãæå¹ã«ããç¶æ ã§æžã蟌ã¿ãè¡ãã«ã¯ã1å°ã®ãµãŒããŒïŒããã©ã€ããªãïŒã®ã¿ãæ åœããå¿ èŠããããŸããWALã¯åæå®è¡ãå€§å¹ ã«é«éåãã1ã€ã®æžã蟌ã¿ãšè€æ°ã®èªã¿åããå¯èœã«ããŸãã
ãã©ã€ããªã¯æå·åãããã¡ãŒã«ããã¯ã¹ãå«ãããŠã³ãæžã¿ããªã¥ãŒã ãæã€ããŒã¿ãµãŒããŒäžã§çšŒåããŠããŸããé
åžã®èгç¹ããã¯ãimap.forwardemail.netã®èåŸã«ããåã
ã®IMAPãµãŒããŒã¯ãã¹ãŠã»ã«ã³ããªãµãŒããŒïŒãã»ã«ã³ããªãïŒãšèããããšãã§ããŸãã
åæ¹åéä¿¡ã¯WebSocketsã§å®çŸããŠããŸãïŒ
- ãã©ã€ããªãµãŒããŒã¯wsã®
WebSocketServerãµãŒããŒã€ã³ã¹ã¿ã³ã¹ã䜿çšã - ã»ã«ã³ããªãµãŒããŒã¯wsã®
WebSocketã¯ã©ã€ã¢ã³ãã€ã³ã¹ã¿ã³ã¹ã䜿çšããwebsocket-as-promised ãš reconnecting-websocket ã§ã©ããããŠããŸããããã2ã€ã®ã©ãããŒã¯WebSocketã®åæ¥ç¶ãä¿èšŒããç¹å®ã®ããŒã¿ããŒã¹æžã蟌ã¿ã®ããã®éåä¿¡ãå¯èœã«ããŸãã
ããã¯ã¢ãã
èŠçŽ; æå·åãããã¡ãŒã«ããã¯ã¹ã®ããã¯ã¢ããã¯æ¯æ¥äœæãããŸãããã€ã§ã ãã€ã¢ã«ãŠã³ã ãã¡ã€ã³ ãšã€ãªã¢ã¹ ããæ°ããããã¯ã¢ããã®å³æãªã¯ãšã¹ããææ°ããã¯ã¢ããã®ããŠã³ããŒããå¯èœã§ãã
ããã¯ã¢ããã¯ãIMAPã³ãã³ãåŠçäžã«æ¯æ¥SQLiteã® VACUUM INTO ã³ãã³ããå®è¡ããŠè¡ããŸããããã¯ã¡ã¢ãªå
IMAPæ¥ç¶ããã®æå·åãã¹ã¯ãŒããå©çšããŠããŸããæ¢åã®ããã¯ã¢ãããæ€åºãããªãå ŽåããŸãã¯ãã¡ã€ã«ã®SHA-256ããã·ã¥ãææ°ããã¯ã¢ãããšç°ãªãå Žåã«ããã¯ã¢ãããä¿åããŸãã
backup ã³ãã³ãã§ã¯ãªã VACUUM INTO ã³ãã³ãã䜿çšããçç±ã¯ãbackup ã³ãã³ãå®è¡äžã«ããŒãžã倿ŽããããšæåããããçŽãå¿
èŠãããããã§ããVACUUM INTO ã³ãã³ãã¯ã¹ãããã·ã§ãããååŸããŸãã詳现ã¯GitHubãHacker Newsã®ã³ã¡ã³ããåç
§ããŠãã ããã
ããã«ãbackup ã³ãã³ã㯠rekey ãåŒã°ãããŸã§ã®éãããŒã¿ããŒã¹ãäžæçã«æå·åãããŠããªãç¶æ
ã«ãªããããVACUUM INTO ã䜿çšããŠããŸãïŒè©³çްã¯ãã®GitHubã®ã³ã¡ã³ããåç
§ïŒã
ã»ã«ã³ããªã¯ WebSocket æ¥ç¶ãéããŠãã©ã€ããªã«ããã¯ã¢ããå®è¡ãæç€ºãããã©ã€ããªã¯ä»¥äžã®åŠçãè¡ããŸãïŒ
- æå·åãããã¡ãŒã«ããã¯ã¹ã«æ¥ç¶ã
- æžã蟌ã¿ããã¯ãååŸã
wal_checkpoint(PASSIVE)ã«ããWALãã§ãã¯ãã€ã³ããå®è¡ã- SQLiteã®
VACUUM INTOã³ãã³ããå®è¡ã - ã³ããŒããããã¡ã€ã«ãæå·åãã¹ã¯ãŒãã§éããããšã確èªïŒå®å šå¯ŸçïŒã
- Cloudflare R2ïŒãŸãã¯æå®ãããå Žåã¯ç¬èªã®ãããã€ããŒïŒã«ã¢ããããŒãããŠä¿åã
ã¡ãŒã«ããã¯ã¹ã¯æå·åãããŠããããšãå¿ããªãã§ãã ãããWebSocketéä¿¡ã«ã¯IPå¶éããã®ä»ã®èªèšŒææ®µãèšããŠããŸãããäžæ£ãªè¡çºè ãããå Žåã§ããWebSocketã®ãã€ããŒãã«IMAPãã¹ã¯ãŒããå«ãŸããŠããªããã°ãããŒã¿ããŒã¹ãéãããšã¯ã§ããŸããã®ã§ãå®å¿ãã ããã
çŸæç¹ã§ã¯ã¡ãŒã«ããã¯ã¹ããšã«ããã¯ã¢ããã¯1ã€ã ãä¿åãããŠããŸãããå°æ¥çã«ã¯ãã€ã³ãã€ã³ã¿ã€ã ãªã«ããªãŒïŒ"PITR"ïŒãæäŸããå¯èœæ§ããããŸãã
æ€çŽ¢
åœç€Ÿã®IMAPãµãŒããŒã¯è€éãªã¯ãšãªãæ£èŠè¡šçŸãªã©ãçšãã SEARCH ã³ãã³ãããµããŒãããŠããŸãã
é«éãªæ€çŽ¢æ§èœã¯ FTS5 ãš sqlite-regex ã«ãããã®ã§ãã
SQLiteã®ã¡ãŒã«ããã¯ã¹å
ã§ã¯ Date å€ã ISO 8601 圢åŒã®æååãšã㊠Date.prototype.toISOStringïŒUTCã¿ã€ã ãŸãŒã³ã§ãç䟡æ¯èŒãæ£ããæ©èœããããã«ïŒã䜿ã£ãŠä¿åããŠããŸãã
æ€çŽ¢ã¯ãšãªã«å«ãŸãããã¹ãŠã®ããããã£ã«å¯ŸããŠã€ã³ããã¯ã¹ãä¿åãããŠããŸãã
ãããžã§ã¯ã
以äžã¯åœç€Ÿã®ãœãŒã¹ã³ãŒãããã³éçºããã»ã¹ã§äœ¿çšããŠãããããžã§ã¯ãã®äžèŠ§è¡šã§ãïŒã¢ã«ãã¡ãããé ïŒïŒ
| ãããžã§ã¯ã | ç®ç |
|---|---|
| Ansible | ãµãŒããŒçŸ€ã®ä¿å®ãã¹ã±ãŒãªã³ã°ã管çã容æã«ããDevOpsèªååãã©ãããã©ãŒã ã |
| Bree | cronãæ¥ä»ãmsãlaterããŠãŒã¶ãŒãã¬ã³ããªãŒãªãµããŒããåããNode.jsããã³JavaScriptçšãžã§ãã¹ã±ãžã¥ãŒã©ã |
| Cabin | ã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒãèæ ®ããéçºè åãJavaScriptããã³Node.jsãã®ã³ã°ã©ã€ãã©ãªã |
| Lad | MVCãªã©ãåããåœç€Ÿã®ã¢ãŒããã¯ãã£ãšãšã³ãžãã¢ãªã³ã°èšèšãæ¯ããNode.jsãã¬ãŒã ã¯ãŒã¯ã |
| MongoDB | ã¡ãŒã«ããã¯ã¹ä»¥å€ã®ãã¹ãŠã®ããŒã¿ïŒã¢ã«ãŠã³ããèšå®ããã¡ã€ã³ããšã€ãªã¢ã¹èšå®ãªã©ïŒãä¿åããããã®NoSQLããŒã¿ããŒã¹ãœãªã¥ãŒã·ã§ã³ã |
| Mongoose | åœç€Ÿã®ã¹ã¿ãã¯å šäœã§äœ¿çšããŠããMongoDBã®ãªããžã§ã¯ãããã¥ã¡ã³ãã¢ããªã³ã°ïŒODMïŒãSQLiteã§ãMongooseã䜿ãç¶ããããããã«ç¹å¥ãªãã«ããŒãäœæããŸãã ð |
| Node.js | åœç€Ÿã®ãã¹ãŠã®ãµãŒããŒããã»ã¹ãå®è¡ãããªãŒãã³ãœãŒã¹ã®ã¯ãã¹ãã©ãããã©ãŒã JavaScriptã©ã³ã¿ã€ã ç°å¢ã |
| Nodemailer | ã¡ãŒã«éä¿¡ãæ¥ç¶äœæãªã©ã®ããã®Node.jsããã±ãŒãžãåœç€Ÿã¯ãã®ãããžã§ã¯ãã®å ¬åŒã¹ãã³ãµãŒã§ãã |
| Redis | ãã£ãã·ã¥ããããªãã·ã¥/ãµãã¹ã¯ã©ã€ããã£ãã«ãDNS over HTTPSãªã¯ãšã¹ãçšã®ã€ã³ã¡ã¢ãªããŒã¿ããŒã¹ã |
| SQLite3MultipleCiphers | SQLiteã®æå·åæ¡åŒµæ©èœã§ãããŒã¿ããŒã¹ãã¡ã€ã«å šäœïŒæžã蟌ã¿å è¡ãã°ïŒ"WAL"ïŒããžã£ãŒãã«ãããŒã«ããã¯ãªã©ãå«ãïŒãæå·åå¯èœã«ããŸãã |
| SQLiteStudio | éçºçšã¡ãŒã«ããã¯ã¹ã®ãã¹ããããŠã³ããŒããé²èЧã«äœ¿ããããžã¥ã¢ã«SQLiteãšãã£ã¿ïŒãèªèº«ã§ã䜿çšå¯èœïŒã |
| SQLite | ã¹ã±ãŒã©ãã«ã§èªå·±å®çµåãé«éãã€å ç¢ãªIMAPã¹ãã¬ãŒãžã®ããã®çµã¿èŸŒã¿ããŒã¿ããŒã¹å±€ã |
| Spam Scanner | Node.jsããŒã¹ã®ã¢ã³ãã¹ãã ãã¡ãŒã«ãã£ã«ã¿ãªã³ã°ããã£ãã·ã³ã°é²æ¢ããŒã«ïŒSpam Assassinãrspamdã®ä»£æ¿ïŒã |
| Tangerine | Node.jsã§ã®DNS over HTTPSãªã¯ãšã¹ããšRedisã䜿ã£ããã£ãã·ã¥ã«ãããã°ããŒãã«ãªäžè²«æ§ãªã©ãå®çŸã |
| Thunderbird | åœç€ŸéçºããŒã ã䜿çšããForward Emailãšå ±ã«äœ¿ãæšå¥šã¡ãŒã«ã¯ã©ã€ã¢ã³ãã |
| UTM | åœç€ŸéçºããŒã ãiOSããã³macOSã§ä»®æ³ãã·ã³ãäœæããIMAPããã³SMTPãµãŒããŒãšäžŠè¡ããŠç°ãªãã¡ãŒã«ã¯ã©ã€ã¢ã³ãããã¹ãããããã«äœ¿çšã |
| Ubuntu | åœç€Ÿã®ã€ã³ãã©å šäœãæ¯ããã¢ãã³ãªãªãŒãã³ãœãŒã¹LinuxããŒã¹ã®ãµãŒããŒOSã |
| WildDuck | IMAPãµãŒããŒã©ã€ãã©ãªãæ·»ä»ãã¡ã€ã«ã®éè€æé€ã«é¢ããããŒãã¯ãã¡ããIMAPãããã³ã«ãµããŒãã¯ãã¡ããåç §ã |
| better-sqlite3-multiple-ciphers | Node.jsã§SQLite3ãããã°ã©ã çã«æäœããããã®é«éãã€ã·ã³ãã«ãªAPIã©ã€ãã©ãªã |
| email-templates | éçºè åãã®ã¡ãŒã«ãã¬ãŒã ã¯ãŒã¯ã§ãã«ã¹ã¿ã ã¡ãŒã«ïŒã¢ã«ãŠã³ãéç¥ãªã©ïŒã®äœæããã¬ãã¥ãŒãéä¿¡ãæ¯æŽã |
| json-sql-enhanced | Mongoã¹ã¿ã€ã«ã®æ§æã䜿ã£ãSQLã¯ãšãªãã«ããŒãã¹ã¿ãã¯å šäœã§Mongoã¹ã¿ã€ã«ã®èšè¿°ãç¶ããããããŒã¿ããŒã¹ã«äŸåããªãã¢ãããŒããå¯èœã«ããŸããã¯ãšãªãã©ã¡ãŒã¿ã䜿ãããšã§SQLã€ã³ãžã§ã¯ã·ã§ã³æ»æã鲿¢ããŸãã |
| knex-schema-inspector | æ¢åã®ããŒã¿ããŒã¹ã¹ããŒãæ
å ±ãæœåºããSQLãŠãŒãã£ãªãã£ããã¹ãŠã®ã€ã³ããã¯ã¹ãããŒãã«ãã«ã©ã ãå¶çŽãªã©ãæ£ãã1:1ã§ããããšãç°¡åã«æ€èšŒã§ããŸããã¹ããŒã倿޿ã«ã¯æ°ããã«ã©ã ãã€ã³ããã¯ã¹ã远å ããèªåãã«ããŒãäœæããŠããã詳现ãªãšã©ãŒéç¥ãåããŠããŸãã |
| knex | ããŒã¿ããŒã¹ãã€ã°ã¬ãŒã·ã§ã³ãšknex-schema-inspectorã«ããã¹ããŒãæ€èšŒã«ã®ã¿äœ¿çšããSQLã¯ãšãªãã«ããŒã |
| mandarin | Markdown察å¿ã®èªåi18nãã¬ãŒãºç¿»èš³ããŒã«ã§ãGoogle Cloud Translation APIãå©çšã |
| mx-connect | MXãµãŒããŒã®è§£æ±ºãšæ¥ç¶ç¢ºç«ããšã©ãŒåŠçãè¡ãNode.jsããã±ãŒãžã |
| pm2 | çµã¿èŸŒã¿ããŒããã©ã³ãµãŒãåããNode.jsã®ãããã¯ã·ã§ã³ããã»ã¹ãããŒãžã£ãŒïŒããã©ãŒãã³ã¹åãã«åŸ®èª¿æŽæžã¿ïŒã |
| smtp-server | SMTPãµãŒããŒã©ã€ãã©ãªãåœç€Ÿã®ã¡ãŒã«äº€æïŒ"MX"ïŒããã³éä¿¡SMTPãµãŒããŒã«äœ¿çšã |
| ImapTest | IMAPãµãŒããŒã®ãã³ãããŒã¯ããã³RFC仿§ã®IMAPãããã³ã«äºææ§ãã¹ãã«åœ¹ç«ã€ããŒã«ããã®ãããžã§ã¯ãã¯DovecotããŒã ã«ãã£ãŠäœæãããŸããïŒ2002幎7æããã®æŽ»çºãªãªãŒãã³ãœãŒã¹IMAPããã³POP3ãµãŒããŒïŒãåœç€Ÿã®IMAPãµãŒããŒã¯ãã®ããŒã«ã§åŸ¹åºçã«ãã¹ãããŠããŸãã |
ä»ã«äœ¿çšããŠãããããžã§ã¯ãã¯GitHubã®ãœãŒã¹ã³ãŒãã§ã芧ããã ããŸãã
ãããã€ããŒ
| ãããã€ã㌠| çšé |
|---|---|
| Cloudflare | DNSãããã€ããŒããã«ã¹ãã§ãã¯ãããŒããã©ã³ãµãŒãããã³Cloudflare R2ã䜿çšããããã¯ã¢ããã¹ãã¬ãŒãžã |
| GitHub | ãœãŒã¹ã³ãŒããã¹ãã£ã³ã°ãCI/CDãããã³ãããžã§ã¯ã管çã |
| Digital Ocean | å°çšãµãŒããŒãã¹ãã£ã³ã°ããã³ãããŒãžãããŒã¿ããŒã¹ã |
| Vultr | å°çšãµãŒããŒãã¹ãã£ã³ã°ã |
| DataPacket | å°çšãµãŒããŒãã¹ãã£ã³ã°ã |
èãæ¹
åå
Forward Emailã¯ä»¥äžã®ååã«åºã¥ããŠèšèšãããŠããŸãïŒ
- åžžã«éçºè ã«åªãããã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒã«éç¹ã眮ããéææ§ãä¿ã€ããšã
- MVCãUnixãKISSãDRYãYAGNIãTwelve Factorããªãã«ã ã®ååãããã³ããã°ããŒãã£ã³ã°ãéµå®ããããšã
- ã¹ã¯ã©ããã§ããŒãã¹ãã©ããããããã©ãŒã¡ã³åçåããŠããéçºè ãã¿ãŒã²ããã«ããããšã
å®éš
èŠçŽ; æçµçã«S3äºæã®ãªããžã§ã¯ãã¹ãã¬ãŒãžããã³/ãŸãã¯Virtual Tablesã®äœ¿çšã¯ãããã©ãŒãã³ã¹äžã®çç±ã§æè¡çã«å®çŸäžå¯èœã§ãããã¡ã¢ãªå¶éã«ãããšã©ãŒãçºçããããããšãããããŸããã
äžèšã§èª¬æããæçµçãªSQLiteãœãªã¥ãŒã·ã§ã³ã«è³ããŸã§ã«ããã€ãã®å®éšãè¡ããŸããã
ãã®äžã€ã¯ãrcloneãšSQLiteãS3äºæã®ã¹ãã¬ãŒãžã¬ã€ã€ãŒãšçµã¿åãããŠäœ¿çšãã詊ã¿ã§ããã
ãã®å®éšã«ãããrcloneãSQLiteãããã³VFSã®äœ¿çšã«é¢ãããšããžã±ãŒã¹ãããã«çè§£ãçºèŠããŸããïŒ
- rcloneã§
--vfs-cache-mode writesãã©ã°ãæå¹ã«ãããšãèªã¿åãã¯åé¡ãããŸããããæžã蟌ã¿ã¯ãã£ãã·ã¥ãããŸãã- è€æ°ã®IMAPãµãŒããŒãã°ããŒãã«ã«åæ£ããŠããå Žåãåäžã®æžã蟌ã¿è ãšè€æ°ã®ãªã¹ããŒïŒäŸïŒpub/subæ¹åŒïŒããªãéãããã£ãã·ã¥ã¯ãããã®éã§ç¡å¹ã«ãªããŸãã
- ããã¯éåžžã«è€éã§ããããã®ãããªè¿œå ã®è€éãã¯åäžé害ç¹ãå¢ããçµæã«ãªããŸãã
- S3äºæã®ã¹ãã¬ãŒãžãããã€ããŒã¯éšåçãªãã¡ã€ã«å€æŽããµããŒãããŠããŸãããã€ãŸãã
.sqliteãã¡ã€ã«ã®å€æŽã¯ããŒã¿ããŒã¹å šäœã®å€æŽãšåã¢ããããŒããæå³ããŸãã rsyncã®ãããªä»ã®ãœãªã¥ãŒã·ã§ã³ããããŸãããæžã蟌ã¿å èªã¿ãã°ïŒ"WAL")ã®ãµããŒãã«çŠç¹ãåœãŠãŠããŸããããã®ããLitestreamãæ€èšããŸããã幞ãã«ããåœç€Ÿã®æå·åã¯ãã§ã«WALãã¡ã€ã«ãæå·åããŠãããããLitestreamã«äŸåããå¿ èŠã¯ãããŸããããã ããLitestreamã®æ¬çªå©çšã«ã¯ãŸã èªä¿¡ããªãã以äžã«ããã€ãã®æ³šæç¹ããããŸãã--vfs-cache-mode writesãªãã·ã§ã³ïŒrcloneçµç±ã§SQLiteãæžã蟌ã¿å¯èœã«ããå¯äžã®æ¹æ³ïŒã䜿çšãããšãããŒã¿ããŒã¹å šäœãã¡ã¢ãªäžã§æåããã³ããŒããããšããŸãã10GBã®ã¡ãŒã«ããã¯ã¹1ã€ãªãåé¡ãããŸããããéåžžã«å€§å®¹éã®è€æ°ã¡ãŒã«ããã¯ã¹ãæ±ããšIMAPãµãŒããŒãã¡ã¢ãªå¶éãENOMEMãšã©ãŒãã»ã°ã¡ã³ããŒã·ã§ã³ãã©ã«ããããŒã¿ç Žæã«çŽé¢ããŸãã
- SQLiteã®Virtual TablesïŒäŸïŒs3dbã®äœ¿çšïŒã䜿ã£ãŠããŒã¿ãS3äºæã¹ãã¬ãŒãžäžã«çœ®ãããšãããšãããã«å€ãã®åé¡ãçºçããŸãïŒ
- èªã¿æžããéåžžã«é
ããªããŸããS3 APIãšã³ããã€ã³ãã«HTTPã®
GETãPUTãHEADãPOSTã¡ãœããã§ã¢ã¯ã»ã¹ããå¿ èŠãããããã§ãã - éçºãã¹ãã§ã¯ããã¡ã€ããŒã€ã³ã¿ãŒãããç°å¢ã§50äžã100äžä»¶ä»¥äžã®ã¬ã³ãŒããè¶
ãããšãS3äºæãããã€ããŒãžã®èªã¿æžãã¹ã«ãŒããããããã«ããã¯ã«ãªããŸããäŸãã°ãéçºè
ãé£ç¶ããSQLã®
INSERTæã倧éããŒã¿ã®ãã«ã¯æžã蟌ã¿ãforã«ãŒãã§å®è¡ããŸããããããããéåžžã«é ãããã©ãŒãã³ã¹ã§ããã - Virtual Tablesã¯ã€ã³ããã¯ã¹ã
ALTER TABLEæãããã³ãã®ä»ã®å¶éããããããŒã¿éã«å¿ããŠ1ã2å以äžã®é å»¶ãçºçããŸãã - ãªããžã§ã¯ãã¯æå·åãããããã€ãã£ãã®æå·åãµããŒãããããŸããã
- èªã¿æžããéåžžã«é
ããªããŸããS3 APIãšã³ããã€ã³ãã«HTTPã®
- sqlite-s3vfsãæ€èšããŸããããåè¿°ã®åé¡ãšåæ§ã®æè¡çã»æŠå¿µç課é¡ããããŸããã«ã¹ã¿ã
sqlite3ãã«ããæå·åã©ããããïŒäŸïŒwxSQLite3ãåœç€Ÿãäžèšãœãªã¥ãŒã·ã§ã³ã§äœ¿çšäžïŒæ¹æ³ããããŸãããã»ããã¢ãããã¡ã€ã«ã®ç·šéãå¿ èŠã§ãã - ããäžã€ã®å¯èœãªã¢ãããŒãã¯multiplex extensionã®äœ¿çšã§ããã32GBã®å¶éããããè€éãªãã«ããšéçºäžã®åé¡ã䌎ããŸãã
ALTER TABLEæã¯å¿ é ã§ãïŒãããã£ãŠVirtual Tablesã®äœ¿çšã¯å®å šã«é€å€ãããŸãïŒãknex-schema-inspectorãšã®ããã¯ãæ£ããåäœããããã«å¿ èŠã§ãããããã«ããããŒã¿ç Žæãé²ããååŸããè¡ãmongooseã¹ããŒãå®çŸ©ïŒå¶çŽã倿°åãä»»æã®ããŒã¿æ€èšŒãå«ãïŒã«åŸã£ãæå¹ãªããã¥ã¡ã³ãã«å€æã§ããŸãã- SQLiteã«é¢é£ããS3äºæãããžã§ã¯ãã®ã»ãšãã©ã¯Pythonã§æžãããŠãããåœç€Ÿã®ã¹ã¿ãã¯ã®100%ãå ããJavaScriptã§ã¯ãããŸããã
- sqlite-zstdã®ãããªå§çž®ã©ã€ãã©ãªïŒã³ã¡ã³ãåç
§ïŒã¯ææã§ããããŸã æ¬çªå©çšã«ã¯æºåãã§ããŠããªãå¯èœæ§ããããŸãã代ããã«ã
StringãObjectãMapãArrayãSetãBufferãªã©ã®ããŒã¿åã«å¯Ÿããã¢ããªã±ãŒã·ã§ã³åŽã®å§çž®ãããã¯ãªãŒã³ã§ç°¡åãªã¢ãããŒãã§ãïŒç§»è¡ã容æã§ãBooleanãã©ã°ãã«ã©ã ããããã¯PRAGMAã®user_version=1ïŒå§çž®ããïŒãšuser_version=0ïŒå§çž®ãªãïŒãããŒã¿ããŒã¹ã¡ã¿ããŒã¿ãšããŠäœ¿ããŸãïŒã- 幞ãã«ããIMAPãµãŒããŒã¹ãã¬ãŒãžã«ã¯æ·»ä»ãã¡ã€ã«ã®éè€æé€ãå®è£ ãããŠãããåãæ·»ä»ãã¡ã€ã«ãæã€ã¡ãã»ãŒãžã¯æ·»ä»ãã¡ã€ã«ã®ã³ããŒãä¿æãããåäžã®æ·»ä»ãã¡ã€ã«ãè€æ°ã®ã¡ãã»ãŒãžãã¹ã¬ããã§å ±æããå€éšåç §ã䜿çšããŠããŸãã
- SQLiteã®ã¬ããªã±ãŒã·ã§ã³ããã³ããã¯ã¢ãããœãªã¥ãŒã·ã§ã³ã§ããLitestreamã¯éåžžã«ææã§ãããå°æ¥çã«äœ¿çšããå¯èœæ§ãé«ãã§ãã
- äœè ã軜èŠããæå³ã¯ãããŸããã圌ãã®ãªãŒãã³ãœãŒã¹ãžã®10幎以äžã«ãããè²¢ç®ãå°æ¬ããŠããŸãããå®éã®äœ¿çšã§ã¯å€ãã®åé¡ãããŒã¿æå€±ã®å¯èœæ§ãå ±åãããŠããŸãã
- ããã¯ã¢ããã®åŸ©å
ã¯æ©æŠãªãç°¡åã§ããå¿
èŠããããŸããMongoDBã®
mongodumpãmongoexportã®ãããªãœãªã¥ãŒã·ã§ã³ã¯é¢åã§æéãããããèšå®ãè€éã§ãã- SQLiteããŒã¿ããŒã¹ã¯åäžãã¡ã€ã«ãªã®ã§ç°¡åã§ãã
- ãŠãŒã¶ãŒããã€ã§ãèªåã®ã¡ãŒã«ããã¯ã¹ãæã¡åºããèšèšã«ãããã£ãã
- ã·ã³ãã«ãªNode.jsã³ãã³ãã§
fs.unlink('mailbox.sqlite')ãå®è¡ããã°ããã£ã¹ã¯ã¹ãã¬ãŒãžããå®å šã«åé€ãããŸãã - åæ§ã«S3äºæAPIã®HTTP
DELETEã䜿ã£ãŠããŠãŒã¶ãŒã®ã¹ãããã·ã§ãããããã¯ã¢ãããç°¡åã«åé€ã§ããŸãã
- ã·ã³ãã«ãªNode.jsã³ãã³ãã§
- SQLiteã¯æãã·ã³ãã«ã§é«éãã€ã³ã¹ãå¹çã®è¯ããœãªã¥ãŒã·ã§ã³ã§ããã
ä»£æ¿ææ®µã®æ¬ åŠ
ç§ãã¡ã®ç¥ãéããä»ã®ã¡ãŒã«ãµãŒãã¹ã§ãã®ããã«èšèšãããŠãããã®ã¯ãªãããªãŒãã³ãœãŒã¹ã§ããããŸããã
ããã¯æ¢åã®ã¡ãŒã«ãµãŒãã¹ãã¹ãã²ããã£ã³ãŒã ð ãå«ãã¬ã¬ã·ãŒæè¡ãæ¬çªç°å¢ã§äœ¿çšããŠããããã ãšèããããŸãã
æ¢åã®ã¡ãŒã«ãµãŒãã¹ãããã€ããŒã®ã»ãšãã©ã¯ã¯ããŒãºããœãŒã¹ã§ãããããªãŒãã³ãœãŒã¹ãšããŠå®£äŒããŠããŸãããå®éã«ã¯ããã³ããšã³ãã®ã¿ããªãŒãã³ãœãŒã¹ã§ãã
ã¡ãŒã«ã®æãéèŠãªéšåïŒå®éã®ã¹ãã¬ãŒãž/IMAP/SMTPã®ããåãïŒã¯ãã¹ãŠããã¯ãšã³ãïŒãµãŒããŒïŒã§è¡ãããŠãããããã³ããšã³ãïŒã¯ã©ã€ã¢ã³ãïŒã§ã¯ãããŸããã
Forward Emailã詊ããŠã¿ã
ä»ãã https://forwardemail.net ã«ç»é²ããŸãããïŒ ð