月: 2025年7月 Page 2 of 3

Redmine_View_Customizeでチケットのステータスにラジオボタンを追加する

やりたいこと

Redmineのステータス一覧のドロップダウンリストにラジオボタンを追加し、ステータスの遷移を行いやすくします。

前提

  • Redmine View Customize がインストールされていること。
  • Redmine 5.1で動作を確認しています。

手順

画面移動

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに移動します。

カスタマイズ作成:JavaScript

表示のカスタマイズに移動後、「新しい表示のカスタマイズ」をクリックします。

以下の通りに入力します。

  • パスのパターン
  • /issues/[0-9]+
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • JavaScript

コード

$(function() {
  const $select = $('#issue_status_id');
  if ($select.length === 0) return;

  const currentVal = $select.val();

  // ラジオボタンを入れるコンテナ
  const $radioContainer = $('<div class="status-radio-container"></div>');

  $select.find('option').each(function() {
    const val = $(this).val();
    const label = $(this).text();

    if (!val) return; // 空value(プレースホルダなど)はスキップ

    const id = 'status_radio_' + val;

    const $radio = $('<input type="radio">').attr({
      id,
      name: 'issue_status_radio',
      value: val
    });

    if (val === currentVal) {
      $radio.prop('checked', true);
    }

    const $label = $('<label>').attr('for', id).text(label);
    const $wrapper = $('<div class="radio-wrapper"></div>').append($radio, $label);

    $radioContainer.append($wrapper);
  });

  // ドロップダウンを非表示にし、ラジオボタンを挿入
  $select.hide().after($radioContainer);

  // ラジオ選択時に元のselectを更新
  $radioContainer.on('change', 'input[type=radio]', function() {
    $select.val($(this).val());
  });
});
  • コメント
  • 任意「チケットステータスにラジオボタンを追加する-JavaScript-」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

設定後、保存をクリックします。

カスタマイズ作成:CSS

表示のカスタマイズに移動後、「新しい表示のカスタマイズ」をクリックします。

以下の通りに入力します。

  • パスのパターン
  • /issues/[0-9]+
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • CSS

コード

.status-radio-container {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 20px;
  margin-top: 5px;
}

.radio-wrapper {
  display: flex;
  align-items: center;
  width: 220px; /* カラム幅は調整可能 */
}

.radio-wrapper label {
  margin-left: 6px;
  cursor: pointer;
}
  • コメント
  • 任意「チケットステータスにラジオボタンを追加する-CSS-」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

設定後、保存をクリックします。

動作を確認します。

任意のチケット編集画面をクリックします。

ステータス変更画面がドロップダウンリストからラジオボタンに変わっていれば成功です。

Thinkpad X 13 2020年モデルのキーバインド変更。(FnとCtrl)

使っていて違和感があったので修正しました。

中古で購入したThinkapd X13。左にあるFnとCtrlが使っているうちに違和感。その2つが逆であれば自分での混乱は少ないと思い、対処しました。

手順

BIOSに入ります。

このモデルでは、電源を投入後に「Enter」連打です。F2やDelではないことに注意。

BIOS画面からConfigに遷移します。

左のメニューからConfigをクリック。

Keyboard / Mouseをクリック。

FnとCtrlを入れ替えます。

“Fn and Ctrl key swap”をOnにして保存します。

設定を保存します。

設定後、それぞれの動作が逆になっていれば設定完了です。

2025年6月の統率者。

人がそろわなかったとはいえ、3人での統率車線を行ってみました。

リスの将軍、サワギバ

無情な無頼漢→アシュノッドの供犠台→歩行バリスタによる無限が決まり勝利。

13代目ドクター / ヤズミン・カーン

こちらに関しては《暴動の先導者、チャンドラ》の紋章(呪文を唱えるたび1つに5点)で勝利するという実績を解除。

  • 《過去に帰還せよ》(自ターン中、自分の墓地にあるインスタントとそーサリーはフラッシュバックを持つ)
  • 《運任せ》(アップキープ開始時にライブラリートップを追放。ターン終了時まで)それをプレイしてもよい

も活躍し、途切れることなく焼き切りました。

「好きではあるけどアドバンテージを得るためだけのデッキ」のため低ブラケット。(《ジェスカの意志》があるため3)

なので、勝ち負けはこだわらず回していこうという感じでしたので勝てたのは予想外でした。

Thinkpad X 13 2020年モデル数日使っての感想。  

Windows用ノートPC購入。(Thinkpad X 13 2020年モデル) – Manualmaton's Laboratory

こちらの記事の続き。5年前の中古PCとはいえ5万円弱と結構な値段でしたが「その価値はあった」というのが現時点での結論です。

よかった点

キーボードの打ちやすさ

見た目以上にキーストロークが深く、また、キーピッチも十分なので手が大きめの筆者でも打ちやすい感覚です。

思った以上に便利なトラックポイント

いわゆる赤ポチ。Thinkapdの代名詞的な存在であるトラックポイント、これを使ってみて「ファンが多いのも納得」と思った次第です。

  • ホームポジションから手を離すことなくカーソルの移動ができる
  • クリックボタンも手の届く場所にある
  • スクロールボタンによりトラックポイントでページのスクロールも可能

