「プログラミング」カテゴリーアーカイブ

JavaScriptなしで実現!HTML5 Canvasアニメーションで魅せるWeb装飾

HTML5の登場以降、Webデザインの表現力は大きく進化しました。
その中でも<canvas>タグは、まるで映像作品のような動きをブラウザ上で描くための強力な機能です。

「アニメーション=JavaScriptが必要」と思われがちですが、実はJavaScriptを使わずにCanvasを動かす方法も存在します。
今回は、HTML5の<canvas>タグだけで実現できる動くWeb装飾について紹介します。


🖋️ <canvas>タグの基本とは?

<canvas>タグは、HTML5で導入されたグラフィック描画用の要素です。
通常はJavaScriptを使って図形やアニメーションを描きますが、近年はCSSアニメーションやSVG、さらにはGIF・APNGを組み合わせてCanvasを動かす手法も増えています。


このようにCanvasを定義するだけで、背景や装飾として利用可能。

さらに、CSSや画像アニメーションを活用することで、JavaScriptなしでも“動きを感じさせる”デザインを作ることができます。


🌊 JavaScriptなしで実現する波紋・粒子エフェクト

近年注目されているのが、Canvasを静的画像やCSSアニメーションと組み合わせるアプローチです。

✅ 例:波紋エフェクト(CSS連携) 


これだけで、Canvas上に波紋が広がるような演出をCSSだけで表現できます。

動的スクリプトが不要なので、ローディング画面やメインビジュアルにも最適です。

サンプル


✨ パーティクル風の演出も可能

粒子(パーティクル)をイメージした演出も、背景のCanvasを複数重ねることで再現可能です。
たとえば、透明度の異なる複数のCanvasレイヤーをCSSで重ねると、光がゆらめくような表現になります。



これにより、動きを感じさせる静かな装飾が可能になります。

サンプル


🧩 活用シーン

HTML5 Canvasを使った静的アニメーションは、以下のような場面で効果的です。

  • 🌐 ローディング画面:シンプルで軽量な波紋アニメーションを表示

  • 🖼️ メインビジュアル:粒子や光を使った背景エフェクト

  • 🔲 ボタンホバー時:クリック誘導に動きを加える

  • 💻 プレゼン用サイト:静かな動きでブランド感を演出


💬 まとめ

JavaScriptを使わなくても、HTML5 Canvasを上手く活用すれば軽量で美しいアニメーション表現が可能です。
CSSやCanvasレイヤーを組み合わせることで、Webサイト全体の印象を大きく向上させることができます。

「動き=JS」ではなく、「表現=HTML5 × CSS × Canvas」
これが、モダンWebデザインの新しいアプローチです。

Javaの例外テストが楽になる!JUnit5のassertThrows便利な使い方

1. assertThrowsとは?

JUnit5で例外をテストする際に便利なのが assertThrows です。
従来は try-catch を使って例外を検証していましたが、コードが冗長になりがちでした。JUnit5から追加された assertThrows を使うと、例外発生をシンプルにテストできます。


これだけで 「この処理で IllegalArgumentException が発生すること」 を確認できます。

2. 旧来のtry-catch方式との比較

JUnit4までの書き方は以下のようになります。


fail を入れたり、catchブロック内で assertEquals を書く必要があり、テストコードが長くなっていました。
assertThrows を使えば、これを 1行でシンプルに記述可能 です。


3. 例外メッセージの検証

assertThrows は戻り値として発生した例外オブジェクトを返すため、メッセージや詳細を検証することも可能です。@Test


これにより 例外種別だけでなく、エラーメッセージの妥当性 も簡単にチェックできます。

4. 複数の例外クラスに対応

もし異なる種類の例外が発生する可能性がある場合、複数の assertThrows を組み合わせてテストできます。


これにより、条件ごとに発生する例外をきちんと検証できます。

5. assertThrowsを使うメリットまとめ

  • コードがシンプル:try-catchやfailを省略できる

  • 例外メッセージの検証が容易

  • 複数パターンの例外を簡潔に記述可能

  • 可読性が向上し、保守性もアップ


まとめ

