『ユミアのアトリエ』探索中に詰まったところ13。(有料DLC『イドゥス修練地』ネタバレあり)

シーズンパスで予告されていた有料DLCマップ。『イドゥス修練地』にいくつかの罠があったのでメモを残しておきます。

イドゥスの伝想器の罠

マップ要所、イドゥスの伝想器を使うことで橋を架けられるようになりますが、「お気に入り」登録するとアイテムを使うことができません

お気に入り登録を解除してようやく使えるようになります。(このゲーム上の仕様に気づかず2時間ほどさまよっていました)

なお、この伝想器自体は洞窟の中、半透明の宝箱をスキャン弾で撃つことで開けられる宝箱に入っています。

第二の試練の祭壇

ここでは、エリア周辺にある祭壇を探していきます。

巨獣たちの終の住処

ボルダースマッシャーの生息地の奥にあります。

湖の底に隠されし洞窟の中心

マップ中央部、洞窟(湖を東から下り、滝の裏側に入り口があります。

恐らくここが迷うところだと思います。

マップ中央、湖の東側を下りていきます。

滝の奥へと進みます。

洞窟の中に祭壇があります。

底の見えぬ滝壺のほとり

上記の洞窟の入り口の近くにあります。

鎖によりつながれし小さな山嶺

木の吊り橋を渡った先に祭壇があります。

エリアではなくマップ

こちらのマップはファーブラ深層林と異なり

  • 開拓任務
  • ハウジングエリア
  • 宝物庫

がありません。次にリリースされるであろうオープンエリアマップに期待です。

ボードゲーム『祝宴の夜に』感想。

ソロプレイでの感想です。Saashi & Saashi作品らしさに満ちた良質なコンポーネントと分かりやすいルールが同居する期待以上の作品でした。

概要

本作の舞台は20世紀初頭の迎賓館。プレイヤーは外交官となり、祝宴に招かれたゲストたちが満足するように席へと案内していきます。

ゲストそれぞれの好みや、他のゲストとの相性、さらにはプレスによる記念撮影のことまで考慮しながらゲストを配置し、外交官としての名声を高めていくことが目的です。

ゲームのルール

いわゆる「チップドラフト」と「セットコレクション」が中心です。各ラウンドで、場に公開された貴賓トークンが乗っている馬車タイルから一つを選び、自分のテーブルボード上の空いている席に配置していきます。

どのゲストをどの席に配置するかは基本的に自由ですが、各テーブルには着席ルールが設けられており、これを守れない場合はペナルティが発生します。

9ラウンドが完了し、すべての席がゲストで埋まるとゲームは終了。最後に「記念撮影ボーナス」として、各縦列・横列に設定された条件を満たしているかを確認し、ボーナス点を加算します。最終的に最も多くの名声(得点)を獲得したプレイヤーが勝利します。

このゲームの素晴らしい点

雰囲気を盛り上げる上質なコンポーネント

作者が過去にリリースした『コーヒーロースター』や『カム・セイル・アウェイ!』で培われたコンポーネントの素晴らしさは変わらず。

箱の大半を占めるのは分厚いタイルやトークン類で、その手触りや見た目も非常に上質です。特に、貴賓トークンを引くための布袋の質感は素晴らしく、「祝宴」という華やかなテーマへの没入感を高めてくれます。

直感的で分かりやすいルール

ゲームの基本的な流れは「場にある貴賓トークンを選び、テーブルに配置する」という非常にシンプルなものです。得点計算も分かりやすくサマリー通り。

例外的な処理も「名声トラックで10点に達した際に貴賓室の処理を行う」という点だけなので、ルールをすぐに理解することができます。

準備も簡単で快適なプレイ感

ルールが分かりやすいため、セットアップインストが非常に簡単に行えます。また、トークンの配置は各プレイヤーが同時に行うため、ダウンタイムが発生しにくいのも快適です。

常に悩ましい、パズル的な面白さ

本作の面白さの核は、配置条件による「ままならなさ」にあります。

  • 「このテーブルには紳士と婦人が1人ずついなければならない」
  • 「緑のゲストをこのテーブルに座らせてはならない」

といった様々な条件があるため、「このゲストは欲しいけれど、そのためには他のゲストをどこに座らせれば…」という悩ましいジレンマを常に楽しむことができます。

さらに、ゲーム終了時の縦列・横列のボーナス条件も常に意識する必要があるため、場にある貴賓トークンをうまく捌きながら最終的な配置の形を想像して組み立てていく、落ち物パズルのような思考が求められます。

単純なドラフトでありながら、『カスカディア』のような二層ドラフトにも通じる奥深いジレンマを味わうことができました。

プレイ感が変わらない秀逸なソロプレイ

ソロプレイのルールは、使用できる馬車タイルや最終ラウンドの処理が少し変わる程度で、多人数プレイとほとんど変わらない感覚で遊べます。

勝敗ではなく自分のスコアに挑戦するスコアアタック形式なので、途中でゲームオーバーになる心配もありません。

少しだけ気になった点

ラウンドカードのスリーブ問題

ゲームで使用するラウンドカードが、一般的なカードサイズではない特殊な大きさです。

そのため、カードを保護するためのスリーブを探すのが難しく、ぴったりのカードケースを見つけるのも一苦労かもしれません(筆者もまだ見つけられていません)。

思った以上に厳しいペナルティ

ルールを守れなかった際のペナルティは「獲得した点数の半分を失う」という、かなり厳しいものになっています。これにより、ゲーム終盤の多人数プレイでは、相手に不要なタイルを押し付けあうような直接的な攻撃が発生するケースも想定されます。

好みが分かれると思ったところ

逆転要素がほぼ無い堅実なプレイ感

配置ゲームの常です。ゲームの開始から終了まで着実な戦略が求められるため、先行している人を差しきるのが難しくなっています。

ダウンタイムが少ないとはいえ、序盤の失着が最後まで響く一手が重いゲームとなっています。

まとめ

『祝宴の夜に』は、以下の魅力的な点を備えた名作です。

  • 上質なコンポーネントが華やかなテーマを演出する
  • 分かりやすいルールの中に、毎ラウンドの悩ましいジレンマが詰まっている

もともとこのデザイナーのファンでしたが、今回もその期待を裏切らない面白さでした。

箱のサイズは比較的コンパクトで、ルール説明を含めても45分程度で終わるため、「これぞ中量級ゲーム」といった満足感を得られる一作です。

ボードゲーム『祝宴の夜に』開封。

7月のボドゲ会の時に買っていながら未開封状態だったボードゲームをこの機会に開封します。

ボードゲーム『祝宴の夜に』

  • コーヒーロースター
  • カム・セイル・アウェイ!
  • 旅のあと

などの作者によるもの。ある種のパッケージ買いです。

開封

タイル群

中を開けて、パッケージのずっしりとくる重さに納得。圧倒的なタイルの量です。

ここまでの多さはちょっとした重量級レベル。

また、この作者らしい「日英に対応した説明書」も好感が持てます。

タイル抜き

  • ゲーム中に使うチップ
  • 個人用タイル
  • 共通のタイル

と、タイルそのものの種類は多くない代わりに量がすさまじかったです。

収納

収納に関しては付属のジップバッグでどうにかすることにします。カードは適合するスリーブがなかったのでこれも袋入れ。

箱にもそのまますんなり入りました。

手帳の彩り。(百均グッズによるシール整理)

百均で売られているこの手のシール。もう少し使いやすくしようと思います。

商品を手に持ったとき、「これはL判ジャストサイズ」という直感があったので、これらのシールとともにフォトアルバムも購入。

もくろみ通り、しっかりとアルバム内に収まりました。

視認性も高いため、このまま使っても大丈夫です。

そして、一ひねりです。ほぼ日手帳別売品、カバーにそのままつけられるフォトアルバムを利用しましたら、まさにジャストサイズ。

こうして、手帳の彩りを豊かにするシール群が見た目も収納性も確保した上で持ち歩けるようになりました。

ボードゲーム『リビングフォレスト・デュエル』感想。  

『リビングフォレスト』は未経験で『リビングフォレスト・デュエル』を遊んだので感想を記します。ルールの理解には少々時間がかかったものの、一度把握してしまえば、短いプレイ時間の中で多彩なアクションと戦略が楽しめる、やりこみがいのある2人用ボードゲームでした。

概要

プレイヤーは森の精霊となり、森を守り育てるため、以下に示す4つの勝利条件のうち、いずれか1つを達成することを目指します。

  1. 3×3になるよう樹木を植林する
  2. 鬼火の火を食い止める(8個の火トークンを集める)
  3. 守護獣ラインを自分の守護獣カードだけにする
  4. 相手に鬼火を送り込む

これらの勝利条件を達成するため、プレイヤーは手番ごとに1つを選んで実行していきます。

このゲームで良かったところ

シンプルなアクションと悩ましい選択

このゲームの基本アクションは、驚くほどシンプル。以下の2つだけです。

  1. 共有デッキからカードを1枚公開する
  2. 公開されているカードのアクションを実行する

各プレイヤーはアクショントークンを2つ持っており、これを消費すると、このラウンドでは行動終了になります。このシンプルなルールが、ゲームにテンポの良さと奥深さをもたらしています。

GoかStayかのディシジョンメイキング

1つめの気に入った点です。カードをめくるアクションをした場合、相手によりよい選択肢を与えることになります。ですが、カードをこれ以上めくらずにアクションを実行すると、弱い行動しか取れないこともあります。

しかも、基本的に2人が同じカードを参照するため、相手の動きを読みつつ、こちらが有利な状況を作るために「先に動くか」「まだ待つか」の選択に常時迫られます。

「バースト」がもたらすチキンレースの興奮

上述の点に「バースト」システムがスリリングな要素を加速させています。公開したカードに描かれている「孤立アイコン」が3つ溜まってしまうと「バースト」となり、ペナルティとしてアクショントークンが1つ消費されます。さらに4つ溜まると、トークンを2つとも消費され、そのラウンドでは何もできなくなってしまいます。

共有デッキの内容を推測しながら、「もう1枚めくるか、ここでアクションを実行するか」という判断を迫られるチキンレースの緊張感が、このゲームの大きな魅力の一つです。

刻一刻と変わる戦況と最適解の探求

これが2つめに気に入ったところです。バーストのリスクだけでなく、相手の状況にも常に気を配る必要があります。

  • バーストを防ぐには?
  • 相手はどの勝利条件に近づいているか?
  • それを阻止するためには、今どの行動を取るべきか?
  • 一つの勝利条件を目指していると見せかけて、別の勝ち筋を狙うことはできないか?
  • 一石二鳥のアクションは?

等、考えるべきことは多岐にわたり、終始頭をフル回転。

さらに、植林による永続的な効果や、守護獣がもたらすラウンド中の一時的な強化、特定条件下での連続行動やバースト阻止といった特殊効果が、戦略にさらなる深みを与えています。これらの要素が複雑に絡み合い、短めのゲームらしからぬ濃密さが楽しめました。

このゲームの注意点

初見では理解が難しいルール

本作の最大のハードルは、ルールの難解さです。ルールブックを読んでも、「このカードはいつ使うのだろう?」「このアイコンは何を意味するのか?」といった疑問が次々と浮かぶと思います。

筆者自身も、実際にプレイしている動画を見て、ようやく全体の流れや細かい処理を把握することができました。そのため、ボードゲーム初心者や未経験者同士でいきなりプレイするのはまず推奨しません。

経験者に教えてもらうか、ある程度ボードゲームに慣れた方が事前にプレイ動画で予習することをおすすめします。

例外処理の多さ

特に難解なのが、ラウンド終了時の処理です。消火できたかどうかの判定、それによる「炎まといカード」の処理やリシャッフルの条件等、ルールブックを見ても脳内に「?」が飛び交っていました。(これもプレイ動画で把握できた次第です)

他に植林や鬼火の移動によって発生するボーナスの処理など、覚えるべき例外処理が多く存在します。

カードにテキストが書かれていない言語依存の少ないデザインは、普段は好ましいと感じることが多いのですが、このゲームに関しては、その言語依存のなさが仇となりアイコンが示す処理の複雑さを増している要因となっています。

まとめ

『リビングフォレスト・デュエル』は、ルールの難しさという点から、誰もが気軽に楽しめる名作、と手放しで賞賛できるタイプのゲームとは言い難いです。

しかし、そのハードルを乗り越えることができれば、

  • 相手の行動を待つ時間が少ない、テンポの良いターン進行
  • シンプルなアクションから生まれる多彩なゲーム展開
  • カードをめくる際の、のるかそるかのスリル
  • 相手の狙いとこちらの狙い、深い読み合いの楽しさ
  • 終着点が都度変わるリプレイ性の高さ

などの数多くの魅力を比較的短時間で味わうことができます。人を選ぶかもしれませんが、戦略的な駆け引きが好きな方には刺さる良作です。

すっきりと整理されたコンポーネントや、ゲームのテーマによく合った美しいアートワークも個人的には非常に好印象でした。

ボードゲーム『アイドルアライブ』アップデート後の対戦メモ。

平日休みを利用して差しのボドゲを行いました。そんな中で利用したデッキがこちら。

紫-桃白コントロール

  1. 四宮樹理
  2. 姫野瑛里
  3. 白石涼子

の3人。アップデート後のリフレインを据えたコントロールです。

  • 3人曲
    • 私がスターライト ×3
    • Re:RAISE IN FLAMES ×3
  • 2人曲
    • 純心ポイズン ×2
    • Apart from You ×2
    • 禁断クエイズム ×2
  • 1人曲
    • Deal with ×3
    • 描きかけの夢×3
  • イベント
    • あの日の私に胸を張るために (瑛里)
    • 鋼鉄の契り(樹理)
    • ライブビューイング

動きとしてはスタッツが高くなった樹理を元にボルテージを上げていき

  • 涼子の曲で足止めし
  • 瑛里でスナイプ
  • リフレインでカードのルーティングを行う

という動きでしたが

対戦結果

15点まで獲得したところで

緑-赤橙

の手数の差で24点を取られ敗北。動きはつかめた形です。

思ったこと

  • かのんの3人曲の「1人のみ」というのは弱体化させすぎではと思いましたが、これで十分強かった
  • コントロールもビートダウンもかなりのチャンスが見込めるようになった
  • 紫(樹理)と白(涼子)は共に樹理を据えた場合に強いが、それ以外だと相性が悪いという印象

いずれにせよ、まだ研究のしがいがありました。

久遠の終端の統率者デッキ「惑星を形作る者」のデッキ抜本入れ替え。(脱法ブラケット2)

新たなカードが届いたため、『久遠の終端』構築済み統率者デッキを組み替えました。

  • デッキのコンセプトそのまま
  • ゲームチェンジャー・カード無し
  • 2枚で達成する無限コンボ無し
  • 土地以外を探すカード1枚だけ

ですが、これをブラケット2って言おうものなら1:3のゲームが始まるか、それ以前に卓が立たないかぐらいの勢いです。

統率者

  • F《起源の番人、ザーレル/Szarel, Genesis Shepherd(EOC)》

Szarel, Genesis Shepherd / 起源の番人、ザーレル (2)(黒)(赤)(緑)
伝説のクリーチャー — 昆虫(Insect) ドルイド(Druid)
飛行
あなたの墓地にある土地をプレイしてもよい。
あなたのターン中、あなたがトークンでもこれでもないパーマネント1つを生け贄に捧げるたび、これでないクリーチャー最大1体を対象とする。それの上にこれのパワーに等しい個数の+1/+1カウンターを置く。

2/5

クリーチャー

  • 《甦りし悪夢、ブレイズ/Braids, Arisen Nightmare(EOC)》
  • 《ユーミディアンの荒地起こし/Eumidian Wastewaker(EOC)》
  • 《エヴェンドの低木刈り/Evendo Brushrazer(EOC)》
  • 《アクームの怒り、モラウグ/Moraug, Fury of Akoum(ZNR)》
  • 《土地守/Groundskeeper(EOC)》
  • 《森を護る者/Sylvan Safekeeper(MH3)》
  • 《事件現場の分析者/Aftermath Analyst(EOC)》
  • 《サテュロスの道探し/Satyr Wayfinder(EOC)》
  • 《春花のドルイド/Springbloom Druid(EOC)》
  • 《機能不全ダニ/Haywire Mite(BLC)》
  • 《不屈の追跡者/Tireless Tracker(EOC)》
  • 《水平線の探検家/Horizon Explorer(EOC)》
  • 《進化の証人/Evolution Witness(MH3)》
  • 《秋の占い師/Augur of Autumn(EOC)》
  • 《ムル・ダヤの巫女/Oracle of Mul Daya(EOC)》
  • 《最強のベイロス/Baloth Prime(EOC)》
  • 《アルゴスの庇護者、ティタニア/Titania, Protector of Argoth(EOC)》
  • 《猛り狂うベイロス/Rampaging Baloths(EOC)》
  • 《波乱の悪魔/Mayhem Devil(EOC)》
  • 《ウィンドグレイスの魂/Soul of Windgrace(EOC)》
  • 《ギトラグの怪物/The Gitrog Monster(EOC)》
  • 《クロールの死の僧侶、マジレク/Mazirek, Kraul Death Priest(EOC)》
  • 《フェイに呪われた王、コルヴォルド/Korvold, Fae-Cursed King(EOC)》

インスタント

  • 《羅利骨灰/Tear Asunder(EOC)》
  • 《乱動の再成長/Roiling Regrowth(EOC)》
  • 《砕土/Harrow(EOC)》
  • 《コラガンの命令/Kolaghan's Command(DTK)》
  • 《ウィンドグレイスの裁き/Windgrace's Judgment(EOC)》

ソーサリー

  • 《苦い真理/Painful Truths(BFZ)》
  • 《信仰無き物あさり/Faithless Looting(UMA)》
  • 《惑星殲滅/Planetary Annihilation(EOC)》
  • 《冒涜の行動/Blasphemous Act(EOC)》
  • 《害獣の侵入/Pest Infestation(EOC)》
  • 《森の占術/Sylvan Scrying(BFZ)》
  • 《探検/Explore(WHO)》
  • 《壌土からの生命/Life from the Loam(UMA)》
  • 《自然の知識/Nature's Lore(EOC)》
  • 《遥か見/Farseek(EOC)》
  • 《耕作/Cultivate(EOC)》
  • 《形なき始まり/Formless Genesis(EOC)》
  • 《明日への探索/Search for Tomorrow(TSP)》
  • 《見事な再生/Splendid Reclamation(EOC)》
  • 《スカイシュラウドの要求/Skyshroud Claim(EOC)》
  • 《世界魂の憤怒/Worldsoul's Rage(EOC)》
  • 《大渦の脈動/Maelstrom Pulse(ARB)》
  • 《花崗岩の凝視/Gaze of Granite(EOC)》
  • 《僻境への脱出/Escape to the Wilds(EOC)》
  • 《蟲の収穫/Worm Harvest(C18)》

エンチャント

  • 《発生の器/Vessel of Nascency(SOI)》
  • 《パーフォロスの槌/Hammer of Purphoros(THS)》

アーティファクト

  • 《探検の地図/Expedition Map(2XM)》
  • 《太陽の指輪/Sol Ring(EOC)》
  • 《秘儀の印鑑/Arcane Signet(EOC)》
  • 《探査幼生艦/Exploration Broodship(EOC)》
  • F《世界播種、ハースハル/Hearthhull, the Worldseed(EOC)》

プレインズウォーカー

  • レンと次元壊し

土地

  • 4《沼/Swamp(EOE)》 フルアート
  • 4《山/Mountain(EOE)》 フルアート
  • 5《森/Forest(EOE)》 フルアート
  • 《土建組一家の監督所/Riveteers Overlook(EOC)》
  • 《硫黄泉/Sulfurous Springs(EOC)》
  • 《燻る湿地/Smoldering Marsh(EOC)》
  • 《ラノワールの荒原/Llanowar Wastes(EOC)》
  • 《カープルーザンの森/Karplusan Forest(EOC)》
  • 《燃えがらの林間地/Cinder Glade(EOC)》
  • 《春色の湿原/Vernal Fen(EOC)》
  • 《黄昏のぬかるみ/Twilight Mire(EOC)》
  • 《ボジューカの沼/Bojuka Bog(EOC)》
  • 《ユーミディアンの孵化場/Eumidian Hatchery(EOC)》
  • 《寓話の小道/Fabled Passage(EOC)》
  • 《統率の塔/Command Tower(EOC)》
  • 《ウルザの物語/Urza's Saga(MH2)》
  • 《変容する森林/Shifting Woodland(MH3)》
  • 《モリアの坑道/Mines of Moria(LTR)》
  • 《演劇の舞台/Thespian's Stage(WHO)》
  • 《暗黒の深部/Dark Depths(UMA)》
  • 《ダクムーアの回収場/Dakmor Salvage(EOC)》
  • 《見捨てられたぬかるみ、竹沼/Takenuma, Abandoned Mire(NEO)》
  • 《不毛の大地/Wasteland(TMP)》
  • 《魂の洞窟/Cavern of Souls(AVR)》
  • 《虹色の眺望/Prismatic Vista(MH1)》
  • 《樹木茂る山麓/Wooded Foothills(ONS)》
  • 《新緑の地下墓地/Verdant Catacombs(ZEN)》
  • 《血染めのぬかるみ/Bloodstained Mire(ONS)》
  • 《草むした墓/Overgrown Tomb(RAV)》
  • 《血の墓所/Blood Crypt(RTR)》
  • 《踏み鳴らされる地/Stomping Ground(GTC)》
  • 《耐え抜くもの、母聖樹/Boseiju, Who Endures(NEO)》
  • 《ケッシグの狼の地/Kessig Wolf Run(ISD)》

OUT

  1. 《ほくちの壁/Tinder Wall(ICE)》
  2. 《壌土造りのフォーン/Loamcrafter Faun(EOC)》
  3. 《ヤヴィマヤの古老/Yavimaya Elder(CMD)》
  4. 《永遠の証人/Eternal Witness(5DN)》
  5. 《ケンタウルスの壊し蔦/Centaur Vinecrasher(EOC)》
  6. 《世界を壊すもの/World Breaker(EOC)》
  7. 《ヤヴィマヤの化身、ムルタニ/Multani, Yavimaya's Avatar(EOC)》
  8. 《一座の支配人、ジョーリ/Juri, Master of the Revue(EOC)》
  9. 3《沼/Swamp》 - フルアートに差し替えるため
  10. 3《山/Mountain》 - フルアートに差し替えるため
  11. 4《森/Forest》 - フルアートに差し替えるため
  12. 《岩山のタール坑/Rocky Tar Pit(EOC)》
  13. 《山峡/Mountain Valley(EOC)》
  14. 《黒割れの崖/Blackcleave Cliffs(ZNE)》
  15. 《無限地帯/Myriad Landscape(ZNC)》
  16. 《土建組一家の監督所/Riveteers Overlook(EOC)》
  17. 《貴顕廊一家の劇場/Maestros Theater(EOC)》
  18. 《廃墟の地/Field of Ruin(XLN)》
  19. 《脱出トンネル/Escape Tunnel(EOC)》

IN

  1. 《森を護る者/Sylvan Safekeeper(MH3)》
  2. 《進化の証人/Evolution Witness(MH3)》
  3. 《機能不全ダニ/Haywire Mite(BLC)》
  4. 《森の占術/Sylvan Scrying(BFZ)》
  5. 《蟲の収穫/Worm Harvest(C18)》
  6. 《探検の地図/Expedition Map(2XM)》
  7. 《レンと次元壊し/Wrenn and Realmbreaker(MOM)》
  8. 4《沼/Swamp》 - EOEフルアート
  9. 4《山/Mountain》 - EOEフルアート
  10. 5《森/Forest》 - EOEフルアート
  11. 《ウルザの物語/Urza's Saga(MH2)》
  12. 《変容する森林/Shifting Woodland(MH3)》
  13. 《モリアの坑道/Mines of Moria(LTR)》
  14. 《演劇の舞台/Thespian's Stage(WHO)》
  15. 《暗黒の深部/Dark Depths(DMR)》
  16. 《見捨てられたぬかるみ、竹沼/Takenuma, Abandoned Mire(NEO)》

搭載しているシナジー

暗黒の深部コンボ

《暗黒の深部/Dark Depths(UMA)》を《演劇の舞台/Thespian's Stage(WHO)》がコピーする、いわゆるステージ・デプス。

または昂揚が達成した状態で《変容する森林/Shifting Woodland(MH3)》が墓地にある《暗黒の深部/Dark Depths(UMA)》をコピー。

これらを探しに行ける

  • 《森の占術/Sylvan Scrying(BFZ)》
  • 《ウルザの物語/Urza's Saga(MH2)》経由での(または直接の)《探検の地図/Expedition Map(2XM)》

これらは統率者が《世界のるつぼ/Crucible of Worlds(5DN)》能力を持っていることから再利用も可能です。

また、2種類の回顧呪文で点と面での攻め筋を体験。

もちろん、統率者が持っている生け贄も活かしています。

言うなれば「脱法ブラケット2」と言うべきデッキになりました。

実行中のプロセスのメモリ量を昇順で表示するワンライナー。

概要

LinuxでWebサーバを運用していく中で気になるメモリの使用量。

「どのプロセスが一番メモリを消費しているのか?」

を調査してみます。

ワンライナーの設定

通例、メモリの使用量を見るのは

ps aux

とするのですが、

  • 全ての情報が見えてしまうので探しにくい
  • 単位が分からない

等の問題が発生します。そこで、

現在利用中のプロセスから、一番メモリを使用しているサービスを昇順で5つ抜き出し、そのメモリ量を見やすい形で成形するワンライナー

を生成AIにて作ってもらいます。(Gemini 2.5 Proを利用)

物理メモリ使用量(RSS: Resident Set Size)を基準にして、MB単位で表示するワンライナー

ps aux | tail -n +2 | sort -k 6 -rn | head -n 5 | sort -k 6 -n | awk '{cmd=""; for(i=11;i<=NF;i++){cmd=cmd" "$i}; printf "%10.2f MB   %s\n", $6/1024, cmd}'

コマンドの解説

ps aux
  • 現在実行中の全ユーザーのプロセスを詳細な情報付きで表示します。
tail -n +2
  • ps コマンドが出力する結果の1行目(ヘッダー行)を除外し、2行目以降のプロセス情報のみを次のコマンドに渡します。
sort -k 6 -rn
  • 6列目にある RSS(物理メモリ使用量) を基準に、数値を大きい順(降順)に並べ替えます。
  • -k 6: 6列目をソートキーに指定します。
  • -r: 逆順(降順)でソートします。
  • -n: 文字列ではなく数値としてソートします。
head -n 5
  • 降順にソートされた結果から、上位5つのプロセス(最もメモリを使用している5つ)を抽出します。
sort -k 6 -n
  • 抽出された5つのプロセスを、再度6列目のRSSを基準に、今度は小さい順(昇順)に並べ替えます。
awk '{ ... }'
  • 最終的な出力を見やすい形式に整形します。
  • cmd=""; for(i=11;i<=NF;i++){cmd=cmd" "$i}: 11列目以降の文字列をすべて連結し、スペースを含む完全なコマンド名を変数 cmd に格納します。
  • printf "%10.2f MB %s\n", $6/1024, cmd}: 6列目のRSS(KB単位)を1024で割ってMB単位に変換し、小数点以下2桁までの浮動小数点数としてフォーマットします。メモリ量を右寄せ10桁で表示した後、コマンド名を表示します。

