「ブログ」カテゴリーアーカイブ

ブログ投稿用のカテゴリ

バッチ処理での変数トラブル解消!EnableDelayedExpansionでリアルタイム展開を実現する方法

Windowsのバッチファイル(.bat/.cmd)で FORIF を使った処理を記述していると、
「変数が更新されない」「値がループ中で変わらない」といった問題に直面することはありませんか?

その原因は、変数が「実行前に展開される」ためです。
この問題を解消するための鍵となるのが、**setlocal EnableDelayedExpansion(遅延環境変数展開)**です。

この記事では、初心者でも理解できるように「なぜ必要なのか」「どう使うのか」を実例付きで丁寧に解説します。


✅ 通常の変数展開とその問題点

バッチファイルでは、変数は通常 %変数名% の形式で展開されます。
しかし %変数名%FORループ開始前に固定されるため、ループ内で更新しても反映されません。

❌ 例:変数が更新されていないケース(失敗例)

🔍 この場合、出力は以下の通りになります。

0
0
0

→ ループの中でカウントを増やしているのに、%cnt% は常に最初の「0」のままです。


✅ 解決策:EnableDelayedExpansionを使って遅延展開する

変数を**実行時に展開する方式(遅延展開)**に切り替えることで、この問題を解消できます。

そのために必要なのが、以下の1行です:

さらに、変数の表記を %変数名% から !変数名! に変更します。


✅ 正しい例:遅延展開を使った成功例

📌 出力結果:

1
2
3

!cnt! を使うことで、ループごとに最新の値が展開されるようになります。


✅ なぜ「!」に変える必要があるのか?

展開方法展開タイミング書き方主な用途
通常展開コマンド実行前%変数名%単純な処理
遅延展開実行中(リアルタイム)!変数名!FOR/IF などのループ内

✅ 応用例:文字列置換との組み合わせ

以下のような「文字列の一部を動的に置換する」ケースでも遅延展開が役立ちます。


✅ EnableDelayedExpansionが2回登場することがある理由

バッチファイル内で call されたサブルーチンやネスト構造がある場合、setlocal/endlocal のスコープが階層ごとに分かれるため、そのたびに再設定するケースがあります。


✅ まとめ

項目内容
何のための機能?変数をリアルタイムで展開するため
必要な記述setlocal EnableDelayedExpansion
書き換える箇所%変数名% → !変数名!
主な利用シーンFOR/IFループ内で変数が更新される処理
書き忘れると…値が変わらず意図しない結果になる

✅ 次のステップ:あなたのバッチにも適用してみよう!

もし今お使いのバッチで「ループ中に値が変わらない」「文字列置換が動かない」といった問題がある場合、ぜひ EnableDelayedExpansion を追加してみてください。

Excel vs Googleスプレッドシート:機能・関数・用途の違いをわかりやすく解説

「ExcelとGoogleスプレッドシート、どっちを使えばいいの?」「関数の違いが知りたい」「チームで作業するならどちらが便利?」
このような疑問を持つ人は多いです。

Excelは企業でも広く使われる表計算ソフトの定番であり、一方でGoogleスプレッドシートはオンラインでのリアルタイム共同作業に優れています。この記事では、Excelとスプレッドシートの違いを機能・関数・用途の面からわかりやすく比較し、どちらを使うべきか判断できるように整理します。


✅ 1. ExcelとGoogleスプレッドシートの主な違い【比較表】

項目GoogleスプレッドシートExcel(Microsoft Excel)
提供形態Webブラウザで利用(クラウド型)デスクトップ版+Excel Online
保存形式Google形式(.gsheet)+Excel形式対応可.xlsx / .xls / .csv など
保存場所自動保存(Googleドライブ)ローカル or OneDrive
同時編集◯ リアルタイム共同編集が非常にスムーズデスクトップ版は△、Excel Onlineは◯
オフライン利用△(事前に設定が必要)◯(デスクトップ版は完全対応)
関数の種類標準関数+Web取得系独自関数あり関数数が多く高度な分析に強い
マクロApps Script(JavaScriptベース)VBA(Visual Basicベース)
高度な分析機能△ ピボットのみ簡易的◎ Power Query / Power Pivot対応
グラフ基本的な種類は網羅種類・カスタマイズとも豊富
データ容量大規模データにはやや弱い大量データ処理性能が高い
コスト無料(ドライブ容量は制限あり)Microsoft 365契約(有料)
対象チーム共有・Web利用企業業務・分析系