JUnit5の assertThrows を使えば、例外発生テストがとてもスッキリ書けるようになります。
「テストコードの読みやすさ・保守性を高めたい」という方には必須のテクニックです。
これを取り入れるだけで、テストがより楽しく、効率的になるので試してみましょう!

ゼロから学ぶ!Pythonで気軽にデータ分析入門

「Pythonでデータ分析を始めたいけど、難しそう…」
そんな初心者の方でも大丈夫!この記事では、家計簿や売上のような身近なデータを題材にして、Pythonで「データを読み込む → 集計 → グラフにする」までを体験します。

まずは小さな一歩から。ゲーム感覚で数字を扱っていくうちに、自然とデータ分析の基礎が身につきます。


サンプル環境

本記事の内容は以下の環境で動作確認しています。

項目バージョン / ツール
OSWindows 11 Pro 24H2
Python3.12.6
pip24.2
エディタPowerShell / VS Code
ライブラリpandas 2.x / matplotlib 3.x / openpyxl 3.x

Pythonとは?

Python(パイソン) は、シンプルで分かりやすいプログラミング言語です。

  • 文法がやさしい → 初めてでも読みやすい

  • 豊富なライブラリ → 家計簿、売上管理、グラフ化などすぐ活用できる

  • 学習者が多い → ネットに解説記事や質問回答がたくさん

今回は「pandas」「matplotlib」を使って、データを簡単に扱う方法を学びます。


1. Pythonをインストール

Windows 11なら Microsoft Store からインストールするのが簡単です。

  • スタート → Microsoft Store → 「Python」で検索

  • 今回は最新版の「Python 3.13」をインストールします
    ※ダウンロードすると自動的にインストールされます。


2. 動作確認

PowerShellで次を実行:

出力例:

Python 3.13.7

3. 必要なライブラリをインストール


successfullyと上記の様に表示されればインストール正常終了してます。


4. サンプルデータ

家計簿や売上のようなシンプルなデータを用意します。

sales.csv


5. Pythonで分析!4つの出力を体験

パターン① コンソール出力(数字で確認)

ファイル名を sample.py にして、わかりやすい場所(例:C:\Users\〇〇\Documents\python\)に保存します。

sample.py 」を保存したディレクトリに移動し、powershell でpython sample.pyと入力して実行すると以下の様に表示されます。

出力例:

👉 「今日は使いすぎた?」がすぐ分かります。


パターン② グラフ出力(見やすく可視化)

出力イメージ:

👉 支出の増減がひと目で分かります。


パターン③ ファイルに保存(CSV・画像)


👉 結果をExcelや画像にして保存すれば、あとで見返したり人に見せたりできます。


パターン④ Notebookで出力

Jupyter Notebookを使えば、

と書くだけで、コードの下に表がきれいに表示されます。

ステップ1: Notebookを起動

PowerShell で以下を実行します:

👉 ブラウザが開くので「File → New → Notebook → Python 3」で新しいノートブックを作ります。

ステップ2: セルごとにコードを書く

セル1: データ読み込み

👉セルを選択し、Shift  + Enterで実行すると表がセルの下にきれいに表示されます。

Notebookの特徴

print()不要 → 変数名だけで表や集計結果が表示される

グラフはセル下に直接描画

コード・結果・グラフが一つの画面でまとまって見やすい

✅ まとめると、記事で紹介したパターン④のコードは そのまま動きますが、Notebookではprintを省略して変数名だけ書けばOK という違いがあります。

👉 家計簿アプリ感覚で扱えて便利です。


まとめ

  • Pythonは初心者でも気軽に始められる

  • データ分析の出力には4パターンある

    1. 数字で見る(コンソール)

    2. グラフで見る(可視化)

    3. ファイルに保存(CSV・PNG)

    4. Notebookでまとめる

  • まずは「日ごとの支出」を分析してみるとイメージしやすい

ログ出力が一気に効率化!log4j2を使うべき場面とは

Java開発におけるログ出力は、障害解析・性能改善・監査の三種の神器。長年使われてきた log4j 1.x に対し、後継の log4j2 は「高速・柔軟・安全」に大幅進化しています。本稿では、違いが直感的に分かる比較と、**失敗しない導入手順(Maven/Gradle、設定、非同期化、移行の落とし穴まで)**をまとめます。