表示例

ps aux | tail -n +2 | sort -k 6 -rn | head -n 5 | sort -k 6 -n | awk '{cmd=""; for(i=11;i<=NF;i++){cmd=cmd" "$i}; printf "%10.2f MB   %s\n", $6/1024, cmd}'
    236.36 MB    node -r dotenv-flow/config dist/server/app.js
    288.86 MB    Passenger RubyApp: /home/www-data/redmine1 (production)
    379.55 MB    Passenger RubyApp: /home/www-data/redmine2 (production)
    543.54 MB    /usr/sbin/mysqld
    654.73 MB    /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=CLDR -Dorg.apache.lucene.vectorization.upperJavaFeatureVersion=24 -Des.distribution.type=deb -Des.java.type=bundled JDK --enable-native-access=org.elasticsearch.nativeaccess,org.apache.lucene.core --enable-native-access=ALL-UNNAMED --illegal-native-access=deny -XX:ReplayDataFile=/var/log/elasticsearch/replay_pid%p.log -Des.entitlements.enabled=true -XX:+EnableDynamicAgentLoading -Djdk.attach.allowAttachSelf=true --patch-module=java.base=lib/entitlement-bridge/elasticsearch-entitlement-bridge-8.19.2.jar --add-exports=java.base/org.elasticsearch.entitlement.bridge=org.elasticsearch.entitlement,java.logging,java.net.http,java.naming,jdk.net -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-10892987525338221374 --add-modules=jdk.incubator.vector -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m -Xms256m -Xmx256m -XX:MaxDirectMemorySize=134217728 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 --module-path /usr/share/elasticsearch/lib --add-modules=jdk.net --add-modules=jdk.management.agent --add-modules=ALL-MODULE-PATH -m org.elasticsearch.server/org.elasticsearch.bootstrap.Elasticsearch