クラウド重視ならスプレッドシート、業務分析ならExcelが強いというのが大きな違いです。


✅ 2. 関数の違い(セルで使う式にも違いアリ)

✅ 共通して使える関数(一部例)

  • SUM / AVERAGE / IF / VLOOKUP / COUNTIF などは両方で同様に使えます。

✅ Googleスプレッドシート特有の関数(Excelにはない)

関数内容Excelでの代替
IMPORTRANGE他のシートのデータを自動取得Power Queryが必要
IMPORTXMLWebサイトからデータ取得Power Query+XPath
GOOGLETRANSLATE自動翻訳アドインが必要
UNIQUE重複排除一覧を生成Excel 365のみ同等対応

✅ 同じ目的でも書き方が異なる例

やりたいことスプレッドシートExcel(365以外)
連番生成(1~10)1ROW(A1) をコピー
条件抽出#CALC!IF系式で複雑処理

スプレッドシートはシンプルな式で結果を返しやすい一方、Excelは分析用関数や関数数の多さで強みを発揮します。


✅ 3. マクロ・自動化の違い

項目GoogleスプレッドシートExcel
言語Apps Script(JavaScript)VBA(Visual Basic)
書きやすさJSベースでWebエンジニア向け長年のExcelユーザーに馴染みあり
実行環境ブラウザ上で動作ローカルPCで動作
外部連携Google APIとの連携が強力Office製品との統合が強い

Web系の自動化ならスプレッドシート、業務システム構築ならExcel VBAが使われるケースが多いです。


✅ 4. 用途別のおすすめ使い分け

ケースおすすめ
チームでリアルタイム共有✅スプレッドシート
会計/財務/請求書など業務✅Excel
Webからデータを取得したい✅スプレッドシート
Power Queryや統計分析を使いたい✅Excel
軽めの家計簿/タスク管理✅スプレッドシート
社内でマクロ処理が必要✅Excel

✅ 5. 結論:目的に応じて使い分けるのが正解

| 軽量・共有・Web連携 | ✅ Googleスプレッドシート向き |
| 大量データ・高度分析 | ✅ Excel向き |

👉「無料で簡単」「クラウドで共有したい」ならスプレッドシート
👉「業務レベルで使いたい」「関数・分析機能を最大限使いたい」ならExcelがおすすめです。

ExcelとGoogleスプレッドシートには、それぞれ異なる強みがあります。共有やWeb連携を重視するならスプレッドシート、高度な分析や業務利用を行うならExcelが適しています。利用シーンに応じて使い分けることで、作業効率を大きく向上させることができます。

Oracle「ORA-02292:整合性制約が違反しています」の原因と解決法

データ削除(DELETE)や更新(UPDATE)を行った際に、次のようなエラーが発生したことはありませんか?

ORA-02292: 整合性制約 (制約名) が違反されています - 子レコードが見つかりました。

このエラーは、「削除しようとしたデータが別のテーブルから参照されているため、勝手に消せません」という意味になります。本記事では、エラーの原因と解決方法を実例付きでわかりやすく解説します。


✅ ORA-02292とは?エラーの意味をわかりやすく解説

ORA-02292エラーは、外部キー(FOREIGN KEY)による整合性制約に違反したときに発生します。

つまり、

✅ 親テーブルのレコードを削除 or 更新しようとした
✅ でも、そのデータを参照している子テーブルのデータが存在している
✅ そのため削除・更新できず、エラーになる

という状況です。


✅ エラーが発生する典型的な例

📘 テーブル構成(例)

テーブル名内容備考
EMP社員マスタ親テーブル
SALARY給与履歴子テーブル(EMP_IDを参照)

このEMP_ID = ‘E001’ の社員が SALARY テーブルに登録されている場合、以下のエラーが発生します。

ORA-02292: 整合性制約 (HR.SALARY_FK) が違反されています - 子レコードが見つかりました

✅ 原因を確認する方法(参照関係を特定)

