月: 2026年8月

差しボードゲーム記録:『カルカソンヌ』

友人と『大鎌戦役』差しを行った後、古典・源典に触れるということで『カルカソンヌ』を実施。

  • 基本のみ
  • 草原あり

という、互いの運と実力差が一番出てくる対戦です。

その「運」と配置の仕方にやられました。修道院を固め引きされてしまい、更に草原も奪われ、

最終的な盤面はこちら。

「132 vs 116」という負けっぷり。せめて草原のマジョリティが取れていればますますと思いましたが、それはそれと言ったところでしょう。

ボードゲーム『大鎌戦役』対人戦記録。

またとない機会を受け、ボードゲーム『大鎌戦役』を回すことになりました。

ランダムで選んだはずなのに

  • 対戦相手:アルビオン氏族 / 愛国主義
  • 筆者:戸川幕府 / 革新主義

という、拡張で追加された因縁の対決。

両者ともに

  • ファクトリーまで一直線(初期陣地に川がない)
  • メックにハイスピード(2マス進める)がない
  • 英雄の新軍事に特殊なチップを置ける
    • そのチップへワープする能力を持つ

というテクニカルなもの。

印象に残った盤面

  • 互いに戦略一致。「干渉せず、盤面を広げていく」
  • だが、こちらの目的に「戦闘による星章+戦闘カード8枚以上」があったので、諦めながらやっていく。

ただ、この段階で戸川はアルビオンに喧嘩を売る手もありました。

とはいえ、遭遇イベントで食料が手に入ったことが最終的な勝因につながりました。

最終的な盤面はこちら。ともに指示(民心)は申し分ないところまで高まり、対戦相手が秘密の目的を公開して星章6個のトリガーが引かれました。

最終結果

星章は5差ですが、領地とコインで大きく差を付け、130 vs 108で勝利!

感想戦でも盛り上がった充実の一日でした。

新たな統率者デッキ(統率者メモ:2026/08/04)

友人との統率者会で非常に印象的だったこのデッキ。

影響されたので早速購入です。

統率者デッキリスト:ワカンダは永遠なり (GW)

呪文 (62)

クリーチャー (24)
  • 1《ブラックパンサー、ティ・チャラ/T'Challa, the Black Panther(MSC)》
  • 1《ブラックパンサー、シュリ/Shuri, the Black Panther(MSC)》
  • 1《ドーラ・ミラージュの精鋭/Dora Milaje Elite(MSC)》
  • 1《不運な随行員、エヴェレット・K・ロス/Everett K. Ross, Hapless Attaché(MSC)》
  • 1《ハトゥット・ゼラゼ攻撃部隊/Hatut Zeraze Strike Force(MSC)》
  • 1《ラモンダ母后/Queen Mother Ramonda(MSC)》
  • 1《ジャバリ族の族長、エムバク/M'Baku, Jabari Chieftain(MSC)》
  • 1《ワカンダの工作員、ナキア/Nakia, Wakandan Operative(MSC)》
  • 1《王国の盾、ウカビ/W'Kabi, Shield of the Nation(MSC)》
  • 1《ワカンダの戦士、ズリ/Zuri, Warrior of Wakanda(MSC)》
  • 1《豹の女神、バスト/Bast, Panther Goddess(MSC)》
  • 1《敬愛されし強き戦士、オコエ/Okoye, Mighty and Adored(MSC)》
  • 1《ワカンダの女王、ストーム/Storm, Queen of Wakanda(MSC)》
  • 1《偉大なる王、ティ・チャカ/T'Chaka, Venerable King(MSC)》
  • 1《パンサーロボ/Panther Robot(MSC)》
  • 1《忠臣/Loyal Retainers(MSC)》
  • 1《極楽鳥/Birds of Paradise(MSC)》
  • 1《金属製の巨像/Metalwork Colossus(MSC)》
  • 1《真面目な身代わり/Solemn Simulacrum(MSC)》
  • 1《ワカンダの戦豹/Wakandan War Panther (羊毛鬣のライオン/Fleecemane Lion)(MSC)》
  • 1《巧妙な鍛冶/Ingenious Smith(MSC)》
  • 1《宮殿の看守/Palace Jailer(MSC)》
  • 1《忠実な守護者/Loyal Guardian(MSC)》
  • 1《隕石ゴーレム/Meteor Golem(MSC)》