と、一番はElasticsearch(Growiで利用)。次いでMySQL、Redmineと続きます。nodeはGrowi関係です。

メモリ使用率(%MEM)を基準にして、MB単位で表示するワンライナー

続いて、システム全体のメモリ使用率を基準にする場合。

ps aux | tail -n +2 | sort -k 4 -rn | head -n 5 | sort -k 4 -n | awk '{cmd=""; for(i=11;i<=NF;i++){cmd=cmd" "$i}; printf "%5s%%   %s\n", $4, cmd}'

ソートの基準をRSS(6列目)から %MEM(4列目) に変更している点が主な違いです。

  4.3%    node -r dotenv-flow/config dist/server/app.js
  4.8%    Passenger RubyApp: /home/www-data/redmine1 (production)
  6.4%    Passenger RubyApp: /home/www-data/redmine2 (production)
  9.1%    /usr/sbin/mysqld
 11.0%    /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=CLDR -Dorg.apache.lucene.vectorization.upperJavaFeatureVersion=24 -Des.distribution.type=deb -Des.java.type=bundled JDK --enable-native-access=org.elasticsearch.nativeaccess,org.apache.lucene.core --enable-native-access=ALL-UNNAMED --illegal-native-access=deny -XX:ReplayDataFile=/var/log/elasticsearch/replay_pid%p.log -Des.entitlements.enabled=true -XX:+EnableDynamicAgentLoading -Djdk.attach.allowAttachSelf=true --patch-module=java.base=lib/entitlement-bridge/elasticsearch-entitlement-bridge-8.19.2.jar --add-exports=java.base/org.elasticsearch.entitlement.bridge=org.elasticsearch.entitlement,java.logging,java.net.http,java.naming,jdk.net -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-10892987525338221374 --add-modules=jdk.incubator.vector -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m -Xms256m -Xmx256m -XX:MaxDirectMemorySize=134217728 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 --module-path /usr/share/elasticsearch/lib --add-modules=jdk.net --add-modules=jdk.management.agent --add-modules=ALL-MODULE-PATH -m org.elasticsearch.server/org.elasticsearch.bootstrap.Elasticsearch

