2026/10/27(火)ExmentのLaravelバージョン

昨今のPHP脆弱性の問題もあるが、Laravelにも脆弱性があってCVE-2026-114509です。ExmentはLaravelフレームワークでなんと10.x系を使用しており対象となっていて
TokenGuardの認証回避
標準API認証(TokenGuard)とMySQL/MariaDBを特定の構成で組み合わせている場合、正規のAPIトークンを持たない攻撃者が既存ユーザーとして認証を突破できてしまう脆弱性です。
とのことで、かなり危険ですがバックポートで10.x系にもパッチが下りてきていました。
パッチを当てるとLaravel 10.50.3 となって、Exmentも一旦は今回の件はこれで対策できると思われます。
  • Upgrading laravel/framework (10.x-dev 74e222c => 10.x-dev 47781ee)
Githubにでのマージ履歴は以下の通り
Githubの[10.x] Reject non-string tokens in TokenGuard- #62177

2026/07/14(火)Windows 11:TPM2.0・CPU要件を満たさないPCでもいつのまにか公式インストーラーでインストール可能

この記事はPCによっては違うかもしれません、DLする時期でころころ中身が変わるWindowsのインストーラの挙動の不思議

Windows11はTPM 2.0と第8世代以降の対応CPUじゃないとインストール時に完全にブロックされていました。
PC正常性チェックで弾かれるのが苦い思いで出すね。私の以前のPCも第4世代なのでアウトでした。
でも最近なのか、USBメモリからのWindows11インストールで、以前はインストールの途中で、要件を満たさないためインストールを続行できないとはじかれていたところが、
このPCは要件を満たしていませんが、サポート対象外であることを了承しますか
みたいなメッセージになっており、しかも承諾したら普通にインストールできます。更新のダウンロードはできませんと言いつつ現状では普通に落ちてきます。ただし無保証をかなり強調しているので「もう好きにインストールして使っててもよいけど、何かの都合で継続できなくなることは覚悟してね」ということだと思います。
確かに、「それはそう」だと思いますが昨今のPC買い換えどうしましょう問題に対して複数台持ってる人なんかはサブ機の延命措置でかなり助かりそうです。

結論としては、小細工なしに普通にWindows11インストールできるようになったは大きい話だと思います。

とはいえ、しれっとWindows10のESUも1年延長されて2028年10月まで更新が来るので無理にWindows11にしなくても良い気もしていますが。

2026/07/08(水)ネザーゲートの利用を禁止させる

マルチサーバーでネザー解禁を後日にするためのスクリプト。
火打石と打ちがねで、ネザーゲートを開通させることはできる。
しかし、入ろうとするとプレイヤーにデバフがかかりゲートが破壊される。
// ========================================================================
// ネザーゲート禁止
// ========================================================================
let enable_nether_gate_check = true;

system.runInterval(() => {

    if (!enable_nether_gate_check) return;

    for (const player of world.getPlayers()) {
        try {
            const dim = player.dimension;
            const loc = player.location;

            // プレイヤー周囲 ±1 にポータルがあるかチェック
            let nearPortal = false;
            const searchRange = 1;

            outerLoop: for (let dx = -searchRange; dx <= searchRange; dx++) {
                for (let dy = -searchRange; dy <= searchRange; dy++) {
                    for (let dz = -searchRange; dz <= searchRange; dz++) {
                        const block = dim.getBlock({
                            x: Math.floor(loc.x) + dx,
                            y: Math.floor(loc.y) + dy,
                            z: Math.floor(loc.z) + dz
                        });

                        if (block?.typeId === "minecraft:portal") {
                            nearPortal = true;
                            break outerLoop;
                        }
                    }
                }
            }

            if (!nearPortal) continue;

            // 安全な場所を探す(強制TP用、現在未使用だがおいておく)
            const offsets = [1];
            let safeSpot = null;

            for (let attempt = 0; attempt < 10; attempt++) {
                const dx = offsets[Math.floor(Math.random() * offsets.length)] * (Math.random() < 0.5 ? -1 : 1);
                const dz = offsets[Math.floor(Math.random() * offsets.length)] * (Math.random() < 0.5 ? -1 : 1);

                const tx = Math.floor(loc.x) + dx;
                const ty = Math.floor(loc.y);
                const tz = Math.floor(loc.z) + dz;

                const foot = dim.getBlock({ x: tx, y: ty, z: tz });
                const under = dim.getBlock({ x: tx, y: ty - 1, z: tz });

                if (
                    foot?.typeId === "minecraft:air" &&
                    under && 
                    under.typeId !== "minecraft:air" &&
                    under.typeId !== "minecraft:portal"
                ) {
                    safeSpot = { x: tx + 0.5, y: ty, z: tz + 0.5 };
                    break;
                }
            }

            if (safeSpot) {
                // 効果付与
                player.addEffect("wither", 80, { amplifier: 2, showParticles: false });
                player.addEffect("darkness", 160, { amplifier: 20, showParticles: false });

                player.sendMessage("§c§lネザーゲートは解禁されていません。");

                // 周辺のネザーゲート(ポータルブロック)をair置換
                const x = Math.floor(loc.x);
                const y = Math.floor(loc.y);
                const z = Math.floor(loc.z);
                const destroyRadius = 3;

                player.runCommand(
                    `fill ${x - destroyRadius} ${y - destroyRadius} ${z - destroyRadius} ` +
                    `${x + destroyRadius} ${y + destroyRadius} ${z + destroyRadius} ` +
                    `air replace minecraft:portal`
                );

            }
        } catch (error) {
            // ランタイムエラーをキャッチ(プレイヤーが不正な状態の場合など)
            console.warn(`ネザーゲート禁止処理でエラーが発生: ${error}`);
        }
    }
}, 30);

2026/07/08(水)オーバーワールドの活動範囲を制限する

統合版はワールドーボーダーを簡単に設置できない。
そこで、代わりにあらかじめ設定したワールド範囲から外に出るとデバフを掛けるようする。
let worldArea = 2048;// ワールドの範囲(±2048)

// ========================================================================
// ワールドの範囲外に出たら警告
// ========================================================================
system.runInterval(() => {
    for (const p of world.getPlayers()) {
        const loc = p.location;
        // ワールドの範囲外か?
        if (Math.abs(loc.x) > worldArea || Math.abs(loc.z) > worldArea) {
            // title コマンドで警告表示
            p.runCommand(`title @s title "§cワールド範囲外"`);
            // めまい効果を付与
            p.addEffect("nausea", 60, { amplifier: 3, showParticles: false });
            // 速度低下効果を付与
            p.addEffect("slowness", 60, { amplifier: 5, showParticles: false });
            // ダメージを与える
            p.runCommand(`damage @s 1`);
        }
    }
}, 40);

2026/07/08(水)製図台の使用を禁止

マルチサーバーで地図埋めをされると新要素実装エリアがクソ遠くなって糞迷惑なので製図台そのものを使用禁止にするスクリプト。
プレイヤーに地図拡張させないようにするためにはこれに加えて作業台レシピも改造する必要がある。
// ========================================================================
// 製図台の使用を禁止
// ========================================================================
let enable_cartography_table_check = true;

world.beforeEvents.playerInteractWithBlock.subscribe(ev => {
    if (!enable_cartography_table_check) return;

    const block = ev.block;
    if (!block) return;

    // 製図台ならキャンセル
    if (block.typeId === "minecraft:cartography_table") {
        ev.cancel = true;
        ev.player.sendMessage("製図台の使用は解禁されていません");
    }
});