非クリーチャー呪文 (38)
  • 1《ソロモン王のカエル/King Solomon's Frogs(MSC)》
  • 1《ミッドナイト・エンジェル・アーマー/Midnight Angel Armor(MSC)》
  • 1《ロイヤル・タロン戦闘機/Royal Talon Fighter Jet(MSC)》
  • 1《バシェンガの槍/The Spear of Bashenga(MSC)》
  • 1《祖先との交流/Ancestral Communion(MSC)》
  • 1《王位を賭けた戦い/Fight for the Throne(MSC)》
  • 1《ワカンダは永遠なり!/Wakanda Forever!(MSC)》
  • 1《ハート型のハーブ/Heart-Shaped Herb(MSC)》
  • 1《キモヨ・ビーズ/Kimoyo Beads(MSC)》
  • 1《ヌヤミ級マザーシップ/N'Yami-Class Mother Ship(MSC)》
  • 1《豹の服装/Panther Habit(MSC)》
  • 1《シュリのファブリケイター/Shuri's Fabricator(MSC)》
  • 1《ヴィブラニウム・ストライク・ガントレット/Vibranium Strike Gauntlets(MSC)》
  • 1《ヴィブラニウム採掘メカ/Vibranium Mining Mech(MSC)》
  • 1《神聖な訪問/Divine Visitation(MSC)》
  • 1《軍部政変/Martial Coup(MSC)》
  • 1《大群退治/Vanquish the Horde(MSC)》
  • 1《世界の導管/Conduit of Worlds(MSC)》
  • 1《よりよい品物/Greater Good(MSC)》
  • 1《自然の知識/Nature's Lore(MSC)》
  • 1《圧倒する暴走/Overwhelming Stampede(MSC)》
  • 1《交易所/Trading Post(MSC)》
  • 1《切望の宝石/Coveted Jewel(MSC)》
  • 1《金粉の水蓮/Gilded Lotus(MSC)》
  • 1《多勢の兜/Helm of the Host(MSC)》
  • 1《衛星軌道上ヴィブラニウム爆弾/Orbital Vibranium Bomb (災いの砂時計/Scourglass)(MSC)》
  • 1《ブラック・パンサーの爪/Black Panther's Claws (ナザーンの槌/Hammer of Nazahn)(MSC)》
  • 1《豹の像/Panther Idle (精神の眼/Mind's Eye)(MSC)》
  • 1《バシェンカの剣、スカイブレイカー/Skybreaker, Sword of Bashenga (精霊信者の剣/Sword of the Animist)(MSC)》
  • 1《ヴィブラニウムの発電機/Vibranium Dynamo (スランの発電機/Thran Dynamo)(MSC)》
  • 1《急送/Dispatch(MSC)》
  • 1《過大な贈り物/Generous Gift(MSC)》
  • 1《勇敢な姿勢/Valorous Stance(MSC)》
  • 1《内にいる獣/Beast Within(MSC)》
  • 1《調和/Harmonize(MSC)》
  • 1《秘儀の印鑑/Arcane Signet(MSC)》
  • 1《太陽の指輪/Sol Ring(MSC)》
  • 1《囁き絹の外套/Whispersilk Cloak(MSC)》

土地 (38)

  • 12《平地/Plains(MSC)》
  • 12《森/Forest(MSC)》
  • 1《グレート・マウンド/The Great Mound(MSC)》
  • 1《豪勢な大通り/Bountiful Promenade(MSC)》
  • 1《梢の眺望/Canopy Vista(MSC)》
  • 1《要塞化した村/Fortified Village(MSC)》
  • 1《剃刀境の茂み/Razorverge Thicket(MSC)》
  • 1《まばらな木立ち/Scattered Groves(MSC)》
  • 1《屍肉あさりの地/Scavenger Grounds(MSC)》
  • 1《サングラスの大草原/Sungrass Prairie(MSC)》
  • 1《陽花弁の木立ち/Sunpetal Grove(MSC)》
  • 1《高層都市の玉座/Throne of the High City(MSC)》
  • 1《統率の塔/Command Tower(MSC)》
  • 1《進化する未開地/Evolving Wilds(MSC)》
  • 1《祖先の道/Path of Ancestry(MSC)》
  • 1《広漠なる変幻地/Terramorphic Expanse(MSC)》

何が強いと感じたのか

ブラックパンサー、ティ・チャラ / T'Challa, the Black Panther (1)(緑)(白)
伝説のクリーチャー ─ 人間(Human) 貴族(Noble) 英雄(Hero)

このクリーチャーが戦場に出るか攻撃するたび、ヴィブラニウム(Vibranium)・トークン1つを生成する。(それは破壊不能と「(T):(◇)を加える。このマナはアーティファクトでない呪文を唱えるためには支払えない。」を持つアーティファクトである。)
あなたがマナ総量が4以上であるアーティファクト・呪文1つを唱えるたび、このクリーチャーの上に+1/+1カウンター2個を置く。2/2

場に出たときにマナ加速。それが重い呪文を助け、更に自己を強化していくというプロセス。

しかも統率者自身が非常に軽いというのも魅力。

そして、多種多様なアーティファクトや「色を足しても楽しめそう」という期待。

時間はかかりそうですが、育てていきたいです。

X Server切り替え1年後の雑感。

こちらの記事から約一年。

8/03 : 契約、初期設定(UFW / fail2ban)

とあることから、実質丸一年が経過。その1年での振り返りを行ってみたいです。

2026年8月時点でのリソース使用量

--- 💻 サーバーのCPU状態 ---
  稼働時間 (Uptime): 8 days
  ロードアベレージ (Load Avg): 0.22, 0.22, 0.19
  CPU名 (Model): AMD EPYC-Milan Processor
  スペック (Speed): 2.00 GHz (1996.250 MHz)
  コア数 (Cores): 4 threads

--- メモリとスワップ ---
[物理メモリ(Physical Memory)]
                             total        used        free      shared  buff/cache   available
Mem:           5.8Gi       3.7Gi       447Mi       163Mi       2.1Gi       2.1Gi
Swap:          4.9Gi       1.1Gi       3.8Gi

[zRAM の展開状況]
NAME       DISKSIZE  DATA  COMPR ALGORITHM STREAMS ZERO-PAGES  TOTAL MEM-LIMIT MEM-USED MIGRATED MOUNTPOINT
/dev/zram0     2.9G  1.1G 254.4M lzo-rle         4      50834 261.6M        0B   948.3M     199K [SWAP]

--- ストレージ(Storage Status) ---
Filesystem      Size  Used Avail Use% Mounted on
  /dev/vda1       145G   62G   83G  43% /
  /dev/vda16      881M  222M  598M  28% /boot
  /dev/vda15      105M  6.2M   99M   6% /boot/efi
  s3fs            4.0G     0  4.0G   0% /mnt/wasabi2
  s3fs            4.0G     0  4.0G   0% /mnt/wasabi

--- CPUを利用しているプロセス: CPU Consumers (Top 10) ---
%CPU   %MEM   PID      USER         UNIT                 COMMAND
------------------------------------------------------------------------------------------
8.0    4.3    796409   www-data     apache2.service      Passenger RubyApp: 
4.4    6.8    621372   mysql        mysql.service        /usr/sbin/mysqld                                  
2.8    3.6    796362   www-data     apache2.service      Passenger AppPreloader:     
1.1    2.0    789277   www-data     apache2.service      /usr/sbin/apache2 -k start                        
0.7    2.1    784299   www-data     apache2.service      /usr/sbin/apache2 -k start                        
0.6    2.0    784297   www-data     apache2.service      /usr/sbin/apache2 -k start                        
0.6    3.9    622142   root         growi.service        node --import 
0.6    1.8    620879   mongodb      mongod.service       /usr/bin/mongod --config /etc/mongod.conf         
0.5    0.4    784275   root         apache2.service      Passenger core                                    
0.5    0.2    622750   www-data     apache2.service      /usr/sbin/apache2 -k start                        

--- メモリを利用しているプロセス: Memory Consumers (Top 10) ---
%CPU   %MEM   PID      USER         UNIT                 COMMAND
------------------------------------------------------------------------------------------
0.4    11.2   479114   elastic+     elasticsearch.service /usr/share/elasticsearch/jdk/bin/java -Des.network
4.4    6.8    621372   mysql        mysql.service        /usr/sbin/mysqld                                  
8.0    4.3    796409   www-data     apache2.service      Passenger RubyApp: 
0.0    4.1    786930   www-data     apache2.service      Passenger RubyApp: 
0.6    3.9    622142   root         growi.service        node --import ./bin/runtime/env-preload.mjs dist/s
0.0    3.8    796066   www-data     apache2.service      Passenger RubyApp: 
2.8    3.6    796362   www-data     apache2.service      Passenger AppPreloader:     
0.0    3.2    990      root         mnt-wasabi.mount     
0.2    2.9    789814   www-data     php8.3-fpm.service   php-fpm: pool www                                 
0.4    2.8    794701   www-data     php8.3-fpm.service   php-fpm: pool www                                 

何というか

  • Growi
  • Nextcloud
  • Redmine

というメモリを食いまくるサイト(そのほかLaravel Stack)を運営していてOoM Killerが発生しなかったものだと思っています。

なぜメモリが枯渇しなかったか

アクセスを絞っている

これが一番のポイントです。筆者は広告が嫌いなので、自分のサイトにも作っていません。そのため、SEOや広告料収入によるアクセスアップを狙っていません。

「これは俺のメモ帳だ。節度を持ってアクセスする分にはかまわないがそれ以外は容赦しない」

というスタンスを貫いています。

クローラーや迷惑ボットの排除

  • 一度でも不審な攻撃/その兆候を見せたら次のアクセスを禁じる「ONE OUTS」システム
  • 雑なクローラーを別サイトへと転送。その推論モデルを破綻させるような文言を随所に仕込み、Webアプリの重い処理に到達させない「Jailhouse Lock」システム

更に、tcpレベルでの嫌がらせをやらかす相手にはipsetで防御。

https://barrel.reisalin.com/books/one-outs/page/ipsetddos

zRamによるメモリ圧縮

先にあった、Swapにブロックデバイスを追加することにより、スワップアウトが更に効率化しています。

https://barrel.reisalin.com/books/linux/page/ubuntuzram

AIとの対話によるセキュリティ案強化

これが一番です。Mod_Securityを「偽陽性を踏んだから単にそれをRemoveしよう」という雑な運用から

「偽陽性を踏みがちなアクション(記事の投稿、ファイルのアップロード)だけを無視する」というリアルタイム外科手術的な技法へと変換。

これにより

「攻撃は防ぐ 偽陽性は排除する おまえごときに『両方』やるのは そうそう難しいことじゃあないな」

と言えるようになったのが極めて大きいです。

結局のところ

「4GB→6GB」にスペックアップしたとしても普通に運用したらOoM Killerやアクセス過多に陥ったであろうシステムを

  • 自分のサイト運営方針に則って数を絞り
  • 不穏なアクセスを防ぐことが第一歩と考えた

AIの力を借りての運用という形でした。

ねんどろいど『ユミア・リースフェルト』開封。

なんだかんだで購入しました。

ねんどろいど、ユミア・リースフェルト。

ライザ(2準拠)から1ヶ月後です。

ノーマル。あの独特の目の輝きもしっかり。

エフェメラルレコード装備。

顔差し替え。

個人的にはこの顔のために買ったようなものです。

Growiを7.5.7→8.0.0へアップデートしたときの作業メモ

概要

筆者にとっての必須エディタ、Growi。そのv8.0.0が出たので、以下の要件に基づきアップデートを行いました。

リリース情報

実施日: 2026年7月29日
対象環境: Ubuntu 24.04 (非Docker環境 / systemd運用)
その他要件:

itemversion
OSUbuntu 24.04
GROWI7.5.7
node.js24.14.1
npm11.13.0
pnpm11.1.1

必要要件の確認

GROWIの最新リリースにおける変更点(ES7の完全廃止、jemalloc対応、メモリ最適化、ESM移行)に対する自環境の適合状況を確認。

Elasticsearchバージョン確認

ES8/ES9のみに対応しているため、以下を確認。

curl -X GET "http://localhost:9200/" |grep number

9.4.4となっていたので、要件を満たすことは確認しました。

OSメモリ最適化モジュールの確認

ldconfig -p | grep jemalloc

libjemalloc.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libjemalloc.so.2と出たのでモジュールも確認済みです。

ここまでやれば、覚悟を決めてアップデートを行います。

さっくりとしているが面倒な手順

  1. Growi実行スクリプトの修正を行います。
  2. 修正結果が反映されたことを確認します。
  3. 関連サービスの停止を行います。
  4. (推奨)mongodbをまるごとバックアップしておきます。
  5. Growiのアップデートを行います。
  6. アップデートの確認を行います。

Growi実行スクリプトの修正

※筆者は

systemdに登録したサービス起動プログラムがGrowiのルートディレクトリ/home/www-data/growi配下にあるgrowi-start.shを参照して各種環境をキックしています。

※ご自身の環境に合わせ修正を行ってください※

  • 修正前ファイル
#!/bin/bash

# nvmのdefaultエイリアスが指すディレクトリを動的に取得してPATHに追加
# これにより、nvm installでバージョンを上げてもこのスクリプトの書き換えが不要になります
DEFAULT_NODE_VER=$(cat "$NVM_DIR/alias/default")
export PATH="$NVM_DIR/versions/node/$DEFAULT_NODE_VER/bin:$PATH"
GROWI_DIR="/home/www-data/growi"

cd $GROWI_DIR

# 環境変数の設定
export NODE_ENV=production
export AUDIT_LOG_ENABLED=true
export FORCE_WIKI_MODE=private
export MONGO_URI=mongodb://localhost:27017/growi
export ELASTICSEARCH_URI=http://localhost:9200/growi
export REDIS_URI=redis://localhost:6379
export PASSWORD_SEED=(設定済みのパスワード)

# npm run app:server を使用する(npmが内部で正しいパスを見つけてくれます)
# execを使うことでsystemdとの親和性を維持します
exec npm run app:server

このファイルを修正していきますが:バックアップを確実に行います。

  • ファイルバックアップ
sudo cp -pi /home/www-data/growi/growi-start.sh /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d)
  • ファイルバックアップ確認
