投稿者: manualmaton Page 72 of 270

ボードゲーム『グラスロード(ミニ拡張同梱版)』感想。

※本記事は『ボドゲーマ』にも寄稿済みです。
https://bodoge.hoobby.net/games/glass-road-mini-expansion/reviews/43618

ボードゲーム『グラスロード』

ボードゲームの様々なメカニズムが詰め込まれているのに比較的とっつきやすく、リプレイ性も高い作品。
特に、人数によってプレイ感が変わるのが印象的でした。

クローズドのゲーム会で持ち込んでいただき、気に入って即購入したという作品です。

概要

プレイヤーはガラス/レンガ工房の村を発展させていきます。元々いる職人たちと利害の折り合いをつけながら、誰が村の発展に寄与するでしょうか?

ゲームシステム

プレイヤーのアクションは基本的にカードを出すだけです。なのに、

  • カードによる事前プロット
  • その際に発生するバッティングとバリアブルフェイズオーダー
  • 資源管理
  • タイルプレースメント

等の要素がギュッと詰まっていました。

特筆すべき内容として、ダイヤルによる資源管理。「ある程度の基本資源が増産されると、上位資源が増える代わりに基本資源が減ってしまう」特徴があります。

これは利点であり欠点です。

  1. 得点を生み出す建物を作るためには上位資源が必要。
  2. 上位資源は勝手に生み出されてしまうので建物の資源が足りなくなる。

のジレンマ。そこに、バッティングが加わります。他の人とアクションが被ってしまうと、同じアクションを強制的に取ります。これによって、「資源を生産してから建物を建てたいのに、空振りになってしまう」ままならなさが終始生まれてしまいます。

それだけに一つの手番が極めて重く、勝利点一つが極めて高いひりつくゲームを楽しむことができました。

このゲームで感じたところ

「人数でプレイ感ががらりと変わってしまう」ところです。

  • 4人
  • 2人
  • ソロ

で思ったことを以下に記します。

4人プレイの場合

「ベスト人数」と言うだけのことはありました。とかくバッティングの読み合いが熾烈です。

  • 両方のアクションをプレイしたい(被らないアクションを取りたい)
  • 相手のバッティングを可能な限り誘発させたい
  • けど、それぞれによって目算が狂いたくない

のトリレンマ。状況を見定めて出し抜いていくバチバチのインタラクションが発生します。

2人プレイの場合

手札以外の全てが公開情報であるため、相手の狙いが見えてきます。そんな中でのバッティングの有無は非常にシビア。手札と手数がモノを言う本作の魅力を別の意味で味わえます。

バッティングが互いに発生する状況としない状況が顕著に分かれていて、そこからのゲームプランに差がつくという形でした。

ソロプレイの場合

本作の対人戦とソロプレイは全くの、完全に別ゲームです。

「事前にアクションをカードで決めていく」までは一緒ですが、なんと、「ランダムな順番でプレイする」という豪胆なルールが設定されています。

しかも、アクションがフルで使えるのはプロットしたカードの1枚だけです。そのために

  • リスクをできるだけ回避して着実に資源を増やすか?
  • 最善手が出ることを期待してイチバチの勝負に出るか?

の「ざわ・・ ざわ・・」としたディシジョンメイキングと運否天賦(ある意味でのリスク管理)が痺れます。

他のウヴェ・ローゼンベルクの作品との比較

ここで、他のウヴェ作品のソロバリアントとの比較は、興味をお持ちの方にとっての一助となるかと思います。

  • アグリコラ (ラウンドカードのめくれ運があるものの、手持ちの小進歩と職業でゲームプランは行いやすい)
  • ヌースフィヨルド(準完全公開で資源は予測可能。Cデッキのめくれ運はカバー可能)
  • アルルの丘(全てのアクションが完全公開。運要素はセットアップのみ)
  • レイクホルト(目標が見えているし支援カードやシナリオでゲームメイクは支援されている)