1. log4j 1.x と log4j2 の要点比較

観点log4j 1.xlog4j2
パフォーマンス同期中心。大量ログでアプリに負荷LMAX Disruptorによる非同期ロガーで高速・低レイテンシ
設定形式properties / XML のみXML / JSON / YAML / properties、ホットリロード対応
非同期化AsyncAppenderのみAsyncAppender+Async Logger(全ロガー非同期も可)
GC負荷文字列連結が発生しやすくGC負担増遅延評価(ラムダ/プレースホルダ)で不要時は連結処理なし
拡張性限定的フィルタ / レイアウト / Appender が豊富(JSON出力、Failover等)
メンテナンスEoL(保守終了)現行バージョン維持(常に最新2.xを推奨)

結論:高負荷・可観測性重視の現場ほど log4j2 一択。


2. こんな場面で「log4j2」を選ぶ

  • 大量ログ(秒間1000件~万件)を裁くWeb/バッチ、IoT、決済、EC

  • 本番でログレベルを動的変更したい(再起動なしで即調査)

  • JSON出力で Elasticsearch / OpenSearch / Splunk / Datadog に流す

  • 遅延評価MDC(相関ID) で可観測性とパフォーマンスを両立したい


3. 導入手順(Maven/Gradle)――最短で“動く”まで

ここでは log4j2 を実装(Core)として使い、APIは SLF4J で書く構成を推奨します。
理由:ライブラリ間の共通言語として SLF4J がデファクト、実装差し替えも容易。

3.1 依存関係を追加

Maven(pom.xml)

Gradle(Kotlin DSL) 

重要:既存で引き込まれる logback-classicslf4j-log4j12除外してください(重複実装エラー&二重出力の原因)。

3.2 旧実装の衝突を避ける(例:Maven の除外) 