と、モバイル環境で追加のマウスを買う必要がないというのは非常に便利です。

Windowsならではのソフトの多さ

日本語入力ソフトATOKはもちろんのこと、

  • Teraterm
  • Putty
  • RLogin

など、逆に、CLIユーザーへの配慮がなされたターミナルソフトが使えるというのはWindowsの利点の一つです。

現時点での不満点

SDカードスロットがない

カメラと一緒に持ち運ぶケースを考えると、これは不満点ではありますが、カメラケースに小型のカードリーダーを携えればいいので運用でカバーできます。

今のところ

  • 軽さ
  • スペック
  • 金属製の筐体による高級感と放熱性

など、いい買い物ができたという感じです。

早速、天板も自分好みのステッカーを貼ることにしました。

Google Geminiによるコード修正。(SSL証明書の有効期限確認)

このスクリプトの改善案をGoogle Geminiに言ったところ、更に完成度が上がりました。

概要

Web運用において、「サーバのSSL証明書更新」をチェックすることは大切です。

適切に更新されていない/更新が遅れたまま放置すると

  • ブラウザで「危険なサイト」と認識される
  • それによるレピュテーションリスク
  • HSTSを厳密に設定した場合はサイトそのものへのアクセス不可

など、リスクは甚大です。

そこで、

  • OpenSSLコマンドでドメインに設定されている証明書の期限
  • 並びに残り何日か

を表示するRubyスクリプトを準備しました。

スクリプト内容

  • ssl_checker.rb
#!/usr/bin/env ruby

require 'openssl'
require 'socket'
require 'date'
require 'uri'
require 'timeout'

# 色付け用の定数
COLOR_RED = "\e[31m"
COLOR_YELLOW = "\e[33m"
COLOR_GREEN = "\e[32m"
COLOR_RESET = "\e[0m"

# URLの最終的な到達先を取得するメソッド
def get_effective_url(url)
  # curlを使ってリダイレクトを追いかけ、最終的なURLを取得する
  # -s: サイレント, -L: リダイレクト追従, -I: ヘッダのみ, -o /dev/null: ボディ破棄, -w '%{url_effective}': 最終URLを出力
  effective_url = `curl -sLI -o /dev/null -w '%{url_effective}' "#{url}"`
  effective_url.empty? ? nil : effective_url
end

# 証明書の有効期限を取得するメソッド
def get_certificate_expiry_date(url)
  uri = URI.parse(url)
  hostname = uri.host
  port = uri.port || 443 # ポートがなければ443を使う
  ssl_socket = nil
  tcp_client = nil

  begin
    Timeout.timeout(5) do
      tcp_client = TCPSocket.new(hostname, port)
      ssl_context = OpenSSL::SSL::SSLContext.new
      ssl_socket = OpenSSL::SSL::SSLSocket.new(tcp_client, ssl_context)
      ssl_socket.hostname = hostname
      ssl_socket.connect

      cert = ssl_socket.peer_cert
      expiration_date = DateTime.parse(cert.not_after.to_s)
      days_remaining = (expiration_date - DateTime.now).to_i

      return expiration_date, days_remaining
    end
  rescue Timeout::Error
    return nil, "サーバーへの接続がタイムアウトしました。"
  rescue => e
    return nil, e.to_s
  ensure
    ssl_socket&.close
    tcp_client&.close
  end
end

# 結果を表示するメソッド
def print_result(url, expiration_date, days_remaining)
  if expiration_date
    formatted_date = expiration_date.strftime("%Y/%m/%d")
    
    # 残り日数に応じて色を選択
    color = if days_remaining < 14
              COLOR_RED
            elsif days_remaining < 30
              COLOR_YELLOW
            else
              COLOR_GREEN
            end

    puts "サイト #{url} の有効期限は #{formatted_date} です。#{color}残り #{days_remaining} 日です。#{COLOR_RESET}"
  else
    puts "#{COLOR_RED}サイト #{url} の証明書取得に失敗しました: #{days_remaining}#{COLOR_RESET}"
  end
end

# メイン処理
def main
  # コマンドライン引数があるかどうかで処理を分岐
  domains_to_check = if ARGV.empty?
                       # 引数がない場合は、対話式で入力を受け付ける
                       print "チェックしたいサイトのドメインを入力してください(例: example.com): "
                       [gets.chomp]
                     else
                       # 引数がある場合は、それらを全てチェック対象とする
                       ARGV
                     end

  # 各ドメインをチェック
  domains_to_check.each do |domain|
    # 対話モードで空エンターされた場合などをスキップ
    next if domain.nil? || domain.strip.empty?
    
    # http/httpsから始まらない場合はhttpsを付与
    initial_url = domain.start_with?('http') ? domain : "https://#{domain}"
    
    puts "Checking: #{initial_url} ..."
    final_url = get_effective_url(initial_url)

    if final_url.nil?
      puts "#{COLOR_RED}サイト #{initial_url} にアクセスできませんでした。#{COLOR_RESET}"
      next
    end
    
    expiration_date, days_remaining = get_certificate_expiry_date(final_url)
    print_result(final_url, expiration_date, days_remaining)
  end