✅ どのテーブルから参照されているのかを確認

このSQLで、外部キー制約の一覧を確認できます。


✅ 解決方法4パターン(状況に応じて選択)

方法解決内容利用シーン注意点
① 子テーブルを先に削除手動で削除一時的に消す場合データ消失に注意
② 外部キーをNULL許可にUPDATE対応可柔軟な参照解除用設計による
③ ON DELETE CASCADEを設定親削除で自動削除自動削除したい場合子も消える
④ 制約を一時的に無効化一時的に制約OFF大量データ移行時使い方注意

✅ 解決方法の実例SQL

✅ ① 子テーブルのデータを先に削除


✅ ② 外部キー制約をNULL許可に変更


✅ ③ 親削除時に子も自動削除(ON DELETE CASCADE)


✅ ④ 一時的に制約を無効化(※使用注意)


✅ よくある質問(FAQ)

❓ UPDATEでも発生する?

はい。親キーを変更して子テーブルとの整合性が崩れる場合にも発生します。

❓ 本当に削除して良いかわからない…

業務データでは「子テーブルに履歴が残っている=重要なデータ」のケースも多いため、安易な削除は避けましょう。


✅ まとめ:削除順序と制約を理解することが鍵!

抑えるポイント内容
エラー原因子テーブルに参照されている
重要事項削除順序「子→親」
推奨対策ON DELETE CASCADEの活用も検討

Windows 11:省電力モード・高パフォーマンス設定の切り替え方法

「バッテリーを長持ちさせたい」「ゲームや動画編集時にパフォーマンスを最大化したい」──そんなときに活用できるのが、Windows 11の「電源モード」や「電源プラン」の切り替え機能です。

この記事では、「設定アプリ」から簡単に切り替える方法と、より細かく調整できる従来型の「電源プラン(コントロールパネル)」の使い方をわかりやすく解説します。


電源モードの種類と違い

Windows 11では、PCの使用目的に応じて以下の設定が用意されています。

モード名(例)特徴おすすめシーン
省電力性能を抑えて電力消費を節約外出時 / バッテリー優先
最適なパフォーマンス(バランス)性能と省電力のバランスを自動調整日常作業 / Webブラウジング
高パフォーマンス処理能力優先で動作ゲーム / 動画編集 / 3Dレンダリング

※機種やビルドによって名称が異なる場合があります。


方法①:設定アプリから簡単に切り替える(一般ユーザー向け)

Windows 11の標準UIである「設定」から、簡単に電源モードを切り替えることができます。

✅手順

  1. スタートメニュー →「設定」を開く

  2. 左メニューから「システム」を選択

  3. 「電源」をクリック

  4. 「電源モード」からモードを選択

📌例:以下の画面のように「最適なパフォーマンス」などを選択できます。


方法②:より詳細な調整が可能な「電源プラン」を利用する(中級者向け)

従来のWindowsの設定画面である「コントロールパネル」から、電源プラン(バランス、省電力、高パフォーマンス)を選択できます。

✅手順

  1. 「スタート」ボタン横の検索窓で「電源プラン」または「Powercfg」と入力

  2. 「電源プランの選択」を開く

  3. 「バランス(推奨)」「省電力」から選択

📌以下のような画面が表示されます:

👉「プラン設定の変更」から、スリープ時間やディスプレイのオフ時間の調整も可能です。


シーン別おすすめ設定

シーンおすすめモード理由
ノートPCでバッテリーを節約したい省電力電池持ち優先
ブラウジング・文書作成中心最適なパフォーマンス(バランス)安定性と速度の両立
ゲーム・動画編集高パフォーマンスCPU/GPUが最大性能を発揮

自動的に切り替える方法も活用しよう

以下の設定を使えば、用途に応じて自動切り替えも可能です。

機能内容
ゲームモードゲーム起動時に自動でパフォーマンス優先
バッテリー節約モードバッテリー残量低下時に省電力へ切り替え
メーカー提供ユーティリティASUS、Lenovoなどの専用ソフトでも切替可能

まとめ:目的に応じてモードを使い分けよう

✅省電力モード → バッテリー優先
✅最適なパフォーマンス → 普段使い
✅高パフォーマンス → 重い作業向け