3.3 最小構成の設定ファイル(src/main/resources/log4j2.xml 

  • monitorInterval="30":30秒ごとに設定ファイルの変更を検知し、再起動なしで反映

3.4 SLF4J での利用コード 

3.5 ローリングファイル+JSON(実戦向け) 

  • JSON出力で可観測性基盤にそのまま投入可能。

  • max="30":古いファイルを30世代で自動削除。

3.6 非同期化の推奨設定(高スループット向け)

方法A:Async Appender(部分的に非同期)

方法B:Async Logger(全ロガーを非同期化)

  1. 依存に disruptor を追加(前述)

  2. JVM 起動オプションに以下を付与

目安:秒間数千件以上のログ、遅延許容な処理では Async Logger が強力。
低遅延の必要なクリティカル処理(トランザクション境界直前など)は同期Appenderで分離も可。

3.7 現場で必須の“相関ID”(MDC/ThreadContext)

  • 分散トレーシングやバッチ内のジョブ相関に必須。

3.8 動的なログレベル変更(コード&設定)

  • コードで変更 

  • 設定のホットリロードmonitorInterval でファイルを書き換えるだけ

3.9 他フレームワークのログを一本化(任意)

  • JUL(java.util.logging)→ Log4j2log4j-jul を追加し、

  • Commons Logging(JCL)→ Log4j2log4j-jcl を追加


4. 旧 log4j 1.x からの移行チェックリスト

  1. jar の置換と衝突解消

    • 1.x の log4j-1.2.x.jar を除去

    • log4j-api, log4j-core, log4j-slf4j2-impl を追加

    • 他実装(logback 等)を除外

  2. 設定ファイルを置き換え

    • log4j.propertieslog4j2.xml(or .json/.yaml) に構造変換

  3. コードの修正方針(推奨順)

    • SLF4J API へ書き換え(LoggerFactory.getLogger 等)

    • もしくは log4j2 API へ(org.apache.logging.log4j.LogManager.getLogger

    • 当面の暫定策として log4j-1.2-api(互換レイヤ)もあるが恒久利用は非推奨

  4. 性能と出力の検証

    • 期待QPSでのバックプレッシャディスク枯渇を確認

    • 非同期化の有無でレイテンシ差を測定

  5. 運用監視

    • -Dlog4j2.debug=true で起動し、設定解決やエラーを起動時に確認

    • ログローテーションと世代数の上限を監視に組み込み


5. 開発・運用の実用Tips

  • 重い toString() を直接連結しないlog.debug("x={}", () -> obj.heavyToString())

  • Failover Appender で出力先障害に備える(ネットワークストレージ等)

  • パターン設計:時刻、レベル、ロガー、メッセージ、%throwable、MDC を最低限

  • 本番では INFO 以上、詳細調査時のみ一時的に DEBUG/TRACE を開ける

  • 最新 2.x 系を採用(セキュリティ修正が継続されるため)


6. まとめ

  • log4j2 は “高速+柔軟+安全”。大量ログ・可観測性要件に強い。

  • 導入は依存追加 → 設定作成 → 非同期化の3ステップが核。

  • 移行は衝突除去と設定変換が肝。SLF4J API で書くと将来の実装差し替えも容易。

HULFT連携:Javaからユーティリティコマンドを呼び出す実装例

HULFTには「送受信ジョブを定義して使う方法」以外に、utlsendなどのユーティリティ系コマンドを直接呼び出してファイル転送や加工を行う手段があります。
これらは事前の送受信定義が不要で、コマンド実行時に条件を指定できるため、テスト送信・スポット利用・簡易処理に非常に便利です。

本記事では、JavaでHULFTコマンドを実行する例をご紹介します。

  • utlsend : ファイル送信

  • utlrecv : ファイル受信

  • utlconcat : ファイル連結

  • utlsplit : ファイル分割


Javaから外部コマンドを実行する基本

Javaでは ProcessBuilder を使うことで、外部のHULFTコマンドを呼び出せます。
エラー出力も標準出力にまとめる設定をすれば、ログ管理が容易になります。

共通の呼び出しテンプレートは以下の通りです。

以降の例では、この runCommand を利用して各ユーティリティコマンドを実行します。


1. ファイル送信(utlsend

事前の送信定義が不要で、対象ファイルと宛先ノードを直接指定できます。

  • -f : 送信するファイルパス

  • -n : 宛先ノード名(HULFTに登録済み)


2. ファイル受信(utlrecv

受信ジョブを登録せず、コマンドだけでファイルを取得できます。

  • -f : 保存先のファイル名

  • -n : 送信元ノード名


3. ファイル連結(utlconcat

複数のファイルを1つにまとめたいときに使います。

  • -o : 出力ファイル名

  • -f : 結合対象のファイル(複数指定可)


4. ファイル分割(utlsplit

大きなファイルを分割して処理したいときに使います。

  • -f : 分割対象ファイル

  • -l : 分割する行数(例:1000行ごと)


運用上の注意点

  1. PATHの設定
    Javaから呼び出す際は、utlsend.exe などのHULFTバイナリがPATHに通っている必要があります。
    通っていない場合はフルパス指定が必須です。

  2. 終了コードの確認

    • 0 : 正常終了

    • 0以外 : エラー(詳細はHULFTマニュアルのエラーコード参照)

  3. ログ管理
    実際の業務バッチでは process.getInputStream() の内容をファイル出力してログ管理することを推奨します。


まとめ

  • utlsend でファイルを即送信できる

  • utlrecv で即時受信が可能

  • utlconcat でファイルを連結

  • utlsplit でファイルを分解

これらをJavaから呼び出すことで、柔軟なファイル連携や加工処理が実現できます。

Three.jsで簡単3D演出!初心者でもホームページをかっこよくする方法

「ホームページをかっこよく見せたい」「シンプルに3D演出を加えてみたい」──そんなときに役立つのが Three.js です。
JavaScriptだけで3Dオブジェクトを動かせる便利なライブラリで、近年のWebサイトでも多く使われています。

この記事では 最新版 Three.js (r180) を使って、実際に「回転する立方体」を表示するサンプルを紹介します。


1. Three.jsとは?

Three.js は WebGL をラップしたライブラリで、難しい低レベルコードを書かなくても以下のような処理が可能です。

  • 3Dオブジェクトの作成(立方体・球体・モデルの読み込み)

  • カメラの制御

  • ライトの設置

  • マテリアルやシェーダーの設定

  • アニメーション処理


2. サンプルコード(最新版 Three.js r180 対応)

以下は 最小構成のサンプル です。
HTMLファイルを作成して保存してください。

 

3. デモ(実際に動くサンプル)

このブログ記事では、外部ファイルとして用意したサンプルhtmlを iframe で埋め込んで表示してます。

デモ1:基本の回転する立方体

👇 実際に回転する立方体が表示されます。 

デモ2:ライトを使った立方体

光源を加えることで、立方体に陰影がつき、立体感が増します。

デモ3:マテリアル変更

単色ではなく、ワイヤーフレームや透過マテリアルを適用できます。

デモ4:カメラ操作

OrbitControlsを使うと、マウスで回転・拡大縮小できるインタラクティブなデモが可能です。


4. ローカルで動かすには?

上記のコードをコピーして test.html などの名前で保存 → ブラウザで開いても、真っ白になる場合があります。
これは ES Modules を使う Three.js の最新版では、file:/// での読み込みがセキュリティ上ブロックされるためです。

✅ 解決方法

ローカルで動かすには 簡易Webサーバ を立ち上げる必要があります。

例:

  • Python がある場合

    python -m http.server 8000

  • Node.js がある場合 

    npx http-server -p 8000

その後、ブラウザで
http://localhost:8000/test.html
を開くと正しく表示されます。


5. まとめ

  • Three.jsを使えば簡単に3D演出を加えられる

  • 最新版 (r180) は ES Modules形式file:/// では動作しない

  • 実際の環境では Webサーバ経由で実行する必要がある

  • WordPress記事に埋め込む場合は iframe で外部HTMLを呼び出すのが安全

これをベースに、さらにライト・カメラ操作・外部モデル読み込みを試していけば、よりリッチな演出を作れます!

JavaのGC(Garbage Collection)とは?仕組みと注意点

GCとは何か

Java で開発をしていると、よく耳にする「GC(Garbage Collection)」。
これは 不要になったオブジェクトを自動で回収してメモリを解放する仕組み のことです。C言語のように手動で free() を呼ぶ必要はなく、Java VM が裏側でメモリ管理を行います。

 

ざっくり構造・最近のGC

  • 世代別回収:Eden/Survivor(若世代)→ Old(老世代)

  • Minor GC:Edenが埋まったら短命オブジェクト中心に回収

  • Major/Full GC:Oldが逼迫、断片化、クラス/メタ領域逼迫などで広域回収

  • 既定GC:G1GC(Java 9+)。低停止要求は ZGC / Shenandoah も選択肢

主なトリガ

  • Eden満杯(Minor) / Old高水準(Major)

  • 巨大配列(Humongous)割当て(G1)

  • System.gc() 明示呼び出し

  • メタスペース/オフヒープ圧迫(DirectByteBuffer/JNI など)


“悪い例 → 良い例”で学ぶメモリ/GC対策

1) 無制限キャッシュ(静的Map地獄)

悪い例

良い例(上限+期限+統計)

ポイント:上限なしは必ずOldを膨らませる。キャッシュは 容量・期限・エビクションを設計。


2) リスナ/コールバック未解除

悪い例

良い例(ライフサイクルで必ず解除 / AutoCloseable化)

補足WeakReference リスナはイベント強度低下意図せぬ解放のリスク。基本は明示解除


3) ThreadLocal の放置(プールスレッドに張り付く)

悪い例

良い例(finallyで確実に除去)

ポイントスレッドプール=長寿命remove() を忘れると実質グローバル保持


4) System.gc() 乱用

悪い例

良い例


5) ラムダ/内部クラスが外側(巨大オブジェクト)をキャプチャ

悪い例

良い例(必要最小限のデータだけ渡す・static化)

ポイントキャプチャ=保持。意図せず大物を延命していないか疑う。


6) ループ内の大量一時オブジェクト