と、実メモリ6GB中の11%をElasticsearchが占めていることが明らかになりました。

Apache & PHP-FPM 管理スクリプト (引数対応版)。

Webサーバを運用する上で役立ている

  1. Apacheで有効になっているサイトの設定情報を表示
  2. 構文を確認
  3. 問題が無ければApache再起動
  4. 再起動後にステータスを表示する

スクリプト。非常に便利なものでしたが、VPS新調に際してPHP-FPMを導入。

そこで、

  1. PHP-FPMも構文チェックを行う
  2. 他、引数による処理

を改訂しました。(元ネタ:ChatGPT、リファクタリングはdeepseekとGemini)

スクリプト内容

  • apache2-check.sh
#!/bin/bash

#================================================================
# Apache & PHP-FPM 管理スクリプト (引数対応版)
#================================================================
#
# 機能:
# 1. Apacheで有効になっているサイトの設定情報を表示します。
# 2. ApacheとPHP-FPMの設定ファイルの構文をチェックします。
# 3. ApacheとPHP-FPMの再起動を個別に確認し、実行します。
# 4. 再起動後に各サービスのステータスを表示します。
#
# 引数:
#  -y : 確認プロンプトをすべてスキップし、自動で'yes'と応答します。
#  -a : Apacheのみを対象とします。
#  -p : PHP-FPMのみを対象とします。
#  -h : このヘルプを表示します。
#
#================================================================