end

# メイン処理を呼び出し
main

スクリプト実行例

ruby ssl_checker.rb

※Rubyで動かすためスクリプトに実行権は持たせる必要はありません

  1. 対話式でドメインを入力する
  2. 証明書の有効期限と残り期日を表示する
  3. ruby script.rb www.hoge.comなど、ドメインを引数にしても同様の効果が得られる
  4. 更新が近づくと
    • 30日以内:黄色
    • 15日以内:赤

とアラートも出してくれるようにしています。

  • 対話式
ruby ssl_checker.rb 
チェックしたいサイトのドメインを入力してください(例: example.com): www.yahoo.co.jp
Checking: https://www.yahoo.co.jp ...
サイト https://www.yahoo.co.jp/ の有効期限は 2026/05/14 です。残り 310 日です。
  • 引数にした場合
ruby ssl_checker.rb yahoo.co.jp www.msn.com
Checking: https://yahoo.co.jp ...
サイト https://www.yahoo.co.jp:443/ の有効期限は 2026/05/14 です。残り 310 日です。
Checking: https://www.msn.com ...
サイト https://www.msn.com/ の有効期限は 2025/10/05 です。残り 89 日です。

スクリプト使用例

筆者は/etc/update-motd配下に

ruby /path/to/script/ruby/ssl_checker.rb ryza.jp

と記入することで、ログインのたびに

Checking: https://atelier.reisalin.com ...
サイト https://atelier.reisalin.com/ の有効期限は 2025/08/15 です。残り 37 日です。

と次の更新のタイミングを読みやすくしています。

『ライザのアトリエ2』超高難易度DLC「陽炎の島」仕様の術士系最強防具「ホワイトオーダー」調合。

クリア後4年目にして、更に検証の余地がある防具を見つけました。

調合例:ホワイトオーダー

  • ステータス
項目数値
品質999
HP469
攻撃力499
防御力1131
素早さ923
  • 効果
効果名説明
暴走する魔術・超HPを消費する代わりに、アイテム使用時のCCを1減少させる。攻撃によってダメージを与えた時、CCの量に比例してHPを回復する
魔法潰しの布魔法ダメージを受けた時、一定確率で受けるダメージを大きく軽減する。魔法ダメージを受ける時、回避率が上昇する
攻撃力+20攻撃力が20増加する
会心率+7%クリティカルの発生確率が7%増加する
  • ステータス
特性名説明
スーパーボディ 99【特性レベルで強化:最大レベル99】防御力が最大で50増加する。さらに行動するごとにHPを大きく回復する
全能力強化++ 99【特性レベルで強化:最大レベル99】全ての能力値が最大で50増加する
ハイパーボディ 99【特性レベルで強化:最大レベル99】防御力が最大で100増加する。さらに行動するごとにHPを大きく回復する

前提

  • DLC
    • 戦いの極み
    • 調合の極み
    • 超高難易度DLC「陽炎の島」

があること。

  • クリアデータであること(「陽炎の島」に行くためにはゲームクリアが必要です)
  • 後述する調合素材が作れること。
  • 調合レベルとリビルドレベルが共に最大であること(というよりもコアドライブ以外のスキルツリーが全て埋まっていること)
  • ジェムを無限に稼ぐ方法を確立していること

調合前準備:必要な素材

レシピ変化を繰り返すため、素材は相当です。

これらに「リビルド用の素材」は含んでいません。

必要な採取素材

材料名属性・条件など個数
(糸素材)任意1
(糸素材)風属性1
(糸素材)属性値6以上、影響拡大+1、氷・雷属性1
「束縛する鋼糸」属性値2以上2
「束縛する鋼糸」属性値3以上1
「モフモフウール」属性値2以上1
「動物の毛皮」属性値2以上1
「動物の毛皮」属性値4以上1
「サビついた剣」属性値2以上1
(花)属性値6以上、氷・雷属性、影響拡大+11
(花)属性値6以上、火・風属性、影響拡大+11
「夢遊の光粉」属性値5以上1
「夢遊の光粉」属性値3以上1

※ 影響拡大を持つ素材は、畑で採取可能です。

必要な調合素材

材料名属性・条件など個数
『賢者の石』または『古の賢者の石』影響拡大+2以上、火属性1
『賢者の石』(指定なし)1
『古の賢者の石』属性:火・氷・風、属性値8以上、影響拡大+4、(ぷにぷに)付与1
『古の賢者の石』属性:火・雷・風、影響拡大+41
『クロース』属性値3以上1
『ビーストエア』属性値3以上1
『ぷにレザー』属性値2以上1
『フェザードラフト』属性値6以上、影響拡大+2、(動物素材)付与1
『クリミネア』属性値3以上1
『クリミネア』属性値4以上1
『グランツオルゲン』属性値5以上1
『スタルチウム』属性値3以上2
『エルドロコート』属性値6以上1
『ドレッドレザー』属性値4以上1
『ヴァイザークロース』属性値4以上1
『ヴァイザークロース』投入できるだけ筆者例: 44個