Windows 11では「設定アプリ」での簡易切替に加え、「電源プラン」を使って細かくパフォーマンスを調整できます。用途に応じて切り替えれば、より快適なPCライフが実現できます。

SQL:MERGE文でINSERTとUPDATEを一度に行う効率的な方法

MERGE文とは?

SQLのMERGE文は、対象テーブルにデータが存在する場合はUPDATE、存在しない場合はINSERTを1回の処理でまとめて行える便利な構文です。
従来は「UPDATE → 該当しなければINSERT」といった2回の処理が必要でしたが、MERGEを使うことで1回のSQLで済むため、処理効率やパフォーマンスが向上します。

本記事ではOracleをベースに解説しつつ、他DBでの対応についても補足します。


MERGE文の基本構文(Oracleの場合)



実用例①:顧客マスタの更新 or 追加

ID=C001 が存在すれば更新
✅ 存在しなければ新規追加


処理の流れ(フロー図で理解)


応用例②:条件によってDELETEも行う(Oracle/SQL Server対応)

✅ ステータスがCANCELなら削除
✅ そうでなければ更新
✅ 該当なしならINSERT


MERGE文のメリット

項目従来方法MERGE文
SQL実行回数UPDATEとINSERTの2回1回
パフォーマンスやや低い高い
ロジックの明確さ分岐が必要条件分が整理されやすい
メンテナンス性低め高い

注意点

注意点内容
ロックの影響大量データの場合、テーブルロックが発生しやすい
複雑な条件WHEN句が増えると可読性が下がる
DB依存性MySQLは8.0.19以降、PostgreSQLはINSERT ... ON CONFLICTで代替

他DBでの補足

DBMERGE対応備考
Oracle対応本記事基準
SQL Server対応ほぼ同構文
MySQL8.0.19~対応REPLACE/INSERT ON DUPLICATEも可
PostgreSQL15~対応それ以前はINSERT ON CONFLICT

まとめ

✅ MERGE文はINSERTとUPDATEを1回の処理にまとめる強力なSQL構文
✅ DELETEも組み合わせれば高度なロジックも実現可能
✅ Oracle・SQL Serverでは標準的に使用される
✅ MySQL/PostgreSQLではバージョン確認が必要

「同じキーのデータを更新 or 追加したい」場面で積極的に使いましょう!

if文から卒業!Java 8のPredicateで条件分岐をスマートに書く方法

Javaで複雑な条件分岐が増えてくると、if文がネストして読みにくくなる…という悩みを抱えたことはありませんか?
Java 8で追加された**Predicateインターフェース**を使えば、条件式をオブジェクトとして扱えるため、よりスマートで再利用可能な形にできます。

本記事では、Predicateの基本から複数条件の組み合わせ、実用的な活用例まで分かりやすく解説します。


✅ Predicateとは?

Predicate<T> はJava 8で導入された関数型インターフェースで、**「引数を1つ受け取り、booleanを返す関数」**を表します。

test()メソッドに条件式を実装することで、条件判定を行うことができます。


✅ 基本的な使い方

✔ Lambda式で判定条件を定義

ここで、age -> age >= 20 という条件式がPredicateとして表現されています。


✅ 条件を組み合わせる(and/or/negate)

Predicateは以下のような便利なメソッドを持っています。

メソッド説明使用例
and()両方trueでtrueAND条件
or()どちらかtrueでtrueOR条件
negate()条件を反転NOT条件

✔ 使用例


✅ 実用例①:従来のif文から置き換えてスマートに

❌ 従来のif文

✅ Predicateを使った場合

→ 条件式をPredicateとして切り出すことで、再利用しやすくなります。


✅ 実用例②:Listのフィルタリングに活用

stream().filter() と組み合わせるとさらに強力です。

→ 条件式が外部に切り出されることで、読みやすく拡張しやすいコードになります。


🎯 Predicateを使うメリット

項目従来のif文Predicate
可読性ネストしやすい条件名で意図が明確
再利用性条件をコピペ使い回し可能
拡張性if追加が必要and/orで柔軟に拡張

⚠ 濫用しすぎには注意!