diff -u /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d) /home/www-data/growi/growi-start.sh

エラー(差分)がなければ両者ともファイルがあり、バックアップが取れています。

バックアップ後、/home/www-data/growi/growi-start.shの編集を行います。(自分の環境に合わせます)

主な変更内容
  • JEMALLOC の有効化: export JEMALLOC_ENABLED=true を追加
  • LD_PRELOAD の明示: export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 を追加
  • MongoDB 接続プールの最適化: MONGO_URI?maxPoolSize=10 パラメータを付与

具体的には以下のような差分が取れていればOKです。

diff -u /path/to/backup/directory/growi-start.sh.$(date +%Y%m%d) /home/www-data/growi/growi-start.sh
# 環境変数の設定
 export NODE_ENV=production
+export JEMALLOC_ENABLED=true
+export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
 export AUDIT_LOG_ENABLED=true
 export FORCE_WIKI_MODE=private
-export MONGO_URI=mongodb://localhost:27017/growi
+export MONGO_URI=mongodb://localhost:27017/growi?maxPoolSize=10
 export ELASTICSEARCH_URI=http://localhost:9200/growi
 export REDIS_URI=redis://localhost:6379

設定ファイルの修正確認

  • Growiサービスの再起動
sudo systemctl restart growi.service

指定した環境変数および jemalloc ライブラリが GROWI プロセス(Node.js)へ正常にロードされていることを確認しました。

  • プロセスの環境変数確認:
    JEMALLOC_ENABLED=true および LD_PRELOAD が正常に適用されていることを確認。
  • メモリマップ / ファイルハンドラ確認:
    lsof および /proc/{PID}/maps コマンドにより、libjemalloc.so.2 が Node.js プロセスに読み込まれていることを確認。