必要なエッセンス

  • 極天のエッセンス
  • 風のエッセンス
  • 雷のエッセンス

調合手順

※あまりにも長くなり、スクリーンショットもそれに伴って多くなりました。そのため、文章にて記します。

ベースレシピ:クロース

  1. 調合メニューからクロースを選びます。
  2. 効果1に「(糸素材)」を任意で入れます。
  3. エッセンス【極天のエッセンス】を入れます。
  4. 下の特性枠のマテリアル環に、風属性の「(糸素材)」を入れます。
  5. 右下の中和剤に、影響拡大+2以上で火属性を持った『賢者の石(または『古の賢者の石』)』を入れます。
  6. 属性値2以上の「束縛する鋼糸」を入れると、レシピが変化して「旅人のコート」になります。

レシピ変化1:旅人のコート

  1. 品質のマテリアル環に、属性値2以上の「束縛する鋼糸」を入れます。
  2. 品質のマテリアル環に、属性値3以上の「束縛する鋼糸」を入れます。
  3. 属性値2以上の「モフモフウール」を入れると、レシピが変化して「ノーブルチュニック」になります。

レシピ変化2:ノーブルチュニック

  1. 効果1に、属性値3以上の『クロース』を入れます。
  2. 特性枠に、以下の条件を満たす「(糸素材)」を入れます。
  • 属性値6以上
  • 影響拡大+1
  • 氷属性かつ雷属性
  1. 属性値3以上の『ビーストエア』を入れると、レシピが変化して「レザープロテクター」になります。

レシピ変化3:レザープロテクター

  1. 品質のマテリアル環に、属性値2以上の「動物の毛皮」を入れます。
  2. 攻撃力のマテリアル環に、属性値4以上の「動物の毛皮」を入れます。
  3. 属性値2以上の「サビついた剣」を入れると、レシピが変化して「ソルジャーキュイラス」になります。

レシピ変化4:ソルジャーキュイラス

  1. 下にある特性枠のマテリアル環に、以下の条件を満たす『フェザードラフト』を入れます。
  • 属性値6以上
  • 影響拡大+2
  • (動物素材)付与
  1. 属性値3以上の『クリミネア』を入れると、レシピが変化して「レディアントプレート」になります。

レシピ変化5:レディアントプレート

  1. 効果2のマテリアル環に、属性値5以上の『グランツオルゲン』を入れます。
  2. 効果2(左)のマテリアル環に、属性値4以上の『クリミネア』を入れます。
  3. 属性値2以上の「ぷにレザー」を入れると、レシピが変化して「ミミクリーローブ」になります。

レシピ変化6:ミミクリーローブ

  1. 効果1のマテリアル環に、属性値3以上の『スタルチウム』を 2個 入れます。
  2. 効果3のマテリアル環に、以下の条件を満たす『古の賢者の石』を入れます。
  • 属性:火・氷・風
  • 属性値8以上
  • 影響拡大+4
  • (ぷにぷに)付与
  1. 属性値3以上の『夢遊の光粉』を入れると、レシピが変化して「妖精の羽衣」になります。

レシピ変化7:妖精の羽衣

  1. 特性枠のマテリアル環に、以下の条件を満たす「(花)」を入れます。
  • 属性値6以上
  • 属性:氷・雷
  • 影響拡大+1
  1. 防御力のマテリアル環に、属性値6以上の『エルドロコート』を入れます。
  2. 特性枠のマテリアル環に、以下の条件を満たす「(花)」を入れます。
  • 属性値6以上
  • 属性:火・風
  • 影響拡大+1
  1. HPのマテリアル環に、属性値5以上の「夢遊の光粉」を入れます。
  2. 属性値4以上の『ドレッドレザー』を入れると、レシピが変化して「ベルベットレイヤード」になります。

レシピ変化8:ベルベットレイヤード

  1. エリキシルのマテリアル環に、以下の条件を満たす『古の賢者の石』を入れます。
  • 属性:火・雷・風
  • 影響拡大+4
  1. 効果3のマテリアル環に、属性値4以上の『ヴァイザークロース』を入れます。
  2. 『賢者の石』を入れると、レシピが変化して「ホワイトオーダー」になります。

レシピ変化9:ホワイトオーダー

  1. 下の方にある効果1のマテリアル環に【雷のエッセンス】を入れ、効果「暴走する魔術・超」が発現できるようにしておきます。
  2. 右の方にある効果2のマテリアル環に【風のエッセンス】を入れ、効果「魔法潰しの布」が発現できるようにしておきます。
  3. 効果4のマテリアル環に、投入できるだけの『ヴァイザークロース』を入れます(筆者の例では 44個 です)。 ソース