Predicateは便利ですが、小規模な処理に無理に使うと逆に複雑化することがあります。
「条件が複数箇所で使い回せる場合」や「複雑なAND/OR条件を定義したい場合」に効果を発揮します。


✅ まとめ

項目内容
Predicateとはbooleanを返す関数型インターフェース
基本test() で条件判定
条件組み合わせand/or/negateでスマートに
実用例if文の代替・Streamのfilterで活躍
メリット可読性・再利用性UP

👉 if文が増えて可読性が下がってきたと感じたら、まずは小さな条件式からPredicate化してみましょう!

WordPressで「アクティブなPHPセッションを検出」エラー発生時の原因とmu-pluginでの解決方法

WordPress のサイトヘルス(Site Health)で、次のような警告が表示されて困ったことはありませんか?


🧩 発生した警告内容


アクティブな PHP セッションが検出されました
WordPress のパフォーマンスを改善するために、HTTP リクエスト前にセッションを閉じてください。」)


このエラーは、WordPressが内部通信(REST API/ループバックリクエスト)を行う際に、PHPのセッションファイルがロック状態のまま残っていることが原因です。


⚙️ なぜ発生するのか?

WordPress は「ブロックエディター」や「サイトヘルス診断」などで REST API を使って自分自身と通信しています。
ところが、あるプラグインやテーマが session_start() を呼び出すと、PHPがセッションファイルをロックしてしまい、並行リクエスト(REST API通信)が待たされてタイムアウトするケースが発生します。

主な原因

  • session_start() を使うプラグイン(例:ログイン拡張、OTP認証、Google Site Kit、アバター系など)

  • php.ini の設定で session.auto_start=1 になっている

  • テーマや独自コード内でのセッション開始忘れ

このような状態になると、WordPress のサイトヘルスで

「アクティブな PHP セッションを検出しました」
という警告が出るようになります。


💡 今回のケース

私の環境ではsession_start()を使用しているプラグインは以下のようになってました。

  • Google Site Kit(Google公式プラグイン)を使用

  • OTP(ワンタイムパスワード)やアバター系プラグインも動作中

  • どれもセッション開始を止められない

つまり「プラグインを停止せずに安全に解消したい」状況でした。


✅ 解決策:mu-pluginでセッションを早期終了する

プラグインを無効化できない場合は、REST APIやループバック通信が走る前にセッションを閉じるだけで十分改善します。
これをWordPressが自動で読み込む mu-plugin(必須プラグイン)として配置すればOKです。


🧭 手順

手順①:フォルダを確認/作成

wp-content/mu-plugins/ フォルダが存在しない場合は作成します。

手順②:ファイル作成

ファイル名:
wp-content/mu-plugins/close-session.php


💻 コード全文(コピペOK) 


 

🔍 動作確認

  1. ファイルをアップロード

  2. WordPress管理画面を再読み込み

  3. 「サイトヘルス → 再チェック」を実行

✅ 結果:「アクティブなPHPセッションを検出」警告が消え、REST APIテストも正常に完了しました。


🧠 補足:プラグイン停止で直る場合との違い

対処方法メリットデメリット
プラグイン停止根本解決必要な機能が使えなくなる
mu-plugin設置停止不要・安全セッション依存の書き込みが一部省略される可能性(軽微)

大半のケースでは session_write_close() によって問題なく動作します。
Google Site Kit や WP Super Cache との併用環境でも安定動作を確認済みです。


🧾 まとめ

項目内容
発生原因プラグインやテーマがPHPセッションをロックしたままにする
症状Site Healthに「アクティブなPHPセッション」警告、REST APIエラー(cURL 28)
対処法mu-pluginでREST/API実行前にセッションを閉じる
メリットプラグイン停止不要で安定化、タイムアウト防止
検証結果警告解消+パフォーマンス改善を確認

これで「アクティブなPHPセッション」警告とはサヨナラできます✨
もし同じようにGoogle Site Kitやログイン関連プラグインを使っていて警告が出る場合は、今回の mu-plugin対策 を導入してみてください。

Windows 11:cmdからシステム情報を一括取得する便利コマンド集

「自分のWindows 11のスペックを知りたい」「トラブル発生時にシステム情報をまとめて取得したい」──そんなときに役立つのが、コマンドプロンプト(cmd)で使えるシステム情報取得コマンドです。