悪い例

良い例(StringBuilder再利用・ボクシング回避)


7) finalize/Cleaner頼み(遅延・不確実)

悪い例

良い例(確実な即時解放) 


8) クラスローダ・アプリ再デプロイ時のリーク

悪い例

良い例(クラスローダ境界を越える参照を断つ)

 

9) 巨大配列・Humongous割当ての長期保持(G1)

悪い例

良い例(分割・ストリーミング・寿命短縮)

ポイント:巨大ブロックは断片化回収コスト増の温床。


10) 無制限のキュー/バッファ

悪い例

良い例(有界+バックプレッシャ)


GCログ・計測の始め方(JDK 9+)

  • まずはコードの割当て削減 → その後にヒープ/GC調整

  • 監視:jcmd <pid> GC.heap_info / jstat -gc <pid> 1000

  • ボトルネック特定:JFR(Java Flight Recorder) で割当てホットスポットを把握

  • 必要なら ZGC/Shenandoah も評価(レイテンシ目標に応じて)


実務チェックリスト(配布推奨)

  1. System.gc() を禁止/抑制

  2. キャッシュ・キューは有界+期限

  3. ThreadLocal は finally で remove

  4. リスナ/コールバックは確実に解除(AutoCloseable化が効く)

  5. ループ内の一時オブジェクトを減らす(Builder再利用/ボクシング回避)

  6. 巨大配列は分割・短命化

  7. クラスローダ境界を跨ぐ静的参照禁止、Executor停止・ドライバ解除

  8. try-with-resourcesでオフヒープ即時解放

  9. GCログ/JFRで事実ベースに調整

  10. 目標停止時間(例:MaxGCPauseMillis)を定めて検証