メンテナンスモード有効化

  1. Growiに管理者権限でログインします。
  2. 管理トップ>アプリ設定に進み、「メンテナンスモードを開始する」をクリックします。
  3. トップページに戻り「メンテナンスモード」が表示されていることを確認します。

バックアップ

以下をバックアップします。

  • mongodbの格納データ
cat /etc/mongod.conf |grep dbPath

として、ここのディレクトリ一式を控えます。(筆者環境 /home/mongodb)

このディレクトリを任意の方法でバックアップします。

  • Growiの添付ファイル一式が納められているディレクトリ(ファイルアップロード先をlocalにしている場合のみ)
/growi/root/directory/apps/app/public

(筆者環境 /home/www-data/growi/apps/app/public)ここも念のためバックアップします。

※ 添付ファイルのアップロード先をAWSやAzureなどにしている場合は不要です

  • vpsや仮想ゲストの場合はシステム全体:推奨

スナップショット機能などでシステム全体をバックアップした方が確実で安心です。

ElasticsearchとGrowiの停止

  • Elasticsearchサービス停止
sudo systemctl stop elasticsearch.service
  • Growiサービス停止
sudo systemctl stop growi.service
  • サービス停止確認
systemctl status elasticsearch.service growi.service | grep Active

inactive(dead)を確認します。