この記事では、Windows 11でシステム情報を一括確認できる基本コマンドから、用途別の便利コマンドまでまとめて紹介します。業務でのトラブル診断や、PCスペックの共有にも役立ちます。


✅ こんな人におすすめ

  • Windows 11のシステム情報を素早く知りたい

  • PCのスペックを他人に伝える必要がある

  • トラブル調査のために詳細情報を取得したい

  • GUIを開かずにコマンドで確認したい


📌 基本情報を一括取得するなら「systeminfo」コマンド

最も代表的なのが systeminfo コマンドです。
以下を入力するだけで、OS名・バージョン・CPU・メモリ・ネットワーク構成などが一覧表示されます。

▶ 出力される主な情報

項目内容
OS 名Windows 11 のエディション
OS バージョンビルド番号を含む詳細
システム製造元PCメーカー(例:Dell、HPなど)
システムモデルモデル名
プロセッサーCPU情報
BIOS バージョンUEFI情報
合計物理メモリRAM容量
ホスト名PC名
ネットワーク構成IPやドメイン設定

💡 テキストファイルに保存する方法



💻 CPUやメモリなどハードウェア情報が必要な場合:wmic

wmic は詳細な情報を取得できます。

✅ CPU情報

✅ メモリ(RAM)容量


✅ BIOS情報



🌐 ネットワーク情報を確認する:ipconfig /all

ネットワーク関連の情報を確認したい場合は以下のコマンドを使用します。


▶ 取得できる内容

  • IPv4・IPv6アドレス

  • デフォルトゲートウェイ

  • DNSサーバ

  • MACアドレス


📦 ドライブ容量を調べる:wmic logicaldisk

空き容量をチェックしたい場合に便利です。


📜 インストール済みドライバー一覧:driverquery

詳細付きで確認する場合:



📁 Windows 11のバージョンとビルド番号確認:ver

または次のコマンドでも詳細が表示されます。


📂 PowerShellを使ってさらに見やすく取得する方法(応用)

Windows 11ではPowerShellも使えます。



📑 よく使うコマンド一覧(まとめ)

コマンド用途
systeminfoシステム情報をまとめて取得
wmic cpu get nameCPU情報
wmic memorychip get capacityメモリ容量
ipconfig /allネットワーク情報詳細
driverqueryドライバー一覧
verバージョン確認
wmic logicaldisk get size,freespaceドライブ空き容量

✅ まとめ

Windows 11では、cmdを使うことでクリック操作なしで詳細なPC情報を一括取得できます。特にトラブル時やサポート依頼の際、systeminfo > pc_info.txt として保存しておくと、スムーズな共有が可能です。

ぜひ目的に応じて、紹介したコマンドを活用してみてください!

WordPress サイトヘルスの「REST API でエラーが発生しました(cURL error 28)」の原因と対処方法

WordPress のサイトヘルス診断で、以下のようなエラーが表示されたことはありませんか?

REST API のテスト時にエラーが発生しました:
(http_request_failed) cURL error 28: Operation timed out after 10000 milliseconds with 0 bytes received

このエラーは、WordPress が「自分自身の REST API にアクセスしようとしたときにタイムアウトして失敗する」ことで発生します。本記事では、実際にこのエラーが発生し、テーマの functions.php にコードを追記するだけで解消できた方法をご紹介します。


✅ エラーの原因

WordPress はサイトヘルス診断で「自分のサイトの REST API (例: /wp-json/...) にアクセスできるか」をチェックしています。

しかし、以下のような環境だとここで10秒待っても応答がなく、タイムアウト (cURL error 28) になります。

想定される原因よくあるパターン
IPv6 経路が不安定サーバーが IPv6経由でアクセスしようとして詰まる
HTTP/2 と cURL の相性HTTP/2 のネゴシエーションで固まる
WAF/CDN が自己アクセスをブロックCloudflare Bot対策やWordfence等
タイムアウトが短すぎるデフォルト10秒のまま

✅ 今回の解決方法(functions.php に追記だけ)

以下のコードを テーマの functions.php の末尾に貼り付けて保存するだけでエラーが消えました。


 