まとめ

GCは“自動”でも“万能”ではありません。
「GCが働きやすいコード」(不要参照を残さない・波及して大物を掴ませない・ピークメモリを避ける)を心がけ、ログ/計測で改善ループを回すのが最短距離です。

PHPアップデート後にWordPressが真っ白に?致命的エラーから復旧する方法

WordPressでサイトを運営していると、サーバー側でPHPのバージョンを更新した際に「致命的エラー(Fatal Error)」が発生し、サイトが真っ白になって表示されなくなることがあります。
これは古いテーマやプラグインが新しいPHPに対応していないことが主な原因です。

この記事では、PHP更新後にWordPressが表示されなくなったときの原因と復旧手順をわかりやすく解説します。


よくある原因

  • プラグインの非互換性
    古いプラグインがPHPの新しい構文に対応しておらず、エラーを引き起こす。

  • テーマのコードが古い
    独自テーマや更新が止まっているテーマが最新PHPで動作しない。

  • キャッシュや.htaccessの問題
    PHP切替直後にキャッシュが残っていたり、設定ファイルが古い記述を持っている場合。


復旧のためのステップ

1. エラーメッセージを確認する

  • サイトは真っ白でも、サーバーログ(error_log)やWordPressのデバッグモードで原因を確認できます。

  • wp-config.php に以下を追加するとエラー内容が記録されます。

  • この設定を有効にすると、wp-content/debug.log というファイルが自動的に作成され、エラー内容が追記されていきます。

  • サイト訪問者にエラーメッセージを見せずに、管理者だけがエラーを確認できるので安心です。

2. プラグインを停止する

  • FTPやファイルマネージャーで wp-content/plugins フォルダを開き、問題のプラグインを一時的にリネーム(例: simple-lightboxsimple-lightbox_old)。

  • これでサイトが表示されれば、そのプラグインが原因です。

3. テーマを切り替える

  • wp-content/themes 内の現在のテーマをリネームすると、自動的にWordPressのデフォルトテーマ(Twenty Twenty系など)が有効化されます。

  • これで表示されれば、使用中のテーマが原因です。

4. PHPバージョンを一時的に戻す

  • サーバーの管理画面からPHPを前のバージョンに戻せば、とりあえずサイトは表示されます。

  • その後、プラグインやテーマを更新して対応を進めましょう。

5. 最新バージョンへの対応

  • プラグイン・テーマの更新を行いましょう。開発が止まっている場合は代替のプラグインを探すのが現実的です。

  • サイト全体のバックアップを取り、再度PHPを新しいバージョンに切り替えます。