# --- 設定項目 ---

# Apacheのサイト設定が格納されているディレクトリ
SITES_DIR="/etc/apache2/sites-enabled"

# 操作対象のPHPバージョン (例: "8.3", "8.2", "7.4")
PHP_VERSION="8.3"

# --- 設定ここまで ---


# --- スクリプトの動作を制御するフラグ ---
AUTO_YES=false
RESTART_APACHE=true  # デフォルトでは両方実行
RESTART_PHP=true     # デフォルトでは両方実行
EXCLUSIVE_MODE=false # -a または -p が指定されたかを判定するフラグ

# --- ヘルプ表示関数 ---
usage() {
    echo "Usage: $(basename "$0") [-y] [-a] [-p] [-h]"
    echo "  -y : 確認プロンプトをすべてスキップし、自動で'yes'と応答します。"
    echo "  -a : Apacheのみを対象とします。"
    echo "  -p : PHP-FPMのみを対象とします。"
    echo "  -h : ヘルプを表示します。"
    echo "引数なしの場合は、ApacheとPHP-FPMの両方が対象となります。"
    exit 0
}

# --- 引数解析 ---
while getopts "yaph" opt; do
  case $opt in
    y)
      AUTO_YES=true
      ;;
    a)
      if ! $EXCLUSIVE_MODE; then
          # -a or -p が初めて指定された場合、排他モードにしてデフォルトをリセット
          RESTART_APACHE=false
          RESTART_PHP=false
          EXCLUSIVE_MODE=true
      fi
      RESTART_APACHE=true
      ;;
    p)
      if ! $EXCLUSIVE_MODE; then
          # -a or -p が初めて指定された場合、排他モードにしてデフォルトをリセット
          RESTART_APACHE=false
          RESTART_PHP=false
          EXCLUSIVE_MODE=true
      fi
      RESTART_PHP=true
      ;;
    h)
      usage
      ;;
    \?)
      # 不正なオプション
      usage
      ;;
  esac