等に慣れている方にとって、本作はかなり面食らうでしょう。

なにせ、上記の定跡である「事前に渡されるものがある程度見えているので最善手を取れる」がほぼ通じないのです。他の方がレビューされたように、本作のソロはある種、ソロで行う麻雀に近いものが感じられます。運と実力の両方を天秤にかけつつ得点を稼いでいくシステムが今から10年も前に作られていたことに脱帽するほかはありません。

まとめ

  • 様々なメカニズムを有しているのに中量級
  • バッティングの読み合いによるインタラクション
  • 勝手が違うソロプレイ

など、独自面がことさらに強調されているボードゲームという印象です。

個人的に気に入っているのがテキスト量の少なさ。やることもシンプルでタイル類も少なめだったので、ボードゲームをそれほどやりこんでいない友人にも導入できるという特徴はとても気に入りました。

ソロプレイの(いい意味での)ままならなさとセットアップのしやすさも魅力的。程よいプレイ時間で色々なボードゲームのメカニクスも味わえる珠玉の作品です。

2023年11月のボードゲーム記録(1:差しゲー)

連休を利用してのボードゲームはタイマンプレイでした。

グラスロード

グラスロード

インストを含めての2人プレイ。

  • 資源管理
  • タイルプレースメント
  • 建物コンボ
  • バッティング
  • バリアブルフェイズオーダー

などがいくつも絡んだ作品。ベスト人数は4人とのことでしたが、あまりゲーム慣れしていない人には2人がちょうどいいと思った次第です。

クランズオブカレドニア

クランズオブカレドニア

重いゲームに慣れていただこうとこれをチョイス。

  • ラウンド目標なし
  • 港ボーナスなし
  • 輸入品価格はそれぞれ「4」で固定

の導入ルールです。

プレイ後

そして、このゲーム、コマの数に比して置けるヘックスがとても少ないと思いました。契約時に「屠殺(羊/牛をボードに戻す)」システムは、それを緩和するための者だなと感じたほどです。

おそらく、この適正人数は2~3でしょう。

尤も、この導入だからまだ理解戴きましたが、通常ルールはまだ様子見が必要かなと。

宝石の煌めきデュエル

最後にこちらをプレイ。王冠10個を狙っていましたが、それら全てをカットされて20点先取で敗北。

遊んだゲームは3本でしたけど、初プレイが2本のためにちょっと時間が掛かりました。

スナップと収穫。

過日、ハリーポッターのスタジオツアーを訪れました。

スタジオ内撮影

本当に圧巻。映画そのままの世界で埋め尽くされていて、それらも非常に芸が細かいです。

個人的にダイアゴン横町や魔法省の作り込みに感動でした。

食事

オールタイムブレックファースト

いわゆるフルイングリッシュ・ブレックファースト。作品にちなんで9と3/4がトーストにプリントされています。

メニューそのものは英国にいたときと同じもの、ですが、圧倒的に味が良かったのは逆に戸惑いました。

お土産

マグカップを2つにノート1つ、キーチェーンをいくつかと、当初の予定より遙かにどっさり。

特に、この錬金釜型のタンブラーは自分のフィギュア撮影のピースとなりました。

それはさておいて、「また、映画を通しで見た上で再訪したい」と強く思えるアトラクションでした。

BookStackの画像格納ディレクトリを別パーティションに格納。

概要

BookStackをより安全に運用するため、別パーティションに格納します。

以前やったこの手法がそのまま使えました。

前提

  • 既にBookStackが運用されていること。
  • 別のストレージにマウントされている格納用ディレクトリがあること。
  • 筆者はクラウドストレージ「wasabi」を利用しています。

さっくりとした手順

  1. 別パーティションに格納用ディレクトリを作成します。
  2. 既存のimagesディレクトリを格納ディレクトリにコピーします。
  3. 既存のimagesディレクトリの参照先を変更します。
  4. 動作を確認します。