✅ このコードがやっていること(ざっくり理解用)

対策内容効果
IPv4固定IPv6経由で固まる環境を回避
HTTP/1.1固定HTTP/2でハングする問題を回避
タイムアウト延長10秒 → 20秒で猶予確保
サイトヘルス検査URLのみ内部処理化ネットワークを経由せず、確実に成功させる

✅ 本質的な根本原因がある場合の追加チェック(必要な人向け)

要確認箇所状況
Cloudflare / WAF/wp-json/* への自己アクセスがブロックされていないか
Wordfence / AIOWPS自サイト内アクセスがBot扱いされていないか
サーバーのIPv6不要なら無効化で安定することも
HTTP/2サーバー設定ALPNの相性によってはHTTP/1.1優先化で安定

✅ 結論

✔ サイトヘルスの「cURL error 28」は、WordPressが自分のREST APIを叩いたときにタイムアウトすることが原因
✔ テーマの functions.php に対策コードを入れるだけで解消可能。
✔ 環境によっては WAF・IPv6・HTTP/2 側の調整が必要な場合もあり。


✅ 今後の運用アドバイス

✅ このコードは常時有効のままでOK(他のREST動作を妨げない)
✅ 必要なら後で /wp-json/ の自己アクセスが安定したら内部実行部分だけ削除可
✅ Cloudflare や WAF を使っている場合は、「自己アクセスをブロックしない」設定を追加するとさらに健全


「REST APIのエラーがずっと消えなくて困っている」という方は、まず本記事の方法を試してみてください。

🏠 Googleスプレッドシート×AIで家計簿や収支表を自動化する方法

💡 この記事でわかること

この記事では、次のような「自動家計簿」を構築します。

✅ 支出を入力するだけでAIがカテゴリ(食費・通信・交通など)を自動分類
✅ 重複データを自動検出して除外
✅ 月ごとの支出・収入を自動集計
✅ スプレッドシートだけで動作(外部ツール不要)


🧩 準備するもの

  • Googleアカウント

  • OpenAIのAPIキー(※ChatGPT Plusとは別)

  • 新しいGoogleスプレッドシート


⚙️ Googleスプレッドシートを作成

1️⃣ 新しいスプレッドシートを開く
2️⃣ シート名を「家計簿」に変更
3️⃣ 1行目に以下のヘッダを入力

| 日付 | 内容 | 金額 | 種別 | カテゴリ | メモ | 処理済 | 行ID |


🧠 AI自動分類スクリプト

スプレッドシート上部メニューから
拡張機能 → Apps Script を開き、下記のコードをすべて貼り付けて保存。


🔑 APIキー設定

1️⃣ Apps Script の右上歯車 → プロジェクトのプロパティ
2️⃣ 「スクリプトのプロパティ」タブ
3️⃣ OPENAI_API_KEY を追加(値にあなたのAPIキー)
4️⃣ 保存


🧾 サンプルデータで動作確認

日付内容金額
2025/10/01マクドナルド 渋谷店-850
2025/10/02給与振込 ○○株式会社250000
2025/10/03東京電力 電気料金-6200
2025/10/04Netflix 月額課金-990
2025/10/05JR定期券購入-14000

1️⃣ 貼り付け
2️⃣ メニュー「家計簿(AI) → ② AIで全行分類」
3️⃣ カテゴリがAIで自動分類
4️⃣ 「③ 重複チェック&ID付与」
※以下は未課金なのでカテゴリは未分類になります。
5️⃣ 「④ 集計を再生成」→「集計」シートに月次サマリが出力


📊 集計結果の例


🚨 よくあるエラーと解決策

症状原因対処
429: insufficient_quotaAPI残高ゼロOpenAI Billingページで5ドル課金
APIキー未設定エラースクリプトのプロパティ未登録設定手順を再確認
カテゴリ空欄ChatGPT Plusのみ契約API側に残高を追加する必要あり
権限ダイアログが出ない実行権限未付与スクリプト初回実行で許可

✅ まとめ

  • ChatGPT Plus だけでは連携できない。APIキーを使う。

  • スプレッドシート内で AI が自動分類・集計まで完結。

  • 収支を貼るだけで月次の家計簿が完成。