再発防止のポイント

  • PHP更新前にステージング環境やテスト環境で動作確認する。

  • 定期的にテーマ・プラグインを更新しておく。

  • 更新が止まっているプラグインはできるだけ使用しない。


まとめ

PHPアップデート後にWordPressが「真っ白」になった場合、慌てずに以下の流れで対応しましょう。

  1. エラーログやデバッグモードで原因を確認

  2. プラグインやテーマを無効化して切り分け

  3. 必要に応じてPHPを一時的に戻す

  4. プラグイン・テーマを更新して再度挑戦

この手順を踏めば、多くのケースで復旧が可能です。
「真っ白画面」は焦りますが、落ち着いて対応すれば必ず解決できます。

PHP7.4.33からPHP8.3への移行ポイント:互換性・新機能・対応策まとめ

PHP7.4.33 は 2022年11月に 公式サポートが終了 (EOL) しており、セキュリティ更新も提供されません。
一方で、PHP8系は活発に開発が続けられており、最新の PHP8.3 ではパフォーマンス改善や新機能追加が進んでいます。
本記事では、PHP7.4.33からPHP8.3へ移行する際のポイントを 互換性・新機能・対応策 の3つの観点から整理し、具体的な修正例も比較表で紹介します。

WordPressなどで作成してるようなサイトだとついつい後回しになりがちなので注意しましょう。


1. 互換性のポイント

主な変更点

  • 非推奨機能の廃止create_function, ereg など)

  • 型システムの強化(引数や戻り値の厳格化)

  • Warning → Fatal Error への昇格(未定義配列キーなど)

  • 動的プロパティ禁止(PHP8.2以降)


2. PHP7.4 → PHP8.3 修正例(比較表)

項目PHP7.4での書き方PHP8.3での修正例エラー内容(PHP8.3)
動的プロパティclass User { }
$u = new User();
$u->name = "Alice"; // OK
class User { public string $name; }
$u = new User();
$u->name = "Alice"; // OK
Deprecated: Creation of dynamic property User::$name is deprecated
未定義配列キー$arr = [];
echo $arr["key"]; // Warning
$arr = [];
echo $arr["key"] ?? null; // Notice回避
Warning: Undefined array key "key"
create_functionの廃止$f = create_function('$x', 'return $x * 2;');
echo $f(3);
$f = fn($x) => $x * 2;
echo $f(3);
Fatal error: Uncaught Error: Call to undefined function create_function()
ereg → pregへの移行if (ereg("^[a-z]+$", $str)) { ... }if (preg_match("/^[a-z]+$/", $str)) { ... }Fatal error: Uncaught Error: Call to undefined function ereg()
implodeの引数順implode($array, ","); // Warningimplode(",", $array); // 正しい順序Deprecated: implode(): Passing glue after array is deprecated
型厳格化 (関数引数)function add($a, $b) { return $a + $b; }
echo add("1", 2); // 3 (暗黙変換)
function add(int $a, int $b): int { return $a + $b; }
echo add(1, 2); // OK
// 文字列を渡すと TypeError
Fatal error: Uncaught TypeError: add(): Argument #1 ($a) must be of type int, string given

 


3. 新機能の注目ポイント(PHP8.0〜8.3)


PHP8.0

  • JITコンパイル導入 → 数割の高速化

  • Union Types

  • Named Arguments

PHP8.1

  • Enums

  • Readonlyプロパティ

  • Fiber

PHP8.2

  • Readonlyクラス

  • Dynamic Properties 廃止

PHP8.3

  • Typed Class Constants

  • json_validate()

  • パフォーマンス改善(クラスロード周り)


4. 移行時の対応ステップ

  1. 検証環境構築(DockerやXAMPPなどでPHP8.3動作確認)

  2. composer update で依存パッケージをPHP8系対応版へ更新

  3. Deprecationログ確認(7.4でDeprecatedが出ていれば必ず修正)

  4. 段階的アップグレード(7.4 → 8.0 → 8.1 → 8.3 が安全)


