<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>t.laboratory (日本語)</title><link>https://tlaboratory.net/ja/</link><description>Flutter、アプリ運用、サーバー、スクレイピング、AIまで。15本以上のアプリを実際に運用する中で得た実務ノート。</description><language>ja</language><item><title>3言語ブログを411行のPython静的サイトジェネレーターで作る</title><link>https://tlaboratory.net/ja/python-static-site-generator-multilingual/</link><guid>https://tlaboratory.net/ja/python-static-site-generator-multilingual/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>Hugoではなく自作した理由と、hreflang、noindexの旧記事、広告枠、JSON-LD、安全な差分FTPデプロイをどう扱っているか。</description></item><item><title>PHPでプリペアドステートメントに変えるとJSONの型が変わる</title><link>https://tlaboratory.net/ja/php-prepared-statements-change-json-number-types/</link><guid>https://tlaboratory.net/ja/php-prepared-statements-change-json-number-types/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>mysqliのquery()をプリペアドステートメントに変えると、json_encodeで&quot;7&quot;が7になる。PHP 8.5＋MariaDB 11.8での実測と、旧Flutterアプリが落ちる理由。</description></item><item><title>LiteSpeedの.htaccessで日本語URLをリライトする：実測で確かめたこと</title><link>https://tlaboratory.net/ja/litespeed-htaccess-rewrite-non-ascii-urls/</link><guid>https://tlaboratory.net/ja/litespeed-htaccess-rewrite-non-ascii-urls/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>パターンはエンコード前か後か、スペースの書き方、301でクエリ文字列は残るか。本番LiteSpeedに23回リクエストして確かめた結果と、安全な試し方。</description></item><item><title>ホスティングのアカウント移行後に、黙って壊れていた5つのこと</title><link>https://tlaboratory.net/ja/hosting-account-migration-what-broke/</link><guid>https://tlaboratory.net/ja/hosting-account-migration-what-broke/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>アカウント移行後もページはすべて200だった。それなのにFTPのルート、cronのパス、Pythonのvenv、実行権限、cronの「分」設定が静かに壊れていた記録。</description></item><item><title>16本のアプリを8週間で最新Flutterへ移行して壊れたもの</title><link>https://tlaboratory.net/ja/flutter-migration-16-apps-what-broke/</link><guid>https://tlaboratory.net/ja/flutter-migration-16-apps-what-broke/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>2026年5〜7月、WebViewのラッパーだった6本をネイティブのFlutterに、古いFlutterアプリ10本を最新化した。ビルドエラー、審査リジェクト、取り消した変更の記録。</description></item><item><title>共有サーバーのPHP cronでFCMの予約プッシュを送る</title><link>https://tlaboratory.net/ja/fcm-scheduled-push-php-cron/</link><guid>https://tlaboratory.net/ja/fcm-scheduled-push-php-cron/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>8本のFlutterアプリに当選結果を知らせるプッシュを、5分ごとのPHP cronとFCM HTTP v1で送る。データが出たときだけ、1日1回、そして200を信じない。</description></item><item><title>Dartのhttpクライアントは POST の301を追わない：実測と対処</title><link>https://tlaboratory.net/ja/dart-http-post-redirect-not-followed/</link><guid>https://tlaboratory.net/ja/dart-http-post-redirect-not-followed/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>Flutterアプリの検索がサーバーの301で黙って失敗していた。Dart 3.11とhttp 1.6が各リダイレクトコードでどう動くかをcurlと比べ、検証済みの対処を示す。</description></item><item><title>ホスティングのCDNがAPIレスポンスと301をキャッシュしていた</title><link>https://tlaboratory.net/ja/cdn-caches-api-responses-and-redirects/</link><guid>https://tlaboratory.net/ja/cdn-caches-api-responses-and-redirects/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>ルーティングを変えたあと、4つのAPI URLがCDNから古い301を返し続けた。HostingerのCDNが何をキャッシュするかをヘッダーごとに実測し、だまされない検証方法をまとめた。</description></item><item><title>アプリのプライバシーポリシーは記憶ではなくマニフェストから書く</title><link>https://tlaboratory.net/ja/app-privacy-policy-from-manifests/</link><guid>https://tlaboratory.net/ja/app-privacy-policy-from-manifests/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>24件のストア掲載が雛形のままのポリシーを指していた。17本のアプリをpubspec・Info.plist・マージ後のAndroidマニフェストから作り直した記録。</description></item><item><title>C言語の二分探索：2021年のコードを動かし直してわかったこと</title><link>https://tlaboratory.net/ja/algorithm-binary-search/</link><guid>https://tlaboratory.net/ja/algorithm-binary-search/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>ソート済み配列を半分ずつ絞る二分探索。2021年の例を今コンパイルするとエラーになり、比較回数の説明も1回ずつずれていた。実測で直した改訂版。</description></item><item><title>17本のFlutterアプリのAdMob頻度を自社サーバーから調整する</title><link>https://tlaboratory.net/ja/admob-remote-ad-config-server/</link><guid>https://tlaboratory.net/ja/admob-remote-ad-config-server/</guid><pubDate>Mon, 09 Nov 2026 00:00:00 +0000</pubDate><description>Firebase Remote Configを141行のPHPエンドポイントに置き換えた理由、アプリ側のフォールバック、そしてリビルドなしで広告間隔を変えたときにCTRがどう動いたか。</description></item><item><title>WordPressから静的サイトへ移行してもアプリストアのURLを壊さない方法</title><link>https://tlaboratory.net/ja/wordpress-to-static-without-breaking-store-urls/</link><guid>https://tlaboratory.net/ja/wordpress-to-static-without-breaking-store-urls/</guid><pubDate>Sun, 08 Nov 2026 00:00:00 +0000</pubDate><description>24件のストア掲載がWordPressのページをプライバシーポリシーURLにしていた。LiteSpeed上で登録URLをすべて200のまま保ち、5分で切り替えた記録。</description></item><item><title>旧バージョンのアプリを止めずにレガシーPHP APIを整理する</title><link>https://tlaboratory.net/ja/move-legacy-php-api-without-breaking-old-app-versions/</link><guid>https://tlaboratory.net/ja/move-legacy-php-api-without-breaking-old-app-versions/</guid><pubDate>Sun, 08 Nov 2026 00:00:00 +0000</pubDate><description>APIフォルダ8つ、PHP 102ファイル、深さの違う4種類のinclude、強制アップデートできないアプリ。内部リライトとレスポンス比較で /api/v1 に移した手順。</description></item><item><title>AIコーディングエージェントに本番サーバーを触らせる：効いたガードレール</title><link>https://tlaboratory.net/ja/ai-coding-agent-live-server-guardrails/</link><guid>https://tlaboratory.net/ja/ai-coding-agent-live-server-guardrails/</guid><pubDate>Sun, 08 Nov 2026 00:00:00 +0000</pubDate><description>AIエージェントが一晩で本番サイトとアプリのAPI 8つを移行した。エージェントのミス、それを捕まえたチェック、人間に残した作業の記録。</description></item></channel></rss>