ベースレシピ:クロース

  1. 調合メニューからクロースを選びます。
  2. 効果1に「(糸素材)」を任意で入れます。
  3. エッセンス【極天のエッセンス】を入れます。
  4. 下の特性枠のマテリアル環に、風属性の「(糸素材)」を入れます。
  5. 右下の中和剤に、影響拡大+2以上で火属性を持った『賢者の石(または『古の賢者の石』)』を入れます。
  6. 属性値2以上の「束縛する鋼糸」を入れると、レシピが変化して「旅人のコート」になります。

レシピ変化1:旅人のコート

  1. 品質のマテリアル環に、属性値2以上の「束縛する鋼糸」を入れます。
  2. 品質のマテリアル環に、属性値3以上の「束縛する鋼糸」を入れます。
  3. 属性値2以上の「モフモフウール」を入れると、レシピが変化して「ノーブルチュニック」になります。

レシピ変化2:ノーブルチュニック

  1. 効果1に、属性値3以上の『クロース』を入れます。
  2. 特性枠に、以下の条件を満たす「(糸素材)」を入れます。
    • 属性値6以上
    • 影響拡大+1
    • 氷属性かつ雷属性
  3. 属性値3以上の『ビーストエア』を入れると、レシピが変化して「レザープロテクター」になります。

レシピ変化3:レザープロテクター

  1. 品質のマテリアル環に、属性値2以上の「動物の毛皮」を入れます。
  2. 攻撃力のマテリアル環に、属性値4以上の「動物の毛皮」を入れます。
  3. 属性値2以上の「サビついた剣」を入れると、レシピが変化して「ソルジャーキュイラス」になります。

レシピ変化4:ソルジャーキュイラス

  1. 下にある特性枠のマテリアル環に、以下の条件を満たす『フェザードラフト』を入れます。
    • 属性値6以上
    • 影響拡大+2
    • (動物素材)付与
  2. 属性値3以上の『クリミネア』を入れると、レシピが変化して「レディアントプレート」になります。

レシピ変化5:レディアントプレート

  1. 効果2のマテリアル環に、属性値5以上の『グランツオルゲン』を入れます。
  2. 効果2(左)のマテリアル環に、属性値4以上の『クリミネア』を入れます。
  3. 属性値2以上の「ぷにレザー」を入れると、レシピが変化して「ミミクリーローブ」になります。

レシピ変化6:ミミクリーローブ

  1. 効果1のマテリアル環に、属性値3以上の『スタルチウム』を 2個 入れます。
  2. 効果3のマテリアル環に、以下の条件を満たす『古の賢者の石』を入れます。
    • 属性:火・氷・風
    • 属性値8以上
    • 影響拡大+4
    • (ぷにぷに)付与
  3. 属性値3以上の『夢遊の光粉』を入れると、レシピが変化して「妖精の羽衣」になります。

レシピ変化7:妖精の羽衣

  1. 特性枠のマテリアル環に、以下の条件を満たす「(花)」を入れます。
    • 属性値6以上
    • 属性:氷・雷
    • 影響拡大+1
  2. 防御力のマテリアル環に、属性値6以上の『エルドロコート』を入れます。
  3. 特性枠のマテリアル環に、以下の条件を満たす「(花)」を入れます。
    • 属性値6以上
    • 属性:火・風
    • 影響拡大+1
  4. HPのマテリアル環に、属性値5以上の「夢遊の光粉」を入れます。
  5. 属性値4以上の『ドレッドレザー』を入れると、レシピが変化して「ベルベットレイヤード」になります。

レシピ変化8:ベルベットレイヤード

  1. エリキシルのマテリアル環に、以下の条件を満たす『古の賢者の石』を入れます。
    • 属性:火・雷・風
    • 影響拡大+4
  2. 効果3のマテリアル環に、属性値4以上の『ヴァイザークロース』を入れます。
  3. 『賢者の石』を入れると、レシピが変化して「ホワイトオーダー」になります。

レシピ変化9:ホワイトオーダー

  1. 下の方にある効果1のマテリアル環に【雷のエッセンス】を入れ、効果「暴走する魔術・超」が発現できるようにしておきます。
  2. 右の方にある効果2のマテリアル環に【風のエッセンス】を入れ、効果「魔法潰しの布」が発現できるようにしておきます。
  3. 効果4のマテリアル環に、投入できるだけの『ヴァイザークロース』を入れます(筆者の例では 44個 です)。

ここで調合完了。特性を決めておきます。

アイテムリビルド・装備強化

リビルド

リビルドは

  • 賢者の石(属性をエッセンスで変化させたもの)を複数
  • 古の賢者の石(属性をエッセンスで変化させたもの)を複数

で対応し、全ての効果テーブルを発現させます。

装備品強化

武器と異なり防具・装飾品は効果テーブルが埋まっているため、適当にステータスが上がる素材で対応します。(筆者例では『精霊の小瓶』×3)

まとめ

このレシピを確立して2年以上経ち、更に検証の余地がある装備品を見つけられるとは思いませんでした。

『ライザのアトリエ2』超高難易度DLC「陽炎の島」仕様のクラウディア最強武器「ハーモニクスノーツ」調合。

こちらに続けて、『ライザのアトリエ2』

  • 『陽炎の島』
  • 『戦いの極み』
  • 『調合の極み』