格納用ディレクトリ作成

  • 別パーティションに格納用ディレクトリを作成
sudo mkdir -p /path/to/directory/bookstack/images
# 適切なパーティション内のディレクトリを指定します。
# 筆者環境: /mnt/wasabi/bookstack/images
  • 作成ディレクトリの所有者変更
sudo chown -R www-data:www-data /path/to/directory/bookstack/images

配置済みのディレクトリコピー

  • ディレクトリ移動
cd /home/www-data/bookstack/public/uploads/images && pwd
# 格納ディレクトリに移動します。(自分の環境に合わせます。
  • imageディレクトリ内一式を格納ディレクトリにコピー
sudo cp -pir ./* /path/to/directory/bookstack/images
# 筆者環境:
# sudo cp -pir ./* /mnt/wasabi/bookstack/images/
  • コピー確認
ls -la /path/to/directory/bookstack/images

imagesディレクトリの参照先変更

  • imageディレクトリ退避
    • mvにより、オリジナルのディレクトリを保持します。作業が完了したら削除するなりバックアップを取るなりしてください。
cd /home/www-data/bookstack/public/uploads
ls -lad images
# imagesディレクトリがあることを確認

sudo mv images images_org

ls -lad images
# imagesディレクトリがないこと(エラー)を確認
  • シンボリックリンク張り替え
sudo -u www-data ln -s /path/to/directory/bookstack/images images
# 筆者環境
# sudo -u www-data ln -s /mnt/wasabi/bookstack/images images
  • リンク張り替え確認
ls -la images
# 別パーティションに作成したフォルダに向き先があることを確認します

設定反映と反映確認

  • Webサービス再起動
sudo systemctl restart apache2.service
# 念のためWebサービスを再起動します。
  • 設定反映確認
  1. BookStackに管理者権限でログインします。
  2. ファイルをアップロードできることを確認します。
  3. 上記、格納先パーティションに、新しくファイルが作られていることを確認します。

BookStackサイトの後処理。

幸いなことに、既に構築しているサービスと連携させることができました。

それを更に発展させます。

概要

BookStackにあるヘッダーを用いて以下を行います。

  1. フォント変更
  2. Matomoトラッキングシステムの追加

設定方法

BookStackに管理者権限でログインします。

フォント変更

設定>カスタマイズ>カスタムheadタグに進みます。

以下のコードを入れます。

  • フォントは適宜、指定してください。
  • 著作権などの問題から、フリーのフォントを強く推奨します
<style>
  body {
    --font-body: 'TakaoPGothic', Regular;
    --font-heading: 'TakaoPGothic', sans-serif;
    --font-code: 'TakaoPGothic', monospace;
  }
</style>

Matomoトラッキングシステムのコード追加

※この操作は、別にMatomoトラッキングシステムを運用していることが前提です。※

上記の</stile>に続けて、以下のようなコードを入れます。

<!-- Matomo -->
<script>

<!-- Matomoシステムで提示されたトラッキングコードを貼り付け -->

</script>
<!-- End Matomo Code -->

設定後の確認

以下を確認します。

  1. BookStackでの表示が指定したフォントであること。
  2. Matomoトラッキングシステムで、サイトの閲覧記録を見ることができること。

これからの課題

日本語フォントは表示されましたが、PDFがうまくエクスポートできません。(htmlやMarkdown形式のエクスポートは可能)

これを修正しつつ、コンテンツを増やしていきます。

AWS LightsailにBookStack構築。

BookStackの構築がうまくいき、「これは使えそうだ」と思ったので、AWS Ligtsail上に構築しました。

やったこと

サイト構築

上述した通りです。

ログローテーション設定

https://barrel.reisalin.com/books/bookstack/page/bookstack

/etc/logrotate.d/bookstackに

/var/log/bookstack/*.log {
        daily
        missingok
        ifempty
        copytruncate
        rotate 10
        compress
        create 0640 www-data www-data
}

を作成しました。

Mod_Security設定

既に動いているので使わない手はありません。

https://barrel.reisalin.com/books/bookstack/page/bookstackmod-security

で連携させました。

ロゴ/バナー設定

既に「BarrelGazer」というサイト名をつけたので、それっぽいロゴやバナーをAIに描写してもらいました。

使ってみての感想

Scrapboxのように階層で区別できる上に「本棚」というイメージがお気に入りです。

しかも、描写が速いのが特徴。あとはMarkdownの自動補完があれば言うことなしですが、そこはローカルで動かしているGrowi環境との連携です。

検証:BookStackサイト構築。

Redmineのプラグイン、knowledgebaseのようなWiki編集/公開システム「BookStack」を検証機に入れてみます。

https://www.bookstackapp.com/

前提

こちらが既に動いています。

  • Ubuntu 20.04
  • Apache 2.4系
  • MySQL 8系
  • PHP 8.1系

また、このサイト用のドメインを有しており、ドメインに即した証明書も発行済みです。

さっくりとした手順

  1. composerをインストールします。
  2. DBを作成します。
  3. BookStackをダウンロードします。
  4. BookStackの設定を行います。
  5. Apache設定ファイルを用意します。
  6. Webサービス再起動後、設定を反映します。

Composerインストール

  • インストール
cd /hoge
# 任意の作業ディレクトリに移動します
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php
sudo php -r "unlink('composer-setup.php');"
sudo php composer.phar install --no-dev --optimize-autoloader
  • バージョン確認
composer --version
# バージョンが表示されることを確認します。

DBを作成します。

mysql -u root -p
CREATE DATABASE bookstack;
CREATE USER 'bookstackuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstackuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

DB名/パスワードはポリシーに応じて適切なものを指定します。

BookStackの配置

  • プログラム配置
cd /home/www-data
# パーティションの都合上、/home/www-dataに置いています。
# 環境に合わせて適切なWebサービス公開ディレクトリを指定してください。

sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch 
sudo chown -R www-data:www-data BookStack
cd BookStack
  • 設定ファイル編集
sudo cp -pi .env.example .env

教義・信仰に沿ったエディタで以下を編集します。

APP_URL=https://hoge.example.com
# 公開用URLを指定します

# Database details
DB_HOST=localhost
DB_DATABASE=bookstack
DB_USERNAME=bookstackuser
DB_PASSWORD=password
# DB名、パスワードなどは先ほど作成したものです。
  • マイグレート
sudo php artisan key:generate
sudo php artisan migrate --force
sudo php artisan db:seed --force

Web公開用のファイルを作成します。

  • 作成するファイル(要管理者権限)
/etc/apache2/sites-available/bookstack.conf
  • 作成内容
<VirtualHost *:80>
    servername hoge.example.com
    # ドメイン名を指定します
    RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>

<VirtualHost *:443>
    ServerName hoge.example.com
    # ドメイン名を指定します
    CustomLog /var/log/bookstack/bs_access.log combined
    ErrorLog /var/log/bookstack/bs_error.log
    DocumentRoot /home/www-data/BookStack/public
    # 自身の環境に合わせます
    <Directory /home/www-data/BookStack/public>
    # 自身の環境に合わせます
        AllowOverride All
        Require all granted
        Options +FollowSymLinks
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^ index.php [L]
    </Directory>

#SSL設定
  SSLEngine on
    Protocols h2 http/1.1
  # SSLを有効化します

SSLCertificateFile /etc/certs/example.com.crt
# SSL証明書を指定します
SSLCertificateKeyFile /etc/private/example.com.key
# 秘密鍵を指定します

# SSLCACertificateFile /etc/certs/example.com.CA.crt
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します

#セキュリティヘッダー付与

    Header always set Strict-Transport-Security "max-age=63072000"
    Header set X-Content-Type-Options "nosniff"
    Header always append X-Frame-Options "SAMEORIGIN"
    Header set X-XSS-Protection "1; mode=block"

</VirtualHost>

SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder     off
SSLSessionTickets       off

SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"

設定を反映させます。

  • 設定ファイル追加
sudo a2ensite bookstack.conf
sudo apache2ctl configtest
# Syntax OKを確認します
  • Webサービス再起動
sudo systemctl restart apache2.service

インストール確認

https://設定したドメイン

でアクセスします。

以下のログイン画面が出れば成功です。

  • admin@admin.com
  • password

が初期パスワードです。ログイン後、直ちにアカウント情報を設定してください。

今後

  • 現在運用しているサイトへのインストール
  • セキュリティ強化
  • 画像保存ディレクトリの設定

等を行っていきます。

ボードゲーム『グラスロード』開封と百均グッズによる整理。

先だっての統率者&ボードゲーム会で非常に気に入った『グラスロード』。入手したので開けていきます。

外観

ガラス職人が特徴的な外観

箱はいわゆるアグリコラサイズです。

開封

カードが少なくタイルが多め

プレイ時にコンポーネントの量はつかんでいたものの、かなり多めのタイル類。

これらを整理/分類していきます。

コンポーネント一覧

タイル類

  • 地形タイル
  • 建物タイル
  • 個人ボード
  • 共通ボード
  • 資源ボード

と、種類も数も多かったです。

資源ボード

本作のメインシステム、ダイヤルによる資源トラックです。資源を管理するだけではなく、レンガとガラスを自動的に生産するというメモリも兼ねています。

カード

ウヴェ・ローゼンベルクのゲームにしてはカードが少ないです。各色15枚ずつ、それらの内容は固定でした。

収納

上述したように、タイルが多くてカードが少ないために収納は単純な部類でした。

タイル類の収納

仕切り付きのケースに収めました。ジャストフィットというわけではありませんが、そこそこ隙間なく入りました。

資源コマの収納

小さいタッパーに一緒に入れます。頻繁に出し入れしないので、これで十分です。

カードの収納

カードスリーブはボードゲームサイズ。TCGケース(スリム)に入れていきます。

全体的な収納

隙間が割合に残ったものの、取りあえず全て入りました。

改良の余地はまだあるので、今後の課題です。

茶こし、刷新。

この、割れないティーポットを使い始めて10ヶ月ほど経過。

その頑丈さとメンテナンスのしやすさに感動しておりましたが、問題が発生しました。

破れた茶こし

ステンレス製の茶こしに穴。ここまで来ると補修も難しいなと思い、代替案を探しました。

回転式茶こし

そこで、10数年前にこの茶こしを買っていたことを思い出しました。ポット備え付けと同じくステンレス製ですが、編み込みがしっかりしているので破れにくいという感じ。

この最大の特徴は

このようにカップに引っかけられること。

思った以上に深いので、ポットから飛び出た茶葉もしっかりキャッチ。

抽出した後は受け皿が開店して、そのままテーブルに置くことができます。

最近使い始めた茶こしつきマグボトルにもジャストサイズなのも嬉しい誤算です。

これによって、また、ティータイムが楽しみになりました。

Bingによるシェルスクリプト。(UFW遮断)

概要

先だってChatGPTが書いた

  1. IPアドレスを尋ねる
  2. IPアドレスそのままか、/24ごとブロックするか、/16ごとブロックするかを0~2で質問(空白エンターは0)
  3. 実行前に内容を確認する。yなら続行、nなら中止
  4. 1~2に沿ってufw deny処理を行う
  5. 「ルールを付け加えました。他のIPブロックしますか?」の分岐を出す。yなら1に戻る。nなら次の処理
  6. ufw reloadを行う
  7. 現在のブロック状況を出しますか? yならufw status numberedを表示。nなら終了メッセージを出す

このスクリプト、Bingが書くとどうなるかを試してみました。

Bingの出力結果

  • bing_ufw_deny.sh
#!/bin/bash

# ループフラグを設定
loop=true

# ループ開始
while $loop; do
    # IPアドレスを尋ねる
    echo "ブロックしたいIPアドレスを入力してください。"
    read ip

    # IPアドレスの形式をチェック
    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        # IPアドレスそのままか、/24ごとブロックするか、/16ごとブロックするかを0~2で質問
        # 空エンターは0
        echo "IPアドレスをそのままブロックする場合は0、/24ごとブロックする場合は1、/16ごとブロックする場合は2を入力してください。"
        echo "何も入力しない場合は0とみなします。"
        read option

        # オプションに応じてIPアドレスを変換
        case $option in
            1)
                # /24ごとブロックする場合
                ip=${ip%.*}.0/24
                ;;
            2)
                # /16ごとブロックする場合
                ip=${ip%.*.*}.0.0/16
                ;;
            *)
                # その他の場合はIPアドレスそのまま
                ;;
        esac

        # 実行前に内容を確認する。yなら続行、nなら中止
        echo "ufw deny from $ip to any を実行します。よろしいですか? (y/n)"
        read confirm

        if [[ $confirm == [yY] ]]; then
            # yならufw deny処理を行う
            sudo ufw deny from $ip to any
            echo "ルールを付け加えました。"
        else
            # nなら中止メッセージを出す
            echo "処理を中止しました。"
        fi

        # 「ルールを付け加えました。他のIPブロックしますか?」の分岐を出す。yなら1に戻る。nなら次の処理
        echo "他のIPをブロックしますか? (y/n)"
        read loop

        if [[ $loop == [yY] ]]; then
            # yならループフラグをtrueにして1に戻る
            loop=true
        else
            # nならループフラグをfalseにしてループを抜ける
            loop=false
        fi

    else
        # IPアドレスの形式が不正な場合はエラーメッセージを出す
        echo "正しいIPアドレスを入力してください。"
    fi

done

# ufw reloadを行う
echo "ufw reload を実行します。"
sudo ufw reload

# 現在のブロック状況を出しますか? yならufw status numberedを表示。nなら終了メッセージを出す
echo "現在のブロック状況を表示しますか? (y/n)"
read status

if [[ $status == [yY] ]]; then
    # yならufw status numberedを表示する
    sudo ufw status numbered
else
    # nなら終了メッセージを出す
    echo "スクリプトが終了しました。"
fi

体感として

Bingはネットワークアドレスの切り出しが素直です。

  • Bingの場合
        # オプションに応じてIPアドレスを変換
        case $option in
            1)
                # /24ごとブロックする場合
                ip=${ip%.*}.0/24
                ;;
            2)
                # /16ごとブロックする場合
                ip=${ip%.*.*}.0.0/16
                ;;
            *)
                # その他の場合はIPアドレスそのまま
                ;;
        esac
  • ChatGPTの場合
    # ネットワークアドレスに変換
    if [[ -n "$block_cidr" ]]; then
        if [[ $block_option == "1" ]]; then
            # /24で区切る場合
            network_address=$(echo $ip_address | cut -d'.' -f1-3)
            # CIDR表記の生成 (/24)
            cidr_notation="$network_address.0$block_cidr"
        elif [[ $block_option == "2" ]]; then
            # /16で区切る場合
            network_address=$(echo $ip_address | cut -d'.' -f1-2)
            # CIDR表記の生成 (/16)
            cidr_notation="$network_address.0.0$block_cidr"
        fi
    else
        cidr_notation="$ip_address"
    fi

と、シンプルになっています。

蛇足ですが、ChatGPTはこの処理にたどり着くまで5回ぐらいの錯誤を繰り返しました。

なので、このケースで言えばBingはよりユーザーの意図をくみ取ったと考えられます。

こちらの選択肢もあると分かったという収穫。

Page 72 of 270

Powered by WordPress & Theme by Anders Norén