作業前バックアップ

  • データディレクトリを丸ごとコピー (-aオプションでパーミッションを維持)
sudo cp -a /var/lib/elasticsearch/ /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)

自分の環境に合わせます。

  • バックアップ確認
sudo ls -l /path/to/backup/dir/elastic_bk.$(date +%Y%m%d)

バックアップした内容があることを確認します。(※管理者権限でないとこのディレクトリを見ることはできません)

growiディレクトリに移動します

cd /home/www-data/growi && pwd

自分の環境に合わせます。(筆者環境/home/www-data/growi)

リリースタグを確認します。

  • リリースタグ取得
sudo git fetch --tags
  • リリースタグ確認
sudo git tag -l

スペースで確認していき、上記リリースサイトと同じバージョンがあることを確認します。

チェックアウトとインストールを行います。

  • 変更を一時的に退避
sudo git stash
  • チェックアウト
sudo git checkout 【バージョン】

リリースタグは再確認しましょう。今回は 2026/07/28にリリースされたv8.0.0を選択しました。

  • pnpm install
sudo pnpm i

※これができるのは、筆者のgrowi実行環境がrootだからです。このパーミッション設定は確実に確認しましょう。

  • ビルド
NODE_OPTIONS="--max-old-space-size=4096" sudo pnpm run app:build