に対応したクラウディア最強武器を調合してみます。

調合データ例

  • ステータス
項目数値
品質999
HP333
攻撃力807
防御力357
素早さ786
  • 効果
効果名説明備考
光矢の五線譜・超行動時、APを1回復する。攻撃時、確率で追加魔法ダメージを与えるエッセンスにより効果テーブルを更に上げて発
コアバースト攻撃時、追加で魔法ダメージを与える。所持しているコアチャージの量が多いほど、与えるダメージが増加するアポカリプスで付与
地脈の恵み・超行動するごとに確率でAPを回復するネクタルで付与
ハイスピード攻撃時、追加で魔法ダメージを与える。所持しているAPの量に応じてダメージが増加するエネルジアニカで付与
  • 特性
性名説明
攻速強化++ 99【特性レベルで強化:最大レベル99】攻撃力と素早さが最大で100増加する
全能力強化++ 99【特性レベルで強化:最大レベル99】全ての能力値が最大で50増加する
スペシャルアーツ 99【特性レベルで強化:最大レベル99】スキルの威力が最大100%増加する。さらに通常攻撃で得られるAPが一定確率で増加する

※ライザと同じものです。

この効果とした目的

スキルチェーン

これが一番大きいです。魔法ダメージが効かない一部の敵やボスと言った場合、コアドライブで仕留めきることができません。

そのためのプランとして「スキルの継続戦闘」の役割をクラウディアに持たせています。

AP獲得

ライザがコアアイテムを連打すると、どうしてもWTが遅れてしまいます。そのためクイックアクションは必須。

そのため、APを獲得させやすくします。

前準備

ここで用いるインゴット系は「効果1「と「効果2」のパラメータ上昇を更に挙げています。

武器に付与するためのコアアイテムが結構骨です。

アポカリプスは効果1の「崩壊の真実」を発現。

エネルジアニカは効果1の「心安らぐ旋律」を発現(エッセンスで効果テーブルを上げます)

AP獲得力を大きく上げるため「ネクタル」の効果も最大まで上げておきます。

その他

  • 「気体」と「影響拡大+3」を持たせたクリスタルエレメント
  • 「影響拡大+4」まで持たせた液化溶剤
  • 「影響拡大+3」を発現させたアルクァンシェル
  • 「影響拡大+1」のサマステン(ショップレベルを上げて購入)
  • 農園で獲得した「影響拡大+1」を持つ花

そしてもちろん、「使いたい特性を持たせたグランツオルゲン」もふんだんに使います。

調合

クルツボーゲンから調合を開始します。

インゴットを投入します。

「極天のエッセンス」を入れます。これによって、調合時に入れられるグランツオルゲンの数を増やし、パラメータ上昇を上げます

この枠にもグランツオルゲンを入れます。

花の枠に

  • 影響拡大+1
  • 風属性
  • 属性値6

の花を入れます。

これで、「素早さ+10」が発現します。

スタルチウムを入れてアーミンズテイルにレシピ変化します。

レシピ変化を繰り返します。

アーミンズテイルでは特性枠の所に

  • 気体付与
  • 影響拡大+3

のクリスタルエレメントを入れます。他のパラメータ上昇のマテリアル環を活性化するためです。

クリミネアを入れてウィンドシューターに変化。

ウィンドシューターでは

  • 影響拡大+4
  • 属性値6

の液化溶剤を入れることで

一気にレシピ変化のマテリアル環まで進みます。ゴルドテリオンを入れてラピスフリューゲルに変化。

ラピスフリューゲルのこの枠に影響拡大+のサマステン

もう1つ同じサマステンを入れます。

グランツオルゲンを入れてアストルムノクスに変化します。

アストルムノクスに変化後、グランツオルゲンを入れ、

右側の気体のマテリアル環に気体を付与したクリスタルエレメントを入れます。

そしてアルクァンシェルを入れてお目当てのハーモニクスノーツに変化します。

ハーモニクスノーツのインゴットを入れる枠にグランツオルゲンを入れます。

この手順で行けば、31個は入れられます。

特性を選んで調合を済ませます。ここではあくまでも

「グランツオルゲンを大量に入れることによるステータス上昇」が目的です。

リビルド

影響拡大を持つ素材などで一気にマテリアル環を埋めていきます。

  • アルクァンシェル
  • クリスタルエレメント
  • 賢者の石

などは役に立つでしょう。

武器強化

デニスの工房で強化です。

前準備で用意した

  • アポカリプス
  • エネルジアニカ
  • ネクタル

で強化完了。

Windows用ノートPC購入。(Thinkpad X 13 2020年モデル)

昨年購入していたLet's note。Windowsはどうせ使わないからとLinuxを入れる運用にしていましたが

  • 昨今のデスクトップLinuxの要求リソースの高さにより8GBでは足りない
  • 何よりもATOKが使えない

2点は看過できず。かといって、Let's noteをWindowsに戻そうにも、こちらのPCはWindows11に対応していません。

なので、思い切った方向に舵を切りました。