まとめ

  • PHP7.4.33はEOL済みで脆弱性リスク大。

  • 移行時は 非推奨関数・型厳格化・動的プロパティ に注意。

  • 修正例を比較表で押さえておけば対応しやすい。

  • 最新のフレームワーク(Laravel, Symfony など)はPHP8.1以上必須が主流。

👉 早めにPHP8.3へ移行して、セキュリティ・パフォーマンス・開発効率を改善しましょう。

PowerShellスクリプトが権限エラーで実行できない!ExecutionPolicy設定で解決する方法

PowerShell でスクリプトを実行しようとすると
「このシステムではスクリプトは実行できません」
といった権限エラーが出ることがあります。

原因は ExecutionPolicy(実行ポリシー) の設定にあります。
この記事では、

  • Get-ExecutionPolicy -List で確認できる各項目の意味

  • 設定できる ExecutionPolicy の種類

  • 初心者でも安全にスクリプトを実行するための方法

を解説します。


Get-ExecutionPolicy -List で分かること

Get-ExecutionPolicy -List を実行すると、スコープごとの設定が一覧表示されます。

例:

各スコープの意味

  • MachinePolicy
    グループポリシーでコンピュータ全体に適用される設定。通常の環境では Undefined が多い。

  • UserPolicy
    グループポリシーでユーザー単位に適用される設定。これも Undefined が一般的。

  • Process
    現在の PowerShell プロセス(セッション)だけに適用される一時設定。
    終了するとリセットされる。

  • CurrentUser
    現在ログインしているユーザーだけに適用される設定。
    管理者権限なしで変更可能なので、初心者はここを設定するのが安全

  • LocalMachine
    コンピュータ全体に適用される設定。管理者権限が必要。


ExecutionPolicy の種類

設定できる実行ポリシーには以下の種類があります。

Policy概要署名の要否典型用途リスク度(1-5)推奨スコープ設定例(Set-ExecutionPolicy)補足
Restrictedスクリプト実行を全て禁止不要(そもそも実行不可)企業の厳格端末/検証用の完全遮断2LocalMachineSet-ExecutionPolicy Restricted -Scope LocalMachine既定値になりがち。学習/自動化には不向き
AllSigned信頼された発行元の署名付きのみ実行可必須(すべて)厳格な本番環境での運用3LocalMachine または CurrentUserSet-ExecutionPolicy AllSigned -Scope CurrentUser署名管理が前提。外部スクリプトの安全性担保
RemoteSignedローカル作成は実行可/インターネット由来は署名必須リモート(ダウンロード物)のみ必須一般的な開発/運用でのバランス設定2CurrentUser(推奨)Set-ExecutionPolicy RemoteSigned -Scope CurrentUser最も無難。管理者権限不要でユーザー単位に適用
Unrestricted全て実行可(初回に警告が出る場合あり)不要検証/一時的な作業で制限を緩めたい時4Process または CurrentUserSet-ExecutionPolicy Unrestricted -Scope Process恒常運用は非推奨。警告は出るが実行は可能
Bypassブロック/警告なしで全て実行不要自動化ジョブ/一時的に完全無視したい時5Process(強く推奨)Set-ExecutionPolicy Bypass -Scope Processセッション限定で使う。恒常設定は危険
Undefinedスコープに設定なし(上位スコープへ委譲)ポリシー未設定状態の表示1全スコープUndefinedの場合は実質Restrictedが有効になることが多い

 


安全に設定する方法

権限エラーを解決するには、スコープを指定して設定します。

現在のユーザーだけに設定する場合(推奨)

  • 管理者権限が不要

  • 他のユーザーやシステム全体には影響しない

  • ローカルで作ったスクリプトは実行可能

一時的に設定する場合(PowerShellを閉じるとリセット)


まとめ

  • ExecutionPolicy が原因で PowerShell スクリプトが実行できないことがある

  • Get-ExecutionPolicy -List でどのスコープに設定があるかを確認できる

  • 初心者は CurrentUser に RemoteSigned を設定するのが安全

  • 目的に応じて、Process(一時的)や LocalMachine(管理者権限が必要)も使える