<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>SaaS Diary</title>
<link>https://saas-diary.com/</link>
<atom:link href="https://saas-diary.com/feed.xml" rel="self" type="application/rss+xml"/>
<description>アプリやプラグインを一人で作って出している開発者が、実装で詰まったエラー・API の落とし穴・測った数字と、その直し方を記録する開発日記。Stripe・Electron・Playwright・Odoo・Wix・各種 API など、実際に作って動かしている物の話が中心です。</description>
<language>ja</language>
<lastBuildDate>Thu, 22 Oct 2026 07:00:00 GMT</lastBuildDate>
<item><title>php2shell（CVE-2026-109618／109619）は php -v では判定できない — FPM・Docker・ディストリで版の数字がずれる所</title><link>https://saas-diary.com/tech-log/php2shell-version-check-pitfalls/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/php2shell-version-check-pitfalls/</guid><pubDate>Thu, 22 Oct 2026 07:00:00 GMT</pubDate><category>技術ログ</category><description>PHP の php2shell（CVE-2026-109618・CVE-2026-109619）は 8.2.35／8.3.36／8.4.27／8.5.12 より前の Web 側の PHP が対象。php -v と PHP-FPM・mod_php の版の違い、Docker の動くタグと固定タグ、Ubuntu・RHEL のバックポートで数字が古いまま直る所を、2026-10-22 時点のトラッカーと Docker Hub の実データでまとめた。</description></item>
<item><title>Separate inventory adjustment gains and losses in Odoo 19 and 20 (Stock Valuation Account Incoming and Outgoing are gone)</title><link>https://saas-diary.com/tech-log/odoo-inventory-adjustment-gain-loss-accounts/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-inventory-adjustment-gain-loss-accounts/</guid><pubDate>Thu, 15 Oct 2026 03:28:31 GMT</pubDate><category>技術ログ</category><description>In Odoo 19 and 20 the Inventory adjustment location lost the Stock Valuation Account (Incoming) and (Outgoing) of Odoo 18 and has one Loss Account, so stock found and stock lost post to the same account. Which side each amount goes to, real-time vs periodic closing, the manual reclassification entry, and how to post gains to an income account and losses to an expense account.</description></item>
<item><title>How to add a search bar that shows products as you type on Wix</title><link>https://saas-diary.com/tech-log/wix-search-bar-results-as-you-type/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/wix-search-bar-results-as-you-type/</guid><pubDate>Thu, 15 Oct 2026 02:55:02 GMT</pubDate><category>技術ログ</category><description>Add a real search box to your Wix site that shows products with image and price from the first letter. New products show up for the next visitor. Free plan, no search limits.</description></item>
<item><title>How to let members delete their own account on Wix (and their contact, for GDPR)</title><link>https://saas-diary.com/tech-log/wix-let-members-delete-their-account/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/wix-let-members-delete-their-account/</guid><pubDate>Wed, 14 Oct 2026 14:08:47 GMT</pubDate><category>技術ログ</category><description>Add a Delete Account button to your Wix site so members can delete their own account, and their contact for GDPR requests, without code. Free plan included.</description></item>
<item><title>How to approve Wix members automatically (and bulk approve pending members)</title><link>https://saas-diary.com/tech-log/wix-approve-members-automatically/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/wix-approve-members-automatically/</guid><pubDate>Mon, 12 Oct 2026 18:32:17 GMT</pubDate><category>技術ログ</category><description>Approve Wix members automatically from your email list or domain, and bulk approve or block pending members, without code. Free for 25 listed addresses.</description></item>
<item><title>How to only allow business emails on a Wix form (block Gmail, Yahoo and disposable addresses)</title><link>https://saas-diary.com/tech-log/wix-form-only-allow-business-emails/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/wix-form-only-allow-business-emails/</guid><pubDate>Mon, 12 Oct 2026 05:26:13 GMT</pubDate><category>技術ログ</category><description>Only allow business emails on a Wix form without code: Business Email Only refuses Gmail, Yahoo, Outlook and 9,000+ disposable domains. Free for one form.</description></item>
<item><title>KPI dashboard for Odoo Community 20: shared dashboards from any list or pivot, where each user sees only their own numbers</title><link>https://saas-diary.com/tech-log/odoo-community-kpi-dashboard/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-community-kpi-dashboard/</guid><pubDate>Sun, 11 Oct 2026 15:58:45 GMT</pubDate><category>技術ログ</category><description>Odoo 20 Community shows ready-made dashboards but building or editing them is an Enterprise feature, and &quot;Add to my dashboard&quot; is private. The usual workarounds and their limits, four things to check before you share a dashboard, and how to turn any list, pivot or graph into a shared KPI card counted with each viewer&#39;s access rights.</description></item>
<item><title>How to limit a Wix form to one submission per email (Wix Forms)</title><link>https://saas-diary.com/tech-log/wix-form-one-submission-per-email/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/wix-form-one-submission-per-email/</guid><pubDate>Sun, 11 Oct 2026 14:09:23 GMT</pubDate><category>技術ログ</category><description>Limit a Wix form to one submission per email without code or rebuilding it: One Submission Per Email blocks repeats with your message. Free for one form.</description></item>
<item><title>AI assistant for Odoo Community: ask your Odoo data in plain English with your own OpenAI, Claude or Gemini key (Odoo 20)</title><link>https://saas-diary.com/tech-log/odoo-ai-assistant-community/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-ai-assistant-community/</guid><pubDate>Sun, 11 Oct 2026 08:20:00 GMT</pubDate><category>技術ログ</category><description>Odoo 20 Community has no AI assistant: its built-in AI only writes text (editor, website builder). The usual workarounds and their limits, four things to check before an AI reads your ERP data, and how to ask questions about your Odoo data in plain English with your own key, read-only and within each user&#39;s access rights.</description></item>
<item><title>Stop salespeople changing the unit price and hide cost in Odoo 17 to 20</title><link>https://saas-diary.com/tech-log/odoo-lock-price-hide-cost/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-lock-price-hide-cost/</guid><pubDate>Sat, 10 Oct 2026 12:40:00 GMT</pubDate><category>技術ログ</category><description>Standard Odoo 17 to 20 lets anyone who edits a quotation change its prices, and every employee can read cost and margin. Why a read-only field in the form view can still be changed by import or API, where the free workarounds stop, and how to make fields read-only, hidden or required per user group on the server.</description></item>
<item><title>Make AI agent changes in Odoo wait for approval (ChatGPT, Claude, MCP, n8n, Odoo 20)</title><link>https://saas-diary.com/tech-log/odoo-ai-agent-approval/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-ai-agent-approval/</guid><pubDate>Sat, 10 Oct 2026 04:12:29 GMT</pubDate><category>技術ログ</category><description>Standard Odoo 20 runs every API call at once, with the rights of the key&#39;s user: an agent that may edit a quotation may also confirm it. What Odoo offers (only purchase approval), free ways to limit an AI agent, and how to hold its changes until a person approves them. Checked against the Odoo 20 source.</description></item>
<item><title>When was an Odoo API key last used? Find unused keys and limit API calls (Odoo 20)</title><link>https://saas-diary.com/tech-log/odoo-api-key-last-used/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-api-key-last-used/</guid><pubDate>Sat, 10 Oct 2026 02:12:36 GMT</pubDate><category>技術ログ</category><description>Odoo 20 does not record when an API key was last used, from which IP or how often, and has no rate limit per key. What Latest Login, the server log and key expiration can tell you, how to limit calls with nginx, and how to get last use, IP and calls per key. Checked against the Odoo 20 source.</description></item>
<item><title>How to see what ChatGPT, Claude or an MCP server changed in Odoo (Odoo 20)</title><link>https://saas-diary.com/tech-log/odoo-see-what-ai-changed/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-see-what-ai-changed/</guid><pubDate>Fri, 09 Oct 2026 18:24:44 GMT</pubDate><category>技術ログ</category><description>Where Odoo 20 keeps a trace of changes made through the API by ChatGPT, Claude, an MCP server or n8n: Last Updated by, chatter tracking and the server log. What each one shows, what it misses (previous values, deleted records, which API key), and how to fill the gap. Checked against the Odoo 20 source.</description></item>
<item><title>Read-only Odoo API key for ChatGPT, Claude or an MCP server (Odoo 20)</title><link>https://saas-diary.com/tech-log/odoo-api-key-read-only-for-ai/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/odoo-api-key-read-only-for-ai/</guid><pubDate>Fri, 09 Oct 2026 17:01:22 GMT</pubDate><category>技術ログ</category><description>Odoo 20 has no read-only API key: every key carries all the rights of its user, and the JSON-2 API calls any public method. What a dedicated user can and cannot limit, why an ordinary update can delete order lines, and how to make a key read-only. Tested on Odoo 20 Community on 2026-10-09.</description></item>
<item><title>Netlifyの無料枠はどこまで無料か — 300クレジットの中身と、サイトが止まる条件</title><link>https://saas-diary.com/tech-log/netlify-free-plan-credit-limits/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/netlify-free-plan-credit-limits/</guid><pubDate>Fri, 04 Sep 2026 03:36:27 GMT</pubDate><category>技術ログ</category><description>Netlify無料プランは月300クレジットのハードリミット。超過しても課金はされませんが、チームの全プロジェクトが停止します。本番デプロイ1回15クレジット＝月20回で上限、帯域は20クレジット/GBといった単価と、実際に深夜に枯渇させた経験から、無料枠に収まる使い方を整理しました。</description></item>
<item><title>ERR_INVALID_PACKAGE_CONFIG の正体は、3バイトのBOMだった</title><link>https://saas-diary.com/tech-log/err-invalid-package-config-bom/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/err-invalid-package-config-bom/</guid><pubDate>Wed, 19 Aug 2026 09:31:28 GMT</pubDate><category>技術ログ</category><description>ホームディレクトリの package.json が原因で node が ERR_INVALID_PACKAGE_CONFIG を出す。中身は EF BB BF の3バイト＝BOMだけのファイルで、空に見えるのにJSONとして壊れていた。原因の切り分け方と、PowerShellで生まれる理由、直し方をまとめます。</description></item>
<item><title>毎週「準備OK」と報告していた監視が、一度も出していない申請を緑にしていた</title><link>https://saas-diary.com/tech-log/ready-is-not-submitted/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/ready-is-not-submitted/</guid><pubDate>Wed, 19 Aug 2026 08:25:09 GMT</pubDate><category>技術ログ</category><description>記事数もページの応答も証明書も緑。ただし「申請したのか」だけを測っていなかったため、一度も提出されていない申請が数か月ぶん「緑（正常）」と報告され続けた。ads.txtで外から実態を測り、判定と通知条件を書き換え、変異テストで検査が本当に効くことまで確認した記録。</description></item>
<item><title>サービスを止めたのに、特商法だけ「月額480円」のままだった</title><link>https://saas-diary.com/tech-log/stopping-a-service-legal-pages/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/stopping-a-service-legal-pages/</guid><pubDate>Wed, 19 Aug 2026 08:25:09 GMT</pubDate><category>技術ログ</category><description>トップには「おやすみ中・今後料金は発生しません」と書いたのに、特定商取引法に基づく表記は月額480円を掲示し、存在しないマイページでの解約を案内したままだった。サービスを止めるときに直すべき文章の場所と、直したあとの確認手順を実例で公開します。</description></item>
<item><title>記事20本が、ずっと計測されていなかった — 「入れた」ではなく「返ってくるか」で確認する</title><link>https://saas-diary.com/tech-log/analytics-tag-coverage-audit/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/analytics-tag-coverage-audit/</guid><pubDate>Wed, 19 Aug 2026 02:03:52 GMT</pubDate><category>技術ログ</category><description>サイトマップの29ページを全部取得して計測IDの有無を数えたら、タグが入っていたのは5ページだけだった。生成経路が2本あることが原因。差し込み後に公開URLを取り直す検算を入れたら、リバースプロキシが別サービスへ振っていた1ページを検出できた話。</description></item>
<item><title>削除したはずの一文が、まだ公開されていた — バックアップを配信ディレクトリに置くな</title><link>https://saas-diary.com/tech-log/backup-files-in-public-dir-leak/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/backup-files-in-public-dir-leak/</guid><pubDate>Wed, 19 Aug 2026 01:41:12 GMT</pubDate><category>技術ログ</category><description>プライバシーポリシーから消した一文が、上書き前のバックアップ(.bak)として同じディレクトリに残り、HTTP 200で2日間公開され続けていた。原因は「差し戻せるように」隣に置いたコピー。再発源のスクリプト修正・退避先の変更・週次から日次への監視変更まで、実測値つきで公開します。</description></item>
<item><title>exit 0 は「動いた」の証明ではない — 無音で失敗する自動化を夜の点呼で捕まえる</title><link>https://saas-diary.com/tech-log/exit-code-zero-is-not-proof/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/exit-code-zero-is-not-proof/</guid><pubDate>Mon, 17 Aug 2026 23:30:25 GMT</pubDate><category>技術ログ</category><description>上限2時間のタスクが11時間走り、通知も飛ばず、それでも終了コードは0だった。孤児プロセス・宛先が無い通知・在庫監視の死角という3つの穴を踏まえ、毎晩サービス側の一次情報で「今日ちゃんと投稿されたか」を数える監視をNodeで実装。予約投稿・タイムゾーン・取得失敗の扱いまで実装の判断を公開。</description></item>
<item><title>バックアップは毎日成功していた。一度も復元したことがなかった</title><link>https://saas-diary.com/tech-log/backup-restore-drill-automation/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/backup-restore-drill-automation/</guid><pubDate>Mon, 17 Aug 2026 23:25:01 GMT</pubDate><category>技術ログ</category><description>毎日成功しているバックアップは「送れた」ことしか証明していない。署名鍵が10本中7本入っていなかった事故、7日連続でpushが失敗していたのに緑だった事故を踏まえ、毎月自動で復号・展開・中身の照合まで行う「復元訓練」をNodeで実装した記録。ミューテーションテストで検査自体の妥当性も確かめる。</description></item>
<item><title>必ず解けるパズルを自動生成する — 麻雀ソリティアの逆生成アルゴリズム実装記</title><link>https://saas-diary.com/tech-log/solvable-puzzle-reverse-generation/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/solvable-puzzle-reverse-generation/</guid><pubDate>Sat, 04 Jul 2026 12:30:00 GMT</pubDate><category>技術ログ</category><description>自作パズルゲームで「生成した盤が必ず解ける」ことをどう保証するか。ランダム配置が詰む理由から、満杯の盤からフリーペアを取り切って解の手順を構成する逆生成、独立DFSソルバによる二重検証、4レイアウト×2000シードの機械検証まで、麻雀ソリティアの実装を実コード込みで解説。</description></item>
<item><title>個人開発でCapacitorアプリをGoogle Playに出すまでに踏み抜いた5つの落とし穴</title><link>https://saas-diary.com/tech-log/capacitor-google-play-solo-dev-traps/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/capacitor-google-play-solo-dev-traps/</guid><pubDate>Sat, 04 Jul 2026 11:00:00 GMT</pubDate><category>技術ログ</category><description>WebのHTML/JS資産をCapacitorでAndroidアプリ化しGoogle Playに提出した個人開発の実録。Filesystem.copyのdirectory罠、新規インストール限定のブートクラッシュ、仮アイコンでの審査否認、AdMob UMP同意フロー、常時バナーの物理隔離まで、実際に踏んだ5つの落とし穴を実コード込みで解説。</description></item>
<item><title>GA4 API の refresh_token が7日で死ぬ — invalid_grant の正体</title><link>https://saas-diary.com/lessons/ga4-api-refresh-token-invalid-grant-7days/</link><guid isPermaLink="true">https://saas-diary.com/lessons/ga4-api-refresh-token-invalid-grant-7days/</guid><pubDate>Wed, 10 Jun 2026 03:00:00 GMT</pubDate><category>失敗談・学び</category><description>GA4 Data API の自動取得が一週間でぴたっと invalid_grant で止まる。原因は OAuth 同意画面が「テスト」公開ステータスのままで、refresh_token が7日で失効するから。再認証ループから抜けるための恒久対策（サービスアカウント方式）まで実体験で残す。</description></item>
<item><title>PowerShell の Set-Content で日本語 UTF-8 ファイルが壊れる話</title><link>https://saas-diary.com/tech-log/powershell-utf8-set-content-mojibake/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/powershell-utf8-set-content-mojibake/</guid><pubDate>Wed, 10 Jun 2026 03:00:00 GMT</pubDate><category>技術ログ</category><description>PowerShell 5.1 で Get-Content / Set-Content を使って UTF-8 の日本語ファイルを書き戻すと、cp932(Shift-JIS)経由で多バイト文字が不可逆に文字化け・破損する。実際に index.html を一度壊した経験から、原因(既定エンコーディング)と確実な回避策(-Encoding / pwsh / そもそも使わない)を残す。</description></item>
<item><title>AIに「やらせる」ってどういうこと？ GPTとClaudeの違いを、できるだけやさしく</title><link>https://saas-diary.com/ai-driven/what-is-ai-delegation-gpt-vs-claude/</link><guid isPermaLink="true">https://saas-diary.com/ai-driven/what-is-ai-delegation-gpt-vs-claude/</guid><pubDate>Sun, 31 May 2026 23:30:00 GMT</pubDate><category>AI駆動開発ジャーニー</category><description>AIに作業を任せるとは何か。GPTとClaudeの違いを専門用語なしで3つの段階に整理し、個人開発者が毎日の使い分けの体感をもとに、初心者がどこから始めればいいかをやさしく解説します。</description></item>
<item><title>Claudeの始め方：最初の30分でやることリスト</title><link>https://saas-diary.com/ai-driven/how-to-start-claude-first-30-minutes/</link><guid isPermaLink="true">https://saas-diary.com/ai-driven/how-to-start-claude-first-30-minutes/</guid><pubDate>Sun, 31 May 2026 23:30:00 GMT</pubDate><category>AI駆動開発ジャーニー</category><description>Claudeの始め方を最初の30分でやることリストで解説。登録から最初のプロンプト、ファイルの渡し方まで、コード不要で始められます。claude.aiとClaude Codeの違いも初心者向けに整理します。</description></item>
<item><title>インボイス制度 2026年10月の変更まで残り4ヶ月 — 個人事業主が踏む5つの落とし穴と準備チェックリスト</title><link>https://saas-diary.com/business/invoice-system-2026-october-individual-business-checklist/</link><guid isPermaLink="true">https://saas-diary.com/business/invoice-system-2026-october-individual-business-checklist/</guid><pubDate>Mon, 25 May 2026 06:00:32 GMT</pubDate><category>SaaSビジネス</category><description>2026年10月のインボイス制度大幅変更まで残り4ヶ月。2割特例終了+経過措置80%→50%縮小+簡易課税届出期限2026-12-31 など、個人事業主が踏みやすい5つの落とし穴と準備チェックリストを国税庁公式情報ベースで整理。税理士法17条に基づき具体相談は税理士に推奨する旨を明示。</description></item>
<item><title>Stripe Webhook 冪等性 — 本番で重複処理を防ぐ実装3パターン (TypeScript)</title><link>https://saas-diary.com/tech-log/stripe-webhook-idempotency-3-patterns/</link><guid isPermaLink="true">https://saas-diary.com/tech-log/stripe-webhook-idempotency-3-patterns/</guid><pubDate>Sun, 24 May 2026 14:06:00 GMT</pubDate><category>技術ログ</category><description>Stripe Webhook は at-least-once 配信で、同じ event.id が複数回届く前提で受信側を設計する必要がある。本記事では Stripe 公式仕様 (Handle duplicate events) に基づき、個人開発規模で現実的な 3 つの冪等化パターン (DB UNIQUE 制約 / Redis SETNX / In-memory LRU) を TypeScript の動くコード付きで比較し、月イベント数とインスタンス数で選び方フローチャートを示す。公式が明記している『event.id 単独では識別できない稀ケース』への対応も解説。</description></item>
</channel>
</rss>