Lenovo Thinpad X13 Gen 1。2020年モデルの中古を購入です。

  • メモリ16GB
  • Windows11が動くCorei7-1050U 1.8GHz 2.30 Ghz
  • 500GB SSD

と、必要十分なスペックを有しています。

ACアダプターが欠損しているからということで、互換性のあるアダプターをつけてくれたのも好感が持てました。

そんなこんなでセットアップ。今回はLinuxを使わないと最初から決めていたのでアカウントの設定とアップデートぐらいで終了。

今のところ、目立った傷もなく使用感も良好。

カスタマイズなどはまた改めてご報告します。

レポジトリを追加してのpassengerアップグレード。

概要

Redmineとの連携でmod_passangerを用いています。これのアップグレードメモです。

環境

  • Ubuntu 24.04
  • Apache 2.4
  • Ruby 3.2
  • mod_passenger 6.0.17 (アップグレード前)→6.0.27(アップグレード後)

バージョンアップの推奨メッセージ

var/log/apache2/error.logを確認したところ、

 [ E 2025-07-04 15:08:31.6489 116405/T5 age/Cor/SecurityUpdateChecker.h:521 ]: A security update is available for your version (6.0.17) of Phusion Passenger(R). We strongly recommend upgrading to version 6.0.27. 

と出たのでバージョンアップを行います。

  • バージョンアップ前確認
passenger-config --version

Phusion Passenger(R) 6.0.17

を確認。

対処1:aptitudeによるアップグレード → 更新されず

※筆者の好みでaptitudeを用いています。好みに応じてaptに変更してください。

sudo aptitude install passenger

を行いましたが、インストール・削除・更新されるパッケージがありません。と出たので、レポジトリの追加に伴うアップグレードを行いました。

対処2:レポジトリ追加後にaptitudeによるアップグレード → 更新OK

レポジトリ追加

  • 必要なツールのインストール

※導入済みであれば不要です。

sudo aptitude install dirmngr gnupg apt-transport-https ca-certificates curl
  • GPG鍵追加
curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null

これは、これから追加するリポジトリがPhusion社による本物であることを保証するための電子署名キーです。

  • Phusionのリポジトリ追加
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger $(lsb_release -sc) main > /etc/apt/sources.list.d/passenger.list'

改めてaptitudeによるアップグレード

  • パッケージ更新
sudo aptitude update
  • mod_passanger更新
sudo aptitude install passenger

一式を

今度はアップグレードされました。

設定反映

  • Webサービス再起動

Ubuntu24.04はneedrestartにより、サービス再起動が必要なパッケージ更新が走った後は再起動してくれますが、念のため

sudo systemctl restart apache2.service

を行います。

バージョンアップ確認

passenger-config --version

Phusion Passenger(R) 6.0.27

と、アップグレードされていました。

Ubuntu24.04で、ワイルドカードSSL証明書をLet’s Encrypt(certbot)で発行する手順メモ。

筆者にとってこの作業は当たり前すぎていたため、メモを残すのを失念していました。

概要

Webサイトを公開する際に必須と言っていいSSL証明書を、Let's Encrypt(certbot)を用いて無料で発行する手順です。

今回用意するのはワイルドカード証明書です。

「*.example.com」という証明書を取得することで、

  • aaa.example.com
  • bbb.example.com
  • supercalifragilisticexpialidocious.example.com

など、サブドメインすべてに有効な証明書を1回で発行できます。

実施環境

  • Ubuntu 24.04

前提条件

  • ワイルドカー証明書を発行したいドメインに対してDNSの操作が行えること
    • できない場合は本手順そのものを無視してください。
  • 備考として、別サーバでも配布しやすいように、オリジナルの/etc/letsencrypt/live/ではなく、任意の作業ディレクトリに証明書一式を保存する運用を行っています。
  • 別サーバへの配布の際は注意してください。

さっくりとした手順

  1. certbotをインストールします。
  2. certbotでワイルドカード証明書を発行します。
  3. 証明書を発行します。
  4. 所定の位置に格納します。

certbotインストール

※すでにcertbotがインストール済の場合は、この手順はスキップして構いません。

  • snapによるインストール
sudo snap install --classic certbot
  • コマンド化
sudo ln -s /snap/bin/certbot /usr/bin/certbot
  • コマンド確認
which certbot

/usr/bin/certbotを確認します。

root昇格

性質上、rootで実行します。操作は慎重に行ってください。

sudo su -

作業ディレクトリ作成

  • ディレクトリ作成
mkdir /hoge/example.com_ssl$(date +%Y%m)

任意のディレクトリを指定します。$(date +%Y%m)オプションをつけているのは、Let's Encryptの有効期限が90日間と短いため、定期的に更新するためです。

  • ディレクトリ移動
cd /hoge/example.com_ssl$(date +%Y%m) && pwd

指定したディレクトリにいることを確認します。

ワイルドカード証明書の手動発行

※ ドメイン名やメールアドレスの打ち間違いは特に注意してください。このコマンドをコピー&ペーストし、自分のドメインやメールアドレスで間違いないように確認後に発行してください。