done

# PHP-FPMのサービス名とコマンド名を変数から生成
PHP_FPM_SERVICE="php${PHP_VERSION}-fpm"
PHP_FPM_COMMAND="php-fpm${PHP_VERSION}"

#
# サービスを再起動し、ステータスを表示する関数
#
restart_and_check_service() {
    local service_name="$1"
    local service_label="$2" # 表示用の名前
    local confirm_action="n"

    if [ "$AUTO_YES" = true ]; then
        confirm_action="y"
        echo "${service_label} を再起動します... (-yオプションにより自動確認)"
    else
        read -p "${service_label} を再起動しますか? (y/n): " confirm_action
    fi

    if [[ "$confirm_action" =~ ^[Yy]$ ]]; then
        if [ "$AUTO_YES" = false ]; then
          echo "--- ${service_label} を再起動します... ---"
        fi
        if ! systemctl restart "$service_name"; then
            echo "エラー: ${service_label} の再起動に失敗しました。"
        else
            echo "${service_label} が正常に再起動されました。"
            echo
            echo "==== ${service_label} ステータス ===="
            systemctl status "$service_name" --no-pager
            echo "=================================="
        fi
    else
        echo "${service_label} の再起動はキャンセルされました。"
    fi
    echo
}

# スクリプトを root ユーザーで実行しているかチェック
if [ "$EUID" -ne 0 ]; then
    echo "エラー: このスクリプトは root 権限で実行する必要があります。"
    exit 1