→ ビルド時のメモリ大量使用を抑えるため上限を抑えています。余談ですが、ここは神に祈る作業です。

ElasticsearchとGrowiの再開

  • Elasticsearchサービス開始
sudo systemctl restart elasticsearch.service
  • Growiサービス開始
sudo systemctl restart growi.service
  • サービス開始確認
systemctl status elasticsearch.service growi.service | grep Active

active(running)を確認します。

メンテナンスモード無効化

  1. Growiに管理者権限でログインします。
  2. 管理トップ>アプリ設定に進み、「メンテナンスモードを終了する」をクリックします。
  3. トップページに戻り「メンテナンスモード」が表示されていないことを確認します。

バージョンアップを確認します。

  1. 画面下部にあるバージョンがチェックアウトしたバージョン(v8.0.0)であることを確認します。
  2. 各種機能(ページ閲覧や編集)などが正常に行えるかを確認します。

追加モジュールが動いていることを確認します。

  • 一時的に特権ユーザー昇格

※一般権限で見られないため

sudo su -
  • モジュール追加確認
 pgrep -f "node.*growi" | xargs -I {} lsof -p {} 2>/dev/null | grep jemalloc
  • 実行例
MainThrea 479521 root  mem       REG  253,1    830656    15385 /usr/lib/x86_64-linux-gnu/libjemalloc.so.2

バージョンアップ後の作業

必要に応じてバックアップしたファイル一式やスナップショットを削除します。

Powered by WordPress & Theme by Anders Norén