certbot certonly --manual \
    --preferred-challenges dns \
    --server https://acme-v02.api.letsencrypt.org/directory \
    -m あなたの有効なメールアドレス@example.com \
    -d "*.example.com" \
    -d "example.com"
  • --manualモードは非自動化のため、証明書更新のたびに手動でTXTレコード登録が必要です。自動化したい場合はDNS API対応のプラグインを検討してください(例:certbot-dns-cloudflare)。
  • certonly は証明書の取得だけを行い、Webサーバ設定などには手を加えないモードです。

以下のように実施します。

  1. コマンド発行後、TXTレコードの登録指示があります。
  2. 管理しているDNSサーバにて、指示があったTXTレコードを登録します。
  3. 以下のコマンドで結果が返ってくるまでしばらく待ちます。
nslookup -type=TXT _acme-challenge.example.com

→ 結果が返ってきたらEnter。証明書が作成されます。

証明書一式を作業ディレクトリにコピー

  • 証明書を作業ディレクトリにコピー
cp -pi /etc/letsencrypt/live/example.com/fullchain.pem ./example.com.crt.$(date +%Y%m)

※root権限のためsudoを用いないことに注意

  • 秘密鍵を作業ディレクトリにコピー
cp -pi /etc/letsencrypt/live/example.com/privkey.pem ./example.com.key.$(date +%Y%m)

(通例、証明書はroot権限でしか読めないように制限されています。読み取り時は注意してください)

証明書の整合性を確認

  • 90日の有効期限であることを確認します。

以下、自分が発行したドメインに基づく証明書や秘密鍵に読み替えます。

openssl x509 -noout -dates -subject -in example.com.crt.$(date +%Y%m)
notBefore=May 17 04:35:55 2025 GMT
notAfter=Aug 15 04:35:54 2025 GMT

のように90日間であることを確認します。

  • 確認1. 証明書から公開鍵データを確認
openssl x509 -pubkey -in example.com.crt.$(date +%Y%m) -noout | openssl md5
  • 確認2. 秘密鍵から公開鍵を取得
openssl pkey -pubout -in example.com.key.$(date +%Y%m) | openssl md5

→ 確認1/確認2で出てきた公開鍵のハッシュ値が一致していればOKです。

  • 証明書のチェーンを確認
openssl crl2pkcs7 -nocrl -certfile example.com.crt.$(date +%Y%m) | openssl pkcs7 -print_certs -outform PEM | awk 'BEGIN {c=0;} /BEGIN CERTIFICATE/ {c++} { print > "cert" c ".pem"}' && openssl verify -CAfile cert2.pem cert1.pem
openssl verify -CAfile cert2.pem cert1.pem
cert1.pem: OK

となることを確認します。

確認後、

exit

でrootから抜けます。

証明書の配置

※Let's Encryptは3ヶ月(90日)しか有効期限がありません。

そこで、証明書更新の際にApacheの設定ファイルを修正することなく行えるように、証明書/秘密鍵ファイルにシンボリックリンクを張り、ファイル名.202507等とすることで「最後に発行したのはいつか」を確認します。

ディレクトリを作成します。

sudo mkdir /etc/certs

証明書を格納するディレクトリです

sudo mkdir /etc/private

秘密鍵を格納するディレクトリです

ディレクトリに証明書と秘密鍵を格納します。

  • SCPやSFTPでアップロードして対象ディレクトリに配置する
  • Let's Encryptなどで作成したファイルをそれぞれ対象ディレクトリにコピー/移動する

など、適当な方法を用います。(割と効率的なのがcatでファイル内容を開き、それを別サーバに貼り付ける方法です)

秘密鍵格納後、

sudo chmod 600 /etc/private/hoge.sample.com.key.202507

として、アクセス権を厳密にします。

上記、取得した*.example.comの証明書と秘密鍵を

  • /etc/certs (証明書)
  • /etc/private (秘密鍵)

に格納したとして手順を進めます。

証明書のシンボリックファイルを作成します。

cd /etc/certs && pwd

/etc/certsにいることを確認

sudo ln -sf hoge.sample.com.crt.202507 hoge.sample.com.crt
ls -l hoge.sample.com.crt

リンクの向き先がhoge.sample.com.crt.202507であることを確認します。

lrwxrwxrwx 1 root root     31  7月  2 14:35 hoge.sample.com.crt -> hoge.sample.com.crt.202507

秘密鍵のシンボリックファイルを作成します。

cd /etc/private && pwd

/etc/privateにいることを確認

sudo ln -sf hoge.sample.com.key.202507 hoge.sample.com.key
ls -l hoge.sample.com.key

リンクの向き先がhoge.sample.com.crt.202507であることを確認します。

後は、お使いのWebサーバに適用していきます。この方式であれば、

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

とすることで、.confファイルをいじることなく更新作業を行えます。

以下、Redmineでの設定例です。

https://atelier.ryza.jp/projects/zettel/knowledgebase/articles/20

Page 2 of 3

Powered by WordPress & Theme by Anders Norén