fi

# 1. 有効なサイト設定とドメインを表示
# このセクションは引数に関わらず常に表示される情報として実行します
echo "==== 有効なサイト設定ファイル ===="
if [ -z "$(ls -A "$SITES_DIR" 2>/dev/null)" ]; then
    echo "サイト設定が存在しません。"
else
    shopt -s nullglob
    for site in "$SITES_DIR"/*; do
        echo "設定ファイル: $(basename "$site")"
        entries=$(grep -hi -E "^\s*(ServerName|ServerAlias)\s+" "$site" | sed -E 's/^[[:blank:]]+//;s/[[:blank:]]*#.*//' | awk '{
            original_directive = $1
            directive = tolower(original_directive)
            proper_directive = (directive == "servername") ? "ServerName" : \
                               (directive == "serveralias") ? "ServerAlias" : original_directive
            for (i=2; i<=NF; i++) {
                domain = tolower($i)
                sub(/[;,]*$/, "", domain)
                gsub(/^[[:blank:]]+|[[:blank:]]+$/, "", domain)
                if (domain) {
                    printf "%s %s\n", proper_directive, domain
                }
            }
        }' | sort -u)
        if [ -z "$entries" ]; then
            echo "  ※ ServerName/ServerAliasが定義されていません"
        else
            echo "$entries" | sed 's/^/  /'
        fi
        echo
    done
    shopt -u nullglob
