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

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

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

ライザ(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

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

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

BLUE REFLECTION QUARTET(Windows版) 到着。

本ブログにはそれを記していないだけで、地味にプレイ時間が長い

『BLUE REFLECTION TIE/帝』。(300時間超)思い入れは高いゲームです。とはいえ、スマートフォンゲームはよほどのことが無いとやらないという理由により燦(SUN)はプレイせず。

そんなブルリフシリーズをまとめた『QUARTET』が出るということで予約をしたのが2026年6月当初。

それが、発売日と同日に届きました。

注文したのはフルセットではなく

  • アクリルパネル
  • マグカップ
  • デスクマット

などに加えて

メモリアルCDコレクション。筆者にとっての「JRPGの戦闘音楽の概念を変えてしまった」レベルの楽曲『OVERDOSE』が入っていると言うだけでも、このCDは価値があります。

また、アニメ『澪/Ray』のBGMも入っています。(さすがにアニメの主題歌は権利関係でだめだったようですが)

まさかの10枚組という豪華版。

セット内はゲームのCDキーが入っていたのでアクティベートも完了。

プレイ感、詰まったところ、データなどは逐次アップロードしていきます。

ゲームチェンジャーカード抜きのジェスカイ。(統率者メモ:2026/07/30)

ジェスカイカラーというブラケット3以上になりがちの人気カラーを

  • ゲームチェンジャーカードを抜き
  • 呪文以上に盤面で制圧する
  • 無限を捨てたビートダウン

として、何よりもタルキール:龍嵐録の構築済みの統率者デッキ「ジェスカイの打撃手」のシャーシ構造をある程度保ったまま換骨奪胎をしたデッキとするためカードを入れ替えました。

入れるカード

Den of the Bugbear / バグベアの居住地 (AFR)
土地
あなたがこれ以外の2つ以上の土地をコントロールしているなら、バグベアの居住地はタップ状態で戦場に出る。
(T):(赤)を加える。
(3)(赤):ターン終了時まで、バグベアの居住地は「このクリーチャーが攻撃するたび、赤の1/1のゴブリン(Goblin)・クリーチャー・トークン1体をタップ状態かつ攻撃している状態で生成する。」を持つ赤の3/2のゴブリン・クリーチャーになる。これは土地でもある。

このミシュラランドを忘れていたのは失態。ファストランドで、数が並ぶのでナーセットの果敢の恩恵を受けられます。

大図書棟の大ホール / Great Hall of the Biblioplex (SOS)
土地
(T):(◇)を加える。
(T), 1点のライフを支払う:好きな色1色のマナ1点を加える。このマナは、インスタントやソーサリーである呪文を唱えるためにしか支払えない。
(5):この土地がクリーチャーでないなら、これは「あなたがインスタントやソーサリーである呪文1つを唱えるたび、ターン終了時まで、このクリーチャーは+1/+0の修整を受ける。」を持つ2/4のウィザード(Wizard)クリーチャーになる。これは土地でもある。

永続化するミシュラランド。これ自身が果敢ライクな能力を持っているのもポイントが高いです。

Tablet of Discovery / 発見の石板 (2)(赤) (SOS)
アーティファクト
このアーティファクトが戦場に出たとき、カード1枚を切削する。このターン、そのカードをプレイしてもよい。(カードを切削するとは、あなたのライブラリーの一番上にあるカードをあなたの墓地に置くことである。)
(T):(赤)を加える。
(T):(赤)(赤)を加える。このマナは、インスタントやソーサリーである呪文を唱えるためにしか支払えない。

  • 墓地肥やし
  • マナファクト
  • 衝動的ドローと異なり追放されない

など、どこかおかしいアンコモンカード。

Shark Typhoon / サメ台風 (5)(青) (IKO)
エンチャント
あなたがクリーチャーでない呪文を唱えるたび、飛行を持つ青のX/Xのサメ(Shark)・クリーチャー・トークン1体を生成する。Xは、その呪文のマナ総量に等しい。
サイクリング(X)(1)(青)((X)(1)(青),このカードを捨てる:カードを1枚引く。)
あなたがサメ台風をサイクリングしたとき、飛行を持つ青のX/Xのサメ・クリーチャー・トークン1体を生成する。

奇襲によりブロッカーを顕現させたり、継続的なフライヤーを生み出すことができます。

Eris, Roar of the Storm / 嵐の咆哮、エリス (8)(青)(赤)
伝説のクリーチャー — エレメンタル(Elemental) 邪術師(Warlock)
この呪文を唱えるためのコストは、あなたの墓地にありインスタントやソーサリーであるカードの中のマナ総量1種類につき(2)少なくなる。
飛行、果敢
あなたが各ターン内のあなたの2つ目の呪文を唱えるたび、飛行と果敢を持つ赤の4/4のドラゴン(Dragon)・エレメンタル(Elemental)・クリーチャー・トークン1体を生成する。4/4

条件はコーリ鋼の短刀や志同じくとほぼ同じ。重いだけあって(コスト軽減付きですが)出てくるドラゴンはそのままフィニッシャーです。

Shiko, Paragon of the Way / 道の体現者、シィコ (2)(青)(赤)(白)
伝説のクリーチャー — スピリット(Spirit) ドラゴン(Dragon)
飛行、警戒
これが戦場に出たとき、あなたの墓地にありマナ総量が3以下であり土地でないカード1枚を対象とする。それを追放する。それをコピーする。その後、そのコピーを、そのマナ・コストを支払うことなく唱えてもよい。(パーマネント呪文のコピーはトークンになる。)
4/5

統率者、ナーセットと異なり、クリーチャーも対象に取れるのがポイント。特に両面カードと合わせたときの効果は特筆すべきものがあります。

Three Blind Mice / 三匹の盲目ネズミ (2)(白) WOE
エンチャント — 英雄譚(Saga)
(この英雄譚(Saga)が出た際とあなたのドロー・ステップの後に、伝承(lore)カウンター1個を加える。IVの後に、生け贄に捧げる。)
I ― 白の1/1のハツカネズミ(Mouse)・クリーチャー・トークン1体を生成する。
II,III ― あなたがコントロールしているトークン1つを対象とする。それのコピーであるトークン1つを生成する。
IV ― ターン終了時まで、あなたがコントロールしているすべてのクリーチャーは+1/+1の修整を受け警戒を得る。

ナーセットデッキにおけるオリジナルカードではないかというレベルでかみ合います。

ポイントは2章と3章の効果。

あなたがコントロールしているトークン1つを対象とする。それのコピーであるトークン1つを生成する。

これ「これでなく、英雄譚でもない」と書かれていないのがポイントです。

そして、統率者

Narset, Enlightened Exile / 悟った喪失者、ナーセット (1)(青)(赤)(白)
伝説のクリーチャー — 人間(Human) モンク(Monk)
あなたがコントロールしているすべてのクリーチャーは果敢を持つ。
悟った喪失者、ナーセットが攻撃するたび、墓地にありマナ総量が悟った喪失者、ナーセットのパワーより小さくクリーチャーでも土地でもないカード1枚を対象とする。それを追放し、コピーする。あなたはそのコピーを、そのマナ・コストを支払うことなく唱えてもよい。
3/4

の効果で唱えられたパーマネント呪文は「トークンとして戦場に出る」こと。つまり、三匹の盲目ネズミがトークンになった場合は

  • 二章の効果でトークンとなった盲目ネズミが戦場に出る(英雄譚AとB)
  • 英雄譚Aの第三章と英雄譚Bの第二章がそれぞれ誘発。自分のコピーを生み出し英雄譚は4つ。
  • 英雄譚Aは第4章となるため消えますが、Bが第三章、C,Dは第二章となるため英雄譚は6つ。

それぞれ第一章のネズミを引き連れますので、文字通りのねずみ算が発生します。更に第四章の+1/+1修正も横並びの打点を更に上げます。

そして、元々構築済みに入っていた

Think Twice / 熟慮 (1)(青) TDC
インスタント
カードを1枚引く。
フラッシュバック(2)(青)(あなたはあなたの墓地にあるこのカードを、そのフラッシュバック・コストで唱えてもよい。その後それを追放する。)

で、マナカーブとスペルカウントを調整。

OUT

  • 確信のタリスマン
  • ジェスカの意志
  • カルデラの葬火喰らい
  • けちな贈り物
  • 死の国からの脱出
  • 意志の力
  • 炎の中の過去

と、土地の入れ替えだったり「ゲームチェンジャーカード」や「そのGCと君で悪さをするカード」「よりよいフィニッシャーへの差し替え」

で、現段階のリストはこちら。

統率者

  • 《悟った喪失者、ナーセット/Narset, Enlightened Exile(MAT)》

デッキ

クリーチャー (11枚)
  • 《僧院の導師/Monastery Mentor(TDC)》
  • 《若き紅蓮術士/Young Pyromancer(TDC)》
  • 《マナ形成のヘルカイト/Manaform Hellkite(TDC)》
  • 《モンスーンの魔道士、ラル/Ral, Monsoon Mage(MH3)》
  • 《第三の道の偶像破壊者/Third Path Iconoclast(TDC)》
  • 《モニカ・ランボー/Monica Rambeau(MSH)》
  • 《双対の声、ヴェイラン/Veyran, Voice of Duality(TDC)》
  • 《迷える黒魔道士、ビビ/Vivi Ornitier(FIN)》
  • 《三学の修得者/Elsha, Threefold Master(TDC)》
  • 《道の体現者、シィコ/Shiko, Paragon of the Way(TDM)》
  • 《嵐の咆哮、エリス/Eris, Roar of the Storm(OTC)》
インスタント (17枚)
  • 《剣を鍬に/Swords to Plowshares(PIP)》
  • 《魂の仕切り/Soul Partition(BRO)》
  • 《皆に命を!/Everybody Lives!(WHO)》
  • 《断れない提案/An Offer You Can't Refuse(SNC)》
  • 《考慮/Consider(TDC)》
  • 《熟慮/Think Twice(TDC)》
  • 《ジュワー島の撹乱/Jwari Disruption(ZNR)》
  • 《ナーセットの逆転/Narset's Reversal(TDC)》
  • 《大あわての捜索/Frantic Search(TDC)》
  • 《極性を反転せよ/Reverse the Polarity(WHO)》
  • 《この町は狭すぎる/This Town Ain't Big Enough(OTJ)》
  • 《崇高な天啓/Sublime Epiphany(TDC)》
  • 《時を越えた探索/Dig Through Time(KTK)》
  • 《削剥/Abrade(TDC)》
  • 《カズールの憤怒/Kazuul's Fury(ZNR)》
  • 《大勝ち/Big Score(TDC)》
  • 《プリズマリの命令/Prismari Command(TDC)》
  • 《マグマ・オパス/Magma Opus(TDC)》
ソーサリー (14枚)
  • 《セヴィンの再利用/Sevinne's Reclamation(DMR)》
  • 《解体の波/Dismantling Wave(TDC)》
  • 《マキンディの暴走/Makindi Stampede(ZNR)》
  • 《大群退治/Vanquish the Horde(TDC)》
  • 《定業/Preordain(TDC)》
  • 《思案/Ponder(TDC)》
  • 《豚の呪い/Curse of the Swine(TDC)》
  • 《多様な洞察力/Manifold Insights(C16)》
  • 《複製の儀式/Rite of Replication(TDC)》
  • 《信仰無き物あさり/Faithless Looting(TDC)》
  • 《一攫千金/Strike It Rich(MH2)》
  • 《ジェスカイの意志/Will of the Jeskai(TDC)》
  • 《熱狂のリフレイン/Rousing Refrain(OTC)》
  • 《表現の反復/Expressive Iteration(TDC)》
  • 《時の一掃/Time Wipe(WHO)》
ソーサリー + インスタント (1枚)
  • 《ギャリフレイの陥落+終止符を/Gallifrey Falls+No More(WHO)》
エンチャント (12枚)
  • 《亡霊の牢獄/Ghostly Prison(TDC)》
  • 《志同じく/Aligned Heart(TDC)》
  • 《大嵐の技/Tempest Technique(TDC)》
  • 《両生類の豪雨/Amphibian Downpour(MH3)》
  • 《嵐追いの才能/Stormchaser's Talent(BLB)》
  • 《豪奢の呪い/Curse of Opulence(TDC)》
  • 《仇敵に死を/Death to Our Enemies(MSH)》
  • 《苦々しい再会/Bitter Reunion(BRO)》
  • 《美術家の才能/Artist's Talent(BLB)》
  • 《ジェスカイの隆盛/Jeskai Ascendancy(KTK)》
  • 《思考の旋風/Whirlwind of Thought(TDC)》
  • 《サメ台風/Shark Typhoon(IKO)》
  • 《三匹の盲目ネズミ/Three Blind Mice(WOE)》
プレインズウォーカー (2枚)
  • 《崇高な工匠、サヒーリ/Saheeli, Sublime Artificer(WAR)》
  • 《時を解す者、テフェリー/Teferi, Time Raveler(WAR)》
アーティファクト (6枚)
  • 《太陽の指輪/Sol Ring(TDC)》
  • 《秘儀の印鑑/Arcane Signet(PIP)》
  • 《発展のタリスマン/Talisman of Progress(PIP)》
  • 《独創のタリスマン/Talisman of Creativity(PIP)》
  • 《コーリ鋼の短刀/Cori-Steel Cutter(TDM)》
  • 《発見の石板/Tablet of Discovery(SOS)》
土地 (34枚)
  • 3:《平地/Plains(PIP)》
  • 3:《島/Island(PIP)》
  • 2:《山/Mountain(PIP)》
  • 《バグベアの居住地/Den of the Bugbear(AFR)》
  • 《大図書棟の大ホール/Great Hall of the Biblioplex(SOS)》
  • 《天上都市、大田原/Otawara, Soaring City(NEO)》
  • 《フェアリーの集会場/Faerie Conclave(10E)》
  • 《工業公国、リンドブルム/Lindblum, Industrial Regency(FIN)》
  • 《神聖なる泉/Hallowed Fountain(DIS)》
  • 《アダーカー荒原/Adarkar Wastes(TDC)》
  • 《氷河の城砦/Glacial Fortress(TDC)》
  • 《天界の列柱/Celestial Colonnade(WHO)》
  • 《蒸気孔/Steam Vents(GPT)》
  • 《シヴの浅瀬/Shivan Reef(TDC)》
  • 《硫黄の滝/Sulfur Falls(PIP)》
  • 《さまよう噴気孔/Wandering Fumarole(OGW)》
  • 《聖なる鋳造所/Sacred Foundry(RAV)》
  • 《戦場の鍛冶場/Battlefield Forge(TDC)》
  • 《断崖の避難所/Clifftop Retreat(TDC)》
  • 《鋭い突端/Needle Spires(OGW)》
  • 《統率の塔/Command Tower(PIP)》
  • 《風変わりな果樹園/Exotic Orchard(PIP)》
  • 《神秘の僧院/Mystic Monastery(PIP)》
  • 《ラウグリンのトライオーム/Raugrin Triome(IKO)》
  • 《危険地帯/Perilous Landscape(TDC)》
  • 《乾燥台地/Arid Mesa(ZEN)》
  • 《沸騰する小湖/Scalding Tarn(ZEN)》
  • 《溢れかえる岸辺/Flooded Strand(ZNE)》

ビートダウンの強化とブラケットダウンの構想。(統率者メモ:2026/07/29)

こちらのデッキ、更に突き詰めていきます。

  • トークンによる横並べ戦術

はやはり性に合っていたので、

いっそのことゲームチェンジャーカードを抜いて、ブラケット2で戦うのはありなのではということ。

そこで、現在のリストに入っている

  • 意志の力/Force of Will
  • けちな贈り物/Gifts Ungiven
  • ジェスカの意志/Jeska's Will

の3つを抜き、よりコンボを抜いたフェアデッキで戦ってみようという試み。

いくつかカードを入れたので、ちょいと試して改めてのご報告を行います。

構築済み統率者デッキ『サイオンズ・スペル』:レベル調整。(統率者メモ 2026/07/28)

1ヶ月ぐらい前に入手した構築済みの統率者デッキ、FF『サイオンズ・スペル』。

ようやく第一回目の調整です。

コンセプトとして:

  • ゲームチェンジャーカードは使わない。
  • 無限は入れない。
  • 普通に強化しても頭が一つ上のデッキなのでほどほどの強さを狙う

のがこちら。

統率者 (Commander)

《魔女、ヤ・シュトラ・ルル/Y'shtola, Night's Blessed(FIC)》

土地 (Lands) - 37枚

  • 《島/Island》 ×3
  • 《沼/Swamp》 ×4
  • 《平地/Plains》 ×4
  • 《詰まった河口/Choked Estuary(FIC)》
  • 《ダークウォーターの地下墓地/Darkwater Catacombs(FIC)》
  • 《僻地のぬかるみ/Desolate Mire(FIC)》
  • 《水没した地下墓地/Drowned Catacomb(FIC)》
  • 《風変わりな果樹園/Exotic Orchard(FIC)》
  • 《悪臭の荒野/Fetid Heath(FIC)》
  • 《氷河の城砦/Glacial Fortress(FIC)》
  • 《孤立した礼拝堂/Isolated Chapel(FIC)》
  • 《港町/Port Town(FIC)》
  • 《大草原の川/Prairie Stream(FIC)》
  • 《光影の交錯/Shineshadow Snarl(FIC)》
  • 《広漠なるスカイクラウド/Skycloud Expanse(FIC)》
  • 《窪み渓谷/Sunken Hollow(FIC)》
  • 《沈んだ廃墟/Sunken Ruins(FIC)》
  • 《地底の大河/Underground River(FIC)》
  • 《秘儀の聖域/Arcane Sanctum(FIC)》
  • 《統率の塔/Command Tower(FIC)》
  • 《汚染された帯水層/Contaminated Aquifer(FIC)》
  • 《祖先の道/Path of Ancestry(FIC)》
  • 《邪神の寺院/Temple of the False God(FIC)》
  • 《汚染地帯/Contaminated Landscape(MH3)》
  • 《アダーカー荒原/Adarkar Wastes(ICE)》
  • 《湿った墓/Watery Grave(RAV)》
  • 《湿地の干潟/Marsh Flats(ZEN)》
  • 《溢れかえる岸辺/Flooded Strand(ONS)》

クリーチャー (Creatures) - 17枚

  • 《時空を渡りし者、グ・ラハ・ティア/G'raha Tia, Scion Reborn(FIC)》
  • 《タタル・タル/Tataru Taru(FIC)》
  • 《召喚:蛮神善王モグル・モグXII世/Summon: Good King Mog XII(FIC)》
  • 《エルピスの所長、ヘルメス/Hermes, Overseer of Elpis(FIC)》
  • 《聖竜フレースヴェルグ/Hraesvelgr of the First Brood(FIC)》
  • 《テロフォロイ、アシエン・ファダニエル/Fandaniel, Telophoroi Ascian(FIC)》
  • 《第三の座、エメトセルク/Emet-Selch of the Third Seat(FIC)》
  • 《ヒルディブランド・マンダヴィル/Hildibrand Manderville(FIC)》
  • 《大魔導師の名誉教授/Archmage Emeritus(FIC)》
  • 《奔流の機械巨人/Torrential Gearhulk(FIC)》
  • 《残忍な騎士/Murderous Rider(FIC)》
  • 《悪意の大梟/Baleful Strix(FIC)》
  • 《ダルガーの専心魔道士/Dirgur Focusmage(SOC)》
  • 《ヴィスラー・ターロー/Vislor Turlough(WHO)》
  • 《ステンシアの鮮血術師/Stensian Sanguinist(SOC)》
  • 《落書きの薄暮魔道士/Defacing Duskmage(SOC)》
  • 《2代目ドクター/The Second Doctor(WHO)》
  • 《催眠術師、マスター/The Master, Mesmerist(WHO)》

呪文 (Spells) - 45枚

インスタント / ソーサリー (20枚)
  • 《稀なるつわもの/Champions from Beyond(FIC)》
  • 《トランス/Transpose(FIC)》
  • 《時を越えた探索/Dig Through Time(FIC)》
  • 《崇高な天啓/Sublime Epiphany(FIC)》
  • 《致命的な策略/Lethal Scheme(FIC)》
  • 《名誉回復/Vindicate(FIC)》
  • 《虚空裂き/Void Rend(FIC)》
  • 《取り引き/Cut a Deal(FIC)》
  • 《未練ある魂/Lingering Souls(FIC)》
  • 《剣を鍬に/Swords to Plowshares(FIC)》
  • 《物語への没入/Into the Story(FIC)》
  • 《殺し/Snuff Out(FIC)》
  • 《この町は狭すぎる/This Town Ain't Big Enough(OTJ)》
  • 《四肢切断/Dismember(NPH)》
  • 《Contagion(ALL)》
  • 《天使への願い/Entreat the Angels(DSC)》
  • 《終末/Terminus(C18)》
  • 《善悪の葛藤/Crisis of Conscience(WHO)》
  • 《死なせておくには邪悪が過ぎる/Too Evil to Stay Dead(MSH)》
  • 《終末の合流点/Doomsday Confluence(WHO)》
エンチャント / 部屋 / 英雄譚 (12枚)
  • 《停滞の光/Observed Stasis(FIC)》
  • 《邪竜の眼/Eye of Nidhogg(FIC)》
  • 《プロパガンダ/Propaganda(FIC)》
  • 《盲従/Blind Obedience(WOT)》
  • 《亡霊の牢獄/Ghostly Prison(CN2)》
  • 《命運の掌握/Grasp of Fate(WHO)》
  • 《一時的封鎖/Temporary Lockdown(DMU)》
  • 《両生類の豪雨/Amphibian Downpour(MH3)》
  • 《サメ台風/Shark Typhoon(IKO)》
  • 《傷の反射/Wound Reflection(WHO)》
  • 《不浄な別室+祭儀室/Unholy Annex+Ritual Chamber(DSK)》
  • 《まばたき/Blink(WHO)》
アーティファクト (13枚)
  • 《「青魔道士」の青魔器/Blue Mage's Cane(FIC)》
  • 《白聖石/White Auracite(FIC)》
  • 《「占星術師」の天球儀/Astrologian's Planisphere(FIC)》
  • 《黒魔紋の力/Circle of Power(FIC)》
  • 《古術師の地図/Archaeomancer's Map(FIC)》
  • 《領事の権限/Authority of the Consuls(FIC)》
  • 《切望の宝石/Coveted Jewel(FIC)》
  • 《伝説たちの秘本/Tome of Legends(FIC)》
  • 《秘儀の印鑑/Arcane Signet(FIC)》
  • 《伝説の秘宝/Relic of Legends(FIC)》
  • 《太陽の指輪/Sol Ring(FIC)》
  • 《威圧のタリスマン/Talisman of Dominance(FIC)》
  • 《聖列のタリスマン/Talisman of Hierarchy(FIC)》
  • 《発展のタリスマン/Talisman of Progress(FIC)》
  • 《思考の器/Thought Vessel(FIC)》

筆者はエンチャントレス的な動きが好きなのでエンチャントを多めに。そして、同じユニバーサルビヨンド出身のドクター・フーからのものをそろえました。

当然、まだ回していないので動きは未定。ただでさえヘイトを買う統率者なので、課題は山積みです。

暑さ対策グッズ。

体温以上の暑さが続く中、これだけは外せないという暑さ対策グッズはこれに落ち着きました。

アルミ張りの日傘

ワークマンにて購入。

直射日光を遮ることで、体感温度は数度から10℃近く下がると言われています。また、輻射熱を遮る点でも重要です。

サングラス

強い紫外線、まぶしさは目から入って脳に疲労物質を出させる原因になります。

普段の眼鏡と同じ度にすることで、普段の視界のまましっかり減光できます。

携帯式氷嚢

血管が集まる首元、首の横、脇の下、手首などを直接冷やせます。

この対策グッズでもMVPです。ハンディファンで生暖かい風を浴びるより合理的です。

このシンデレラフィットするかのようなヒップバッグも見つけられました。これで鞄にもつけられるので満足。

この暑い夏は始まったばかりですが、なんとか死なないように抑えていきたいものです。

ネットワーク設定移行作業ログ(Wi-Fiから有線LANへの固定IP引き継ぎ)

設定の後始末

中古のLet's noteを「試しにNextcloudのフロントエンドやDNS(AdGuard Home)」にしていたものの、いよいよもって本格的に稼働させることにします。

ネットワーク環境の確認情報

  • 対象機器:
    • Ubuntu 26.04 Desktopノート
  • 有線LAN (NIC)
    • : enp0sxx(NetworkManager接続名: netplan-enp0s31f6
  • 無線LAN (Wi-Fi)
    • : wlp1s0(NetworkManager接続名: Wi-Fi
  • デフォルトゲートウェイ:
    • 192.168.x.1
  • サブネットマスク:
    • /24 (255.255.255.0)

問題と解決

直面した問題

デスクトップ画面で有線LANと無線LANを同時に切り替えようとしたのですが、
無線側がまだ 引き継ぎたいIPアドレスを掴んでいたため、有線側で同じIPを有効化しようとした際にアドレスの重複・競合が発生し、以下のエラーで有効化に失敗しました。

エラー: 接続のアクティベーションに失敗: IP 設定を確保できませんでした (利用可能なアドレスがない、タイムアウトなど)

これに対処していきます。ここからはターミナルやSSH接続です。

解決策

  1. 無線接続を先にダウンさせ、旧IPアドレスを解放します。
  2. 無線のIPv4設定を自動(DHCP)に変更・初期化する。
  3. 有線LAN側に静的IP(192.168.11.16)とゲートウェイ・DNSを設定する。
  4. 有線LAN接続を有効化する。

実行した復旧手順(コマンド)

SSH切断による作業中断を防ぐため、以下のコマンドを一括で実行しました。

sudo nmcli connection down "Wi-Fi" && \
sudo nmcli connection modify "Wi-Fi" ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns "" && \
sudo nmcli connection modify "netplan-enp0s31f6" ipv4.method manual ipv4.addresses 192.168.x.x/24 ipv4.gateway 192.168.x.1 ipv4.dns "192.168.x.1" && \
sudo nmcli connection up "netplan-enp0s31f6"

それぞれのステップで何が起きているのか、順番に詳しく解説します。

Step 1: 無線LANの切断

sudo nmcli connection down "Wi-Fi"
  • やっていること:
    • 現在有効になっているWi-Fi接続(Wi-Fi)を即座に無効化(切断)します。
  • 目的:
    • これから有線側に設定しようとしているIPアドレス(192.168.x.x)をWi-Fi側から完全に解放し、IPアドレスの重複(衝突)を防ぐために行っています。

Step 2: 無線LAN設定の初期化 (DHCP化)

sudo nmcli connection modify "Wi-Fi" ipv4.method auto ipv4.addresses "" ipv4.gateway "" ipv4.dns ""
  • やっていること:
    • Wi-Fi接続の設定情報を変更します。
  • ipv4.method auto:
    • IPアドレスの取得方法を「自動(DHCP)」に変更
  • ipv4.addresses "":
    • 以前割り当てていた固定IPアドレスの登録を削除
  • ipv4.gateway "":
    • 設定されていたゲートウェイ情報を削除
  • ipv4.dns "":
    • 設定されていたDNSサーバー情報を削除
  • 目的: 今後Wi-Fiを単体で使うことがあっても、固定IPではなく自動でIPを取得(DHCP)するように設定をリセットしています。

Step 3: 有線LANへの固定IP・ネットワーク情報の設定

sudo nmcli connection modify "netplan-enp0s31f6" ipv4.method manual ipv4.addresses 192.168.x.x/24 ipv4.gateway 192.168.x.1 ipv4.dns "192.168.x.1"
  • やっていること: 有線LAN(netplan-enp0s31f6)に新しいネットワーク情報を書き込みます。
  • ipv4.method manual: IP設定を「手動(固定IP)」に変更
  • ipv4.addresses 192.168.x.x/24: サーバー用の固定IPアドレスとサブネットマスクをセット
  • ipv4.gateway 192.168.x.1: デフォルトゲートウェイ(ルーター)を指定
  • ipv4.dns "192.168.x.1": 名前解決用のDNSサーバー(ルーター)を指定
  • 目的: サーバー機能(NextcloudやAdGuard等)を引き継ぐための固定IP環境を有線側に割り当てます。

Step 4: 有線LANの有効化(新設定の反映)

sudo nmcli connection up "netplan-enp0s31f6"
  • やっていること:
    • Step 3で書き換えた設定を使って、有線LAN接続を起動(アクティベート)します。
  • 目的:
    • 設定を反映させて通信を開始します。この瞬間に有線側のIPアドレスが 192.168.x.x に変更されるため、旧IPで繋がっていたSSH接続はここで途切れ、新しいIPでの接続が解禁されます。

なぜこれを「1行(ワンライナー)」でやったのか?

SSH接続中にネットワーク設定を変更すると、Wi-Fiを切断した時点(Step 1)でターミナルの操作ができなくなってしまいます。

命令を && で繋いで1行で送信しておくことで、SSHが切れてしまってもUbuntu内部でStep 4まで自動的に突っ走って完了させてくれるという技術的な工夫(SSH切断対策)でした。

最終確認結果

  1. IPアドレス・インターフェース状態の確認 (ip a)
  • 有線 (enp0s31f6): inet 192.168.x.x/24 (正常に固定IP割り当て完了)
  • 無線 (wlp1s0): state DOWN (競合解消)
  1. 疎通確認
  • 有線LANのIP宛て(192.168.x.x)へのSSH再接続: 成功
  • 外向き通信テスト (ping -c 3 google.com): 成功

なんとなくで設定していた宿題に取り組むことが出来ました。

エネルギーデッキの課題。(統率者メモ:2026/07/25)

前回の対戦での課題です。

霊気走破統率者デッキ「生けるエネルギー」を回した感想です。

統率者

  • 《光輝の創造者、サヒーリ/Saheeli, Radiant Creator(DRC)》

伝説のクリーチャー — 人間(Human) 工匠(Artificer)
あなたが工匠(Artificer)やアーティファクトである呪文1つを唱えるたび、(E)(エネルギー(energy)・カウンター1個)を得る。
あなたのターンの戦闘の開始時に、(E)(E)(E)を支払ってもよい。そうしたとき、あなたがコントロールしているパーマネント1つを対象とする。他のタイプに加えて速攻を持つ5/5のアーティファクト・クリーチャーであることを除き、それのコピーであるトークン1体を生成する。次の終了ステップの開始時に、そのトークンを生け贄に捧げる。
4/4

デッキ

クリーチャー

  • 《オーロラの変幻者/Aurora Shifter(M3C)》
  • 《乱動の地図作り/Roil Cartographer(MH3)》
  • 《潮の星、京河/Keiga, the Tide Star(CLB)》
  • 《破片撒きのスフィンクス/Sharding Sphinx(MOC)》
  • 《蜥蜴丸/Lizard Blades(NEO)》
  • 《改革派の霊気砲手/Aethertorch Renegade(KLD)》
  • 《極楽鳥/Birds of Paradise(RVR)》
  • 《金脈のハイドラ/Goldvein Hydra(OTJ)》
  • 《恐竜の卵/Dinosaur Egg(LCC)》
  • 《シャイラ専有地の賢者/Sage of Shaila's Claim(KLD)》
  • 《獣性を築く者/Architect of the Untamed(DRC)》
  • 《警戒するラッドスタッグ/Watchful Radstag(PIP)》
  • 《進化の証人/Evolution Witness(MH3)》
  • 《世界魂の代弁者、ニッサ/Nissa, Worldsoul Speaker(DRC)》
  • 《浄化のドルイド/Druid of Purification(DRC)》
  • 《ピーマの先駆者/Peema Trailblazer(DRC)》
  • 《猛る霊気コブラ/Rampaging Aetherhood(DRC)》
  • 《サイクロプスの超伝導師/Cyclops Superconductor(MH3)》
  • 《ティラニッド・プライム/Tyranid Prime(40K)》
  • 《崇高な飛行士/Empyreal Voyager(KLD)》
  • 《ならず者の精製屋/Rogue Refiner(DRC)》
  • 《つむじ風の巨匠/Whirler Virtuoso(DRC)》
  • 《双子唱者、アドリックスとネヴ/Adrix and Nev, Twincasters(MKC)》
  • 《フラクタルの花、エシックス/Esix, Fractal Bloom(MKC)》
  • 《テルカーの技師、ブルーディクラッド/Brudiclad, Telchor Engineer(M3C)》
  • 《整備長、ピア・ナラー/Pia Nalaar, Chief Mechanic(DRC)》
  • 《極楽の羽ばたき飛行機械/Ornithopter of Paradise(DRC)》
  • 《静電気式打撃体/Electrostatic Pummeler(KLD)》
  • 《歩行格納庫の自動機械/Stridehangar Automaton(DRC)》
  • 《ワームとぐろエンジン/Wurmcoil Engine(SOM)》
  • 《三重の稲妻巨人/Threefold Thunderhulk(SOC)》

インスタント

  • 《語りの調律/Tune the Narrative(MH3)》
  • 《秘儀の否定/Arcane Denial(DRC)》
  • 《不許可/Disallow(DRC)》
  • 《混沌のねじれ/Chaos Warp(WHO)》
  • 《エレクトロサイフォン/Electrosiphon(PIP)》

ソーサリー

  • 《霊気との調和/Attune with Aether(DRC)》
  • 《自然の知識/Nature's Lore(DRC)》
  • 《冒涜の行動/Blasphemous Act(CRC)》
  • 《慮外な押収/Confiscation Coup(DRC)》

アーティファクト

  • 《太陽の指輪/Sol Ring(DRC)》
  • 《改良式鋳造所/Retrofitter Foundry(DRC)》
  • 《稲妻のすね当て/Lightning Greaves(DRC)》
  • 《抽出機構/Decoction Module(M3C)》
  • 《好奇のタリスマン/Talisman of Curiosity(DRC)》**
  • 《秘儀の印鑑/Arcane Signet(DRC)》
  • 《独創のタリスマン/Talisman of Creativity(WHO)》
  • 《織木師の組細工/Woodweaver's Puzzleknot(KLD)》
  • 《パンハモニコン/Panharmonicon(DRC)》
  • 《霊気池の驚異/Aetherworks Marvel(DRC)》
  • 《ウギンのきずな/Ugin's Nexus(KTK)》
  • 《ゴンティの霊気心臓/Gonti's Aether Heart(M3C)》
  • 《特製の闘車/Bespoke Battlewagon(DRC)》
  • **《模倣メカ/Imposter Mech(NEC)》
  • 《秘密の複製機/Esoteric Duplicator(BIG)》
  • 《世界歩きの兜/Worldwalker Helm(BIG)》
  • 《イゼットの発電装置/Izzet Generatorium(MH3)》

エンチャント

  • 《革新の時代/Era of Innovation(DRC)》
  • 《テフェリーのヴェール/Teferi's Veil(WTH)》
  • 《倍増の季節/Doubling Season(PZA)》
  • 《降霜断崖の包囲/Frostcliff Siege(TDM)》

プレインズウォーカー

  • 《崇高な工匠、サヒーリ/Saheeli, Sublime Artificer(WAR)》

土地

  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《島/Island》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《山/Mountain》
  • 《森/Forest》
  • 《森/Forest》
  • 《森/Forest》
  • 《森/Forest》
  • 《焦熱島嶼域/Fiery Islet(WHO)》
  • 《天啓の神殿/Temple of Epiphany(WHO)》
  • *《嵐削りの海岸/Stormcarved Coast(WHO)》
  • 《凍沸の交錯/Frostboil Snarl(DRC)》
  • 《シヴの浅瀬/Shivan Reef(DRC)》
  • 《溢れ出た区画/Overflowing Basin(DRC)》
  • 《ヤヴィマヤの沿岸/Yavimaya Coast(DRC)》
  • 《繁殖池/Breeding Pool(DIS)》
  • 《内陸の湾港/Hinterland Harbor(PIP)》
  • 《冠水樹林帯/Waterlogged Grove(WHO)》
  • 《蔦明の交錯/Vineglimmer Snarl(WHO)》
  • *《隠れた茂み/Sheltered Thicket(WHO)》
  • 《根縛りの岩山/Rootbound Crag(XLN)》
  • 《カープルーザンの森/Karplusan Forest(DRC)》
  • 《霊気拠点/Aether Hub(DRC)》
  • 《無声開拓地/Silent Clearing(MH1)》
  • 《風変わりな果樹園/Exotic Orchard(WOC)》
  • 《産業の塔/Spire of Industry(DRC)》
  • 《祖先の道/Path of Ancestry(DRC)》
  • 《統率の塔/Command Tower(DRC)》
  • 《ケトリアのトライオーム/Ketria Triome(IKO)》
  • 《ヘリオス1/HELIOS One(PIP)》
  • 《アカデミーの廃墟/Academy Ruins(DRC)》
  • 《霧深い雨林/Misty Rainforest(ZNE)》

デッキの半分以上を入れ替えながらも

  • エネルギーを溜める
  • サヒーリの能力を課す

様な構成になっています。

そして実戦に回したところ

警戒するラッドスタッグ→歩行格納庫の自動機械の誘発が次々に発生し盤面がとんでもないことになったものの:あっという間に全体除去を喰らったわけで。

ここでも課題になるのが「ゲームクロージングカード」或いは「殴り返すともっと酷いことになる」と思わせるカード群の存在です。

具体的には

Enduring Courage / 永劫の勇気 (2)(赤)(赤)
クリーチャー エンチャント — 犬(Dog) 光霊(Glimmer)
あなたがコントロールしていてこれでないクリーチャー1体が戦場に出るたび、ターン終了時まで、それは+2/+0の修整を受け速攻を得る。
永劫の勇気が死亡したとき、これがクリーチャーであった場合、これをオーナーのコントロール下で戦場に戻す。これはエンチャントである。(これはクリーチャーではない。)
3/3

出たトークンがそのまま殴れます。

Overlord of the Boilerbilges / ボイラービルジの大主 (4)(赤)(赤)
クリーチャー エンチャント — アバター(Avatar) ホラー(Horror)
兆候4 ― (2)(赤)(赤)(兆候コストでこの呪文を唱えたなら、これは時間(time)カウンター4個が置かれた状態で戦場に出て、最後の時間カウンターが取り除かれるまで、これはクリーチャーではない。あなたの終了ステップの開始時に、これの上から時間カウンター1個を取り除く。)
ボイラービルジの大主が戦場に出るか攻撃するたび、1つを対象とする。これはそれに4点のダメージを与える。
5/5

太守サイクルの中でも破格の安さ。特筆すべきは

着地:4点
サヒーリでコピー:4点→そのまま攻撃して4点(本体に通れば更に5点)が見込めること。

の2枚。これらを検討しつつ、もう少し育て甲斐があると思わせるデッキでした。

BookStackのヘッダーロゴを高解像度化する

BookStackでは「アプリケーションロゴ」を設定できますが、そのままではアップロードした画像が高さ86pxへリサイズされてしまいます。

そのため、CSSでロゴを大きく表示すると画像がぼやけてしまいます。そもそも86pxは昨今のモダンなCMSにあるまじき解像度ではあるので、手を入れます。

そこでファイル本体を少し修正し、高解像度のロゴ画像をそのまま利用できるようにしました。

環境

  • BookStack
    • v26.05.1
  • Apache
    • 2.4
  • PHP
    • 8.3-fpm
  • Ubuntu
    • 24.04

最初に試したこと

BookStackに管理者権限でログインし、管理>カスタマイズに遷移。

カスタムheadタグで

<style>
.logo-image {
    height: 128px !important;
    width: auto !important;
}
</style>

のような指定はできるものの、超ローレぞ加工され、表示がぼやけます。そこで、要素を調べると、保存された画像自体が86×86になっていました。

この原因を調べます。

調査

インストールされているUbuntuサーバで

cd /path/to/BookStack/directory && pwd

として(筆者環境/home/www-data/Bookstack)BookStackのホームディレクトリに移動。

file public/uploads/images/system/20xx-xx/xxxx.jpg

で、該当のファイルを調べます。

JPEG image data
86x86

つまり、CSSではなくアップロード時に画像が縮小されていました。

分かった原因

いかにCSSで指定してもだめな原因はプログラムそのものにあります。なので、その上流の「ファイルのアップロードを司るファイル」にメスを入れます。

それを司るファイルをチャットAIとともに調査。

BookStackのルートディレクトリからたどれる

app/Settings/AppSettingsStore.php

にそれがありました。

protected function updateAppLogo(Request $request): void
{
    if ($request->hasFile('app_logo')) {
        $logoFile = $request->file('app_logo');
        $this->destroyExistingSettingImage('app-logo');

        $image = $this->imageRepo->saveNew(
            $logoFile,
            'system',
            0,
            null,
            86
        );

        setting()->put('app-logo', $image->url);
    }
}
null,
86

が指定されているため、高さ86pxへリサイズされた画像が保存されます。

ここまで分かれば、後は修正開始です。

さっくりとした手順

  1. サーバ上で該当するファイルを修正します。
  2. 念のためサービスの再起動を行います。
  3. カスタムheadタグを修正します。
  4. 改めてファイルをアップロードします。

ファイルのバックアップ

  • BookStackのルートディレクトリに移動
cd /path/to/BookStack/directory && pwd

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

  • 該当ファイルのバックアップ
sudo cp -pi app/Settings/AppSettingsStore.php /path/to/backup/AppSettingsStore.php.$(date +%Y%m%d)

※注意点※

  • プログラム根幹をいじります。つまり、何かあったら直したやつの責任です。バックアップは確実に取ります。
  • 更に、Gitなどでアップデートした場合、確実にこれはMasterから上書きされます。「ここを直す」というのは履歴管理を厳に行いましょう。
  • 該当ファイルのバックアップ確認
diff -u /path/to/backup/AppSettingsStore.php.$(date +%Y%m%d) app/Settings/AppSettingsStore.php 

任意のバックアップディレクトリを指定します。

エラーがないことを確認します。人間「バックアップはやってる」と思いながらもバイアスや手なりでスキップしがちです。この段階でそのミスやバイアスを潰します。

なぜdiffを使うのかは、ls -lで両ファイルを比べるより確実だからと言うのと、後述する修正確認でも使うからです。

該当ファイルの修正

app/Settings/AppSettingsStore.phpファイルを、リサイズを行わないよう変更します。(要管理者権限)

具体的には以下の差分になるように。

- $image = $this->imageRepo->saveNew($logoFile, 'system', 0, null, 86);
+ $image = $this->imageRepo->saveNew($logoFile, 'system', 0, null, null);
  • 修正後のバックアップ確認
diff -u /path/to/backup/AppSettingsStore.php.$(date +%Y%m%d) app/Settings/AppSettingsStore.php 

ここで、なぜdiffを逆にする意味が生まれます。逆にしないと直したところが-、元が+で表示されます。これは視覚的にも感覚的にもよろしくありません。「え? 正しい修正をしたのに消されるの?」となりがちです。

設定反映

sudo -u www-data php artisan optimize:clear

でキャッシュをクリアします。

(推奨)PHP/Apacheを再起動

PHP-FPMなら

sudo systemctl restart php8.3-fpm

Mod-PHP環境なら

sudo systemctl restart apache2

で、実行環境を再起動します。

改めてカスタムヘッダの調整

BookStackに管理者権限でログインし、管理>カスタマイズに遷移。

カスタムheadタグで

<style>
.logo-image {
    height: 128px !important;
    width: auto !important;
}
</style>

のように設定し、(或いは設定されていることを確認し)、保存をクリック。

要してあるロゴをアップロード

管理>カスタマイズ

から、ファイルをアップロードします。

  • ロゴをさらに大きく表示したい場合

BookStack標準ではヘッダー高さが少し窮屈なので、必要に応じてヘッダーも調整します。

header {
    min-height: 72px;
}

.logo-image {
    height: 64px !important;
}

設定反映確認

ここから先はBookStackに戻り、高解像度でロゴが表示されれば設定はOKです。

Page 2 of 300

Powered by WordPress & Theme by Anders Norén