fi
echo "=================================="
echo

# 2. 構文チェック
echo "--- 構文チェック ---"
SYNTAX_OK=true

# Apache構文チェック
if [ "$RESTART_APACHE" = true ]; then
    echo "Apache の構文をチェックしています..."
    if ! apachectl configtest 2>&1 | grep -q "Syntax OK"; then
        echo "エラー: Apacheの構文エラーが検出されました。"
        apachectl configtest # エラー詳細を再表示
        SYNTAX_OK=false
    else
        echo "Apacheの構文は正常です。"
    fi
    echo
fi

# PHP-FPMの存在確認と構文チェック
PHP_FPM_ENABLED=false
if [ "$RESTART_PHP" = true ]; then
    if systemctl list-units --type=service --all | grep -q "${PHP_FPM_SERVICE}.service"; then
        if command -v "$PHP_FPM_COMMAND" &>/dev/null; then
            PHP_FPM_ENABLED=true
            echo "${PHP_FPM_SERVICE} の構文をチェックしています..."
            if ! "$PHP_FPM_COMMAND" -t 2>&1 | grep -q "test is successful"; then
                echo "エラー: ${PHP_FPM_SERVICE} の構文エラーが検出されました。"
                "$PHP_FPM_COMMAND" -t # エラー詳細を再表示
                SYNTAX_OK=false
            else
                echo "${PHP_FPM_SERVICE} の構文は正常です。"
            fi
        else
            echo "警告: ${PHP_FPM_SERVICE} サービスは存在しますが、${PHP_FPM_COMMAND} コマンドが見つかりませ
ん。PHP-FPMのチェックはスキップします。"
            RESTART_PHP=false # 実行フラグをオフにする
        fi
    else
        echo "情報: ${PHP_FPM_SERVICE} サービスが見つかりません。PHP-FPM関連の処理はスキップします。"
        RESTART_PHP=false # 実行フラグをオフにする
    fi
    echo
fi

# 構文エラーがあれば処理を中断
if [ "$SYNTAX_OK" = false ]; then
    echo "構文エラーが検出されたため、処理を中断します。"
    exit 1
fi
echo "--------------------"
echo

# 3. サービスの再起動
if [ "$RESTART_APACHE" = false ] && [ "$RESTART_PHP" = false ]; then
    echo "再起動対象のサービスがありません。"
    exit 0
fi

# Apacheの再起動
if [ "$RESTART_APACHE" = true ]; then
    restart_and_check_service "apache2" "Apache"
fi

# PHP-FPMの再起動
if [ "$RESTART_PHP" = true ] && [ "$PHP_FPM_ENABLED" = true ]; then
    restart_and_check_service "$PHP_FPM_SERVICE" "$PHP_FPM_SERVICE"
fi

スクリプトの動き

  1. sudo bash apache2-check.shとすることで
  2. A@acheを起動するか、PHP-FPMを起動するかの2択が生まれます。
  3. -yオプションの場合は全てyにしてプロンプトを省略します。
  4. -aでApacheのみの再起動-pはPHP-FPMのみの再起動

と、柔軟かつやりやすいスタイルへと仕上がりました。

『ユミアのアトリエ』無料DLC「ラムロースト」まとめ。

概要

サンドバッグ状態の魔物と戦うことで

  • 与ダメージの確認
  • 各種アイテムやスキルの演出を見る
  • ハイスコアアタック

などを行えるラムロースト。ユミアのアトリエでも実装です。

解放条件

ある程度シナリオを進めることで、

ウェルクスの集落西部の資材管理者(プロセラのイベントがあったところ)と話すと

ラムローストが解放されます。

イベント終了後、ウェルクスの集落の広場にラムローストが置かれます。

ラムローストの機能

  • 羊型のラムローストと話して戦闘開始です。
  • 小悪魔型のラムローストと話しかけることで、今まで戦ったことがある魔物に変身させられます。(ヴィラン除く
  • 与ダメージの送料、一撃でのダメージなどに応じて報酬がもらえます。

『ライザのアトリエ2/3』との違い

今後のアップデートで増えるかも知れませんが、2025/08/22の実装当初では以下の違いがあります。

制限時間あり

これが一番大きな違いです。ライザのラムローストは「敵を延々とブレイクさせ続ける」ことで終わりなくダメージを叩き出していましたが、

ユミア版ではわずか2分。ライザの時のように

  • バフをかけ続ける
  • デバフをかけ続けて威力を増やす

などができなくなっています。

戦闘条件無し

  • 戦闘開始時にタクティクスレベルが5まで上昇
  • スキル/アイテムが効かない

などの戦闘の前提が変わるような変化はありません。

豊富な特性結晶

今までの特性結晶集めは何だったのかというレベルでこの結晶が増えます。

報酬として「宝物庫の鍵」

最大ダメージ3000以上の報酬に宝物庫の鍵。更に余裕を持った探索が可能です。

Page 2 of 267

Powered by WordPress & Theme by Anders Norén