<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kazuban | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/author/kazuban/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Mon, 08 Jun 2026 04:35:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>kazuban | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress の「バックアップ・リストア」BASHスクリプト</title>
		<link>https://www.kazuban.com/blog/rokeylinux9-7-wordpress-backup/</link>
					<comments>https://www.kazuban.com/blog/rokeylinux9-7-wordpress-backup/#respond</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 07 Jun 2026 06:28:26 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[RockyLinux9.7]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[バックアップ]]></category>
		<category><![CDATA[リストア]]></category>
		<category><![CDATA[自宅サーバー]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12790</guid>

					<description><![CDATA[バックアップ・リストアの記事は、以前こちらでも紹介しました 新しいBASH 前回のスクリプトは、2020年に紹介したコマンド操作をネット情報を参考にスクリプト化しましたが、今回はこのスクリプトをAIに投げて、最新のBAS [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">バックアップ・リストアの記事は、以前こちらでも紹介しました </p>


<a href="https://www.kazuban.com/blog/rokeylinux9-3-wordpress-backup/" title="RockyLinux9.３で自宅サーバーを再構築V07・WordPress のバックアップとリストア" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/wordpress-backup-restore-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.３で自宅サーバーを再構築V07・WordPress のバックアップとリストア</div><div class="blogcard-snippet internal-blogcard-snippet">引越しするには、旧環境のデータをバックアップし、新環境へリストアします。WordPress のバックアップとリストアの方法を説明し、自動バックアップするスクリプトを作成します。バックアップ・リストアができると、引越しだけでなく、トラブル時にも以前の状態まで戻せます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.08</div></div></div></div></a>


<h2 class="wp-block-heading">新しいBASH</h2>



<p class="wp-block-paragraph">前回のスクリプトは、<a href="https://www.kazuban.com/blog/mirror-site-v2/#toc9">2020年に紹介した</a>コマンド操作をネット情報を参考にスクリプト化しましたが、今回はこのスクリプトをAIに投げて、最新のBASH構文への変換を教えてもらいながら作成しました。<br>投稿のスクリプト類はちょっと長くなりましたが、全てコピペできるようにしました。<br>また、開発途中ではBASHで一行づつのデバッグもやってみました。</p>



<h2 class="wp-block-heading">デバッグ</h2>



<p class="wp-block-paragraph">編集はVSCodeを利用したので、デバッグプラグインもインストールしてみましたが、あまり思ったように動いてくれませんでした。<br>AIに聞いてみると、BASH自体にも、構文チェックやステップデバッグができる機能があるようです</p>



<h3 class="wp-block-heading">shellcheck</h3>



<p class="wp-block-paragraph"><span class="inline-button-white-black"><code>shellcheck [スクリプト名.sh]</code></span>のようにコマンド実行するだけで、スクリプトのバグや構文エラーを簡単にチェックできます。<br>パッケージ名は、キャメルケース的書き方「<strong>S</strong>hell<strong>C</strong>heck」になるので注意が必要です</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-db8e023e6e1cfc0bb1ea28937edb3636"><code>sudo dnf install ShellCheck</code></pre>



<p class="wp-block-paragraph">もしパッケージが見つからない場合には、EPELリポジトリが有効になっていない可能性があるのでEPELを有効化した上で再度インストール</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-fdb162245c5ae88b8bde6aff6981db8a"><code>sudo dnf install epel-release
sudo dnf install ShellCheck</code></pre>



<p class="wp-block-paragraph">shellcheck は、スクリプトのバグや構文エラーを検出してエラーコードと共に表示してくれます。<br>標準では致命的でない場合でも警告を出してくるのでちょっとうるさく感じる事もありますが、<br>エラーコードをAIに聞くことでより安全なコードの書き方の学習にもなります</p>



<h3 class="wp-block-heading">set コマンド</h3>



<p class="wp-block-paragraph">Bashの <code>set</code> コマンドは、シェルの動作やオプションを設定・変更するためのコマンドです。<br>主にスクリプトの安全運転モードやデバッグのために、シェルの冒頭でオプションと組み合わせて使用されます<br>・set -euo pipefail<br>実務でよく使われる定番のオプション<br>これにより、スクリプト実行時のバグや予期せぬトラブルを大幅に減らせます<br><br>・<strong><code>set -x</code></strong>: デバッグ開始<br>実行されるコマンドや変数の展開結果をすべて画面（標準エラー出力）に表示<br><br>・<strong><code>set +x</code></strong>: デバッグ開始<br>実行トレース出力を停止<br><br>・trap &#8216;read -p &#8220;STEP> &#8221; &lt; /dev/tty&#8217; DEBUG<br>実行中、すべてのコマンドを実行する直前で指定文字（STEP>）プロンプトで一時停止<br><br>・export PS4=&#8217;+ ${LINENO}: &#8216;<br>デバッグモード（<code>set -x</code>）で実行されるコマンドを表示する際、そのコマンドのスクリプトでの行番号を出力に含める設定</p>



<p class="wp-block-paragraph">これらコードをスクリプト上部で実行しておくことで、シェルスクリプトのバグの原因特定が早くなります。<br>サンプルコードを書いてみました。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-575fb2a5323ae743d77eedbdc438c478"><code>#!/bin/bash

set -euo pipefail
# --- debug mode: DEBUGGING=1 で有効 ---
DEBUGGING=1

if &#91;&#91; $DEBUGGING == "1" ]]; then
  echo "Debug mode is 'true' !! "
  export PS4='+ ${LINENO}: '
  set -x
  trap 'read -p "STEP> " &lt; /dev/tty' DEBUG
else
  echo "Debug mode is 'false' !! "
fi

# テスト用コード
echo "最初の処理"
x=10
y=20
result=$((x + y))
echo "結果は $result"</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">このコードを実行すると、デバッグの状況が体験できます</p>



<p class="wp-block-paragraph">次に今回作成したWordPressのバックアップ＆リストアのスクリプトを紹介します<br>デバッグコードは、Header.sh に別スクリプトにして、呼び出す形式にしました。</p>



<h2 class="wp-block-heading">スクリプト構成</h2>



<p class="wp-block-paragraph">WordPressのバックアップは、大きく分けて「ファイル（サーバー内のデータ）」と「データベース（MySQL/MariaDB）」の2つが必要になります。<br>前回スクリプトは、昔の経験とネット検索を参考に、自分で作成しましたが<br>今回は、BASHもかなり進化しているみたいなので、AIのサポートで最新の構文で書き直しました。<br>バックアップファイルやスクリプトの構成は<br>・「ユーザーホーム」内に、「Backup」ディレクトリを作成<br>・「Backup」内に、「WordPress」と「bin」ディレクトリを作成<br>・「WordPress」内にWordPress パッケージをインストールしたディレクトリ名（筆者環境では「blog」）を作成します<br>・「blog」内に、データベースとサーバー内データのバックアップを保存します<br>・「bin」内に実行スクリプトを保存します</p>



<pre class="wp-block-preformatted">.[ユーザーホームディレクトリ]<br>├── Backup #「バックアップデータを保存する」<br>│   ├── WordPress #「WordPerss関連データ」<br>│   │   └── blog #「blog内のバックアップデータ」<br>│   │       ├── 20260530-MariaDB.bak       # データベースバックアップ<br>│   │       ├── 20260530-Wp-content.tar.gz # WordPressコンテンツ<br>│   │       ├── mariadb_backup.log<br>│   │       └── wp_backup.log<br>│   ├── bin #「スクリプト」<br>│   │   ├── Header.sh                #「デバッグ用のスクリプト」<br>│   │   ├── MariaDB_Backup.sh        #「データベースのバックアップ」<br>│   │   ├── MariaDB_Restore.sh       #「データベースのリストア」<br>│   │   ├── Tidyup_backfile.sh       #「バックアップデータの整理」<br>│   │   ├── WordPress_Config_Data.sh #「バックアップ環境の設定」<br>│   │   ├── Wp-Backup.sh             #「バックアップ用メインスクリプト」<br>│   │   ├── Wp-Content_Backup.sh     #「WordPressデータのバックアップ」<br>│   │   ├── Wp-Content_Restore.sh    #「WordPressデータのリストア」<br>│   │   └── Wp-Restore.sh            #「リストア用メインスクリプト」</pre>



<h3 class="wp-block-heading">WordPress_Config_Data.sh : 変数設定</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-7499046ee69558135b4281b890568874"><code>#!/bin/bash
#  WoredPressバックアップ設定ファイル
#    WordPress_Config_Data.sh    2026/05 by Kazuban
#------------------------------------
export USER="kazuban"
export USER_DIR="/home/${USER}"
export SUB_DIR="blog"
export DOCUMEN_ROOT="/home/www/html"
#----- MariaDB ----------------------
export MYSQL_ROOT_PASSWD="hogehoge_passwd"
export DATABASE="WpDb"
export MYSQL_USER="WpAdmin"
export MYSQL_USER_PASSWD="WpPasswd"
#----- WordPress --------------------
export WP_CONTENT_DIR="wp-content"
export WP_CONTENT_FILENAME="Wp-content"
export WP_CONTENT_PATH="/home/www/html/${SUB_DIR}/${WP_CONTENT_DIR}"
export WP_CONTENT_OWNER="apache:apache"</code></pre>



<h3 class="wp-block-heading">Wp-Backup.sh : データベース＆WordPressコンテンツのバックアップ</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3e684ce3afa6a29508f003665ce57d7a"><code>#!/bin/bash
#  WoredPress のバックアップ
#    データベース(Mysql)とサーバーデータ(wp-content)
#  Wp-Backup.sh    2026/05 by Kazuban
#------------------------------------
#--- debug mode, set "DEBUG=1". -----
export DEBUG=
#------------------------------------
export CALLER_SCRIPT="$0"
#export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#shellscriptで警告でたので、AIに聞くとこの書き方が安全らしい
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE&#91;0]}")")
export SCRIPT_DIR
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#---- MariaDB -----------------------
export MYSQL_BACKUP_SCRIPT="${SCRIPT_DIR}/MariaDB_Backup.sh"
export MYSQL_LOG="${BACKUP_DIR}/mariadb_backup.log"
#---- WordPress ---------------------
#export BACKUP_SOURCE_DIR="${DOCUMEN_ROOT}/${SUB_DIR}/wp-content"
export WP_BACKUP_SCRIPT="${SCRIPT_DIR}/Wp-Content_Backup.sh"
export BACKUP_SOURCE_DIR="${DOCUMEN_ROOT}/${SUB_DIR}/${WP_CONTENT_DIR}"
export WP_LOG="${BACKUP_DIR}/wp_backup.log"
#------------------------------------
export TIDY_UP_SCRIPT="${SCRIPT_DIR}/Tidyup_backfile.sh"
export DAYS_AGO="5"
#-----　関数定義 -----------------------
user_dir=$(pwd)
echo $user_dir
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
check_backup_dir(){
  #$BACKUP_DIRが存在しない場合には作成
  mkdir -p $BACKUP_DIR 
}
cmd_mariadb()   { check_backup_dir; $MYSQL_BACKUP_SCRIPT; }
cmd_wordpress() { check_backup_dir; $WP_BACKUP_SCRIPT; }
cmd_all()       { cmd_mariadb; cmd_wordpress; }
cmd_help() {
  echo "--- WordPress Backup Script ---"
  echo "Directory: ${SCRIPT_DIR}"
  echo "Usage: $0 {db|wp|all|help}"
  echo "  db   = データベース(MariaDB)"
  echo "  wp   = Word Press (Wp-Content)"
  echo "  all  = db + wp"
  echo "  help = オプション"
}

#-----　メインプログラム　-------------
#------------------------------------
case "${1:-}" in
  db)        cmd_mariadb   ;;
  wp)        cmd_wordpress ;;
  all)       cmd_all       ;;
  help|"")   cmd_help      ;;
  *)
    echo "Unknown command: $1"
    cmd_help
    exit 1
    ;;
esac
</code></pre>



<h3 class="wp-block-heading">MariaDB_Backup.sh : データベースバックアップ（Wp-Backup.shから呼ばれる）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-64a5ce5d8d3b788c20534c9eacfd6d5f"><code>#!/bin/bash
#  WoredPress のデータベースバックアップ
#    MariaDB_Backup.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
#------------------------------------
# --- 関数定義 ---
usage() {
  echo "使用方法: ${SCRIPT_NAME:-$(basename "$0")}"
  echo "  データベース(MariaDB)をバックアップし、古いファイルを整理します。"
  exit 0
}

log() {
  local message="$1"
  echo "$(date '+%Y-%m-%d %H:%M:%S') ${message}" | tee -a "${MYSQL_LOG}"
}

failed() {
  echo "エラー: $1" &gt;&amp;2
  log "ERROR: $1"
  exit 1
}

# バックアップファイル名を生成する（同名ファイルがあれば連番を付加）
make_filename() {
  local date_str
  date_str=$(date '+%Y%m%d')
  local basename="-MariaDB.bak"
  local filename="${date_str}${basename}"
  local i=1
  while &#91;&#91; -e "${BACKUP_DIR}/${filename}" ]]; do
    filename="${date_str}-${i}${basename}"
    (( i++ )) || true
  done
  echo "${filename}"
}

# --- ヘルプ ---
if &#91;&#91; "${1:-}" == "-?" || "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# --- 事前チェック ---
&#91;&#91; -d "${BACKUP_DIR}" ]]      || failed "バックアップ先が見つかりません: ${BACKUP_DIR}"
&#91;&#91; -x "${TIDY_UP_SCRIPT}" ]]  || failed "整理スクリプトが見つかりません: ${TIDY_UP_SCRIPT}"

# --- ファイル名決定 ---
FILENAME=$(make_filename)
BACKUP_PATH="${BACKUP_DIR}/${FILENAME}"

# --- バックアップ実行 ---
log "MariaDB バックアップ開始: ${FILENAME}"
echo "MariaDB を ${FILENAME} にバックアップします。"

if mariadb-dump \
    --user="${MYSQL_USER}" \
    --password="${MYSQL_USER_PASSWD}" \
    --host=localhost \
    --all-databases \
    --single-transaction \
    --quick \
    &gt; "${BACKUP_PATH}" \
    2&gt;&gt; "${MYSQL_LOG}"; then
  log "バックアップ成功: ${FILENAME} ($(du -sh "${BACKUP_PATH}" | cut -f1))"
else
  failed "mariadb-dump コマンドが失敗しました"
fi

# --- 古いファイルの整理 ---
log "古いバックアップを整理します（${DAYS_AGO} 日以前）"
"${TIDY_UP_SCRIPT}" "${BACKUP_DIR}" "${DAYS_AGO}"

log "MariaDB バックアップ完了"
echo "MariaDB Backup Complete."</code></pre>



<h3 class="wp-block-heading">Wp-Content_Backup.sh : WordPressコンテンツバックアップ（Wp-Backup.shから呼ばれる）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-41a22cc8c585189660e126f42ec94376"><code>#!/bin/bash
#  wp-content ディレクトリのバックアップスクリプト
#    WP-content_Backup.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh wp] から呼び出してください。"
  exit 1
fi
#------------------------------------
readonly SCRIPT_NAME="$(basename "$0")"
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
#------------------------------------
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
#------------------------------------
# --- 関数定義 ---
usage() {
  echo "使用方法: ${SCRIPT_NAME}"
  echo "  wp-content ディレクトリをバックアップし、古いファイルを整理します。"
  exit 0
}

log() {
  local message="$1"
  echo "$(date '+%Y-%m-%d %H:%M:%S') ${message}" | tee -a "${WP_LOG}"
}

failed() {
  echo "エラー: $1" &gt;&amp;2
  log "ERROR: $1"
  exit 1
}

# バックアップファイル名を生成する（同名ファイルがあれば連番を付加）
make_filename() {
  local date_str
  date_str=$(date '+%Y%m%d')
  local basename="-Wp-content.tar.gz"
  local filename="${date_str}${basename}"
  local i=1
  while &#91;&#91; -e "${BACKUP_DIR}/${filename}" ]]; do
    filename="${date_str}-${i}${basename}"
    (( i++ )) || true
  done
  echo "${filename}"
}

# --- ヘルプ ---
if &#91;&#91; "${1:-}" == "-?" || "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# --- 事前チェック ---
&#91;&#91; -d "${BACKUP_DIR}" ]]   || failed "バックアップ先が見つかりません: ${BACKUP_DIR}"
&#91;&#91; -d "${BACKUP_SOURCE_DIR}" ]]  || failed "バックアップ元が見つかりません: ${BACKUP_SOURCE_DIR}"
&#91;&#91; -x "${TIDY_UP_SCRIPT}" ]]  || failed "整理スクリプトが見つかりません: ${TIDY_UP_SCRIPT}"

# --- ファイル名決定 ---
FILENAME=$(make_filename)
DEST="${BACKUP_DIR}/${FILENAME}"

# --- バックアップ実行 ---
log "WordPress バックアップ開始:"
log "${BACKUP_SOURCE_DIR} → ${DEST}"
echo "WordPress Backup Starting..."

#echo "バックアップファイル：${DEST}"
#echo "sudo chown ${USER}: ${DEST}"
#exit 1
if sudo tar \
    --create \
    --gzip \
    --file="${DEST}" \
    "${BACKUP_SOURCE_DIR}"; then # \
    #2&gt;&gt; "${WP_LOG}"; then
  echo "バックアップファイル：${DEST}"
  echo "sudo chown ${USER}: ${DEST}"
  sudo chown ${USER}: ${DEST}
  log "バックアップ成功: ${FILENAME} ($(du -sh "${DEST}" | cut -f1))"
else
  failed "tar コマンドが失敗しました"
fi

# --- 古いファイルの整理 ---
log "古いバックアップを整理します（${DAYS_AGO} 日以前）"
"${TIDY_UP_SCRIPT}" "${BACKUP_DIR}" "${DAYS_AGO}"

log "WordPress バックアップ完了"
echo "WordPress Backup Complete."</code></pre>



<h3 class="wp-block-heading">Wp-Restore.sh : データベース＆WordPressコンテンツの復元</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3d9f5d54fd4be61dae1b88182aa57068"><code>#!/bin/bash
#  WoredPress の復元
#    データベース(Mysql)とサーバーデータ(wp-content)
#  Wp-Restore.sh    2026/05 by Kazuban
#------------------------------------
#--- debug mode, set "DEBUG=1". -----
export DEBUG=
#------------------------------------
export CALLER_SCRIPT="$0"
#export SCRIPT_DIR=$(dirname "$(realpath "$0")")
SCRIPT_DIR=$(dirname "$(readlink -f "${BASH_SOURCE&#91;0]}")")
export SCRIPT_DIR
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#---- MariaDB -----------------------
export MYSQL_RESTORE_SCRIPT="${SCRIPT_DIR}/MariaDB_Restore.sh"
export PRE_BACKUP_FILE="Pre-Backup.bak"
#---- WordPress ---------------------
export WP_RESTORE_SCRIPT="${SCRIPT_DIR}/Wp-Content_Restore.sh"
#------------------------------------
export PRE_BACKUP="Y"    # リストア前に現行 wp-content を退避するか Y/N
#-----　関数定義 -----------------------
#user_dir=$(pwd)
#echo $user_dir
# スクリプト終了時に実行させたい場合はここで再定義
cleanup() {
#  echo "Wp-Backup 終了処理"
  :
}
check_backup_dir(){
  if &#91; ! -d $BACKUP_DIR ]; then
    echo "バックアップディレクトリがありません！"
    exit 0 
  fi
}
cmd_mariadb()   { check_backup_dir; $MYSQL_RESTORE_SCRIPT; }
cmd_wordpress() { check_backup_dir; $WP_RESTORE_SCRIPT; }
cmd_all()       { cmd_mariadb; cmd_wordpress; }
cmd_help() {
  echo "--- WordPress Restor Script ---"
  echo "Directory: ${SCRIPT_DIR}"
  echo "Usage: $0 {db|wp|all|help}"
  echo "  db   = データベース(MariaDB)"
  echo "  wp   = Word Press (Wp-Content)"
  echo "  all  = db + wp"
  echo "  help = オプション"
}

#-----　メインプログラム　-------------
#------------------------------------
case "${1:-}" in
  db)        cmd_mariadb   ;;
  wp)        cmd_wordpress ;;
  all)       cmd_all       ;;
  help|"")   cmd_help      ;;
  *)
    echo "Unknown command: $1"
    cmd_help
    exit 1
    ;;
esac
</code></pre>



<h3 class="wp-block-heading">MariaDB_Restore.sh データベース復元（Wp-Restore.shから呼ばれる）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-a28f7d7ec979e0758768f998ce7ea057"><code>#!/bin/bash
#  WoredPress のデータベース復元スクリプト
#    MariaDB_Restore.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
# --- debug mode: DEBUG=1 で有効 ---
#DEBUG=
PRE_BACKUP="Y"   # リストア前にバックアップを取るか Y/N
PRE_BACKUP_FILE="Pre-Backup.bak"
#------------------------------------
export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
#export BACKUP_DIR="${USER_DIR}/Backup/WordPress/${SUB_DIR}"
#------------------------------------

# ---- 関数定義 ---------------------------------------
# バックアップファイルの一覧を配列に格納する
load_backup_files() {
  BACKUP_FILES=()
  while IFS= read -r f; do
    BACKUP_FILES+=("$(basename "$f")")
  #done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*.bak" | sort)
  done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*-MariaDB.bak" | sort)
}

# 番号付きリストを表示する
list_backups() {
  echo "--------------------"
  echo "バックアップディレクトリ: ${BACKUP_DIR}"
  echo "--------------------"

  # --- # は個数を表し、&#91;@] は配列のすべての要素
  if &#91;&#91; ${#BACKUP_FILES&#91;@]} -eq 0 ]]; then
    echo "（バックアップファイルが見つかりません）"
  else
    local i=1
    for f in "${BACKUP_FILES&#91;@]}"; do
      printf "  &#91;%d] %s\n" "$i" "$f"
      (( i++ )) || true   # set -e 対策: (( )) は 0 になると終了コード 1 を返すため
    done
  fi
  echo "--------------------"
}

# 入力値（番号 or ファイル名）からファイル名を解決して返す
resolve_input() {
  local input="$1"

  # 数字のみ → 番号として解釈
  if &#91;&#91; "$input" =~ ^&#91;0-9]+$ ]]; then
    local idx=$(( input - 1 ))
    if (( idx &lt; 0 || idx >= ${#BACKUP_FILES&#91;@]} )); then
      echo "エラー: 番号 ${input} は範囲外です（1〜${#BACKUP_FILES&#91;@]}）" >&amp;2
      exit 1
    fi
    echo "${BACKUP_FILES&#91;$idx]}"
  else
    # 文字列 → ファイル名として解釈（リスト内に存在するか確認）
    local f
    for f in "${BACKUP_FILES&#91;@]}"; do
      if &#91;&#91; "$f" == "$input" ]]; then
        echo "$f"
        return
      fi
    done
    echo "エラー: ファイルが見つかりません: ${input}" >&amp;2
    exit 1
  fi
}

# 対話形式でファイルを選択させる
select_backup_file() {
  local selected=""
  while &#91;&#91; -z "$selected" ]]; do
    read -r -p "番号またはファイル名を入力してください (q で終了): " INPUT
    case "$INPUT" in
      &#91;qQ])
        kill -USR1 $$    # 親プロセス（スクリプト自身）にシグナルを送る
        exit 1;;
      "")   echo "入力してください" ;;
      *)    selected=$(resolve_input "$INPUT") ;;
    esac
  done
  echo "$selected"
}

usage() {
  echo "使い方: $(basename "$0") &#91;バックアップファイル名 or 番号]"
  echo "  引数なしで起動すると対話形式で選択できます。"
  echo "--------------------"
  list_backups
  exit 1
}

run_pre_backup() {
  local date_str
  date_str=$(date '+%Y%m%d-%H%M')
  local pre_backup_path="${BACKUP_DIR}/${date_str}-${PRE_BACKUP_FILE}"

  echo "--------------------"
  echo "-- 事前バックアップを開始します... --"

  #mysqldump \
  mariadb-dump \
    --user="${MYSQL_USER}" \
    --password="${MYSQL_USER_PASSWD}" \
    --host=localhost \
    --all-databases \
    --single-transaction \
    --quick \
    > "${pre_backup_path}"

  echo "-- 事前バックアップ完了: ${pre_backup_path} --"
  echo "--------------------"
}

run_restore() {
  local backup_file="${BACKUP_DIR}/${1}"

  echo "--------------------"
  echo "-- リストア対象: ${1} --"
  echo "-- データベース: ${DATABASE} --"
  echo "--------------------"

  read -r -p "リストアを実行しますか？ (y/n): " YN
  case "${YN}" in
    &#91;yY])
      echo "-- リストアを開始します... --"
      #mysql \
      mariadb \
        --user=root \
        --password="${MYSQL_ROOT_PASSWD}" \
        "${DATABASE}" \
        &lt; "${backup_file}"
      echo "-- リストア完了 --"
      ;;
    &#91;nN])
      kill -USR1 $$    # 親プロセス（スクリプト自身）にシグナルを送る
      exit 0
      echo "-- 中止しました --"
      exit 0
      ;;
    *)
      echo "エラー: y または n を入力してください" >&amp;2
      exit 1
      ;;
  esac
}

# ----- メイン処理 --------------------------------------------

# バックアップディレクトリの存在確認
if &#91;&#91; ! -d "${BACKUP_DIR}" ]]; then
  echo "エラー: バックアップディレクトリが存在しません: ${BACKUP_DIR}" >&amp;2
  exit 1
fi

# ファイル一覧をグローバル配列に読み込む
# declare 変数の属性やタイプ -a 「配列(Array)」
declare -a BACKUP_FILES
load_backup_files

# ヘルプ
if &#91;&#91; "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# ファイル選択：引数あり → 解決、なし → 対話形式
if &#91;&#91; $# -gt 0 ]]; then
  list_backups
  SELECTED_FILE=$(resolve_input "$1")
else
  list_backups
  SELECTED_FILE=$(select_backup_file)
fi

echo "-- 選択されたファイル: ${SELECTED_FILE} --"

# 事前バックアップ
if &#91;&#91; "${PRE_BACKUP}" =~ ^&#91;Yy]$ ]]; then
  run_pre_backup
fi

# リストア実行
run_restore "${SELECTED_FILE}"
</code></pre>



<h3 class="wp-block-heading">Wp-Content_Restore.sh: WordPressコンテンツ復元（Wp-Restore.shから呼ばれる）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-fef61f113342594a7adec7d5d6d3a478"><code>#!/bin/bash
#  wp-content ディレクトリの復元スクリプト
#    WP-Content_Restore.sh    2026/05 by Kazuban
#------------------------------------
# 直接実行ガード（呼び出し元スクリプトからのみ実行可）
if &#91;&#91; -z "${CALLER_SCRIPT:-}" ]]; then
  echo "直接実行はできません。"
  echo "&#91;WP-Backup.sh db] から呼び出してください。"
  exit 1
fi
# --- debug mode: DEBUG=1 で有効 ---
#export DEBUG=
PRE_BACKUP="Y"    # リストア前に現行 wp-content を退避するか Y/N
#------------------------------------
export SCRIPT_DIR=$(dirname "$(realpath "$0")")
#------------------------------------
source "${SCRIPT_DIR}/Header.sh"
source "${SCRIPT_DIR}/WordPress_Config_Data.sh"
#------------------------------------

# --- 関数定義 ---
# バックアップファイルの一覧を配列に格納する
load_backup_files() {
  BACKUP_FILES=()
  cmd="find ${BACKUP_DIR} -maxdepth 1 -name *-${WP_CONTENT_DIR}.tar.gz"  #${WP_CONTENT_DIR}
  while IFS= read -r f; do
    BACKUP_FILES+=("$(basename "$f")")
  done &lt; &lt;(find "${BACKUP_DIR}" -maxdepth 1 -name "*-${WP_CONTENT_FILENAME}.tar.gz" | sort)
}

# 番号付きリストを表示する
list_backups() {
  echo "--------------------"
  echo "バックアップディレクトリ: ${BACKUP_DIR}"
  echo "--------------------"

  if &#91;&#91; ${#BACKUP_FILES&#91;@]} -eq 0 ]]; then
    echo "（バックアップファイルが見つかりません）" >&amp;2
  else
    local i=1
    for f in "${BACKUP_FILES&#91;@]}"; do
      printf "  &#91;%d] %s\n" "$i" "$f"
      (( i++ )) || true   # set -e 対策: (( )) は 0 になると終了コード 1 を返すため
    done
  fi
  echo "--------------------"
}

# 入力値（番号 or ファイル名）からファイル名を解決して返す
resolve_input() {
  local input="$1"

  # 数字のみ → 番号として解釈
  if &#91;&#91; "$input" =~ ^&#91;0-9]+$ ]]; then
    local idx=$(( input - 1 ))
    if (( idx &lt; 0 || idx >= ${#BACKUP_FILES&#91;@]} )); then
      echo "エラー: 番号 ${input} は範囲外です（1〜${#BACKUP_FILES&#91;@]}）" >&amp;2
      exit 1
    fi
    echo "${BACKUP_FILES&#91;$idx]}"
  else
    # 文字列 → ファイル名として解釈（リスト内に存在するか確認）
    local f
    for f in "${BACKUP_FILES&#91;@]}"; do
      if &#91;&#91; "$f" == "$input" ]]; then
        echo "$f"
        return
      fi
    done
    echo "エラー: ファイルが見つかりません: ${input}" >&amp;2
    exit 1
  fi
}

# 対話形式でファイルを選択させる
select_backup_file() {
  local selected=""
  while &#91;&#91; -z "$selected" ]]; do
    read -r -p "番号またはファイル名を入力してください (q で終了): " INPUT
    case "$INPUT" in
      &#91;qQ])
        kill -USR1 $$
        exit 1 ;;
      "")   echo "入力してください" ;;
      *)    selected=$(resolve_input "$INPUT") ;;
    esac
  done
  echo "$selected"
}

# 使い方表示
usage() {
  echo "使い方: $(basename "$0") &#91;バックアップファイル名 or 番号]"
  echo "  引数なしで起動すると対話形式で選択できます。"
  echo "--------------------"
  list_backups
  exit 1
}

# 既存 wp-content を日付付きディレクトリ名にリネームして退避する
run_pre_backup() {
  local date_str
  date_str=$(date '+%Y%m%d-%H%M')
  local backup_path="${WP_CONTENT_PATH}-${date_str}.bak"

  echo "--------------------"
  echo "-- 事前バックアップ（退避）を開始します... --"
  echo "-- ${WP_CONTENT_PATH} → ${backup_path} --"
  sudo mv "${WP_CONTENT_PATH}" "${backup_path}"
  echo "-- 事前バックアップ完了 --"
  echo "--------------------"
}

# リストア実行
run_restore() {
  local backup_file="${BACKUP_DIR}/$1"
  local work_dir
  #work_dir=$(mktemp -d) #添付ディレクトリの利用
  work_dir=$BACKUP_DIR

  echo "--------------------"
  echo "-- リストア対象: $1 --"
  echo "-- 展開先 (${WP_CONTENT_DIR}): ${WP_CONTENT_PATH} --"
  echo "--------------------"

  read -r -p "リストアを実行しますか？ (y/n): " YN
  case "${YN}" in
    &#91;yY])
      echo "-- リストアを開始します... --"

      # 1. アーカイブ内の wp-content の階層数を確認
      echo "-- 展開中: ${backup_file} --"
      local wp_path strip_count

      list=$(tar tzf "${backup_file}")
      wp_path=$(echo "$list" | grep -m1 "${WP_CONTENT_DIR}/$" || true)
      echo "------ $wp_path --------"
      if &#91;&#91; -z "${wp_path}" ]]; then
        echo "エラー: アーカイブ内に ${WP_CONTENT_DIR} ディレクトリが見つかりません" >&amp;2
        exit 1
      fi
      # パスの / の数から除去する階層数を算出
      # 例: home/www/html/sweb01/wp-content/ → スラッシュ5個 → strip=4
      strip_count=$(echo "${wp_path}" | tr -cd '/' | wc -c)
      strip_count=$(( strip_count - 1 ))
      echo $strip_count
      #exit 1
      if &#91;&#91; $strip_count &lt; 0 ]]; then
        echo "エラー: 階層がありません" >&amp;2
        #echo "エラー: アーカイブ内に wp-content ディレクトリが見つかりません"
        exit 1
      fi
      #DIR="${work_dir}/wp-content"
      DIR=${work_dir}
      echo "${DIR}がない場合には作成します"
      mkdir -p "$DIR"
      # --strip-components で wp-content/ を作業ディレクトリ直下に展開
      tar xvzf "${backup_file}" -C "${DIR}" \
        --strip-components="${strip_count}"
      ls -la $DIR

      # 所定の場所に配置してオーナーを設定
      echo sudo mv "${work_dir}/${WP_CONTENT_DIR}" "${WP_CONTENT_PATH}"
      echo sudo chown -R "${WP_CONTENT_OWNER}" "${WP_CONTENT_PATH}/"
      sudo mv "${work_dir}/${WP_CONTENT_DIR}" "${WP_CONTENT_PATH}"
      sudo chown -R "${WP_CONTENT_OWNER}" "${WP_CONTENT_PATH}/"

      echo "-- リストア完了 --"
      # スクリプト終了時に作業ディレクトリを削除
      #trap 'rm -rf "${work_dir}"' EXIT

      ;;
    &#91;nN])
      kill -USR1 $$
      exit 0
      ;;
    *)
      echo "エラー: y または n を入力してください" >&amp;2
      exit 1
      ;;
  esac
}
cleanup() {
  echo Clean up!!
  echo ${BACKUP_DIR}
  #read -r -p "${BACKUP_DIR}/${WP_CONTENT_DIR} 削除しますか？ (Y/N): " INPUT
  #  case "$INPUT" in
  #    &#91;Yy])
  #      rm -rf "${BACKUP_DIR}/${WP_CONTENT_DIR}"  
  #  esac
}

# --- メイン処理 ---

# バックアップディレクトリの存在確認
if &#91;&#91; ! -d "${BACKUP_DIR}" ]]; then
  echo "エラー: バックアップディレクトリが存在しません: ${BACKUP_DIR}" >&amp;2
  exit 1
fi

# ファイル一覧をグローバル配列に読み込む
declare -a BACKUP_FILES
load_backup_files

# ヘルプ
if &#91;&#91; "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
  usage
fi

# ファイル選択：引数あり → 解決、なし → 対話形式
if &#91;&#91; $# -gt 0 ]]; then
  list_backups
  SELECTED_FILE=$(resolve_input "$1")
else
  list_backups
  SELECTED_FILE=$(select_backup_file)
fi

echo "-- 選択されたファイル: ${SELECTED_FILE} --"

# 事前バックアップ（現行 wp-content の退避）
if &#91;&#91; "${PRE_BACKUP}" =~ ^&#91;Yy]$ ]]; then
  run_pre_backup
fi

# リストア実行
run_restore "${SELECTED_FILE}"</code></pre>



<h3 class="wp-block-heading">Header.sh : デバッグモード仕様（変数 DEBUG=1 で有効）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-f6fe5a69aecaa3ebf64dfc0071ef4ec8"><code>#!/bin/bash
#
#  Header.sh    2026/05 by AI &amp; Kazuban
#  共通ヘッダー: source で読み込んで使う
#  使い方: source "${SCRIPT_DIR}/Header.sh"
#
#------------------------------------
#-e：失敗で停止：#-u：未定義変数禁止:#pipefail：パイプの途中も検知
set -euo pipefail

# --- traps ---
trap 'echo "-- 中止しました --"; exit 0' USR1
trap 'echo "Error at line $LINENO"; exit 1' ERR
trap cleanup EXIT

# cleanup は呼び出し元スクリプトで上書き可能
cleanup() {
  :
}

# --- debug mode: DEBUG=1 で有効 ---
export DEBUG=${DEBUG:-0}
if &#91;&#91; "$DEBUG" == "1" ]]; then
  echo "Debug mode is 'true' !! "
  export PS4='+ ${LINENO}: '
  set -x
  trap 'read -p "STEP> " &lt; /dev/tty' DEBUG
else
  echo "Debug mode is 'false' !! "
fi
</code></pre>



<h3 class="wp-block-heading">Tidyup_backfile.sh : バックアップファイルの整理（引数：対象ディレクトリ・保存日数）</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9c8922dee15a171fe661e7414cd13d49"><code>#!/bin/bash
# Delete $DAY days ago from backup
#
#  Tidyup_backfile.sh  by AI &amp; Kazuban 2026/05
#                default 10 days ago
#
#------------------------
# delete_backup - バックアップファイルを整理するスクリプト
# 使用方法: delete_backup &#91;削除対象ディレクトリ] &#91;何日前まで残すか]

#set -euo pipefail
#--- for debag ----------------------
#--- デバッグモード（DEBUG=1 で有効）---
#if &#91;&#91; "${DEBUG:-0}" == "1" ]]; then
#  export PS4='+ ${LINENO}: '
#  set -x
#  trap 'read -p "STEP> " &lt; /dev/tty' DEBUG
#fi

readonly SCRIPT_NAME="$(basename "$0")"

usage() {
    echo "使用方法: ${SCRIPT_NAME} &lt;削除対象ディレクトリ> &#91;保持日数]"
    echo "  削除対象ディレクトリ  : バックアップファイルのあるディレクトリ"
    echo "  保持日数              : 何日前までのファイルを残すか (デフォルト: 10)"
    exit 1
}

# --- 引数チェック ---
if &#91;&#91; $# -lt 1 || "$1" == "-?" || "$1" == "-h" || "$1" == "--help" ]]; then
    usage
fi

TARGET_DIR="$1"
DAYS="${2:-10}"

# --- 数値チェック ---
if ! &#91;&#91; "$DAYS" =~ ^&#91;0-9]+$ ]]; then
    echo "エラー: 保持日数には正の整数を指定してください: ${DAYS}" >&amp;2
    exit 1
fi

# --- ディレクトリ存在チェック ---
if &#91;&#91; ! -d "$TARGET_DIR" ]]; then
    echo "エラー: ディレクトリが見つかりません: ${TARGET_DIR}" >&amp;2
    exit 1
fi

# --- 削除基準日を算出 ---
DEL_DATE="$(date --date="${DAYS} days ago" +%Y%m%d)"
echo "削除基準日: ${DEL_DATE} より前のファイルを削除します (保持日数: ${DAYS}日)"

# --- 対象ファイルの処理 ---
# 数字始まりのファイル名から先頭8桁(YYYYMMDD)を取得して重複排除
while IFS= read -r file_date; do
    if &#91;&#91; "$file_date" &lt; "$DEL_DATE" ]]; then
        echo "削除: ${TARGET_DIR}/${file_date}*"
        rm -f -- "${TARGET_DIR}/${file_date}"*
    fi
done &lt; &lt;(
    ls -- "$TARGET_DIR" \
        | grep -E '^&#91;0-9]' \
        | awk '{ print substr($0, 1, 8) }' \
        | sort -u
)

echo "完了"</code></pre>



<h2 class="wp-block-heading">自動バックアップ</h2>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/rokeylinux9-3-wordpress-backup/#toc10">こちらでも、紹介していますが</a>、「crontab」に下記のように設定する事で、毎日２時に自動バックアップできるようになります</p>



<pre class="wp-block-code"><code>00 2 * * *        /home/kazuban/Backup/bin/Wp-Backup.sh all</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/rokeylinux9-7-wordpress-backup/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>RockyLinux9.7で「WordPress環境構築「Vol-04」WordPressインストール</title>
		<link>https://www.kazuban.com/blog/wordpress-install-no4/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 10 May 2026 00:03:42 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RockyLinux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[インストール]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12701</guid>

					<description><![CDATA[いよいよWordPressをインストールしていきますこのサイトでも、同様の記事は書いていますが、変更点もあるので新しく投稿します。 WordPress インストール 最新のWordPresssダウンロード ダウンロード後 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">いよいよWordPressをインストールしていきます<br>このサイトでも、同様の記事は書いていますが、変更点もあるので新しく投稿します。</p>



<h2 class="wp-block-heading">WordPress インストール</h2>



<h3 class="wp-block-heading">最新のWordPresssダウンロード</h3>



<p class="wp-block-paragraph">ダウンロード後展開する作業場所へ移動し、ダウンロードします<br>筆者は、ユーザーディレクトリの「Downloads」を作業場所にしました</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-207e9948997f4a007d618a554dcbbaca"><code>cd ~/Downloads/
wget https://ja.wordpress.org/latest-ja.tar.gz
tar xvzf latest-ja.tar.gz
ls wordpress/ </code></pre>



<p class="wp-block-paragraph">WordPress パッケージが展開されました</p>



<pre class="wp-block-preformatted">index.php             wp-config-sample.php  wp-mail.php<br>license.txt           wp-content            wp-settings.php<br>readme.html           wp-cron.php           wp-signup.php<br>wp-activate.php       wp-includes           wp-trackback.php<br>wp-admin              wp-links-opml.php     xmlrpc.php<br>wp-blog-header.php    wp-load.php<br>wp-comments-post.php  wp-login.php</pre>



<h3 class="wp-block-heading">WordPressパッケージをApache設定場所へ移動</h3>



<p class="wp-block-paragraph">展開した「wordpress」ディレクトリを、<a href="https://www.kazuban.com/blog/wordpress-install-no2/#toc5">前回「httpd.conf」で「DocumentRoot」に設定した</a>ディレクトリ配下へ移動します<br>また、「wordpress」というディレクトリ名は、公開する時のアドレス名になります<br>この場合、<span class="marker-under-blue">https://「サイトドメイン」/wordpress/</span> です。<br>変更したい場合には、好みの名前に変更します<br>次の例では、「blog」という名前に変更し、所有権も「apache」に変更しています</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-79fd3cdbb76af01c9c24578607e379d2"><code>cd ~/Downloads/
sudo mv ./wordpress/ /home/www/html/ 
cd /home/www/html/
sudo mv ./wordpress/ ./blog/
sudo chown -R apache.apache ./blog/
ls -la</code></pre>



<pre class="wp-block-preformatted">・<br>・<br>drwxr-xr-x. 5 <strong>apache apache</strong> 4096  4月  3 01:00 <strong>blog</strong><br>-rw-r--r--. 1 apache apache  121  4月 24 10:52 index.html</pre>



<p class="wp-block-paragraph">「blog」と言う名前に変更され、所有者も「apache」になっていれば、WordPressの配置は完了です。</p>



<h2 class="wp-block-heading">MariaDBの設定</h2>



<p class="wp-block-paragraph">WordPress用のデータベースとユーザーを作成します<br>設定情報は、事前にメモを作成しておくとスムーズに進行できます<br>例として、下記で設定します</p>



<ul class="wp-block-list">
<li>root パスワード：<a href="https://www.kazuban.com/blog/wordpress-install-no3/#toc17">初期設定</a>で、「Change the root password」で作成したパスワード</li>



<li>データベース名：WpDb</li>



<li>ユーザー名：WpAdmin</li>



<li>パスワード：WpPasswd</li>



<li>データベースホスト：localhost</li>
</ul>



<h3 class="wp-block-heading">データベースの作成</h3>



<pre class="wp-block-preformatted">mysql -u root -p[rootパスワード] #-pの後ろはスペースは入れない<br>・<br>・データベース作成<br>MariaDB [(none)]&gt;CREATE DATABASE <strong><span class="marker-under-red">WpDb</span></strong> CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;<br>・<br>・データベース確認<br>MariaDB [(none)]&gt; SHOW DATABASES;<br>・<br>・管理者作成<br>GRANT ALL ON <strong><span class="marker-under-red">WpDb.</span></strong>* TO '<strong><span class="marker-under-red">WpAdmin</span></strong>'@'localhost' IDENTIFIED By '<strong><span class="marker-under-red">WpPasswd</span></strong>';<br>・<br>・確認<br>USE mysql<br>SELECT user,host from user;<br>SHOW GRANTS FOR '<strong><span class="marker-under-red">WpAdmin</span></strong>'@'localhost';<br></pre>



<p class="wp-block-paragraph">もし、データベース名やユーザーを変更したい場合には、「DROP」コマンドで<br>一度削除し、再生成します</p>



<pre class="wp-block-preformatted">DROP DATABASE データベース名;<br>・より安全を考慮した次のコードでは存在しない場合のエラーを回避できます<br>DROP DATABASE IF EXISTS データベース名;<br><br>DROP USER 'username'@'localhost';<br>・存在しない場合のエラーを回避<br>DROP USER IF EXISTS 'username'@'localhost'; <br></pre>



<h2 class="wp-block-heading">WordPress 初期設定</h2>



<h3 class="wp-block-heading">初期設定</h3>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/wordpress-install-no2/#toc13">Apacheの設定</a>で、ドメインでのアクセスが可能であればドメインで、<br>ドメインでの設定をしていない場合には、IPアドレスを<br>ChromeなどWebブラウザに入力して確認します<br>「WordPressへようこそ・・・」の画面が表示されます。</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="780" height="577" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/welcom.png" alt="" class="wp-image-8464" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/welcom.png 780w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/welcom-500x370.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/welcom-300x222.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/welcom-768x568.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></figure>



<p class="wp-block-paragraph"><br>その画面で「さあ、始めましょう！」をクリック<br>上記で設定したデータベース情報を設定します</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="776" height="720" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/database.png" alt="" class="wp-image-8465" style="width:689px;height:auto" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/database.png 776w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/database-500x464.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/database-300x278.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/database-768x713.png 768w" sizes="(max-width: 776px) 100vw, 776px" /></figure>



<p class="wp-block-paragraph">「サイトタイトル」「ユーザー名」「パスワード」を設定しますが<br>ここでのユーザー名は、<span class="marker-under">WordPressの管理画面にログインするユーザーを設定</span>します<br><span class="marker-under-red"><a href="#toc4">データベースの管理ユーザー</a>とは違いますので注意</span>してください</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="777" height="284" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/install.png" alt="" class="wp-image-8466" style="aspect-ratio:2.736111111111111;width:688px;height:auto" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/install.png 777w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/install-500x183.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/install-300x110.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/install-768x281.png 768w" sizes="(max-width: 777px) 100vw, 777px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="772" height="887" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/setting.png" alt="" class="wp-image-8467" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/setting.png 772w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/setting-500x574.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/setting-300x345.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/setting-768x882.png 768w" sizes="(max-width: 772px) 100vw, 772px" /></figure>
</div>
</div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.34%">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="774" height="432" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/success.png" alt="" class="wp-image-8470" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/success.png 774w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-500x279.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-300x167.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-768x429.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/success-320x180.png 320w" sizes="(max-width: 774px) 100vw, 774px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.34%">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="402" height="529" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/login.png" alt="" class="wp-image-8473" style="object-fit:cover;width:200px;height:200px" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/login.png 402w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/login-300x395.png 300w" sizes="(max-width: 402px) 100vw, 402px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<p class="wp-block-paragraph">ログインで、WordPressの管理画面からWordPressの設定ができるようになります</p>
</div>
</div>



<h3 class="wp-block-heading">サイトヘルス</h3>



<p class="wp-block-paragraph">「https://「サイトドメイン」/blog/wp-admin/site-health.php」にアクセスすると、サイトの状態が確認できますが、自宅環境では、「REST API 」エラーが出ました</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="624" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error-800x624.png" alt="" class="wp-image-8487" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error-800x624.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error-500x390.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error-300x234.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error-768x599.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/site-health-error.png 808w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">自宅内での設定の場合、名前解決ができていないのが原因のようです<br><a href="https://www.kazuban.com/blog/wordpress-install-no2/#toc13">同じLAN上のwindowsPCには「hosts」ファイルに設定</a>しましたが、サーバー（Linux）側も<br>「hosts」設定し強制的に名前解決させようと思います。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6f00ef53fdd2cdf24be460013b465897"><code>sudo vi /etc/hosts</code></pre>



<pre class="wp-block-preformatted">127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4<br>::1         localhost localhost.localdomain localhost6 localhost6.localdomain6<br>192.168.1.100 www2.hogehoge.com</pre>



<p class="wp-block-paragraph">これで、「・・/wp-admin/site-health.php」を更新すると、「REST API 」エラーは消えていました</p>



<h2 class="wp-block-heading">Hello World!</h2>



<p class="wp-block-paragraph">「https://「サイトドメイン」/blog/」にアクセスすると、デフォルトのサンプルページが表示されます</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="800" height="755" src="https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world-800x755.png" alt="" class="wp-image-12773" style="aspect-ratio:1.0596459670495892;object-fit:cover;width:480px;height:auto" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world-800x755.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world-500x472.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world-300x283.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world-768x725.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2026/05/hello-world.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<h2 class="wp-block-heading">WordPress環境構築終了</h2>



<p class="wp-block-paragraph">これで、WordPress環境構築は終了です<br>「https://「サイトドメイン」/blog/wp-admin/」で、ダッシュボード（管理画面）が開きます。<br>コンテンツから外観までいろいろな設定変更が可能で、「管理画面（ダッシュボード）」を使いこなすことから始めます。<br>まずは、「外観」⇒「テーマ」を変更する事で、見栄えをガラッと変えましょう！</p>



<h4 class="wp-block-heading">WordPress環境構築まとめ</h4>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<p class="wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no1/">１</a></span></p>



<p class="wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no2/">２</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-1476c951253852d4a55d81c877244e82 wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no3/">３</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-30a943d01dbfa4c684a86f1ffdf067cd wp-block-paragraph"><span class="inline-button-white-blue"><a href="https://www.kazuban.com/blog/wordpress-install-no4/">４</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-ea60c9863cef2db7e5917a00fa26aed8 wp-block-paragraph"><span class="inline-button-white-black">５</span></p>



<p class="has-light-grey-color has-text-color has-link-color wp-elements-6ffea2dacd2a225d010208a9488b8f07 wp-block-paragraph">６</p>



<p class="wp-block-paragraph"></p>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RockyLinux9.7で「WordPress環境構築「Vol-03」PHP8.4、MariaDB11.4</title>
		<link>https://www.kazuban.com/blog/wordpress-install-no3/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Fri, 01 May 2026 01:36:17 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RockyLinux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[インストール]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12568</guid>

					<description><![CDATA[WordPress構築のために、PHPとMariaDB(Mysql)環境を整備していきます現状の状態は、WordPress6.9.4、PHP 8.2.30 MariaDB10.5.29です。今回は、バックアップ用が目的で [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">WordPress構築のために、PHPとMariaDB(Mysql)環境を整備していきます<br>現状の状態は、<br>WordPress6.9.4、PHP 8.2.30 MariaDB10.5.29です。<br>今回は、バックアップ用が目的ですが、トライアルもかねて、なるべく新しいバージョンにしておきたいと思います。<br>現wordpressに対応している、phpとwordpressのバージョンは下記を参考にしました</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><a href="https://tcd-theme.com/2021/09/wordpress-php-version.html">PHP</a><br><a href="https://tane-creative.co.jp/column/6445/">MariaDB</a></p>
</blockquote>



<p class="wp-block-paragraph">上記を参考に、<strong><span class="marker-under">PHP8.4 MariaDB11.4(LTS)</span></strong>をインストールします</p>



<h2 class="wp-block-heading">PHPのインストール</h2>



<p class="wp-block-paragraph">筆者の現環境では、PHPはまだインストールしていませんが、とりあえず確認します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-037c08db1b511be0e15a7d1f2d8ec2e6"><code>php --version</code></pre>



<p class="wp-block-paragraph">やはりインストールされていませんが、もしインストールされている場合には、必要あればバックアップを取り、問題なければすべて削除します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-94ae9bab53a21b7f39c939ef62a4d67d"><code>sudo dnf remove php*
sudo dnf remove php-*</code></pre>



<p class="wp-block-paragraph">PHP モジュールリストを確認します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1b2559100844f89ae97018d0b5345f6f"><code>dnf module list php</code></pre>



<pre class="wp-block-preformatted">Rocky Linux 9 - AppStream<br>Name     Stream       Profiles                      Summary                            <br>php      8.1          common [d], devel, minimal    PHP scripting language             <br>php      8.2          common [d], devel, minimal    PHP scripting language             <br>php      8.3          common [d], devel, minimal    PHP scripting language             <br><br>Remi's Modular repository for Enterprise Linux 9 - x86_64<br>Name     Stream       Profiles                      Summary                            <br>php      remi-7.4     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.0     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.1     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.2     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.3     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.4     common [d], devel, minimal    PHP scripting language             <br>php      remi-8.5     common [d], devel, minimal    PHP scripting language  </pre>



<p class="wp-block-paragraph">私の環境では、AppStream には、8.3までですが、Remiでは、8.5まで登録されています<br>ここでは、最新は避けて8.4をインストールしようと思います</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3ec9e5fc94f8910c731a3b3a2259bb3e"><code>sudo dnf module install php:remi-8.4
sudo dnf install php</code></pre>



<h3 class="wp-block-heading">拡張機能を追加</h3>



<p class="wp-block-paragraph">WordPressを動作させるのに、必須と推奨なPHP拡張機能があります。<br><a href="https://make.wordpress.org/hosting/handbook/server-environment/#php-extensions">こちらとAIの意見を参考にして、</a>インストールしておきたいと思います。<br>すでに、インストール済みや一致するものがない場合もありましたが、インストールしました</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0337149f0da6453da06cd81bfcdacf4f"><code>sudo dnf install \
  php-mysql php-curl\
  php-mysql php-exif\
  php-mysql php-fileinfo\
  php-mysql php-gd\
  php-mysql php-imagick\
  php-mysql php-intl\
  php-mysql php-json\
  php-mysql php-mbstring\
  php-mysql php-mysqli\
  php-mysql php-openssl\
  php-mysql php-xml\
  php-mysql php-zip</code></pre>



<p class="wp-block-paragraph">再起動</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-584407fcb0a4309bf94106bd651fc498"><code>sudo systemctl restart httpd
sudo systemctl restart php-fpm</code></pre>



<h3 class="wp-block-heading">PHP8.4について、🧑‍💻AIからのアドバイス</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h6 class="wp-block-heading">補足：PHP 8.4での注意点（AIからのアドバイス）</h6>



<p class="wp-block-paragraph">PHP 8.4は比較的新しいため、利用している<strong>WordPressテーマや古いプラグイン</strong>がまだ対応しておらず、非推奨（Deprecated）の警告が出る場合があります。</p>



<ul class="wp-block-list">
<li>もしエラーが出る場合は、WordPressの管理画面から「サイトヘルス」を確認し、足りないモジュールがないかチェックしてみてください。</li>
</ul>



<p class="wp-block-paragraph">もし特定のプラグインで「これが足りない」と言われた場合は、<code>dnf search php-拡張名</code> で探すとすぐに見つかりますよ。</p>
</blockquote>



<h3 class="wp-block-heading">php.ini の設定</h3>



<p class="wp-block-paragraph">PHPの設定は、「/etc/php.ini」で行います。<br>念のためバックアップととり、編集します。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6ce1f335198bd0d88347c3f9468d4980"><code>sudo cp -p /etc/php.ini /etc/php.ini.org
sudo vi /etc/php.ini</code></pre>



<p class="wp-block-paragraph">筆者の利用方法としては、記事内に画像貼り付けと少数ですが<span class="marker-under-red">動画も貼り付けたい</span>と思っているので、多少余裕をもった設定にしました。</p>



<pre class="wp-block-preformatted">・<br>・<br>;expose_php = On<br><strong>expose_php = Off</strong><br><br>;max_execution_time = 30<br><strong>max_execution_time = 300</strong><br><br>;max_input_time = 60<br><strong>max_input_time = 300</strong><br><br>;max_input_vars = 1000<br><strong>max_input_vars = 3000</strong><br><br>;post_max_size = 8M<br><strong>post_max_size = 300M</strong><br><br>;upload_max_filesize = 2M<br><strong>upload_max_filesize = 256M</strong><br><br>;max_file_uploads = 20<br><strong>max_file_uploads = 50</strong><br><br>;date.timezone =<br><strong>date.timezone = "Asia/Tokyo"</strong><br><br>;mbstring.language = Japanese<br>mbstring.language = Japanese<br><br>;mbstring.internal_encoding =<br><strong>mbstring.internal_encoding = UTF-8</strong><br><br>;mbstring.http_input =<br><strong>mbstring.http_input = UTF-8</strong><br><br>;mbstring.http_output =<br><strong>mbstring.http_output = pass</strong><br><br>;mbstring.encoding_translation = Off<br><strong>mbstring.encoding_translation = On</strong><br><br>;mbstring.detect_order = auto<br>mbstring.detect_order = auto<br><br>;mbstring.substitute_character = none<br>mbstring.substitute_character = none<br>・<br>・</pre>



<h3 class="wp-block-heading">キャッシュ拡張用の10-opcache.ini の設定変更</h3>



<p class="wp-block-paragraph">OPcache（オプキャッシュ）は、PHPスクリプトのコンパイル結果（バイトコード）を共有メモリにキャッシュすることで、PHPの動作を高速化する拡張モジュールですが、その設定ファイルも余裕をみた設定にしました<br>/etc/php.d/10-opcache.ini もバックアップをとって編集します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3f1669efdbcd727f7a56a4cfc000dba2"><code>sudo cp -p /etc/php.d/10-opcache.ini /etc/php.d/10-opcache.ini.org
sudo vi /etc/php.d/10-opcache.ini</code></pre>



<pre class="wp-block-preformatted">・<br>・<br>opcache.enable=1<br><br>;opcache.memory_consumption=128<br><strong>opcache.memory_consumption=256</strong><br><br>;opcache.memory_consumption=128<br><strong>opcache.memory_consumption=256</strong><br><br>;opcache.max_accelerated_files=10000<br><strong>opcache.max_accelerated_files=20000</strong><br>・<br>・</pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d29359753483389ab0aff886476977a4"><code>sudo systemctl restart php-fpm
sudo systemctl restart httpd</code></pre>



<h3 class="wp-block-heading">httpd.conf の編集</h3>



<p class="wp-block-paragraph">こちらは、必須ではないですが、やっといたほうがいいかも？との🧑‍💻AIのアドバイスです</p>



<p class="wp-block-paragraph">/etc/httpd/conf/httpd.conf</p>



<pre class="wp-block-preformatted">・<br>・<br>LimitRequestBody 314572800  #（= 約300MB）<br>・</pre>



<p class="wp-block-paragraph">ただ、<a href="https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/9/html/9.1_release_notes/enhancement_dynamic-programming-languages-web-and-database-servers">こちらの情報では</a>、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">デフォルト値が&nbsp;<code>0</code>&nbsp;(無制限) から 1 GiB に変更されたようです。</p>
</blockquote>



<p class="wp-block-paragraph">デフォルトでは無制限ではなくなったみたいです。</p>



<h3 class="wp-block-heading">多少の動画添付を考慮した、WordPress側の設定</h3>



<p class="wp-block-paragraph">こちらも、🧑‍💻AIのアドバイス<br>画像貼り付け予定であれば、設定しておいたほうがよいとの事<br>こちらは、wordpress立ち上げ時に設定しようと思います</p>



<p class="wp-block-paragraph">WordPress側の設定（wp-config.php）</p>



<pre class="wp-block-preformatted">define('WP_MEMORY_LIMIT', '256M');<br>define('WP_MAX_MEMORY_LIMIT', '512M');</pre>



<h3 class="wp-block-heading">PHP確認</h3>



<p class="wp-block-paragraph">「/home/www/home」に「index.php」という、ファイルを作成し、ブラウザに「<a href="https://www2.kazuban.com/">https://www2.hogehoge.com/index.php</a>」で確認します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-fd4e20839425e3f96c4ee4dee6fc8874"><code>echo '&lt;?php phpinfo(); ?&gt;' | sudo tee /home/www/html/index.php</code></pre>



<p class="wp-block-paragraph">アドレスバーに「<a href="https://www2.kazuban.com/">https://www2.hogehoge.com/index.php</a>」で確認します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="280" src="https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver-800x280.png" alt="" class="wp-image-12621" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver-800x280.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver-500x175.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver-300x105.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver-768x269.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/php-ver.png 1050w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">確認ができたら、削除しておきましょう</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-684ddd9289da135f47cd0c8aa2f0ce94"><code>sudo rm /home/www/html/index.php</code></pre>



<h2 class="wp-block-heading">MariaDB 11.4(LTS)</h2>



<p class="wp-block-paragraph">11.5も動作すると思いますが、11.4(LTS)をインストールしようと思います</p>



<h3 class="wp-block-heading">リポジトリ追加</h3>



<p class="wp-block-paragraph">リポジトリ追加</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-18bf56cbd738a52717dc8c76a65da87a"><code>curl -LsS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-11.4"</code></pre>



<p class="wp-block-paragraph">パッケージキャッシュの更新</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-607451a79a8cbb97f5a7a3e4da9791db"><code>sudo dnf makecache</code></pre>



<p class="wp-block-paragraph">EPEL リポジトリ系のネットワーク接続エラーが出たので、AIに聞いてみましたが、問題はないようです<br>AIの回答では閉鎖環境では、EPELを無効化する事でエラーは消えるようです（筆者は試していません）</p>



<h4 class="wp-block-heading">EPEL リポジトリ系エラーについて、🧑‍💻AIの回答</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h6 class="wp-block-heading">なるほど、閉域網環境なんですね。その状況なら無効化で問題ないです。</h6>



<p class="wp-block-paragraph">EPEL を無効化する</p>



<pre class="wp-block-code"><code>sudo dnf config-manager --disable epel</code></pre>



<h6 class="wp-block-heading">確認</h6>



<pre class="wp-block-code"><code>sudo dnf makecache</code></pre>



<p class="wp-block-paragraph">エラーが消えれば OK です。</p>



<h6 class="wp-block-heading">本機トラブル時に外部接続が必要になったら</h6>



<p class="wp-block-paragraph">その時は再度有効化すればいいだけです：</p>



<pre class="wp-block-code"><code>sudo dnf config-manager --enable epel</code></pre>



<p class="wp-block-paragraph">切り替えが簡単なので、普段は無効化しておいて問題ありません👍</p>
</blockquote>



<p class="wp-block-paragraph"><br>パッケージ情報の一覧は、下記で確認できます<br>11.4のパッケージが確認できました</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9be16379db64eb2e0c4c1aadd17e0c61"><code>dnf list mariadb*</code></pre>



<pre class="wp-block-preformatted">・<br>MariaDB-client.x86_64          11.4.10-1.el9     @mariadb-main<br>MariaDB-client-compat.noarch   11.4.10-1.el9     @mariadb-main<br>MariaDB-common.x86_64          11.4.10-1.el9     @mariadb-main<br>MariaDB-server.x86_64          11.4.10-1.el9     @mariadb-main<br>MariaDB-server-compat.noarch   11.4.10-1.el9     @mariadb-main<br>MariaDB-shared.x86_64 <br>・</pre>



<h3 class="wp-block-heading">MariaDB 11.４ のインストール</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d442e3a010c362ea7c820ccd2ecbe1b4"><code>sudo dnf install -y MariaDB-server MariaDB-client</code></pre>



<p class="wp-block-paragraph">MariaDB サービスの起動と自動起動設定</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-7bfb5655ee90721601d5eda0a57e4a67"><code>sudo systemctl start mariadb
sudo systemctl enable mariadb</code></pre>



<h3 class="wp-block-heading">初期セキュリティ設定</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-72a4b1e39c9653a868376ec61cff9df8"><code>sudo mariadb-secure-installation</code></pre>



<p class="wp-block-paragraph">対話形式で以下を設定します：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>推奨設定</th></tr></thead><tbody><tr><td>ERROR 2002 (HY000): Can&#8217;t connect to local server through socket</td><td>MariaDB サービスが起動していない場合、このエラーがでます。その場合は起動させます。<br>sudo systemctl start mariadb</td></tr><tr><td>Enter current password for root (enter for none):<br>カレントrootパスワード：</td><td>以前設定していなければ「<strong>Enter</strong>」</td></tr><tr><td>Switch to unix_socket authentication [Y/n]<br>Unix socket 認証</td><td><code><strong>n</strong></code>（パスワード認証を使う場合）</td></tr><tr><td>Change the root password? [Y/n]<br>root パスワード設定<br>このパスワードは、データベース作成時にも使用するので、<span class="marker-under">忘れないようにメモ</span>します</td><td><code><strong>y</strong></code> → パスワードを入力<br>データベースへのログインで使用する<br>mysql -u root -p<strong>[パスワード]</strong></td></tr><tr><td>Remove anonymous users? [Y/n]<br>匿名ユーザーの削除</td><td><code><strong>y</strong></code></td></tr><tr><td>Disallow root login remotely? [Y/n]<br>リモート root ログインの禁止</td><td><code><strong>y</strong></code></td></tr><tr><td>Remove test database and access to it? [Y/n]<br>テスト DB の削除</td><td><code><strong>y</strong></code></td></tr><tr><td>Reload privilege tables now? [Y/n]<br>権限テーブルのリロード</td><td><code><strong>y</strong></code></td></tr></tbody></table></figure>



<h3 class="wp-block-heading">ファイアウォールの設定（外部接続が必要な場合）</h3>



<p class="wp-block-paragraph">外部からデータベースに接続する場合には、ファイヤフォールに許可します<br>筆者は外部からデータベースへのアクセスの予定はないので、今回は設定していませんが<br>覚書として、書いておきます。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1182edf41e8f54cd33faa78db60378a0"><code>sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=public</code></pre>



<h3 class="wp-block-heading">インストール確認</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6cdbfe144c0f9c703f2f90e2f9d0afd2"><code>sudo systemctl status mariadb</code></pre>



<h3 class="wp-block-heading">文字コードの設定</h3>



<p class="wp-block-paragraph">文字化け防止に、文字コードを編集します<br>設定ファイルは<br>「/etc/my.cnf.d/server.cnf」<br>「/etc/my.cnf.d/client.cnf」で行うので<br>バックアップアップを取って、編集。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6862e3e8c8024d395834c9be00e98010"><code>sudo cp -p /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.org 
sudo cp -p /etc/my.cnf.d/client.cnf /etc/my.cnf.d/client.cnf.org </code></pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-547d4bbdf3b96129da1e7d08c55ce3ce"><code>sudo vi /etc/my.cnf.d/server.cnf</code></pre>



<pre class="wp-block-preformatted">・<br>・<br># This group is only read by MariaDB servers, not by MySQL.<br># If you use the same .cnf file for MySQL and MariaDB,<br># you can put MariaDB-only options here<br>[mariadb]<br><strong># ----- 2026/05/01 -----<br>character-set-server = utf8mb4<br>collation-server     = utf8mb4_unicode_ci</strong><br>・<br>・<br></pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-970ab07a04cf717595c92b2710bcd06e"><code>sudo vi /etc/my.cnf.d/client.cnf</code></pre>



<pre class="wp-block-preformatted">・<br>・<br>#<br># These two groups are read by the client library<br># Use it for options that affect all clients, but not the server<br>#<br>[client]<br><strong># ----- 2026/05/01 -----</strong><br><strong>default-character-set = utf8mb4</strong><br>・<br>・<br></pre>



<h3 class="wp-block-heading">再起動と確認</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-881a2e29dec703c23f959310b9b7d5ea"><code>sudo systemctl restart mariadb
sudo systemctl status mariadb</code></pre>



<pre class="wp-block-preformatted">mysql -u root -p[パスワード]<br>mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead<br>Welcome to the MariaDB monitor.  Commands end with ; or \g.<br>Your MariaDB connection id is 3<br>Server version: 11.4.10-MariaDB MariaDB Server<br><br>Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.<br><br>Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.<br><br>MariaDB [(none)]&gt; <strong>show variables like "chara%";</strong><br>+--------------------------+------------------------------+<br>| Variable_name            | Value                        |<br>+--------------------------+------------------------------+<br>| character_set_client     | utf8mb4                      |<br>| character_set_collations |                              |<br>| character_set_connection | utf8mb4                      |<br>| character_set_database   | <strong>utf8mb4</strong>                      |<br>| character_set_filesystem | binary                       |<br>| character_set_results    | utf8mb4                      |<br>| character_set_server     | <strong>utf8mb4</strong>                      |<br>| character_set_system     | utf8mb3                      |<br>| character_sets_dir       | /usr/share/mariadb/charsets/ |<br>+--------------------------+------------------------------+<br>9 rows in set (0.002 sec)<br><br>MariaDB [(none)]&gt; <strong>quit</strong><br>Bye</pre>



<p class="wp-block-paragraph"><strong>utf8mb4</strong> になっていることを確認します<br>もし、「latin1」とかになっていた場合には、<span class="marker-under-red">再起動</span>「<strong>sudo systemctl restart mariadb</strong>」で反映されます。</p>



<hr class="wp-block-separator has-text-color has-indigo-color has-alpha-channel-opacity has-indigo-background-color has-background is-style-wide" style="margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50)"/>



<h4 class="wp-block-heading">WordPress環境構築まとめ</h4>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<p class="has-black-color has-text-color has-link-color wp-elements-5f52745eabdb80c4b8425e4b334c7414 wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no1/">１</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-f04e8d7fb6e2787b0f3d9b4d2d85c493 wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no2/">２</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-194ef3f65fba551e58d0961d209e3f45 wp-block-paragraph"><span class="inline-button-white-blue"><a href="https://www.kazuban.com/blog/wordpress-install-no3/">３</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-a2aa1b38f71c6b12de00dd0cb2c11bed wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no4/">４</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-eceba6d3b11b45ccabb96c64463aa72c wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no5/">５</a></span></p>



<p class="has-light-grey-color has-text-color has-link-color wp-elements-6ffea2dacd2a225d010208a9488b8f07 wp-block-paragraph">６</p>



<p class="wp-block-paragraph"></p>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RockyLinux9.7で「WordPress環境構築「Vol-02」Apache設定と、HTTPS化</title>
		<link>https://www.kazuban.com/blog/wordpress-install-no2/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 23:49:17 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RockyLinux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[インストール]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12446</guid>

					<description><![CDATA[前回、RockyLinux9.7をインストールし、WindowsターミナルでSSH接続できるようになりました今回は、Apache、MariaDB、PHPをインストールし、WordPressを起動させます筆者の環境ではすで [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">前回、RockyLinux9.7をインストールし、WindowsターミナルでSSH接続できるようになりました<br>今回は、Apache、MariaDB、PHPをインストールし、WordPressを起動させます<br>筆者の環境ではすでに自宅内で、Wordpress（このブログサイト）は起動しているのでテスト環境として、<span class="marker-under-red">仮に</span><strong>www2.hogehoge.com</strong> で設定を行っています<br>この仮ドメインは、<span class="marker-under-red">実際のドメインに変更</span>してご利用ください。</p>



<h2 class="wp-block-heading">Apache</h2>



<p class="wp-block-paragraph">コピペで設定できるように、まとめます<br>詳細は、こちらを参照してください</p>


<a href="https://www.kazuban.com/blog/rokeylinux9-3-apache/" title="RockyLinux9.３で自宅サーバーを再構築V04・LAMPの「A」、Apache編" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/Apache-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/Apache-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/Apache-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/Apache-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.３で自宅サーバーを再構築V04・LAMPの「A」、Apache編</div><div class="blogcard-snippet internal-blogcard-snippet">LAMPの「A」のApacheの構築編です。インストール、セキュリティ対策、ファイヤーウォール、https化、HTTP2通信設定を説明します。さらに例では、CGIも動作できるような設定にしています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.06</div></div></div></div></a>


<h3 class="wp-block-heading">Remi リポジトリのインストール</h3>



<p class="wp-block-paragraph">ApacheやPHPの最新バージョンにも対応したいので、Remi リポジトリのインストールします<br>Remiのインストールには、「crb」や「epel」のインストールが必要なようです</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c1631523513c4ac34ec9ea428186523a"><code>sudo dnf config-manager --set-enabled crb
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm</code></pre>



<h3 class="wp-block-heading">httpdインストール</h3>



<p class="wp-block-paragraph">続いて、httpd関連をインストールし、自動起動するように設定します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-f5ad29b00dd48de30294cc478ca39b60"><code>sudo dnf install httpd httpd-tools mod_ssl
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl is-enabled httpd
sudo systemctl status httpd</code></pre>



<pre class="wp-block-preformatted"><span class="bold-green">●</span> httpd.service - The Apache HTTP Server<br>     Loaded: loaded (/usr/lib/systemd/system/httpd.service; <span class="bold-green">enabled</span>; preset: <span class="bold-blue">disabled</span>)<br>     Active: <span class="bold-green">active (running)</span> since Sat 2026-04-18 17:24:47 JST; 54min ago</pre>



<p class="wp-block-paragraph"><span class="bold-green">active (running)</span>とservice; <span class="bold-green">enabled</span>で確認できます。</p>



<h3 class="wp-block-heading">Firewalld に許可</h3>



<p class="wp-block-paragraph">「http」と「https」を許可します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6f3dea2f5fa02d25e76fb6b91992a2e4"><code>sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --add-service=https --zone=public --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=public</code></pre>



<p class="wp-block-paragraph">「services: 」で確認できます</p>



<pre class="wp-block-preformatted">public (active)<br>  target: default<br>  icmp-block-inversion: no<br>  interfaces: wlp8s0<br>  sources:<br>  services: cockpit dhcpv6-client <strong>http https</strong> ssh</pre>



<p class="wp-block-paragraph">ブラウザのアドレスバーにIPアドレス「http://192.168.*.*」をに入力すれば、テストページが表示されれば動作しています</p>



<h3 class="wp-block-heading">httpd.conf</h3>



<p class="wp-block-paragraph">サーバー上のディレクトリや、ホスト名など、自分の環境に合わせて設定ファイルを編集します<br>筆者の場合、「DocumentRoot」を「/home/www/html」に変更します<br>「ServerName」は、バックアップ用なので本サーバーとの識別のためドメイン名は<br>「www2」とし「www2.hogehoge.com」に設定します<br>CGIスクリプトを使用する場合では、AddHandlerでスクリプトの拡張子を指定し、ScriptAlias以外のディレクトリにスクリプトを置く場合には、その指定ディレクトリに「Options ExecCGI」を追加します<br>まずは、設定ファイル「httpd.conf」はバックアップを取ってから作業します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-6af31f7fc27de5819bdec68fed5c5b38"><code>cd /etc/httpd/conf/
sudo cp -p httpd.conf httpd.conf.org
sudo vi ./httpd.conf</code></pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">edhitor</span></p>



<pre class="wp-block-preformatted">#ServerAdmin root@localhost<br>ServerAdmin root@localhost<br><br>#ServerName www.example.com:80<br>ServerName www2.hogehoge.com:80<br><br>#DocumentRoot "/var/www/html"<br>DocumentRoot "/home/www/html"<br><br>#&lt;Directory "/var/www"&gt;<br>&lt;Directory "/home/www"&gt;<br><br>#&lt;Directory "/var/www/html"&gt;<br>&lt;Directory "/home/www/html"&gt;<br><br>#ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"<br>ScriptAlias /cgi-bin/ "/home/www/cgi-bin/"<br><br>#&lt;Directory "/var/www/cgi-bin"&gt;<br>&lt;Directory "/home/www/cgi-bin"&gt;<br><br>#Options Indexes FollowSymLinks<br>Options FollowSymLinks<br><br>#AddHandler cgi-script .cgi<br># --- 2026/04/19 add by kazuban<br>AddHandler cgi-script .cgi<br>&lt;Directory /home/www/html/script&gt;<br>  AllowOverride None<br>  Options ExecCGI FollowSymLinks<br>  Order allow,deny<br>  Allow from all<br>&lt;/Directory&gt;</pre>



<p class="wp-block-paragraph">筆者の場合、デフォルトにディレクトリを変更したので、そのディレクトリを作成し、所有者をapacheに変更します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c4f3ef6056e7d1223f92e93bc534a783"><code>sudo mkdir /home/www
sudo mkdir /home/www/html
sudo mkdir /home/www/cgi-bin
sudo chown apache.apache /home/www/html/
sudo chown apache.apache /home/www/cgi-bin/
ls -la /home/www
httpd -t</code></pre>



<p class="wp-block-paragraph">「Syntax OK」が出れば、正常に変更されています</p>



<h3 class="wp-block-heading">セキュリティ対策</h3>



<p class="wp-block-paragraph">・テストページや「icons」一覧を非表示にする<br>・Apacheバージョン情報とＴRACEメソッドOFF<br>・X-Frame-Optionsの有効を確認<br>・設定したドキュメントルートにindex.htmlを作成</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-e110b38a9645384a6486be211ba04a0d"><code>cd /etc/httpd/conf.d
sudo cp -p welcome.conf welcome.conf.org
sudo cp -p  autoindex.conf  autoindex.conf.org
sudo vi ./welcome.conf</code></pre>



<p class="wp-block-paragraph">表示させたくないので、削除や名前変更もできますが、自動的に復活するらしいので、&lt;Directory&gt;設定は、全てコメントにしました。<br>autoindex.confも同様です</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3cbd35de13f3166934c7322fa29c69c6"><code>sudo vi autoindex.conf</code></pre>



<p class="wp-block-paragraph">httpdを再起動すると、「http://192.168.*.*」は表示されなくなっていれば正常です</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9f459a92461c6f58d5bb108024b4367d"><code>sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">さらに、Apacheバージョン情報とＴRACEメソッドもOFFにします<br>/etc/httpd/conf/httpd.confを編集</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c6e82f02e1f51781bb7e5f18d2624ebd"><code>sudo vi /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph">最終行に、設定コードを追加</p>



<pre class="wp-block-preformatted">##--- kazuban added. 2026/04/19<br>ServerTokens ProductOnly<br>ServerSignature off<br>TraceEnable off</pre>



<p class="wp-block-paragraph">構文チェックしOKであれば、再起動します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c4e776ada2235294bcc675456053ce5d"><code>httpd -t
sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">X-Frame-Optionsは、Webサイトを不正な埋め込み（クリックジャッキング攻撃）から守るために非常に重要だと言うことなので、こちらも有効になっているか確認します<br>「/etc/httpd/conf.modules.d/00-base.conf」に、<strong>mod_headers.so</strong>の記載があればモジュールは入っています</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-511fa57254ff80702114303e0b2dfde4"><code>cat /etc/httpd/conf.modules.d/00-base.conf | grep mod_headers.so</code></pre>



<p class="wp-block-paragraph">次に、「/etc/httpd/conf/httpd.conf」の最後に、<br>「 Header append X-FRAME-OPTIONS “SAMEORIGIN” 」<br>を追加して、apacheを再起動します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c6e82f02e1f51781bb7e5f18d2624ebd"><code>sudo vi /etc/httpd/conf/httpd.conf</code></pre>



<pre class="wp-block-preformatted">・<br>・<br>##--- kazuban added. 2026/04/19<br>ServerTokens ProductOnly<br>ServerSignature off<br>TraceEnable off<br><br><strong>Header append X-FRAME-OPTIONS "SAMEORIGIN"</strong></pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-a16cc5027e70e7b7bf71350c68e22c67"><code>sudo systemctl restart httpd
sudo systemctl status httpd</code></pre>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">ドキュメントルートのトップページの表示</h3>



<p class="wp-block-paragraph">上記<a href="#toc6">セキュリティ対策</a>でトップページが表示されなくなったので、「index.html」を作成し、簡単な表示が出るようにしておきます。</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-60da2fb269a22a13b545f334e6d3d5fe"><code>cd /home/www/html/
cat &lt;&lt;EOF | sudo tee index.html
&lt;html&gt;
  &lt;body&gt;
    &lt;h1&gt;This website is currently under maintenance.&lt;/h1&gt;
  &lt;/body&gt;
&lt;/html&gt;
EOF
sudo chown apache:apache ./index.html
httpd -t
sudo systemctl restart httpd</code></pre>



<p class="wp-block-paragraph">これで、「http://192.168.*.*」でトップページが表示されるようになりました</p>



<h2 class="wp-block-heading">Let’s Encrypt証明書でhttps化</h2>



<p class="wp-block-paragraph">https化を行う場合には、ファイヤーウォールでの許可が必要ですが、<a href="#toc4">上記ですでに許可してます</a>から、ここでは確認だけ行います</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b4186ff6ba37c42bfbb26b64ba12e3fc"><code>sudo firewall-cmd --list-all --zone=public</code></pre>



<p class="wp-block-paragraph">「services: 」に「https」があれば、許可済みです</p>



<h3 class="wp-block-heading">sslモジュール</h3>



<p class="wp-block-paragraph">「mod_ssl」も、<a href="#toc3">上記でインストールされています</a>、確認してみます</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-ec1f5ece7dfc1a471acc9228f95931ce"><code>dnf list installed | grep mod_ssl
httpd -M | grep ssl</code></pre>



<h3 class="wp-block-heading">Certbot クライアントのインストール</h3>



<p class="wp-block-paragraph">Let’s Encryptで証明書の取得には、「Certbot」と言うソフトを利用します<br>パッケージの状態を確認します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-56f1a43f2bc22b0f47d390f0d007012c"><code>dnf list --all | grep certbot</code></pre>



<p class="wp-block-paragraph">複数でてきますが、「certbot.noarch」「python3-certbot-apache.noarch」をインストールします</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0fb8f7c4c018f90c747e3410515c195d"><code>sudo dnf install certbot
sudo dnf install python3-certbot-apache
dnf list installed | grep certbot</code></pre>



<h3 class="wp-block-heading">証明書発行</h3>



<p class="wp-block-paragraph">すでにhttpdが動作している場合には、「webroot プラグイン」を使います<br>動作していない場合には、「Standaloneプラグイン」を使います<br>ただし、両方とも外部から対象のPCの80番ポートへ通信は必要です<br>したがって、<span class="marker-under-red">外部（インターネット側）から、対象のドメインのが名前解決が必要</span>です<br>私は、無料のサービス<a href="https://www.mydns.jp/">https://www.mydns.jp/</a>　を利用させてもらっています<br>80番ポートは「Standalone」の場合は、certbot が占有します<br>「webroot」は、apacheが使います<br>したがって、「webroot」はwebサーバーが動作している必要がありますが、「Standalone」では停止しておく必要があります</p>



<p class="wp-block-paragraph">まず、外部からの80番へのリクエストが、対象のPCアドレスへ転送されるように設定します<br>自宅であれば、ルーターの「ポートマッピング」などの項目で設定できると思います<br>次に、httpdの起動状態を確認</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-a1296986e104f975827e0964cbcfbd00"><code>sudo systemctl status httpd</code></pre>



<p class="wp-block-paragraph">80番と、httpdの起動が確認できたら、certbot を起動しましょう<br>確認はしていませんが、権限が必要なファイルに書き込むので、「su」での起動がいいと思います</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-4ba8ca881eeb9baf701d21cb71a7c981"><code>su
certbot certonly --webroot -w /home/www/html/ -d www2.hogehoge.com -d hogehoge.com</code></pre>



<p class="wp-block-paragraph">対話での設定になります</p>



<pre class="wp-block-preformatted">Saving debug log to /var/log/letsencrypt/letsencrypt.log<br>Enter email address (used for urgent renewal and security notices)<br> (Enter 'c' to cancel): 　　　　　&lt;------自分のEメールアドレスを入力<br><br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>Please read the Terms of Service at<br> https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must<br>agree in order to register with the ACME server. Do you agree?<br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>(Y)es/(N)o: y　&lt;----- 利用規約を読んでください<br><br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>Would you be willing, once your first certificate is successfully issued, to<br>share your email address with the Electronic Frontier Foundation, a founding<br>partner of the Let's Encrypt project and the non-profit organization that<br>develops Certbot? We'd like to send you email about our work encrypting the web,<br>EFF news, campaigns, and ways to support digital freedom.<br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>(Y)es/(N)o: y  &lt;--------- 電子フロンティア財団からEメールが届いてもいいか？<br>Account registered.<br>Requesting a certificate for www2.hogehoge.com and hogehoge.com<br><br><strong>Successfully</strong> received certificate.<br>Certificate is saved at: /etc/letsencrypt/live/www2.hogehoge.com/fullchain.pem<br>Key is saved at:         /etc/letsencrypt/live/www2.hogehoge.com/privkey.pem<br>This certificate expires on 2026-07-18.<br>These files will be updated when the certificate renews.<br>Certbot has set up a scheduled task to automatically renew this certificate in the background.<br><br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>If you like Certbot, please consider supporting our work by:<br> * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate<br> * Donating to EFF:                    https://eff.org/donate-le<br>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -</pre>



<p class="wp-block-paragraph">「<strong>Successfully</strong>」になれば、証明書ファイルは保管されています</p>



<h3 class="wp-block-heading">証明書の設定</h3>



<p class="wp-block-paragraph">証明書を「/etc/httpd/conf.d/ssl.conf」で反映させます<br>まずは、バックアップをとってから、編集します</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c9f4f6792a24ebaf008c4f200f457825"><code>cd /etc/httpd/conf.d
sudo cp -p ssl.conf ssl.conf.org
sudo vi ./ssl.conf</code></pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">/etc/httpd/conf.d/ssl.conf</span></p>



<pre class="wp-block-preformatted">・<br>#SSLCertificateFile /etc/pki/tls/certs/localhost.crt<br>SSLCertificateFile /etc/letsencrypt/live/www2.hogehoge.com/fullchain.pem       <br>・<br>・<br>#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key<br>SSLCertificateKeyFile /etc/letsencrypt/live/www2.hogehoge.com/privkey.pem<br>・</pre>



<p class="wp-block-paragraph">保存後、確認でOKなら、httpd再起動</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-fa9c318bd852eab09b6b9bedf753f887"><code>sudo httpd -t
sudo systemctl restart httpd
sudo systemctl status httpd</code></pre>



<h3 class="wp-block-heading">https:// でのアクセス確認</h3>



<p class="wp-block-paragraph"><a href="#toc11">証明書発行</a>では80番ポーとを通しましたが、httpsでは443ポートを通してておきます<br>ただし、筆者の環境のように、同じLAN上にWebサーバーとアクセスPCがある場合には外部DNSを使用しないので、アクセスできない場合があります<br>その場合、アクセス側PCの「hosts」ファイルで設定しておくと可能になります</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">C:\Windows\System32\drivers\etc\hosts</span>　(windows)</p>



<pre class="wp-block-preformatted">#Server <br>192.168.1.100 hogehoge.com<br>192.168.1.100 www.hogehoge.com<br><br>#TestServer<br>192.168.1.101 www2.hogehoge.com<br></pre>



<p class="wp-block-paragraph">この設定後、「https://www2.hogehoge.com」で正常に<a href="#toc7">「index.html」画面</a>が表示されれば証明書は正常です</p>



<h3 class="wp-block-heading">HTTP/2を利用する</h3>



<p class="wp-block-paragraph">詳細は、<a href="https://www.kazuban.com/blog/rokeylinux9-3-apache/#toc21">こちらを確認</a>してください<br>まず、eventMPMモジュールとhttp2モジュールが必要ですが、Rocky9では、デフォルトで有効になっているようです。<br>確認してみます</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-508dbc3f2d9b458b8bb4923dcd1ee1d7"><code>sudo httpd -M | grep mpm
sudo httpd -M | grep http2</code></pre>



<p class="wp-block-paragraph">次に、「httpd.conf」で有効設定する予定ですが、設定前にhttp2の有効状態を確認してみました<br>確認は、Chromeで「https://www2.hogehoge.com」を表示後、F12キーで表示される開発ページの「Network」「Protocol」で確認できますが、筆者の環境ではすでに「h2」になっていて、http2が有効になっていました。<br>AIに聞いてみると、Apacheのバージョンによっては、有効になっている場合もあるが、明示的に設定をいれる事を推奨するの事なので、設定はしておこうと思います</p>



<p class="wp-block-paragraph">設定は、「/etc/httpd/conf/httpd.conf」で行います</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c6e82f02e1f51781bb7e5f18d2624ebd"><code>sudo vi /etc/httpd/conf/httpd.conf</code></pre>



<p class="wp-block-paragraph">最終行に追加して、httpdを再起動</p>



<pre class="wp-block-preformatted">・<br>&lt;IfModule http2_module&gt;<br>    Protocols h2 http/1.1<br>    ProtocolsHonorOrder on<br>&lt;/IfModule&gt;<br>・</pre>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9f459a92461c6f58d5bb108024b4367d"><code>sudo systemctl restart httpd</code></pre>



<h3 class="wp-block-heading">HTTP/2有効確認</h3>



<p class="wp-block-paragraph">Chromeで「https://www2.hogehoge.com」を表示後、F12キーで表示される開発ページの「Network」「Protocol」で確認できますが、「Protocol」が表示されていない場合があります<br>・開発ページが表示された後、CTRL+R でページを更新<br>・もし、翻訳のダイアログが出た場合には、「日本語」にしてみます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="343" height="159" src="https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-01.png" alt="" class="wp-image-12547" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-01.png 343w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-01-300x139.png 300w" sizes="(max-width: 343px) 100vw, 343px" /></figure>



<p class="wp-block-paragraph">・開発ページが更新されても、デフォルトでは「Protocol」が非表示になっている場合があります<br>・「Network」タブの、「Name」セル上でマウス右ボタンで、表示項目の選択ができるので「Protocol」をチェックする事で、表示されます</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="463" height="171" src="https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-02.png" alt="" class="wp-image-12548" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-02.png 463w, https://www.kazuban.com/blog/wp-content/uploads/2026/04/http2-02-300x111.png 300w" sizes="(max-width: 463px) 100vw, 463px" /></figure>



<p class="wp-block-paragraph">・表示された「Protocol」が、「h2」や「h3」になっていれば、HTTP/2で応答しています</p>



<hr class="wp-block-separator has-text-color has-indigo-color has-alpha-channel-opacity has-indigo-background-color has-background is-style-wide" style="margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50)"/>



<h4 class="wp-block-heading">WordPress環境構築まとめ</h4>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<p class="wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no1/">１</a></span></p>



<p class="wp-block-paragraph"><span class="inline-button-white-blue"><a href="https://www.kazuban.com/blog/wordpress-install-no2/">２</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-7e921fec3f58122595ac300774589944 wp-block-paragraph"><a href="https://www.kazuban.com/blog/wordpress-install-no3/"><span class="inline-button-white-black">３</span></a></p>



<p class="has-black-color has-text-color has-link-color wp-elements-377be188d7b2fd6bc05959bf4f062784 wp-block-paragraph"><a href="https://www.kazuban.com/blog/wordpress-install-no4/"><span class="inline-button-white-black">４</span></a></p>



<p class="has-black-color has-text-color has-link-color wp-elements-065985a560eb3ee4149356900ae8ca04 wp-block-paragraph"><a href="https://www.kazuban.com/blog/wordpress-install-no5/"><span class="inline-button-white-black">５</span></a></p>



<p class="has-light-grey-color has-text-color has-link-color wp-elements-6ffea2dacd2a225d010208a9488b8f07 wp-block-paragraph">６</p>



<p class="wp-block-paragraph"></p>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>RockyLinux9.7で「WordPress環境構築「Vol-01」WindowsからのSSH接続でリモート管理</title>
		<link>https://www.kazuban.com/blog/wordpress-install-no1/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 08:18:05 +0000</pubDate>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[RockyLinux]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[インストール]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12299</guid>

					<description><![CDATA[ひと昔以上前のノートに、「ubuntu」入れてみたのが、２年前 会社でもローカル環境にwordpressでのコミュニティサイトを検討しているので、wordpress環境構築作業に戸惑わないよう、コピペできるよう、まとめま [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">ひと昔以上前のノートに、「ubuntu」入れてみたのが、２年前</p>


<a href="https://www.kazuban.com/blog/ubuntu24-04lts-install/" title="Ubuntu24.04LTSでWorrPressを動作させる。インストール・SSH・ファイヤーウォール" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2024/06/Desktop-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2024/06/Desktop-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2024/06/Desktop-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2024/06/Desktop-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Ubuntu24.04LTSでWorrPressを動作させる。インストール・SSH・ファイヤーウォール</div><div class="blogcard-snippet internal-blogcard-snippet">「Ubuntu24.04LTS」に、「RHEL系、RockyLinux9」と同様の設定で、「WordPress」を動作させます。特に、「apache」の設定方法が違っているので戸惑いました。「RHEL」から移行の方には参考になると思います。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.06.29</div></div></div></div></a>


<p class="wp-block-paragraph">会社でもローカル環境にwordpressでのコミュニティサイトを検討しているので、wordpress環境構築作業に戸惑わないよう、コピペできるよう、まとめました。<br>せっかくなので、RockyLinux10で試してみましたが、筆者の１０数年前のノートPCではインストーラさえ起動しませんでした<br>RockyLinux9.7であれば起動したので、クリーンインストールして再構築しました</p>



<h2 class="wp-block-heading">RockyLinux9.7 ダウンロード・インストール</h2>



<p class="wp-block-paragraph">ダウンロード・インストールの詳細はこちらを確認してください</p>


<a href="https://www.kazuban.com/blog/rockylinux9-3-install/#toc1" title="RockyLinux9.3で自宅サーバーを再構築V01・インストール。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.3で自宅サーバーを再構築V01・インストール。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます</div><div class="blogcard-snippet internal-blogcard-snippet">2023年、このサイトは、centOS7 で構築していますが、サポート終了が近づいてきました。centOS8のサポートも既に終了しています。今回、RockyLinux9.3で再構築した記録のインストール編です。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.05</div></div></div></div></a>


<h3 class="wp-block-heading">有線デバイスを認識しない</h3>



<p class="wp-block-paragraph">wifiを利用していたので、あまり意識しませんでしたが、wifiでのトラブルがあったので、有線LANを利用しようとしましたが、認識しない状況になりました。<br>AIに聞きながらどうにか解決したので、ここに覚書としてメモしておきます</p>



<h4 class="wp-block-heading">インターフェースの確認:</h4>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-eb2bac42de62835be3dda937f8314cc2"><code>nmcli device</code></pre>



<p class="wp-block-paragraph">通常、正常であればここに <code>enp...</code> や <code>eth0</code> といった名称のデバイスが表示されますが<br>リストに出てきませんでした。<br>AIに相談すると</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">リストにないということは、設定の問題ではなく「ドライバが読み込まれていない」か「ハードウェアが認識されていない」可能性が極めて高いです。<br>次の結果を教えてください</p>
</blockquote>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-05331d1794d81ca3a963e891db02c84b"><code>lspci -nn | grep -i net</code></pre>



<pre class="wp-block-preformatted">$ lspci -nn | grep -i net<br><br>08:00.0 Network controller [0280]: Realtek Semiconductor Co., Ltd. RTL8188CE 802.11b/g/n WiFi Adapter [10ec:8176] (rev 01)<br><br>09:00.0 Ethernet controller [0200]: JMicron Technology Corp. JMC250 PCI Express Gigabit Ethernet Controller [197b:0250] (rev 05)</pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">原因が特定できました。搭載されている有線LANコントローラー <strong>「JMicron JMC250 [197b:0250]」</strong> は、Rocky Linux 9 (RHEL 9) の標準カーネルではサポート（ドライバが同梱）されていません。</p>
</blockquote>



<h4 class="wp-block-heading">JMicron用ドライバのインストール</h4>



<p class="wp-block-paragraph"><strong>JMicron JMC250 [197b:0250]」</strong> は、<strong>ELRepo</strong> リポジトリからドライバを提案してもらいましたが、結局、<strong>Rocky Linux 9 (EL9) 用には JMicron [197b:0250] のドライバが提供されていない</strong> ようです</p>



<h4 class="wp-block-heading">「ELRepo-kernel」から<strong>最新カーネル</strong>を試す（成功率：中）</h4>



<p class="wp-block-paragraph">成功率は「中」ですが、新しいカーネルには、稀に古いドライバが復活していたり、汎用ドライバで動く可能性があるとの事なので、やってみます</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-38c823367f30fee553e185a07eadf552"><code># 最新カーネルのインストール
sudo dnf --enablerepo=elrepo-kernel install kernel-ml

# 再起動して、起動メニューで新しいカーネル（数字が大きい方）を選択
sudo reboot</code></pre>



<p class="wp-block-paragraph">再起動後に <code>nmcli device</code> を確認</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-ba213791a48c5d7f3e3dfe53d34c1be2"><code><code>nmcli device</code></code></pre>



<pre class="wp-block-preformatted">DEVICE          TYPE      STATE            CONNECTION     <br>wlp8s0          wifi      接続済み         aterm-e41133-g <br>lo              loopback  接続済み (外部)  lo             <br>enp9s0f0        ethernet  切断済み         --             </pre>



<p class="wp-block-paragraph">認識されました</p>



<h4 class="wp-block-heading">ethernetデバイスを接続する</h4>



<p class="wp-block-paragraph">接続は「nmcli device connect デバイス名」で接続できます</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-689e3afaab145422f4651fa260505282"><code>sudo nmcli device connect enp9s0f0</code></pre>



<p class="wp-block-paragraph">その他、ネットワーク設定は、下記を参考にしてください</p>


<a href="https://www.kazuban.com/blog/rockylinux9-3-install/#toc20" title="RockyLinux9.3で自宅サーバーを再構築V01・インストール。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/rockylinux9-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.3で自宅サーバーを再構築V01・インストール。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます</div><div class="blogcard-snippet internal-blogcard-snippet">2023年、このサイトは、centOS7 で構築していますが、サポート終了が近づいてきました。centOS8のサポートも既に終了しています。今回、RockyLinux9.3で再構築した記録のインストール編です。記事最後のリンクをすべて実行すれば、WordPressサイトが作れます</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.05</div></div></div></div></a>


<h2 class="wp-block-heading">インストール直後の設定</h2>



<h3 class="wp-block-heading">ホームディレクトリの日本語表記を英語表記に変更</h3>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-989e0b2b47a876c70d3818e5d942e9cc"><code>LANG=C xdg-user-dirs-gtk-update</code></pre>



<h3 class="wp-block-heading">特定のユーザーにsudo を可能にする</h3>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-9c474bf7692b74cdd36e3b156951b4db"><code>su
visudo</code></pre>



<p class="wp-block-paragraph">visudo で、コメント行になっている、下記の「#」を外し有効にします<br>%wheel  ALL=(ALL)       NOPASSWD: ALL</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-preformatted">・
・
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

・
## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL

</pre>



<p class="wp-block-paragraph">その後、特定ユーザーを、「wheel」グループに追加すればそのユーザーはパスワードなしで「sudo」実行が可能になります</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-e66091ba4547686988def2a935003ee9"><code>usermod -aG wheel hogehoge</code></pre>



<h2 class="wp-block-heading">SSH利用状況の確認</h2>



<p class="wp-block-paragraph">RockyLinux9では、ほとんどの選択でsshは自動起動している状態になっています。<br>動作は、「ssh」コマンドで確認できます</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-e210674ccc3e2c117da4c3dd2b01f946"><code>ssh</code></pre>



<p class="wp-block-paragraph">usage: ssh [・・・・」のような<br>コマンドの使い方を示すヘルプメッセージが表示されれば動作しています<br>また、sshサービスはファイヤーウォールでの制限対象ですが、こちらも標準では許可されていますが、確認しておきます<br>詳細は、下記記事を参照してください</p>


<a href="https://www.kazuban.com/blog/rockylinux9-3-firewalld/" title="RockyLinux9.３で自宅サーバーを再構築V03・firewalldでアクセス制御" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/11/Firewall-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/11/Firewall-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/Firewall-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/11/Firewall-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.３で自宅サーバーを再構築V03・firewalldでアクセス制御</div><div class="blogcard-snippet internal-blogcard-snippet">firewalldを少し詳しく調べていました。一例として、sshサービスを、LAN内（指定アドレス）からのみ接続可能な設定にしました。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.06</div></div></div></div></a>


<p class="wp-block-paragraph">ここでは、sshの許可状態だけ確認します</p>



<h3 class="wp-block-heading">firewalldでのsshの確認</h3>



<p class="wp-block-paragraph">まず、「firewalld」の起動状態を確認してみます</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-264da623b30615bb5dff99a6b42c8751"><code>systemctl status firewalld</code></pre>



<p class="wp-block-paragraph">これで、<span class="inline-button-white-green">active (running)</span>になっていれば、起動しています</p>



<p class="wp-block-paragraph"><br>ファイヤーウォールのアクセスルール対象となるのはアクティブゾーンになります<br>まずは、アクティブゾーンを確認します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-5a31ac658536adf047471b954cf52c16"><code> sudo firewall-cmd --get-active-zones</code></pre>



<pre class="wp-block-preformatted">public<br>  interfaces: wlp8s0</pre>



<p class="wp-block-paragraph">アクティブゾーンは「public」のみと言うのがわかりました<br>今回は「ssh」の許可状態は「public」の設定で確認すればわかります</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-b4186ff6ba37c42bfbb26b64ba12e3fc"><code>sudo firewall-cmd --list-all --zone=public</code></pre>



<pre class="wp-block-preformatted">public (active)<br>  target: default<br>  icmp-block-inversion: no<br>  interfaces: wlp8s0<br>  sources: <br>  services: cockpit dhcpv6-client <strong>ssh</strong><br>  ports: </pre>



<p class="wp-block-paragraph">「services」に、「ssh」があるので、許可されています</p>



<h2 class="wp-block-heading">SSHでリモート操作</h2>



<p class="wp-block-paragraph">上で確かめたように、RockyLinux9では、デフォルトでsshサービスもファイヤーウォールでの許可も利用可能な状態になっています。<br>「ssh」コマンドでアクセスしてみましょう。<br><span class="inline-button-white-black">windows</span><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-2c86f09525352778c57ccf824fbc896f"><code>ssh hogehoge@192.168.*.* -p 22</code></pre>



<p class="wp-block-paragraph">ssh 「Linux側のユーザー@IPアドレス」 でパスワード入力で接続できます<br>「-p 22」は、ポート番号指定です。sshはデフォルトでは２２番ポートです。<br>デフォルトであれば、省略できます。<br>「-p 22」はオプションですが、違うポート番号の場合は、その番号を指定します。<br>また以前ポート番号などを変更していたなどで接続できない事もあります<br>その場合には、標準ポート番号「22」を指定する事で接続できるようになります<br>windowsターミナルでも同じコマンドです<br>接続ができれば、windowsから、Linuxマシンを殆どリモートで設定できます　<br>ローカル内だけでの運用であれば、この設定でもいいかもしれませんが、後ほどポート番号変更と鍵認証方式に変更しようと思います</p>



<h2 class="wp-block-heading">インストール後の設定２（SSHでも可）</h2>



<h3 class="wp-block-heading">まずは、パッケージのアップデート</h3>



<p class="wp-block-paragraph">sshアクセスができれば、windowsターミナルからでも操作できまます<br>インストール初期のアップデートで、<strong>依存関係の競合</strong>とかでエラーが表示される事があります<br>エラーメッセージでは、「<strong><code>--skip-broken</code></strong>」の付加のアドバイスが出ますが、ついでに「&#8211;allowerasing」オプションも追加したほうがいいようです</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-dbf7b835c8d9beee855cf791b2820f27"><code>sudo dnf update --skip-broken --allowerasing
sudo reboot</code></pre>



<h3 class="wp-block-heading">SELinuxに強制させない設定</h3>



<p class="wp-block-paragraph">SELinuxはセキュリティをより強固にする機能で、RockyLinuxなどRedHat系では標準で有効になっていますが、思うように動作しないトラブルも多いようです。<br>ポリシーを読み込まず、無効的な状態にする方法もありますが、警告のみでポリシーを強制しない「Permissiveモード」に設定にしようと思います</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-21ce97d967f607276247f2f467d51cd4"><code>su
vi /etc/selinux/config</code></pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">editor</span></p>



<pre class="wp-block-preformatted">・
・
#SELINUX=enforcing
SELINUX=permissive
・
・</pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0da292311d89960f07dcab0d8a7f99f3"><code>reboot</code></pre>



<p class="wp-block-paragraph">再起動後、確認</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-2d0d180678d16125e959d48fb08c170e"><code>sudo getenforce</code></pre>



<p class="wp-block-paragraph">「Permissive」が返ってくれば、設定されています</p>



<h3 class="wp-block-heading">設定中に本体のGUIがクラッシュした</h3>



<p class="wp-block-paragraph">外部PCからsshで操作していて、たまに戻ると、画面がクラッシュしている場合があります<br>これはGUIのディスプレイマネージャー（gdm）がロックやスリープ状態になっているか、セッションがクラッシュしている場合に起こるようです</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h4 class="wp-block-heading">復旧方法：キーボードショートカットで復旧</h4>



<p class="wp-block-paragraph">私の状況は、マウスカーソルだけが動く状態だったので、その画面で：</p>



<ul class="wp-block-list">
<li><code>Ctrl + Alt + F2</code>（または F3〜F6）を押す → テキストコンソールに切り替え</li>



<li>ログイン後、以下を実行：</li>
</ul>
</blockquote>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-242d59062325eee127c4667a28c54431"><code>systemctl restart gdm</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>Ctrl + Alt + F1</code>（または F7）でGUI画面に戻る</p>
</blockquote>



<h3 class="wp-block-heading">恒久対策として：スリープ・省電力設定を無効化する</h3>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0a8f75a95b8934b186dc361edf762568"><code># GNOMEのスクリーンセーバー・自動サスペンドを無効化
sudo -u ユーザー名 gsettings set org.gnome.desktop.screensaver lock-enabled false
sudo -u ユーザー名 gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'</code></pre>



<p class="wp-block-paragraph">このコマンドは、私の環境でSSH経由では、X11のDISPLAY環境変数がないとのエラーになりました<br>ssh経由の場合には、DISPLAY変数を指定して実行します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-a65d404f71ba944ea071de0a2531ff44"><code>sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings set org.gnome.desktop.screensaver lock-enabled false
sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'</code></pre>



<p class="wp-block-paragraph">確認方法</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-e5ac6b0bd24ebadb90b5b2be5d764f06"><code>sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings get org.gnome.desktop.screensaver lock-enabled
sudo -u ユーザー名 DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ユーザー名)/bus gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type</code></pre>



<p class="wp-block-paragraph">下記の結果がでれば、正常に反映されている</p>



<pre class="wp-block-preformatted">false
'nothing'</pre>



<h3 class="wp-block-heading">CUIモードをデフォルトにする</h3>



<p class="wp-block-paragraph">SSH経由でのリモートがほとんどになれば、CUIモードのほうがトラブルは少なそうなので、CUIモードに設定します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c3178d498b5bb57fa97fd43b6d8c437a"><code>sudo systemctl set-default multi-user.target</code></pre>



<p class="wp-block-paragraph">これで、再起動後はGUIなしで起動します。<br>もし、GUIが必要になったら、</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d57fa7f501579522f9c93807506dcb59"><code>sudo systemctl start gdm</code></pre>



<p class="wp-block-paragraph">再度GDMを停止させCUIに戻るには、サーバー機で操作できる場合には</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>Ctrl</code> + <code>Alt</code> + <code>F2</code> </p>
</blockquote>



<p class="wp-block-paragraph">または、リモートも含めたコマンド操作の場合は</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-08bfc53d6227476c5eac17bbb1f1b4df"><code>sudo systemctl stop gdm</code></pre>



<p class="wp-block-paragraph">このコマンド操作で、画面が止まったように見える場合は、サーバー機で</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">上記の <code>Ctrl</code> + <code>Alt</code> + <code>F2</code> </p>
</blockquote>



<h2 class="wp-block-heading">SSHのセキュリティ向上対策</h2>



<h3 class="wp-block-heading">SSHを鍵認証方式で運用</h3>



<p class="wp-block-paragraph">「鍵認証方式」は、「秘密鍵」と「公開鍵」のペアの鍵を作成し、アクセスする側は「秘密鍵」が必要になり、アクセスされる（サーバー）側には、「公開鍵」を登録します<br>一般的には、アクセス側で鍵を生成し、「公開鍵」の登録をサーバーへお願いします<br>鍵生成は、windowsでもLinuxでも、「ssh-keygen」コマンドで生成できます<br>今回は、windowsターミナルで生成します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-f485f29dad86e220f0299c4721d2a893"><code>ssh-keygen -t ed25519</code></pre>



<pre class="wp-block-preformatted">Generating public/private ed25519 key pair.<br>Enter file in which to save the key (C:\Users\hogehoge/.ssh/id_ed25519):<br>Enter passphrase (empty for no passphrase):<br>Enter same passphrase again<br>Your identification has been saved in C:\Users\hogehoge/.ssh/id_ed25519<br>Your public key has been saved in C:\Users\hogehoge/.ssh/id_ed25519.pub<br>The key fingerprint is:<br>SHA256:o2ojnUu7UflR12VZq2yOcTY/Ky-VzibafGh/PJbPe6C hogehoge@hoge-Pc<br>The key's randomart image is:<br>+--[ED25519 256]--+<br>|             .+.o|<br>|               Oo|<br>|     o + o .   . |<br>|    . Z   . . o..|<br>|    . o     . *AC|<br>+----[SHA256]-----+</pre>



<h3 class="wp-block-heading">秘密鍵のアクセス権限を厳しく設定</h3>



<p class="wp-block-paragraph">下記のアクセス権の設定は<span class="marker-under">、windowsターミナルでの操作コマンドです。</span><br><a href="https://www.kazuban.com/blog/rockylinux9-3-ssh/#toc6">Linuxでの操作は、こららを参考</a>にしてください</p>



<p class="wp-block-paragraph"><strong>継承の無効化と権限のクリア</strong></p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-55057d8137d3225f853cd8fbb2b997d1"><code>icacls "$HOME\.ssh\id_ed25519" /inheritance:r</code></pre>



<p class="wp-block-paragraph"><strong>ユーザーにのみ読み取り権限を付与</strong></p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1fec2829fc7f6149c61f5520e00e7edb"><code>icacls "$HOME\.ssh\id_ed25519" /grant:r "$($env:USERNAME):R"</code></pre>



<p class="wp-block-paragraph"><strong>「自分自身」以外のユーザー権限を削除</strong></p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-fb9acaff7a71f8e5ab9e61371e31a6e4"><code>icacls "$HOME\.ssh\id_ed25519" /remove "SYSTEM"
icacls "$HOME\.ssh\id_ed25519" /remove "Administrators"
icacls "$HOME\.ssh\id_ed25519"</code></pre>



<p class="wp-block-paragraph">エクスプローラの「プロパティ」⇒「セキュリティ」でも確認できます</p>



<h3 class="wp-block-heading">公開鍵をサーバー側へコピー</h3>



<p class="wp-block-paragraph">作成した、「id_ed25519.pub」をサーバー側ユーザーの「.ssh」ディレクトリへコピー<br>・windowsの自分自身のホームの「.ssh」に移動<br>・scp コマンドへ、サーバー側ユーザーの「.ssh」へコピー</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-77f112f24c6ea76369f385fb3a48c926"><code>cd $HOME\.ssh
scp .\id_ed25519.pub hogehoge@192.168.*.*:.ssh</code></pre>



<h3 class="wp-block-heading">サーバー側へsshでログインし操作</h3>



<p class="wp-block-paragraph">windows側から、sshログインし、「.ssh」ディレクトリへ移動し確認</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-cbb30455ff64f53a0a4d20201e381f9b"><code>ssh hogehoge@192.168.*.*</code></pre>



<p class="wp-block-paragraph">ログイン後、コピーされているか、確認</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d311e1c2cf25a2b1e3449f544dac3aae"><code>cd ./.ssh
ls -la</code></pre>



<h3 class="wp-block-heading">公開鍵を保存ファイル（authorized_keys）へ登録</h3>



<p class="wp-block-paragraph">コピーされた公開鍵を、保存用のファイルへ登録し、そのファイルのアクセス権は厳しくします<br>持ってきて、公開鍵は削除しておきます</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span><span class="inline-button-white-black">linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-5fa8cfde406b789b7eac31f01da73ff7"><code>cd ~/.ssh 
cat id_ed25519.pub &gt;&gt; authorized_keys 
chmod 600 authorized_keys
rm id_ed25519.pub
exit</code></pre>



<h3 class="wp-block-heading">再度、鍵を使って、SSHログイン</h3>



<p class="wp-block-paragraph">ssh に「i」オプションで鍵指定</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">windows</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1975d4201d15ea6f3a10809dd2ddff6c"><code>ssh -i .ssh/id_ed25519 hogehoge@192.168.*.*</code></pre>



<p class="wp-block-paragraph">ログイン時、鍵生成時登録したパスフレーズを入力し、ログイン</p>



<h3 class="wp-block-heading">鍵認証以外ではログイン拒否</h3>



<p class="wp-block-paragraph">鍵を使ってのログインが確認できたら、鍵以外でのログインは拒否する設定をしておきます<br>設定は、「/etc/ssh/sshd_config」ファイルの”PasswordAuthentication”を&#8221;no&#8221;に設定します<br>まずは、ファイルをバックアップして、編集します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span><span class="inline-button-white-black"> linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-07092de14441928c5bd57c322f761275"><code>sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
sudo vi /etc/ssh/sshd_config</code></pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">editor</span></p>



<pre class="wp-block-preformatted">・<br>・<br>#PasswordAuthentication yes<br>PasswordAuthentication no<br>・<br>・<br></pre>



<h3 class="wp-block-heading">ついでにリモートからのROOTログインも拒否設定します</h3>



<p class="wp-block-paragraph">「/etc/ssh/sshd_config」ファイルの”PermitRootLogin”も&#8221;no&#8221;に設定</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">editor</span></p>



<pre class="wp-block-preformatted">・<br>・<br>#PermitRootLogin prohibit-password<br>PermitRootLogin no<br>・<br>・</pre>



<h3 class="wp-block-heading">さらに、ポート番号を変更</h3>



<p class="wp-block-paragraph">「ssh」のポートは「22番」が標準なので、自動スキャンなどのアタックが増えるので、違う番号に変更しておきます。<br>ポート番号も「/etc/ssh/sshd_config」ファイルの”Port”で設定します<br>ポート番号は登録済み番号などもあるので、49152–65535の範囲に設定します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">editor</span></p>



<pre class="wp-block-preformatted">・<br>・<br>#Port 22<br>Port 55522<br>・<br>・</pre>



<p class="wp-block-paragraph">「22番」は「ssh」サービスのデフォルトなので、firewalldの設定でsshは「22番」になります<br>firewalld設定は、ポート番号を直接設定する事もできますが、やはりsshのポート番号を変更する方法がfirewalldは再起動だけで、設定は不要なのでスマートだと思います<br>デフォルト設定は、「 /usr/lib/firewalld/services/ ssh.xml 」に保存されているので、<br>そのファイルを「 /etc/firewalld/services /」にコピーして編集します。</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span><span class="inline-button-white-black"> linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-aea5200a7fb91738b5f94bf845a5468d"><code>sudo cp -p /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
sudo cd /etc/firewalld/services/
sudo ls /etc/firewalld/services/
sudo vi /etc/firewalld/services/ssh.xml</code></pre>



<p class="wp-block-paragraph"><span class="inline-button-white-black">editor</span></p>



<pre class="wp-block-preformatted">・<br>・<br>&lt;port protocol="tcp" port="22"/&gt;<br>↓<br>&lt;port protocol="tcp" port="55522"/&gt;<br>・<br>・</pre>



<p class="wp-block-paragraph">sshとfirewall　サービスを再起動して、アクセスにはポート番号を明示します</p>



<p class="wp-block-paragraph"><span class="inline-button-white-black">ssh</span><span class="inline-button-white-black"> linux</span></p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-7ad2547c0964f6674c7bd7a39177265f"><code>sudo systemctl reload sshd.service
sudo firewall-cmd --reload
ssh  -p 55522 hogehoge@192.168.*.*</code></pre>



<p class="wp-block-paragraph">ここまでで、RockyLinux9.7のインストールと、やっておきたい初期設定を解説しました<br>「ssh」の設定も完了しているので、windowsターミナルからでも実行できます</p>



<hr class="wp-block-separator has-text-color has-indigo-color has-alpha-channel-opacity has-indigo-background-color has-background is-style-wide" style="margin-top:var(--wp--preset--spacing--50);margin-bottom:var(--wp--preset--spacing--50)"/>



<h4 class="wp-block-heading">WordPress環境構築まとめ</h4>



<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex">
<p class="wp-block-paragraph"><span class="inline-button-white-blue"><a href="https://www.kazuban.com/blog/wordpress-install-no1/">１</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-f04e8d7fb6e2787b0f3d9b4d2d85c493 wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no2/">２</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-1476c951253852d4a55d81c877244e82 wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no3/">３</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-a2aa1b38f71c6b12de00dd0cb2c11bed wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no4/">４</a></span></p>



<p class="has-black-color has-text-color has-link-color wp-elements-eceba6d3b11b45ccabb96c64463aa72c wp-block-paragraph"><span class="inline-button-white-black"><a href="https://www.kazuban.com/blog/wordpress-install-no5/">５</a></span></p>



<p class="has-light-grey-color has-text-color has-link-color wp-elements-6ffea2dacd2a225d010208a9488b8f07 wp-block-paragraph">６</p>



<p class="wp-block-paragraph"></p>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Python正規表現に挑戦 ― Fanuc系NCブロックをNCワードに分解させる</title>
		<link>https://www.kazuban.com/blog/python-regex/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 00:40:01 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[NC]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[G-Code]]></category>
		<category><![CDATA[ＮＣデータ]]></category>
		<category><![CDATA[NCプログラム]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=12021</guid>

					<description><![CDATA[このサイトでは、NCデータの解析・変換などの自作アプリを公開しています。これまでは C++Builder で自作ライブラリを作成し開発してきました。独学ゆえに効率や可読性など課題は沢山ありますが、いまさら見直す気にもなり [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">このサイトでは、<a href="https://www.kazuban.com/blog/free_soft/">NCデータの解析・変換などの自作アプリを公開</a>しています。<br>これまでは C++Builder で自作ライブラリを作成し開発してきました。<br>独学ゆえに効率や可読性など課題は沢山ありますが、いまさら見直す気にもなりません。<br>最近は Python の学習もかねてNCデータ解析ライブラリのpythonへの移行を考えています。<br>AI の登場で、素人でも高度なコードを得られる時代になりましたが、意味を理解せずに使うのはやはり危険ですし、プログラミングスキルは向上しません。<br>この記事を書くきっかけは<br>「Fanuc系NCブロックをNCワードに分割させる、pythonスクリプトをだして」<br>へのAIの回答に正規表現が使われていた事から始まりました<br>本記事では、「一見意味不明な呪文のような正規表現」を理解して行く過程を記事にしました。</p>



<h2 class="wp-block-heading">正規表現</h2>



<p class="wp-block-paragraph">正規表現の情報は、ネット上に豊富にあると思うので、詳細は検索してみてください。<br>下記は「正規表現」の説明をAIに聞いてみた回答です</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h3 class="wp-block-heading"><a>概要</a></h3>



<p class="wp-block-paragraph">本チャットログでは、「正規表現（Regular Expression）」の基本要素について、最小限かつ代表的な機能に絞って説明している。主な用途は文字列の検索・置換・抽出であり、「文字列パターンを表現する小さな言語」として位置付けている。</p>



<h3 class="wp-block-heading"><a>1. </a>文字列とリテラル</h3>



<ul class="wp-block-list">
<li>abc
<ul class="wp-block-list">
<li>文字列「abc」にそのままマッチするパターン。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><a>2. </a>メタ文字（特別な意味を持つ記号）</h3>



<ul class="wp-block-list">
<li>. : 任意の1文字</li>



<li>^ : 行頭</li>



<li>$ : 行末</li>



<li>* : 直前要素の0回以上の繰り返し</li>



<li>+ : 直前要素の1回以上の繰り返し</li>



<li>? : 直前要素の0回または1回</li>



<li>| : OR（または）</li>



<li>() : グループ化・キャプチャ</li>
</ul>



<h4 class="wp-block-heading"><a>具体例</a></h4>



<ul class="wp-block-list">
<li>a.*b
<ul class="wp-block-list">
<li>「a」で始まり「b」で終わる行全体にマッチ（間の文字列は任意長）</li>
</ul>
</li>



<li>colou?r
<ul class="wp-block-list">
<li>color または colour にマッチ（u がある/ない両方に対応）。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><a>3. </a>繰り返し回数の指定（量指定子）</h3>



<ul class="wp-block-list">
<li>{n} : ちょうど n 回</li>



<li>{n,} : n 回以上</li>



<li>{n,m} : n〜m 回</li>
</ul>



<h4 class="wp-block-heading"><a>具体例</a></h4>



<ul class="wp-block-list">
<li>\d{3}-\d{4}
<ul class="wp-block-list">
<li>123-4567 のような「数字3桁-数字4桁」形式にマッチ。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><a>4. </a>文字クラス</h3>



<ul class="wp-block-list">
<li>[abc] : a か b か c のいずれか1文字</li>



<li>[^abc] : a,b,c 以外の1文字</li>



<li>[0-9] : 数字</li>



<li>[A-Za-z] : 英字（大文字・小文字）</li>
</ul>



<h3 class="wp-block-heading"><a>5. </a>代表的なエスケープシーケンス</h3>



<p class="wp-block-paragraph">多くの処理系で共通して使われるもの。</p>



<ul class="wp-block-list">
<li>\d : 数字 [0-9]</li>



<li>\w : 単語構成文字（英数字 + _）</li>



<li>\s : 空白文字（スペース・タブ・改行など）</li>



<li>\D : 非数字（\d 以外）</li>



<li>\W : 非単語構成文字（\w 以外）</li>



<li>\S : 非空白文字（\s 以外）</li>
</ul>



<h3 class="wp-block-heading"><a>6. </a>エスケープが必要な記号</h3>



<p class="wp-block-paragraph">次の文字はメタ文字として特別な意味を持つため、そのままの記号として扱うにはバックスラッシュでエスケープする必要がある。</p>



<ul class="wp-block-list">
<li>対象文字
<ul class="wp-block-list">
<li>. * + ? ^ $ ( ) [ ] { } | \</li>
</ul>
</li>



<li>使用例<ul><li>\. : ドットそのものにマッチ</li></ul>
<ul class="wp-block-list">
<li>\? : 疑問符そのものにマッチ</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading"><a>補足</a></h3>



<p class="wp-block-paragraph">ここまでが「基本の道具」としての正規表現の要素一式であり、今後はこれらを組み合わせて「メールアドレスの簡易チェック」など、実用的なパターン作成にも応用できると示唆している。</p>
</blockquote>



<p class="wp-block-paragraph">個別でみれば、なんとなくわかる気もしますが、これが組み合わさると、まったく呪文です<br>ただ、いろんなパターンの質問とAIの回答を照らし合わせると、なんとなく理解できてくるので、正規表現にかぎらず、AIは言語学習資料としても本当に役立ちます。</p>



<h2 class="wp-block-heading">ファナック系、NCデータ構造</h2>



<p class="wp-block-paragraph">NCデータの分析ソフトを検討する場合、NCデータ構造の知識は必須です<br>NCデータの知識がないまま、AIの回答だけで進めると、間違いなく後々苦労します<br>ファナック系のプログラム構造は、下記記事でも紹介しています</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/nc-gcode-01/#toc2" title="NCプログラム／プログラム構造" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="203" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1.png 879w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1-300x266.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1-768x681.png 768w" sizes="(max-width: 203px) 100vw, 203px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">NCプログラム／プログラム構造</div><div class="blogcard-snippet internal-blogcard-snippet">最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。ＮＣプログラムとは？ＮＣ工作機械のコントローラへの指令の集まりです。プログラムとありますが、ファナック系は基本的には命令コード...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2019.11.30</div></div></div></div></a>
</div></figure>



<h3 class="wp-block-heading has-text-align-left">
「ワード」＝「アドレス」+「数字・数値」<br>
「ブロック」＝「ワード」の集まり<br>
「NCデータ」＝「ブロック」の集まり
</h3>



<p class="wp-block-paragraph">NCブロックからNCアドレスを抽出する課題なので、NCコードを少し復習しておきます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png" alt="" class="wp-image-1338" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-300x77.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-768x197.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">ブロックの末尾は制御器では「EOB」ですが、PC側では改行コードになります<br>改行コードはOSにより変わりますが、基本的にアスキー形式での転送で大丈夫だと思います<br>NCデータの最小単位は、「ワード」と呼ばれていて、<br>「アルファベット一文字」+「数字、符号、小数点」が一塊になっている要素です<br>例えば「G02」とか「X-12.345」の構成です。<br>先頭のアドレス文字で機械への指令の種類を表し、ワードで具体的な指令になります<br>この「ワード」が集まり、一行の構成になった文字列が「ブロック」と呼ばれます<br>さらに、「ブロック」が複数行あつまって、NCデータになります<br>CAM利用の場合、作成したNCデータファイルをNC機械へ転送し加工動作を制御します<br>分析ソフトを検討する場合、まずはNCデータをブロックに、ブロックをワードに分解したほうが整理しやすいです<br>今回の課題では、<span class="marker-under-red">正規表現</span>を利用して<span class="marker-under">「ブロック」を「ワード」に分解する</span>コードを作成します<br>やりたい事をAIに投げかけると、それなりの回答をもらえます。<br>ただ、ＮＣコードのように、機種依存や複雑な表現がある場合、AIへすべて完ぺきなコードを期待してもなかなか思うような回答は得られません。<br>また、最初は良くても開発を進めていくうちに、改造したくなる場合もあります<br>やはり、ある程度の理解は必要です。</p>



<h2 class="wp-block-heading">ブロックから正規表現でワードに分解する</h2>



<p class="wp-block-paragraph">具体的に正規表現を書き、「ワード」に分解した結果と照らし合わせながら理解を進めようと思います<br>「ワード」＝「大文字アルファベット一文字」+「数字」なので、一番単純な正規表現のパターンは、&#8221;[A-Z]\d&#8221;になります<br>また、正規表現パターンで、文字列から部分文字列を抽出するのに、AIは「re.findall関数」を教えてくれました<br>（findall関数についての詳細は、ネット検索やAIに聞いてみてください）<br>サンプル文字列は複数のパターンを織り交ぜた、&#8221;G0G1G00 G03M3 T102M30&#8243;　でやってみます<br>（文字列並びのみのサンプルで、NCデータとしては意味ありません）</p>



<h3 class="wp-block-heading">アドレスと数字抽出</h3>



<pre class="wp-block-code"><code>import re

block = "G0G1G00 G03M3 T102M30" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]\d</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G0', 'G1', 'G0', 'G0', 'M3', 'T1', 'M3']</code></pre>



<p class="wp-block-paragraph">ちょっと期待とは違いますが、とりあえずは、アドレスと数字がリストで取り出せました<br>たった一行で分解された文字列リストが作成されました、すごいですね～<br>一文字づつ文字列操作で処理させたら、結構なコード量になっていると思います<br>ただ、「\d」としたため、「数字は<strong>一文字</strong>」しか抽出してくれませんでした<br>ここで「\d{2}」としてみると、「数字二文字」のみ取り出してくれます<br>今回の例ですべて取り出すには「\d{1,3}」とすればすべてヒットします<br>「\d+」でも同様の結果になりますが、こちらの方は文字数制限はなくなります<br>今回のサンプルでは、&#8221;[A-Z]\d+&#8221;で行こうと思います<br>ちなみに、「\d{0}」とすると、アドレスのみ取り出せます。</p>



<pre class="wp-block-code"><code>import re

block = "G0G1G00 G03M3 T102M30" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]\d+</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G0', 'G1', 'G00', 'G03', 'M3', 'T102', 'M30']</code></pre>



<h3 class="wp-block-heading">さらに、アドレスと数字を分けて抽出したい場合</h3>



<p class="wp-block-paragraph">グループ化と呼ばれる（丸括弧）でパターンを囲むと「tuple」として分離してくれます<br>抽出した後の処理内容によっては、こちらが便利かもしれません</p>



<pre class="wp-block-code"><code>import re

block = "G0G1G00 G03M3 T102M30" # サンプルNCブロック文字列
words = re.findall(r"<strong>(&#91;A-Z])(\d+)</strong>", block)
print(f"{words}")
for addr, val in words:
    print(f"addr={addr}:val={val}")

#---------- 結果 --------------
#&#91;('G', '0'), ('G', '1'), ('G', '00'), ('G', '03'), ('M', '3'), ('T', '102'), ('M', '30')]
#addr=G:val=0
#addr=G:val=1
#addr=G:val=00
#addr=G:val=03
#addr=M:val=3
#addr=T:val=102
#addr=M:val=30</code></pre>



<h3 class="wp-block-heading">軸（X,Y,Z・・）の小数点にも対応させる</h3>



<p class="wp-block-paragraph">ここまでは、GやMコードでしたが、軸指令に対応するには、<span class="marker-under">符号や小数点</span>も考慮する必要があります<br>余談ですがプログラミング初心者の場合勘違いしやすいのが、<span class="marker-under-red"><strong>数字</strong>と<strong>数値</strong>の違い</span>です。<br>「12.23」の場合、<strong>数値</strong>としては「12 + 0.23」のように演算ができますが、<br><strong>数字</strong>の場合は、「1」「2」「.」「2」「3」と途中に「.」があるだけのただの数字文字の連続です<br>正規表現の場合も、数字・符号・小数点の<strong>文字の集まり</strong>として処理するので、数値で考えてしまうと期待と違う結果になり、悩む事になります<br>さて、文字を意識してサンプル文字列データに軸指令を追加して、上記のコードで実行してみます</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 <strong>X12.5Y+20.3Z-5.63</strong>F1000" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]\d+</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12', 'F1000']</code></pre>



<p class="wp-block-paragraph">やはりこのコードでは、±符号と小数点が入るとマッチしないので、省かれてしまいますね<br>まず符号に対応するためにはアドレス「A-Z」の後に[+-]を追加します</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.5Y+20.3Z-5.63F1000" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]&#91;+-]\d+</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'Y+20', 'Z-5']</code></pre>



<p class="wp-block-paragraph">これでは、符号「+-」が必須に判断され符号付の文字列しかヒットしませんでした<br>符号文字は<span class="marker-under">「無くてもいい」</span>の意味で<span class="marker-under"><strong>[+-]?</strong></span>としてみます</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.5Y+20.3Z-5.63F1000" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]&#91;+-]?\d+</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12', 'Y+20', 'Z-5', 'F1000']</code></pre>



<p class="wp-block-paragraph">符号部分を<span class="marker">[+-]?</span> とすることで、符号がなくてもマッチするようになりました<br>次に小数点とそれ以下にも対応させてみましょう<br>NC制御器は、数値として扱いますが、文字としての小数点の扱いは結構面倒です。<br>小数点がある場合、ない場合、小数点から始まる場合、小数点で終わる場合・・など<br>まずは、小数点の有無に対応させるため、「<strong>\d+\.\d+</strong>」を考えましたが、<br>この場合、小数点がないとマッチしなくなります<br>そこで「？を付加」すれば「無くてもいい」にも対応できます</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.5Y+20.3Z-5.63F1000" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]&#91;+-]?\d+\.?\d+</strong>", block)
print(f"{words}")

#---------- 結果 --------------
&#91;'G90', 'G01', 'X12.5', 'Y+20.3', 'Z-5.63', 'F1000']
</code></pre>



<p class="wp-block-paragraph">だいぶ理想に近づいてきましたが、「X.124」や「23.」など、小数点での始まりや終わりには対応できません<br>サンプル文字列に追加して確かめてみましょう</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.50Y+20.3Z-5.63 <span class="marker"><strong>I.5 J22.</strong></span>F1000" # サンプルNCブロック文字列
words = re.findall(r"<strong>&#91;A-Z]&#91;+-]?\d+\.?\d+"</strong>, block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', '<span class="marker-red">J22</span>', 'F1000</code></pre>



<p class="wp-block-paragraph">やはり、「I.5」にはマッチせず「J22.」の「.」は省かれていますね<br>ここも余談ですが、NCで「<strong>22.</strong>」を「<strong>22</strong>」に変換してしまった場合、制御器によってはとんでもない事になりかねないので十分意識しておく必要があります。<br><br>整理してみると</p>



<ul class="wp-block-list">
<li>[A-Z]：NCコードのアドレス</li>



<li>[+-]?：必須ではない、符号</li>



<li>\d+：複数個の数字<br>ここまでで、「Gコード」「Mコード」には対応できている</li>



<li>\.?：小数点は必須でない</li>



<li>\d+：複数個の数字</li>
</ul>



<p class="wp-block-paragraph">やはり、「小数点で終わる」場合「\.?」なので、省略されてしまいますね<br>ではどうすればいのか？<br>AIに聞いたところ、グループ化と言う方法があり、&#8221;( )&#8221;で囲む事で、一塊としてでマッチングのルール設定できるようです<br>ただし、&#8221;( )&#8221;では、囲みごとに分割されタプルのリストとして抽出されます<br>グループごとに分割させたくない場合には<span class="marker-under"><strong>&#8220;(?: )</strong>&#8220;で囲む</span>仕様があり<span class="marker-under">非キャプチャグループ</span>と呼ばれマッチングのルールには使用するが分割はされないようです。<br>今回の例では、分割させたくないので、&#8221;<strong>(?: )</strong>&#8220;を使ってみます<br>最後の「\d+：複数個の数字」をグループ化して、必須ではない複数個の数字として設定します</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.50Y+20.3Z-5.63 <span class="marker"><strong>I.5 J22.</strong></span>F1000" # サンプルNCブロック文字列
words = re.findall(r"&#91;A-Z]&#91;+-]?\d+\.?<strong>(?:\d+)?</strong>", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', '<span class="marker"><strong>J22.</strong></span>', 'F1000']</code></pre>



<p class="wp-block-paragraph">これで、「22.」には対応できました。次は、小数点で始まる「.5」の場合です。<br>ここまででも、結構な呪文になっているのに、さらに複雑になりそうです。<br>ここもAIに相談すると、グループの中で（A | B）の書式で「AまたはB」とマッチング範囲の選択ができるようで、この書式での書き方を教えてくました</p>



<pre class="wp-block-code"><code>import re

block = "G90G01 X12.50Y+20.3Z-5.63 <span class="marker"><strong>I.5 J22.</strong></span>F1000" # サンプルNCブロック文字列
words = re.findall(r"&#91;A-Z]&#91;+-]?(?:<span class="marker-under-blue">\d+\.\d+</span><strong>|</strong><span class="marker-under">\d+\.</span><strong>|</strong><span class="marker-under-red">\.\d+</span><strong>|</strong>\d+)", block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', <span class="marker"><strong>'I.5'</strong>, <strong>'J22.'</strong></span>, 'F1000']</code></pre>



<ul class="wp-block-list">
<li>[A-Z]：NCコードのアドレス</li>



<li>[+-]?：必須ではない、符号</li>



<li>&#8212; ここからグループ化 &#8212;</li>



<li>\d+\.\d+：数字+小数点+数字<br>または</li>



<li>\d+\.：数字+小数点<br>または</li>



<li>\.\d+:小数点+数字<br>または</li>



<li>\d+：複数個の数字のみ</li>
</ul>



<p class="wp-block-paragraph">書き方は他にもあると思いますが、グループ化して、マッチさせたいパターンを一つ一つORで区切るこの方法は私には理解しやすかったです</p>



<h3 class="wp-block-heading">複雑な正規表現の可読性を高める</h3>



<p class="wp-block-paragraph">いちおう動作はしましたが、ここまでくると、読みにくいですね～<br>可読性を高める方法として、さらにAIが「re.VERBOSE」を提案してくれました<br>具体的に、上記のコードを書き替えてみます<br>パターンを一行づつに分割できて、行ごとにコメントも追記できるので、複雑になってもわかりやすくなります</p>



<pre class="wp-block-code"><code>pattern = re.compile(
    r"""
    &#91;A-Z]        # A-Zアドレス
    &#91;+-]?         # 符号
    (?:           # 小数点処理、非キャプチャグループ
      \d+\.\d+      # 数字、小数点、数字
      |\d+\.        # または、数字、小数点
      |\.\d+        # または、小数点、数字
      |\d+          # または、数字のみ
    )
    """,
    re.VERBOSE,
)
words = pattern.findall(block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', 'I.5', 'J22.', 'F1000']</code></pre>



<h3 class="wp-block-heading">さらにちょっと特殊な、G や M　コードにも対応させてみます</h3>



<p class="wp-block-paragraph">通常、NCワードは「アドレス＋数字」ですが、拡張されたワーク座標系指令やサブプロ呼び出しなどちょっと特殊な構成のコードもあります<br>全てに対応は難しいと思いますが、「G54.1P1」や「M98P100」などにも対応してみようと思います。<br>これら対応するためには、上記のパターンでは処理できないのでパターンを追加します<br>やはり、可読性が上がる、re.VERBOSE を利用します</p>



<pre class="wp-block-code"><code>block = (
    "G05P10000 G90G01 X12.50Y+20.3Z-5.63 I.5 J22.F1000 G54 G54.1P12 M98P1100 M198 P2299"
)
pattern = re.compile(
    r"""
    # --- 特殊構成、G54.1P12 / M98P1234　など---
    &#91;GM]          # G や M アドレス
    \d+(?:\.\d+)? # 54　や　54.1 
    \s*P\d+       # スペースとP文字と数字
    # --- 通常のアドレス+数字 ----
    |&#91;A-Z]        # A-Zアドレス
    &#91;+-]?         # 符号
    # --- 小数点対応 ----
    (?:           # 非キャプチャグループ
      \d+\.\d+      # 数字、小数点、数字
      |\d+\.        # または、数字、小数点
      |\.\d+        # または、小数点、数字
      |\d+          # または、数字のみ
    )
    """,
    re.VERBOSE,
)
words = pattern.findall(block)
print(f"{words}")

#---------- 結果 --------------
#&#91;'G05P10000', 'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', 'I.5', 'J22.', 'F1000', 'G54', 'G54.1P12', 'M98P1100', 'M198 P2299']</code></pre>



<p class="wp-block-paragraph">どうにかできました。<br>次の課題は「G04X10.」とかにも対応したいと思っていますが、これ以上条件が増えると大変です<br>正規表現パターンを変数化できれば、もう少しわかりやすいと思います</p>



<h3 class="wp-block-heading">正規表現のraw文字列の変数化</h3>



<p class="wp-block-paragraph">AIに聞いてみました。さすがAI、できますよ！との回答をもらいました<br>AIの回答を参考に上記コードを書き直してみました。</p>



<pre class="wp-block-code"><code>block = (
    "G05P10000 G90G01 X12.50Y+20.3Z-5.63 I.5 J22.F1000 G54 G54.1P12 M98P1100 M198 P2299"
)
num = r"&#91;+-]?(?:\d+\.\d+|\d+\.|\.\d+|\d+)"  # +12.123|-24.|.56|30
g54_1 = r"&#91;GM]\d+(?:\.\d+)?\s*P\d+\.?"      # G54.1P1 M98P1122
nomal = r"&#91;A-Z]"  # 通常のアドレス
pattern = re.compile(
    rf"""     
    {g54_1}         # G54.1P1 , M98P1122
    #----------------------
    |{nomal}{num}   # G01 , X-12.356
    """,
    re.VERBOSE,
)
words = pattern.findall(block)
#---------- 結果 --------------
#&#91;'G05P10000', 'G90', 'G01', 'X12.50', 'Y+20.3', 'Z-5.63', 'I.5', 'J22.', 'F1000', 'G54', 'G54.1P12', 'M98P1100', 'M198 P2299']</code></pre>



<p class="wp-block-paragraph">なるほど、だいぶ見やすくなりました<br>今後の仕様変更にも対応しやすくなったと思います<br>興味ある方は是非、「G04X10.」への対応もやってみてください。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">これまでも単純な正規表現に触れる機会はありましたが、複雑な記述はまるで「呪文」のようで、敬遠していました。 <br>しかし、正規表現は文字列操作において非常に強力な武器になります。<br>独学ではやる気なしでしたが、AIと対話する事で、ある程度は理解できてきました。<br> 今後もAIと対話しながら一歩ずつ分析していくことで、正規表現だけでなく、プログラミング言語全体の理解力も深めていけると感じています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fusion360 APIでTkinterを使ってみた。単純UIならこれでよくない？ボタンクリックでXYZ軸の基準線を作図するFusionスクリプトを実行させてみた</title>
		<link>https://www.kazuban.com/blog/python-api-tkinter01/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Fri, 09 Jan 2026 04:52:45 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Fusion360]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11788</guid>

					<description><![CDATA[少し前から、Python 学習の一環として AI に相談しながら Fusion 360 の API を触っており、その過程を以前の記事で紹介しました。 この記事では、Fusionの標準APIの2D スケッチで頻繁に使うオ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">少し前から、Python 学習の一環として AI に相談しながら Fusion 360 の API<strong> </strong>を触っており、その過程を以前の記事で紹介しました。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/fusion-python-api/" title="Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2025/07/fusion-python-api-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Fusion360  Python API 再挑戦！AIの力を借りて、sketchなど基本ライブラリを作ってみた。</div><div class="blogcard-snippet internal-blogcard-snippet">Aiと言う強い味方を得て、Fusion API に再挑戦しています。pythonの学習もかねて、skrtch関連の関数をライブラリ化しています。筆者の環境では、正常に動作しています。コピペで利用可。Aiに教えてもらわないと、作成できなかった実例をレポートしています。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.07.09</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">この記事では、Fusionの標準APIの2D スケッチで頻繁に使うオブジェクトをカプセル化しライブラリとしてまとめてみました。<br>Fusion 360 はパラメトリックモデリングを前提としているため、まずラフに図形を描き、あとから寸法線や拘束を追加して形状を詰めていく、という作業フローが基本です。<br>試行錯誤しながら設計を煮詰めていく用途では非常に強力な手法ですが、CAM 作業のように、すでに図面や数値が確定している場合には、この手順がやや回りくどく感じることもあります。<br>またFusion 360 には原点の概念はありますが、原点を強く意識しないモデリング手法であるため、「図面ありき」の CAM 作業では、座標原点を通る中心線作図から始めるようにしています<br>ところが、この最初に描いた中心線も拘束や固定を忘れると、気づかないうちに移動させてしまい、後工程で大きなトラブルになることがあります。</p>



<p class="has-watery-red-background-color has-background has-medium-font-size wp-block-paragraph" style="border-width:1px"><strong>固定された座標軸を、簡単かつ確実に作図したい</strong><br>　　──まずこれが、スクリプト作成を始めたきっかけです。</p>



<p class="wp-block-paragraph">また、スケッチ平面に対して高低差のある傾いた線を引きたい場合や、<br>平面からの異なる高さに円を描きたい場合なども、標準操作では少し手間がかかります。<br>前回作成したライブラリでは、直線や円といったシンプルな作図であれば、<span class="marker-under-blue">数値を引数として渡す</span>だけで描画できるところまでは実現しています。<br>ただし、実用面を考えると、やはり <span class="marker-under-red">GUI ダイアログ形式で数値入力できる仕様にしたい</span>というのが今回の取り組みです。</p>



<h2 class="wp-block-heading">Fusion API標準機能のコマンド UIでダイアログ仕様</h2>



<p class="wp-block-paragraph">Fusion API には、コマンドに付随する入力ダイアログ機能が標準で用意されており、テキストボックスやドロップダウンリスト、スライダーといった一般的な UI 要素を利用できます。<br>これらの UI 要素は <strong>Command Inputs </strong>オブジェクトを使って定義します。<br>コマンドが作成される際に呼び出される CommandCreated イベントハンドラ内で Command Inputs を作成し、コマンドの入力ダイアログに表示する入力フィールドを定義します。<br>その後、Execute イベントハンドラ内で、ユーザーがダイアログ上で入力した値を取得し、処理を実行します。<br>このように Fusion API のコマンドはイベント駆動で構成されており、各イベントハンドラを通して入力値を扱う必要があります。<br>とりあえずコード化してみましたが、初級者の私にとっては処理の流れを理解するのが難解でとりあえずネット情報やAIを参考に作成してみました<br>下記は、標準コマンドダイアログへの入力値を<a href="https://www.kazuban.com/blog/fusion-python-api/#toc16">上記で紹介している</a>「lib_2d.draw_center_line(x, y, z)スクリプトに取り込んでＸ，Ｙ，Ｚ座標軸線を作図させるスクリプトです</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="311" height="170" src="https://www.kazuban.com/blog/wp-content/uploads/2025/12/CommandDialog-e1767571988839.png" alt="" class="wp-image-11807" style="width:285px" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/12/CommandDialog-e1767571988839.png 311w, https://www.kazuban.com/blog/wp-content/uploads/2025/12/CommandDialog-e1767571988839-300x164.png 300w" sizes="(max-width: 311px) 100vw, 311px" /></figure>



<p class="wp-block-paragraph">class CommonAddinFramework:<br>　&#8221;&#8221;&#8221;<br>　Fusion 360 アドインの共通フレームワーククラス。<br>　ダイアログの表示、入力値の取得および指定された描画コールバック関数の実行を管理<br>　&#8221;&#8221;&#8221;<br>　def __init__(<br>　　self,<br>　　command_id: str,<br>　　button_name: str,<br>　　description: str,<br>　　input_defaults: dict,<br>　　drawing_callback,<br>　):<br><br>・・・・<br>・・・・</p>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/fusion-api-commandhandler/" target="_blank">コード全体を表示</a></p>
</blockquote>



<h2 class="wp-block-heading">単純入力フォームに、tkinter を使ってみる</h2>



<p class="wp-block-paragraph">上記でFusion標準のコマンドUIを使って、寸法入力で座標軸線を作画できるようになりましたが、今後機能を増やしていくには、やはりイベント処理ではわかり辛く煩わしく感じますし、ネット上の情報も少ないです<br>そこで、Python標準のtkinterを使ってみました<br>tkinterはpython標準ライブラリなので、さすがにこちらは、情報豊富です</p>



<h3 class="wp-block-heading">中心線作図スクリプト</h3>



<p class="wp-block-paragraph">かなりAIに助けてもらいましたが<br><a href="https://www.kazuban.com/blog/fusion-python-api/#toc16">上記記事内</a>で作成した中心線スクリプトに入力数値を渡すダイアログをtkinterを利用して作成してみました。<br>最初にメッセージ表示の「label」を配置して、「entry」で設定値入力ボックスを配置<br>さらに、固定とコンストラクション設定用の「Checkbutton」を配置して作成ボタンで、作図させる仕様です</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="372" height="282" src="https://www.kazuban.com/blog/wp-content/uploads/2025/12/tkinter-center-line.png" alt="" class="wp-image-11809" style="width:285px" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/12/tkinter-center-line.png 372w, https://www.kazuban.com/blog/wp-content/uploads/2025/12/tkinter-center-line-300x227.png 300w" sizes="(max-width: 372px) 100vw, 372px" /></figure>



<p class="wp-block-paragraph"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br># ダイアログクラス <br># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br>class DialogPanel(tk.Tk):<br>　def __init__(<br>　　self,<br>　　input_defaults: Dict[str, float],<br>　　construction,<br>　　fixed,<br>　):<br><br>・・・・<br>・・・・</p>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/draw-centerline-by-tkinter/" target="_blank">コード全体を表示</a></p>
</blockquote>



<p class="wp-block-paragraph">この「DialogPanel」クラスをアレンジして、直線や円などを作図する入力ダイアログも追加作成していきます。<br>このスクリプトをFuisonの「スクリプトとアドイン」に登録すれば、作図スクリプトをダイレクト数値入力仕様で実行できるようになります。<br>私的には、FusionAPIのCommand Inputsよりもわかりやすいです。</p>



<h2 class="wp-block-heading">表示されたボタンをクリックして、関数を実行するスクリプト</h2>



<p class="wp-block-paragraph">いくつかコマンドダイアログを作成していくと、いちいち「スクリプトとアドイン」へ登録するのも面倒になってきます。<br>FusionAPIでもFusionタスクバーにコマンド実行プルダウンを追加できるようですが、これもまた敷居が高いです。<br>今回は、tkinterでメニュー用パネルを作成し、そのメニューボタンで作図スクリプトを起動できれば、メニューだけの登録で済みます。</p>



<h3 class="wp-block-heading">ボタンクリックで起動させる、tk.Button　の　command　オプション</h3>



<p class="wp-block-paragraph">ボタンクリックで関数を実行させるには「command」オプションに関数名を渡すと実行できます</p>



<pre class="wp-block-code"><code># 起動させたい関数
def <strong><span class="marker-red">cmd1()</span></strong>:
    print("Function is cmd1().")
・・・
・・・
# ボタンクリックで、「def cmd1()」関数を起動する
tk.Button(
        root,
        text="Execute_command01",
        <strong>command=<span class="marker-red">cmd1</span></strong>
)</code></pre>



<p class="wp-block-paragraph">ここで初心者の筆者が疑問に感じたのが、「<strong>command=cmd1</strong>」の書き方です<br>関数名は「cmd1()」なのに、「commandオプション」には&#8221;( )&#8221;が付かないようです<br>この関数名の&#8221;( )&#8221;の有無について、AIに聞いてみました</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h3 class="wp-block-heading">関数名の <code>()</code> の有無による違い</h3>



<h4 class="wp-block-heading">1. かっこがない場合 (<code>cmd1</code>)</h4>



<p class="wp-block-paragraph">かっこがない場合、それは<strong>関数そのもの（オブジェクト）</strong> を指します。これは「<strong>関数というデータ</strong>」として扱われます。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>意味</strong></td><td><strong>関数そのものを指す（データ）</strong></td></tr></thead><tbody><tr><td>例</td><td><code>data = { "menu1": cmd1 }</code></td></tr><tr><td>目的</td><td>関数を<strong>変数に代入</strong>したり、<code>tk.Button</code> の <code>command</code> のように<strong>他の関数に引数として渡す</strong>とき。</td></tr><tr><td>動作</td><td><strong>処理はまだ実行されない</strong>。ただ関数の場所を渡すだけ。</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">2. かっこがある場合 (<code>cmd1()</code>)</h4>



<p class="wp-block-paragraph">かっこがある場合、それは<strong>関数の実行（呼び出し）</strong> を意味します。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>意味</strong></td><td><strong>関数の処理を今すぐ実行する</strong></td></tr></thead><tbody><tr><td>例</td><td><code>cmd1()</code></td></tr><tr><td>目的</td><td>関数に書かれている<strong>処理をすぐに実行</strong>し、その<strong>戻り値（結果）</strong> を受け取るとき。</td></tr><tr><td>動作</td><td><strong>すぐに処理が実行される</strong>。もし戻り値があれば、その結果が残る。</td></tr></tbody></table></figure>
</blockquote>



<p class="wp-block-paragraph">なるほど～<br>&#8220;( )&#8221;がない場合には、C言語での<strong>ポインタ渡し</strong>のようなイメージですかね<br>&#8220;( )&#8221;を付けると、「すぐに実行される」との事なので、<br>クリック後実行させたい、「tk.Button」の「command」オプションには、使えないですね<br>したがってTkinterのcommand は、<strong><span class="marker-under-red">引数なし</span></strong><span class="marker-under-red">で呼び出せるものを要求</span>すると言うことになります<br>では、引数や戻り値を利用したい関数を実行するにはどうするか？</p>



<h3 class="wp-block-heading">lambda（ラムダ式）を使う</h3>



<p class="wp-block-paragraph">lambda は、短い無名関数（名前のない一時的な関数）を簡単に作るためのPythonの機能ですが、デフォルト引数を設定できるけど、実行時には引数なしで呼び出されるようです<br>したがって、「tk.Button」の「command」に利用できます<br>具体的には、<mark style="background-color:#fdf2f2" class="has-inline-color">「lambda 引数1,引数2…：引数を使った処理」</mark>のように記述します</p>



<pre class="wp-block-code"><code>def exec(function, msg):
    function(msg)
・・・・・・
・・・・・・
command = lambda <strong>msg</strong>="button click!", <strong>func</strong>=cmd1: exec(<strong>func, msg</strong>)</code></pre>



<p class="wp-block-paragraph">このように、関数：execに、func, msg　の引数を渡せば<br>「func名」の関数に「引数msg」を渡して実行できます<br>簡単な、サンプルコードを書いてみました</p>



<pre class="wp-block-code"><code>"""Execute a function on button click."""

import traceback
import adsk.core
import adsk.fusion

# import adsk.cam

import tkinter as tk


def disp_message(msg: str):
    app = adsk.core.Application.get()
    ui = app.userInterface
    ui.messageBox(f"{msg}")


def print_cmd1():
    disp_message("lambda is not used.")


def print_cmd2(msg: str):
    disp_message(msg)


def exec(function, msg):
    function(msg)


def run(context):
# def run():
    root = tk.Tk()
    label1 = tk.Label(
        root,
        text="Click the button.",
        bg="light cyan",
    )
    label1.pack()
    # ---------------------------------
    tk.Button(
        root,
        text="Execute1",
        command=<span class="bold-red">print_cmd1</span>,
    ).pack(side=tk.LEFT, padx=10, pady=10)
    # ---------------------------------
    tk.Button(
        root,
        text="Execute2",
        command=<span class="bold-red">lambda m="center button click!", f=print_cmd2: exec(f, m)</span>,
    ).pack(side=tk.LEFT, padx=10, pady=10)
    # ---------------------------------
    tk.Button(
        root,
        text="Execute3",
        command=<span class="bold-red">lambda m="right button click!", f=print_cmd2: exec(f, m)</span>,
    ).pack(side=tk.LEFT, padx=10, pady=10)
    root.mainloop()
</code></pre>



<p class="wp-block-paragraph">こんな感じで、「ボタン」を並べれば、ボタンクリック仕様のコマンド実行メニューが作成できそうです</p>



<h2 class="wp-block-heading">Tkinterは、Autodesk 非公式</h2>



<p class="wp-block-paragraph">「tk.Button」と「lambda」で、メニューダイアログが作れそうです<br><a href="#toc3">上記で紹介</a>した座標軸センターラインを作図するスクリプトを実行するダイアログを作成してみます<br>ところが、Tkinterの使用は、Autodeskは非公式のようなので注意が必要です</p>



<h3 class="wp-block-heading">Fusion API で、tkinter を使用する場合の注意点</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">・Tkinterの使用は、Autodesk 非公式<br>・Tkinter が <code>root.mainloop()</code> で動作中は Fusion 本体の操作は一切できなくなる <br>・Mac + Tkinter は挙動が不安定なことがある<br>・Tkinterウィンドウを閉じた時に不安定になる場合がある<br>・最悪、タスクマネージャーでFusion 強制終了</p>
</blockquote>



<p class="wp-block-paragraph">やはり、Autodesk側としては、あまり推奨はしていないようです<br>常駐ツールやモーダルな本格的ダイアログはやめたほうがよさそうです<br>今回作成中も、閉じる時に「Script Error」が出たり、強制終了の必要に迫られたりしましたが、数値入力や条件入力の簡易パネルとして、<span class="marker-under-red">開いたら閉じて、Fusionに制御を返す</span>ような単純な処理であれば利用できると思っています。<br></p>



<h3 class="wp-block-heading">run(context) の context引数 は必須</h3>



<p class="wp-block-paragraph">python学習もかねて、いろいろ簡単なコードを書きました。<br>コードが悪いと、Fusionを強制終了させざるを得ない場合もありましたが、普通に問題なく動作しているのに、パネルの「×ボタン」で終了時に、Fusionのコマンドエリアに「SCRIPT ERROR」が出た事もありました。<br>これの原因究明には結構時間がかかりました。<br>上記のサンプルコードでも、run(context)の「context」は使っていないからと、<br>省略すると（「def run():」）「SCRIPT ERROR」になり、なにも動作しない状態になります<br>やはり、FusionAPIがどこかで使っていて、必須なようです<br>「×」での「SCRIPT ERROR」は終了時の警告のみなので、無視しようとも思いましたが、気味が悪いので、とりあえずAIにもいろいろも相談しましたが、的確な回答はもらえませんでした。<br>例えば下記コードで終了時に「SCRIPT ERROR」になります。<br>引数に「tk.Tk()型」を渡しました。結局、この引数が原因でした</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">def run1(root):<br>　&nbsp; &nbsp; label1 = tk.Label(root , text=&#8221;Click the button.&#8221;)<br>　　・・・・<br>　　・・・・<br><br>master = tk.Tk()<br>run1(master)</p>
</blockquote>



<p class="wp-block-paragraph">Fusionの「スクリプトとアドイン」で、「スクリプトまたはアドインを作成」を選択すると、自動的にサンプルスクリプトが作成されるので、そちらを参考にしてみました。<br>Fusionで自動作成された、run関数の中身は下記のようになっています</p>



<pre class="wp-block-code"><code>def run(_context: str):
    """This function is called by Fusion when the script is run."""

    try:
        # Your code goes here.
        ui.messageBox(f'"{app.activeDocument.name}" is the active Document.')
    except:  #pylint:disable=bare-except
        # Write the error message to the TEXT COMMANDS window.
        app.log(f'Failed:\n{traceback.format_exc()}')</code></pre>



<p class="wp-block-paragraph">引数は「_context: str」となっています。<br>以前のサンプルコードには、「str」のような型ヒントはなかったように記憶していますが<br>「str」なので引数の型は「文字列型」を期待しているようです。<br>このサンプルでも「_context」はどこにも使われていないように見えますが、やはりFusionAPI側では必須なのでしょう<br>ちなみにデフォルトでは「_context: str」と、型ヒントでは「文字列型」となっていますが、下記コードを追加して調べてみました</p>



<pre class="wp-block-code"><code>    ui.messageBox(f"type={type(_context)}")
    ui.messageBox(f"{_context}")</code></pre>



<p class="wp-block-paragraph">そのタイプと内容を表示させてみると</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">type=<strong>&lt;class &#8216;dict&#8217;&gt;</strong><br><strong>{&#8216;IsApplicationStartup&#8217;: False}</strong></p>
</blockquote>



<p class="wp-block-paragraph">このように、「辞書型」になっていました。<br>詳細はわかりませんが、メイン関数の第一引数はFusionが使うので、別の引数を使いたい場合には、追加の形をとったほうがよさそうです<br>この部分を変更すると正常に終了するようになりました。<br>pythonのこういった型のあいまいな部分にも、まだまだ慣れないです</p>



<h2 class="wp-block-heading">数値入力ダイアログで、座標軸を作図するスクリプトをボタンで起動</h2>



<p class="wp-block-paragraph">さて、上記で紹介した「中心線作図スクリプト」を、ボタンクリックで動作させるダイアログを作成してみようと思います。<br>ただし、このスクリプトは、<a href="https://www.kazuban.com/blog/fusion-python-api/">以前紹介した記事</a>内のライブラリ「<a href="https://www.kazuban.com/blog/fusion-python-api/#toc15">lib_util.py</a>」「<a href="https://www.kazuban.com/blog/fusion-python-api/#toc16">lib_2d.py</a>」を利用するので、もし試してみたい場合にはそちらも必要になります<br>下記に全部含まれたコードをダウンロードできるようにしておきますので、興味ある方がいらっしゃれば試してみてください。</p>



<pre class="wp-block-code"><code>"""Execute a function on button click."""

import adsk.core
import adsk.fusion
import os, sys, importlib, traceback
import tkinter as tk

import tkinter.font as tkFont
from typing import Optional, List, Dict, Any

current_dir = os.path.dirname(os.path.abspath(__file__))
script_dir = os.path.dirname(current_dir)  # C:\FusionAPI\Scripts
sys.path.append(script_dir)
# library import
"""
C:\FusionAPI\Scripts
│
├─library
│  ├─lib_util.py
│  ├─lib_2d.py
├─test
│  ├─menu.py (This script)
"""
from library import lib_util, lib_2d


##---------------------------
def disp_message(msg: str):
    lib_util.disp_message(msg)


# ------------------------------------------------------------------
# ダイアログクラス
# ------------------------------------------------------------------
class DialogPanel(tk.Tk):
    """センターライン作画ダイアログ"""

    def __init__(
        self,
        input_defaults: Dict&#91;str, float],
        construction,
        fixed,
    ):
        super().__init__()
        # self.my_font = None
        self.input_defaults = input_defaults
        self.x_width: float = 0.0
        self.y_width: float = 0.0
        self.z_width: float = 0.0
        self.construction: bool = construction
        self.fixed: bool = fixed
        self.widths: dict&#91;str, tk.DoubleVar] = {}
        self._create_widgets()

    def _simple_frame(self, **kwargs) -&gt; tk.Frame:
        # Fontインスタンスを作成
        self.my_font = tkFont.Font(family="Arial", size=10, weight="normal")
        """単純フレームを作成し、ウィンドウ全体に展開"""
        master = self
        frame = tk.Frame(master, **kwargs)
        master.title("Center Line")
        frame.pack(fill="both", expand=True, padx=5, pady=5)
        return frame

    def _create_widgets(self):
        """全てのUI要素を作成"""
        # 全体を包む単一のフレーム
        self.main_frame = self._simple_frame(relief="ridge", bd=5)

        # ------------------
        # 0. トップメッセージ
        # ------------------
        row_idx = 0
        top_frame = tk.Frame(self.main_frame)
        top_frame.grid(row=row_idx, column=0, columnspan=3, pady=10)
        tk.Label(
            top_frame,
            text="各軸の長さを指定してください。\n作成したくない軸は「0.0」にしてください",
            bg="light cyan",
            font=self.my_font,
        ).pack()
        # ------------------
        # 1～3 各軸幅入力ボックス
        # ------------------

        row_idx += 1
        # 事前設定のラベルとデフォルト値
        for label, default in self.input_defaults.items():
            tk.Label(
                self.main_frame,
                text=label,
                font=self.my_font,
            ).grid(
                row=row_idx,
                column=0,
                sticky="e",
            )
            var = tk.DoubleVar(value=default)
            ent = tk.Entry(
                self.main_frame,
                font=self.my_font,
                textvariable=var,
                width=10,
                bg="lightyellow",
                # bg="ivory",
            )
            ent.grid(row=row_idx, column=1)
            self.widths&#91;label] = var
            row_idx += 1
        # ------------------
        # 4. 要素固定チェック
        # ------------------
        row_idx += 1
        # self.fixed_check = tk.BooleanVar(value=True)
        self.fixed_check = tk.BooleanVar(value=self.fixed)
        check_button = tk.Checkbutton(
            self.main_frame,
            text="要素固定",
            variable=self.fixed_check,
            font=self.my_font,
        )
        check_button.grid(row=row_idx, column=0, padx=5, pady=5, sticky="w")
        # self.construction_check = tk.BooleanVar(value=True)
        self.construction_check = tk.BooleanVar(value=self.construction)
        check_button = tk.Checkbutton(
            self.main_frame,
            text="コンストラクション",
            variable=self.construction_check,
            font=self.my_font,
        )
        check_button.grid(row=row_idx, column=1, padx=5, pady=5, sticky="w")

        # ------------------
        # 5. 最終確定ボタン
        # ------------------
        row_idx += 1
        # ボタンを格納するボトムフレーム
        bottom_frame = tk.Frame(self.main_frame)
        bottom_frame.grid(row=row_idx, column=0, columnspan=3, pady=10)

        tk.Button(
            bottom_frame, text="作成実行", font=self.my_font, command=self.get_data
        ).pack(side=tk.LEFT, padx=10)
        tk.Button(
            bottom_frame, text="閉じる", font=self.my_font, command=self.destroy
        ).pack(side=tk.LEFT, padx=10)

    def get_data(self):
        """入力データを取り出す"""
        v: List = &#91;]
        for value in self.widths.values():
            v.append(value.get())
        self.x_width = float(v&#91;0])
        self.y_width = float(v&#91;1])
        self.z_width = float(v&#91;2])
        self.fixed = self.fixed_check.get()
        self.construction = self.construction_check.get()
        self.destroy()


##--------------------------------------------------------------
##--------------------------------------------------------------
def diarog_test(master):
    """センターライン作画"""
    if master:
        master.quit()  # mainloop を終了させる
        master.destroy()
    input_defaults = {
        "X軸長さ": 50.0,
        "Y軸長さ": 50.0,
        "Z軸長さ": 10.0,
    }
    # 線種指定
    construction = True
    fixed = True

    app = DialogPanel(input_defaults, construction, fixed)
    app.mainloop()
    wx = app.x_width
    wy = app.y_width
    wz = app.z_width
    construction = app.construction
    fixed = app.fixed
    try:
        lib_2d.draw_center_line(wx, wy, wz, construction, fixed)
    except:
        disp_message("Failed:\n{}".format(traceback.format_exc()))


# ---- Action command after button click ----------


def print_cmd1():
    disp_message("lambda is not used.")


def print_cmd2(msg: str):
    disp_message(msg)


def exec(function, msg):
    function(msg)


def on_closing(root):
    """Processing when the window's 'x' button is pressed"""
    disp_message("I'll close now!")
    root.quit()  # Terminate the mainloop
    root.destroy()  # Releases window resources.


def button(root: tk.Tk):
    # Window close action
    root.protocol("WM_DELETE_WINDOW", lambda: on_closing(root))
    label1 = tk.Label(root, text="Click the button you like.", bg="light cyan")
    label1.pack()
    tk.Button(root, text="Message1", command=print_cmd1).pack(
        side=tk.LEFT, padx=10, pady=10
    )
    tk.Button(
        root,
        text="Message2",
        command=lambda m="Lambda specification!", f=print_cmd2: exec(f, m),
    ).pack(side=tk.LEFT, padx=10, pady=10)
    tk.Button(
        root,
        text="Draw center line",
        command=lambda tk=root, f=diarog_test: exec(f, tk),
    ).pack(side=tk.LEFT, padx=10, pady=10)
    root.mainloop()


def run(context: dict):  # {'IsApplicationStartup': False}
    root = tk.Tk()
    root.attributes("-topmost", True)  # Bring Window To Top
    button(root)
</code></pre>



<h3 class="wp-block-heading">サンプルスクリプトのダウンロードと使い方</h3>



<p class="wp-block-paragraph">ダウンロードと使用方法は下記を参考にしてください<br>この例では、展開されたトップフォルダ「FusinAPI_kazuban」を「Cドライブ」の直下に、コピーする方法で説明していますが、任意の場所でかまいません<br>ただし、<span class="marker-under">Fusionが立ち上がった状態</span>では、キャッシュの影響で「library」内のスクリプトがうまく読み込めない事があります<br><span class="marker-under-red">コピー後に、Fusionを起動する</span>方がトラブル少ないです。<br>そのトップフォルダ下の「Scripts」、その下の「library」「menyu01」内のスクリプトを使用します<br>全ての使用ライブラリも含めたZIPファイルは下記からのダウンロードできます</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="348" height="125" src="https://www.kazuban.com/blog/wp-content/uploads/2026/01/python-api-tkinter01.png" alt="" class="wp-image-11941" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/01/python-api-tkinter01.png 348w, https://www.kazuban.com/blog/wp-content/uploads/2026/01/python-api-tkinter01-300x108.png 300w" sizes="(max-width: 348px) 100vw, 348px" /></figure>



<div class="wp-block-file"><a id="wp-block-file--media-11c24981-b4de-424e-be88-7ef09c825cf3" href="https://www.kazuban.com/blog/wp-content/uploads/2026/01/FusinAPI_kazuban.zip">FusinAPI_kazuban</a><a href="https://www.kazuban.com/blog/wp-content/uploads/2026/01/FusinAPI_kazuban.zip" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-11c24981-b4de-424e-be88-7ef09c825cf3">ダウンロード</a></div>



<pre class="wp-block-preformatted">C:\FusinAPI_kazuban<br>└─Scripts<br>    ├─library<br>        └─lib_2d.py<br>        └─lib_util.py<br>    └─menyu01<br>        └─menu.py</pre>



<p class="wp-block-paragraph">・ダウンロード後展開した「FusinAPI_kazuban」を適当なフォルダへコピー<br>・Fusionの「スクリプトとアドイン」から「menyu01」を選択する<br>・正常に登録されると、スクリプトが実行できます</p>



<figure class="wp-block-video"><video height="1028" style="aspect-ratio: 1496 / 1028;" width="1496" controls src="https://www.kazuban.com/blog/wp-content/uploads/2026/01/python-api-tkinter01.mp4"></video></figure>
</blockquote>



<h2 class="wp-block-heading">第一弾、終了</h2>



<p class="wp-block-paragraph">とりあえず、Autodesk Fusion からtkinterオブジェクトのパネルを表示し、ボタンに割り当てられたスクリプト動作をさせる事ができました。<br>数値入力用ボタンでは、tkinterへの入力値をFusionAPIに渡し、作図させる事ができるようになりました<br>次回は、もう少し作図スクリプトとメニューを充実させていきたいと思います</p>





<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2026/01/python-api-tkinter01.mp4" length="9464158" type="video/mp4" />

			</item>
		<item>
		<title>Snipping Tool の録画機能でFusion(360)のジョイントの説明ページを作ってみた</title>
		<link>https://www.kazuban.com/blog/fusion-joint/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 02 Nov 2025 01:26:25 +0000</pubDate>
				<category><![CDATA[Fusion360]]></category>
		<category><![CDATA[joint]]></category>
		<category><![CDATA[Snipping_Tool]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11671</guid>

					<description><![CDATA[実はジョイントは以前にも記事にしたのですが、その時は別の録画アプリを使用しました 今更ですが、Windows標準のSnipping Tool でも録画できるのを知ったので、使ってみました画像も動画も簡単にキャプチャできる [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">実はジョイントは以前にも記事にしたのですが、その時は別の録画アプリを使用しました</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/assembly/" title="Fusion360 のアセンブリ機能を使ってみた。" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="255" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2021/08/vise.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2021/08/vise.png 984w, https://www.kazuban.com/blog/wp-content/uploads/2021/08/vise-300x212.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2021/08/vise-768x542.png 768w" sizes="(max-width: 255px) 100vw, 255px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">Fusion360 のアセンブリ機能を使ってみた。</div><div class="blogcard-snippet internal-blogcard-snippet">筆者は、Fusion360はCAM機能を使用する場合が多いので、今まで「アセンブリ」機能は使っていませんでした。ただ、実際加工には加工素材を固定するのに、治具と呼ばれる装置を利用します。治具を設計する場合、アセンブリ機能が使えると便利そうだと思い使ってみました。前回紹介した、ボルトテンプレートもイン...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.08.12</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">今更ですが、Windows標準のSnipping Tool でも録画できるのを知ったので、使ってみました<br>画像も動画も簡単にキャプチャできるので、とても便利です<br>このアプリを使って、Fusion360ジョイントを、多くの動画を使ってジョイントに限定して説明しています</p>



<h2 class="wp-block-heading">Snipping Tool でデスクトップを録画</h2>



<p class="wp-block-paragraph">Snipping Tool は、スクリーンショットを撮るときに使っていますが、録画ができるのは知りませんでした。<br>録画は別のアプリを使っていたので、気にしていなくて気が付かなかったのだと思います<br>標準アプリとはいえ、使い方は簡単で使いやすいですね。<br>スクリーンショットは、「Windowsキー」＋「Shift」＋「s」キーで起動しますが、<br>録画は、「Windowsキー」＋「Shift」＋「ｒ」キーで録画領域選択モードで起動します<br>録画したい範囲を選択して「スタート」ボタンを押すと３・２・１とカウントダウンが始まり録画が開始されます。<br>「ストップボタン」で録画終了です。<br>ちょっと注意が必要なのは、デフォルトでは自動的に保存される事ですね<br>何度も実行していると、不要な動画が残ってしまうので、必要なければすぐに削除したほうがいいです。</p>



<h2 class="wp-block-heading">Fusion(360）のアセンブリ／ジョイント機能の説明</h2>



<p class="wp-block-paragraph">では、Snipping Tool で録画した動画を使って、ジョイント機能の説明ページを作ってみます<br>モデルは、以前説明に使ったバイスモデルを使用して、組み立てていきます</p>



<h3 class="wp-block-heading">練習モデルダウンロード</h3>



<div class="wp-block-file" style="border-style:none;border-width:0px;border-radius:0px;margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0"><a id="wp-block-file--media-f92c7086-09a6-4d78-91f3-8c8bb433aaa3" href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/joint-practice-model.zip">joint-practice-model</a><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/joint-practice-model.zip" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-f92c7086-09a6-4d78-91f3-8c8bb433aaa3">ダウンロード</a></div>



<h3 class="wp-block-heading">本体を固定（ピン止め）する</h3>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/01_本体ピン止め.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/01_本体ピン止め.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">ブラウザツリーから「本体」コンポーネントを右クリックして、「ピン」で固定します</p>



<h3 class="wp-block-heading">ボールネジを「回転・ジョイント」</h3>



<p class="wp-block-paragraph">ボールねじを本体へ組み込みますが、接続するボールねじの面と接続される本体の面を指定します<br><span class="marker-under">基本的に、接続パーツ側を先に指定します</span>。<br>この例では、接続する、ボールネジの先端の面と本体のザグリ面と選択します。<br>接続面をマウス選択する場合のコツは、面を触った時に<span class="marker-under-red">「CTLR」を押しながら</span>、接続基準点を設定する事です。</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/02_ボールネジ.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/02_ボールネジ.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">表示される「ジョイント」ダイアログの「モーション」「タイプ」は「回転」にします</p>



<h3 class="wp-block-heading">固定側の口金を「剛性・ジョイント」</h3>



<p class="wp-block-paragraph">口金面のボルト穴位置と本体側のネジ位置を指定します<br>同様に接続面をマウス選択した際は「<span class="marker-under-red">CTLR」を押しながら、</span>穴位置を指示します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/03_固定側口金.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/03_固定側口金.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">モーション・タイプは、「剛性」に設定</p>



<h3 class="wp-block-heading">ジョイントする時に、指定したジョイント点からオフセットできる</h3>



<p class="wp-block-paragraph">今回、本体端面と可動駒後ろ面でジョイントし、ネジの止まり位置までオフセットします<br>後に可動範囲の設定を行う場合には、可動範囲でも設定できるので、ジョイント位置のオフセット操作は不要ですが、ジョイントのオフセット設定を行う場合にはオフセット距離の把握は必要です<br>ここでは、オフセット距離を事前に測定しておきます</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/04_可動駒の終点位置測定.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/04_可動駒の終点位置測定.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<h3 class="wp-block-heading">可動駒を「スライダ・ジョイント」</h3>



<p class="wp-block-paragraph">可動駒がスライドする、可動駒と本体の面を設定します<br>接続点は、上記で測定した本体端面位置を指示します<br>こちらも同様に、接続面を選択した際、<span class="marker-under-red">「CTLR」を押しながら</span>、接続基準点を設定します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/05_可動駒.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/05_可動駒.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">モーション・タイプは、「スライド」で「スライド方向」は「Y軸」に設定　基本位置は、「位置合わせ」で、前に測定しておいた距離だけ「Yオフセット」しますが、<span class="marker-under"><strong>符号</strong>には注意</span>してください</p>



<h3 class="wp-block-heading">可動側の口金を「剛性・ジョイント」</h3>



<p class="wp-block-paragraph">可動側の口金をジョイントします<br>接続面と接続位置をよく確認し指定してください<br>接続面をマウス選択した際は「<span class="marker-under-red">CTLR」を押しながら、</span>穴位置を指示します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/06_可動側口金.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/06_可動側口金.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<h3 class="wp-block-heading">ジョイントは、設定したモーションでマウス動作できる</h3>



<p class="wp-block-paragraph">ジョイント直後は、設定したモーションでマウスで移動できますが制限は設定されていません</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/07_可動駒は自由に移動.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/07_可動駒は自由に移動.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">「アセンブリ」⇒「接触セットを有効化」でボディを設定すれば、そのボディとの干渉が制限になります。<br>今回のサンプルの場合、「可動側口金」と「固定側口金」を新規接触セットで設定すれば、可動口金が固定口金に干渉するとそれ以上移動できなくなります<br>逆側の外開きの場合は「ボールねじの止まり座面」までが可動域になりますが、「ボールねじ」と「可動駒」を接触セットに設定すると、<span class="marker-under">ネジ部分とは常に接触している</span>ため、まったく可動できなくなってしまいます。<br>このような場合、接触セットではなく、「ジョイント」の「モーション制限」で可動範囲を設定します</p>



<h3 class="wp-block-heading">可動駒の可動範囲を設定するため、可動距離を測定</h3>



<p class="wp-block-paragraph">まずは、モーション制限の最大値・最小値を設定するため、口金間の距離を測定しておきましょう</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/08_可動駒の移動範囲測定.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/08_可動駒の移動範囲測定.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">「検査」⇒「計測」で測定しますが、必ず、符号も意識しておく事<br>設定時には、符号が重要になります</p>



<h3 class="wp-block-heading">可動駒の可動範囲を設定</h3>



<p class="wp-block-paragraph">「モーション制限を編集」で可動範囲の「最小値」「最大値」を設定できます<br>「ブラウザツリー」⇒「関係」⇒「可動駒用に設定したスライダジョイント」右側の「<span class="badge">↓</span>」アイコンをクリックすると、「モーション制限を編集」ダイアログが開きます<br>「スライド」では「最小値」「最大値」で範囲を設定しますが<span class="marker-under-red">「±」の符号には注意</span><br>必ず、<span class="marker-under-red"><span class="marker-under">符号を意識して小さいほうを「最小値」</span></span>に設定します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/09_可動駒移動範囲設定.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/09_可動駒移動範囲設定.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph"><a href="#toc8">上記の可動駒ジョイント設定</a>で本体端面よりオフセットさせたの、「最大値=0.0」になります<br>オフセットさせていない場合には、「最大値=-5.0」「最小値=-5１.0」となります</p>



<h3 class="wp-block-heading">レンチをボールネジに剛性（スライド）・ジョイント</h3>



<p class="wp-block-paragraph">ボールネジは回転ジョイントしていますが、レンチは剛性ジョイントにします<br>レンチの取り外しを考慮するなら、スライドジョイントにしてもいいと思います<br>また今回のモデルは、はめ込部六角形の位相を同じにしているので、お互い接触面の中心でジョイントしましたが、位相が違う場合には、頂点同士でジョイントします<br>ここも同様に、<span class="marker-under-red">接続面をマウス選択した際、「CTLR」を押しながら、</span>面中心を設定し<br>モーション・タイプは、「剛性」に設定します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/10_バイスレンチ.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/10_バイスレンチ.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">剛性にする事で、レンチを回転すれば、ボールネジも回転するようになります</p>



<h3 class="wp-block-heading">モーションリンク</h3>



<p class="wp-block-paragraph">ボールネジとレンチは剛性ジョイントなので、レンチを回転すれば、可動駒がスライドするように設定します<br>逆に、可動駒を可動させれば、レンチが回転するようにもなります<br>まずリンクするジョイントを、ブラウザツリーの「関係」「ジョイント」で確認しておきます<br>ジョイントが多くなり、識別しにくい場合には、ジョイン名をわかりやすい名前に変更しておくと設定は楽になります<br>今回は、ボールねじの「回転」と可動駒の「スライダ」ジョイントをリンクさせます<br>「アセンブリ」「モーションリンク」でリンクさせたいジョイントを選択します<br>「モーションリンク」ダイアログで各ジョイントの関係を設定します</p>



<figure class="wp-block-video"><video controls src="https://www.kazuban.com/blog/wp-content/uploads/2025/11/11_モーションリンク.mp4"></video><figcaption class="wp-element-caption"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/11/11_モーションリンク.mp4" target="_blank">画面いっぱいに表示</a></figcaption></figure>



<p class="wp-block-paragraph">今回は「回転」と「スライダ」なので、回転角度とその回転角度でのスライド距離を設定します<br>ネジの場合では、一回転(360°)でネジピッチ分の移動距離となるので、ネジピッチ2mmとして設定してみました</p>



<h2 class="wp-block-heading">まとめ</h2>



<p class="wp-block-paragraph">「Snipping Tool」で動画録画ができるのは、私は知りませんでした。<br>スクリーンショットは使っていましたが、今回たまたま気が付きました<br>Windows標準のアプリなので、気軽に使えるのもいいですね<br>自動保存やトリム機能もいいと思います<br>今回は、「Snipping Tool」で、Fusionのジョイントの説明ページを作ってみました<br>画像と動画のキャプチャが一つのアプリで簡単に切り替えられるのもいいですね<br>マニュアルなどの作成にも、重宝しそうです</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/01_本体ピン止め.mp4" length="3921356" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/10/02_ボールネジ.mp4" length="17673203" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/10/03_固定側口金.mp4" length="19472013" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/10/04_可動駒の終点位置測定.mp4" length="10529981" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/10/05_可動駒.mp4" length="30866235" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/10/06_可動側口金.mp4" length="20997370" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/07_可動駒は自由に移動.mp4" length="3380402" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/08_可動駒の移動範囲測定.mp4" length="8967043" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/09_可動駒移動範囲設定.mp4" length="9088398" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/10_バイスレンチ.mp4" length="25285809" type="video/mp4" />
<enclosure url="https://www.kazuban.com/blog/wp-content/uploads/2025/11/11_モーションリンク.mp4" length="11226349" type="video/mp4" />

			</item>
		<item>
		<title>Fusion(360)で、エラーになる大きいRや複合要素の特殊フィレットを作成する方法</title>
		<link>https://www.kazuban.com/blog/fusion360-special-fillet/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sun, 26 Oct 2025 05:54:46 +0000</pubDate>
				<category><![CDATA[Fusion360]]></category>
		<category><![CDATA[スイープ]]></category>
		<category><![CDATA[フィレット]]></category>
		<category><![CDATA[フェイス]]></category>
		<category><![CDATA[モデリング]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11583</guid>

					<description><![CDATA[フィレットを作成する場合、指定Rによっては、エラーになる事がありますフィレット作成順序を変更してみたり、徐辺機能で試行錯誤が必要ですそれでも、狭い箇所へ大きな幅のフィレットは簡単には作成できません。また、単純な単一Rでは [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">フィレットを作成する場合、指定Rによっては、エラーになる事があります<br>フィレット作成順序を変更してみたり、徐辺機能で試行錯誤が必要です<br>それでも、狭い箇所へ大きな幅のフィレットは簡単には作成できません。<br>また、単純な単一Rではなく、複合要素やスプライン形状のフィレットを作成したい場合、フィレットコマンドでは作成できません<br>断面形状をスケッチし、スイープする事になりますが、ここでも狭い領域には作成してくれません<br>今回は、筆者自身も必要になり、いろいろやってみて、どうにか描けた方法を紹介します<br>下記でサンプルモデルのダウンロードできます</p>



<h2 class="wp-block-heading">自動では大きいフィレットはエラーになる</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="588" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch-800x588.png" alt="" class="wp-image-11585" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch-800x588.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch-500x368.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch-300x221.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch-768x565.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/org_scketch.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">まずこのポケット輪郭に、普通にフィレットを作成してみましょう</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3.png"><img loading="lazy" decoding="async" width="800" height="554" data-id="11600" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3-800x554.png" alt="" class="wp-image-11600" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3-800x554.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3-500x346.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3-300x208.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3-768x532.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r3.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4.png"><img loading="lazy" decoding="async" width="800" height="458" data-id="11601" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-800x458.png" alt="" class="wp-image-11601" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-800x458.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-500x286.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-300x172.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-768x440.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet_r4.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>
</figure>



<p class="wp-block-paragraph">R3までは、問題ないですが、それ以上になるとエラーになってしまいます<br>輪郭の法線方向の幅が方側方向から指定R未満の距離になる箇所ではフィレットは作成できません<br>今回は、最小片側幅3mmの輪郭に片側10mm幅のフィレットを考えてみます<br>今回やってみた方法は、基本的には法線方向で綺麗なフィレットは作成できませんが、作成できる箇所は自動で作成し、それ以外は自由曲面でごまかして描きました。</p>



<h2 class="wp-block-heading">自動作成くれないフィレットRや複合形状はスイープを使用</h2>



<p class="wp-block-paragraph">例えば、下図のようなポケット形状の上面にフィレットを作成する場合を考えてみます</p>



<figure class="wp-block-gallery has-nested-images columns-3 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body.png"><img loading="lazy" decoding="async" width="800" height="548" data-id="11586" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-800x548.png" alt="" class="wp-image-11586" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-800x548.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-500x342.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-300x205.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-768x526.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section.png"><img loading="lazy" decoding="async" width="768" height="547" data-id="11591" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section.png" alt="" class="wp-image-11591" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section-500x356.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section-300x214.png 300w" sizes="(max-width: 768px) 100vw, 768px" /></a></figure>
</figure>



<p class="wp-block-paragraph"><br>このポケットモデルの上面に平面幅10mm、深さ5mmの断面形状でフレットを作成してみたいと思います<br>フィレット幅が10mmなので、ポケット輪郭に対して、10mm以上の完全オフセット輪郭が描ければ、スイープコマンドで、簡単に作成できると思います。<br>しかし、ポケット輪郭を10mmオフセットさせてみた下図では、３か所の矢印部分では、要素が抜けてしまっていて、正常にオフセットされていません</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="538" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng-800x538.png" alt="" class="wp-image-11592" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng-800x538.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng-500x336.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng-300x202.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng-768x517.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_ng.png 1131w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">要素抜けなくオフセットされている箇所では問題ないとして、要素抜け部分にR10に編集します<br>まずは自動的にオフセットさせた輪郭の、オフセット拘束を解除し、要素が抜けた矢印部分にR10mm以上のフィレットを追加します。<br>R10フレットが作成できる場合には、平行拘束は自動的に解除されます。</p>



<figure class="wp-block-image size-large"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit.png"><img loading="lazy" decoding="async" width="800" height="521" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-800x521.png" alt="" class="wp-image-11595" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-800x521.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-500x325.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-300x195.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-768x500.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<p class="wp-block-paragraph">凹部分が、フィレット幅以上のRになれば、その輪郭をパスにして、スイープコマンドで断面プロファイルと輪郭パスで簡単にボディを作成できます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="497" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet-800x497.png" alt="" class="wp-image-11609" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet-800x497.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet-500x311.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet-300x187.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet-768x478.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/create_fillet.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">フィレット幅よりも小さい内Rは、フォレット幅よりも大きくしたRに編集すれば、スイープできます</p>



<h2 class="wp-block-heading">基本ポケットボディから引き算</h2>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/bace_body-800x548.png">基本のポケットボディ</a>から、<a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/fillet-_section.png">断面のプロファイル</a>を修正した輪郭でスイープしたボディで引き算すれば、輪郭編集した以外の箇所はフィレットモデルが作成されますが</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="589" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean-800x589.png" alt="" class="wp-image-11599" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean-800x589.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean-500x368.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean-300x221.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean-768x566.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean.png 1028w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-800x521.png">上図</a>でR10を追加した部分は、引き算できなくて残ってしまっています<br>この部分は、邪魔なので取り除きます。<br>この部分は、<a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-800x521.png">R10追加した輪郭を、逆にオフセットした<a href="https://www.kazuban.com/blog/wp-content/uploads/2025/10/offset_edit-800x521.png">輪郭</a>（赤線）</a>を深さ（5mm）だけ押し下げたボディで引き算する事で取り除けます</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="567" data-id="11606" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02-800x567.png" alt="" class="wp-image-11606" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02-800x567.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02-500x354.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02-300x213.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02-768x544.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean02.png 1144w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="560" data-id="11607" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03-800x560.png" alt="" class="wp-image-11607" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03-800x560.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03-500x350.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03-300x210.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03-768x537.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/boolean03.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</figure>



<p class="wp-block-paragraph">これで、シンプルな部分には、正常なフィレットが作成できました</p>



<h2 class="wp-block-heading">サーフェスモードで、穴埋めする</h2>



<p class="wp-block-paragraph">ここで、Fusionを<span class="marker-under-red">「サーフェス」</span>モードにして、不要面を削除します<br>面選択で「Deleteキー」で削除できます。<br>「Shift」を押しながら選択すると、複数面選択できます。</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="568" data-id="11611" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select-800x568.png" alt="" class="wp-image-11611" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select-800x568.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select-500x355.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select-300x213.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select-768x545.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/ng_face_select.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="534" data-id="11612" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete-800x534.png" alt="" class="wp-image-11612" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete-800x534.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete-500x334.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete-300x200.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete-768x513.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/face_delete.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</figure>



<p class="wp-block-paragraph">不要面の削除できたら、「サーフェイス」⇒「<span class="marker-under-red">パッチ</span>」で境界エッジをマウスカーソルで選択する事で境界が全周が選択されれば、自動的に曲面を作成してくれます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="586" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01-800x586.png" alt="" class="wp-image-11614" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01-800x586.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01-500x366.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01-300x220.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01-768x562.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/finish01.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">ただし、作成した曲面部分は面属性になっています</p>



<h2 class="wp-block-heading">ステッチでボディ化して完成</h2>



<p class="wp-block-paragraph">この状態では、まだ完全にボディにはなっていないので、「サーフェス」⇒「<span class="marker-under-red">ステッチ</span>」コマンドでフェイスの隙間を埋めてボディにしてくれます</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="500" data-id="11616" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch-800x500.png" alt="" class="wp-image-11616" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch-800x500.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch-500x313.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch-300x188.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch-768x480.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/stitch.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="550" data-id="11620" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet-800x550.png" alt="" class="wp-image-11620" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet-800x550.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet-500x344.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet-300x206.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet-768x528.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/special_fillet.png 1248w" sizes="(max-width: 800px) 100vw, 800px" /></figure>
</figure>



<p class="wp-block-paragraph">フィレットコマンドや、スイープだけでは描けない幅広いフィレットも、ソリッド化できました。<br>ただ、輪郭形状の法線方向の幅よりも大きいフィレットを作成しようとしているので、どこかに無理がでてしまいます。<br>今回は、サーフェスのパッチコマンドのデフォルト機能で描けない面を埋めてもらいましたが、この曲面が気に入らない場合に、さらにサーフェス機能を駆使して作成する事になりますがとりあえずボディ化できました</p>



<h3 class="wp-block-heading">サンプルダウンロード</h3>



<div class="wp-block-buttons is-horizontal is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-cbcdc57d wp-block-buttons-is-layout-flex" style="border-width:1px;border-radius:28px">
<div class="wp-block-button has-custom-width wp-block-button__width-75"><a class="wp-block-button__link has-black-color has-amber-background-color has-text-color has-background has-link-color wp-element-button" href="https://www.kazuban.com/soft/special_fillet.zip">サンプルFusion 3dfデータをダウンロードできます</a></div>
</div>



<h2 class="wp-block-heading">パッチで作成した曲面の変形</h2>



<p class="wp-block-paragraph">パッチで作成した曲面形状が気に入らない場合は、サーフェスモードで試行錯誤する事になると思います。<br>ただ、パッチ作成時に、ガイドカーブを指定する事で、ある程度簡単にカーブに添わせた形状に変形する事は可能です<br>一例としては変更した曲面の断面を取り出し、断面のスケッチにガイドカーブを描きます</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="609" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit-800x609.png" alt="" class="wp-image-11644" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit-800x609.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit-500x380.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit-300x228.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit-768x584.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/surface_edit.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">編集したい曲面を一度削除し、再度「パッチ」コマンドを指定します<br>パッチの境界線を設定し、「内部レールまたは点」で、作成したガイドカーブを指定します</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="800" height="598" src="https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail-800x598.png" alt="" class="wp-image-11645" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail-800x598.png 800w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail-500x374.png 500w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail-300x224.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail-768x575.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2025/10/guide_rail.png 1024w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>2025/10月から、自宅サーバーのPostFixからプロバイダー経由のメール送信ができなくなった！</title>
		<link>https://www.kazuban.com/blog/postfix_new_setting/</link>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 04 Oct 2025 06:36:58 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Linux (CentOS、Rocky、Ubuntu)]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[生成Ai]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=11507</guid>

					<description><![CDATA[外部からのログイン時や、ブログのバックアップ時など自動的にEメールが届くように設定していますが、今月（2025/10）に入ってからメールが届かなくなっていました。既存設定は下記で記事にしましたが、送信メール専用の運用です [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">外部からのログイン時や、ブログのバックアップ時など自動的にEメールが届くように設定していますが、今月（2025/10）に入ってからメールが届かなくなっていました。<br>既存設定は下記で記事にしましたが、送信メール専用の運用です</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">

<a href="https://www.kazuban.com/blog/rockylinux9-3-postfix/" title="RockyLinux9.３で自宅サーバーを再構築V08・postfix で送信専用メールサーバー構築" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2023/12/postfix-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2023/12/postfix-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/postfix-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2023/12/postfix-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">RockyLinux9.３で自宅サーバーを再構築V08・postfix で送信専用メールサーバー構築</div><div class="blogcard-snippet internal-blogcard-snippet">このサイトには「お問い合わせフォーム」を設定していますし、起動しているサーバーがエラーなどの連絡を発信する場合もあります。重要なメールもあるので、メインのメールアドレスへ配信させる設定を行います。今回は、サーバー側から、配信するのみの設定を行います</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2024.01.08</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">この設定により、このブログサイトへの、「お問い合わせ」も設置できているのですが、この不具合では、「お問い合わせ」もこちらに届きません<br>う～ん、困った。</p>



<h2 class="wp-block-heading">こんな時ほど、Aiに相談だぁ！</h2>



<p class="wp-block-paragraph">最初は、ググってみましたが、なかなか的確なサイトにぶち当たりません。<br>Aiに聞いてみよう！<br>ChatGPT と Gemini 2.5Flash に同じ質問をしてみましたが、ほぼ同じ回答内容でしたが<br>ChatGPTのほうが、みやすく感じます<br>ただ、ChatGPTは次から次に、逆質問をしてくるのが、ちょっとウザいかも・・・</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">rocky linux9 で自宅サーバーを運用していますが、2025/10月からサーバーからのメールが送信できなくなりました sudo cat /var/log/maillog | grep -i error を実行してみると、下記エラーがでます。原因はなんでしょう？ <br>sudo cat /var/log/maillog | grep -i error<br>（エラー内容）<br>・<br>・</p>
</blockquote>



<p class="wp-block-paragraph">それにしても、エラー内容をそのまま突っ込めるのは、今までの検索では考えられないですね。</p>



<h3 class="wp-block-heading">Aiのエラー内容の整理</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">ログのエラー内容を整理すると：<br>Postfix が プロバイダ<strong> のメールサーバ (mx.hogehoge.com) に TCP ポート 25 で接続しようとしてタイムアウト</strong>しています。</p>



<h4 class="wp-block-heading">主な原因候補</h4>



<p class="wp-block-paragraph"><strong>１０月からであれば、原因とは考えにくいですが・・・</strong><br>Rocky Linux の <code>firewalld</code> やルーターで 25番ポートのアウトバウンドが塞がれた可能性。</p>



<p class="wp-block-paragraph"><strong>プロバイダ側のポート25ブロック</strong><br>2025年現在、多くの ISP（特に家庭向け回線）はスパム対策のため <strong>ポート25を塞いでいる</strong> ことが多いです。<br>それまでは通っていたけど、2025年10月から「送信ポリシー変更」でブロックされた可能性があります。</p>



<p class="wp-block-paragraph"><strong>プロバイダ 側の受信制限</strong><br>プロバイダ の受信サーバが外部からの直接SMTPを拒否するようになった可能性があります。</p>



<p class="wp-block-paragraph"><strong>ファイアウォール / サーバ側の設定</strong><br>個人宅サーバからの直接送信を受け付けない運用に切り替えた可能性。<br></p>
</blockquote>



<h3 class="wp-block-heading">確認方法</h3>



<p class="wp-block-paragraph">自宅サーバーからプロバイダメールサーバーへ直接接続できるか試す</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-0eae8bd16b748755037f75239f8fa78c"><code>telnet mx.hogehoge.com 25</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">もしタイムアウトするなら → 回線側（ISPやプロバイダ）で遮断。<br>もし「220〜」の応答があれば → Postfixの設定やファイアウォールの問題。</p>
</blockquote>



<p class="wp-block-paragraph">結果、telnet mx.hogehoge.com 25 が応答なし（タイムアウト）でした。<br>ということは、サーバー側(Postfix)の問題ではなく、回線側で25番ポートがブロックされている可能性が非常に高いと言うことのようです。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h4 class="wp-block-heading">状況まとめ</h4>



<ul class="wp-block-list">
<li>以前は送れた → 2025年10月から送れなくなった</li>



<li>ログでは「Connection timed out」</li>



<li>telnet も通らない</li>
</ul>



<p class="wp-block-paragraph">👉 これは「ISP（プロバイダ 側）が <strong>自宅回線からの直接25番SMTP送信を禁止</strong> に切り替えた」ケースに一致します。<br>最近は迷惑メール対策で家庭向け回線ではほぼ標準でブロックされます。</p>
</blockquote>



<h3 class="wp-block-heading">解決方法</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">１．プロバイダのメールサーバ経由（SMTPリレー / smarthost）<br>　・Postfix の <code>relayhost</code> 設定でプロバイダの SMTP サーバ（587 or 465ポート）を使う<br>２．外部のメールリレーサービスを利用<br>　・SendGrid, Gmail SMTP relay, AWS SES など<br>３．自宅サーバではなく VPS 経由で送信<br>　・自宅サーバからVPSへ転送して、VPSから外へ送信。</p>
</blockquote>



<h3 class="wp-block-heading">解決策（おすすめ）</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<h4 class="wp-block-heading">プロバイダのSMTPサーバを経由する（最も現実的）</h4>



<p class="wp-block-paragraph">Postfix で <strong>「スマートホスト」設定</strong>をして、<code>smtp.hogehoge.com:587</code> 経由で送信するのがベストです。（25番ではなく 587 番（Submission ポート）がベスト）</p>
</blockquote>



<p class="wp-block-paragraph">まずは、 外部からの直接配送(mx) ではなく、 認証付きの送信サーバ(smtp) なら接続できるかの確認</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-d1ed62bd845bdfc34561e26dc69787d7"><code>telnet smtp.hogehoge.com 25
telnet smtp.hogehoge.com 587</code></pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">結果、両方とも接続できました<br>telnet smtp.hogehoge.com 587<br> Trying 000.000.000.0… Connected to smtp.hogehoge.com. Escape character is &#8216;^]&#8217;. <br> 220 hogehoge.com ESMTP server ready Sat, 4 Oct 2025 15:42:22 +0900</p>
</blockquote>



<h3 class="wp-block-heading">整理すると</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">mx.hogehoge.com:25 → タイムアウト（接続できない）<br>smtp.hogehoge.com:25 → 接続できる（220応答あり）<br>smtp.hogehoge.com:587 → 接続できる（220応答あり）<br>つまり：<br>プロバイダ は 外部からの直接配送(mx) を制限している<br>代わりに 認証付きの送信サーバ(smtp) なら 25 でも 587 でも受け付けている<br>じゃあどっちを使うべき？<br>587（submission ポート） が推奨です（標準仕様で「認証あり専用の送信ポート」）<br>25番で smtp.nifty.com に直接送ることもできますが、将来的にブロックされる可能性が高いです。<br>なので、Postfixの relayhost を smtp.hogehoge.com:587 にして、SMTP認証を通す設定がベストです。</p>
</blockquote>



<h2 class="wp-block-heading">設定方法</h2>



<h3 class="wp-block-heading">認証情報ファイルを作成</h3>



<p class="wp-block-paragraph">/etc/postfix/sasl_passwd　ファイルを作成し、アドレスとパスワードを追記：<br>「プロバイダのメールアドレス」：「アドレスパスワード」</p>



<ol class="wp-block-list">
<li></li>
</ol>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-cf5ee98bcd0014075216e4ea91b22a3d"><code>&#91;smtp.hogehoge.com]:587 myaddress@hogehoge.com:mypasswd</code></pre>



<h3 class="wp-block-heading">Postfix設定ファイルを修正</h3>



<p class="wp-block-paragraph">/etc/postfix/main.cf の末尾あたりに下記追記：</p>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-13556aa4e80564c4f005081ef9c9d542"><code># hogehoge の SMTP サーバをリレーに指定
relayhost = &#91;smtp.hogehoge.com]:587

# SMTP認証を有効化
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

# TLS を使用
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
</code></pre>



<h3 class="wp-block-heading">ハッシュ化して権限設定</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-38c8a71e92c7c150706dc97f7dbaf633"><code>sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd*</code></pre>



<h3 class="wp-block-heading">Postfix再起動</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-3c331cc5949776159db7c4e811fd490b"><code>sudo systemctl restart postfix</code></pre>



<h3 class="wp-block-heading">テスト送信</h3>



<pre class="wp-block-code has-cocoon-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-c98fe1de8a8672232244379c1692715a"><code>echo "This is a test mail" | mail -s "Postfix smtp test" myaddress@hogehoge.com</code></pre>



<h3 class="wp-block-heading">確認</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">/var/log/maillog を確認して、status=sent になれば成功</p>
</blockquote>



<h3 class="wp-block-heading">後日、Gmailへの転送がNGになった</h3>



<p class="wp-block-paragraph">後日、バックアップサーバーの立ち上げをやっていて、GmailへのテストメールがNGになった</p>



<pre class="wp-block-code"><code> echo "This is a test mail to gmail" | mail -s "Postfix smtp test2" hogehoge@gmail.com</code></pre>



<h4 class="wp-block-heading">ここも、AIに聞いてみる</h4>



<p class="wp-block-paragraph">Gmailで該当メールを開いて <strong>「︙」→「メッセージのソースを表示」</strong> し、以下の行を確認してみてください：</p>



<pre class="wp-block-code"><code>Authentication-Results: mx.google.com;
   spf=pass  ← ここがfailだとアウト
   dkim=pass ← ここがfailだとアウト</code></pre>



<p class="wp-block-paragraph">その結果を教えてもらえれば、どこが問題か特定できます！</p>



<pre class="wp-block-code"><code>Authentication-Results: nifty.com;
    dmarc=none header.from=kazuban.com;
    dkim=none;
    spf=fail smtp.mailfrom=kazuban.com;
    sender-id=Fail (pra) header.From=kazuban.com</code></pre>



<p class="wp-block-paragraph">原因が明確になりました！</p>



<h3 class="wp-block-heading">AIが問題点指摘</h3>



<p class="wp-block-paragraph"><strong><code>spf=fail</code></strong> → <code>kazuban.com</code> のDNSにSPFレコードがないか、Niftyのサーバーが許可されていないNiftyのSMTP経由で送っているのに、Fromアドレスが <code>@kazuban.com</code> なので、<br>「kazuban.comのSPF的にNiftyは許可されてないよ」とGmailに判断されています。</p>



<h4 class="wp-block-heading">A. <strong>kazuban.com のDNSにSPFレコードを追加</strong>（推奨）</h4>



<pre class="wp-block-preformatted">種別     ホスト名          内容<br>TXT      @ （または空欄）<code>  v=spf1 include:nifty.com ~all</code></pre>



<p class="wp-block-paragraph">設定後、反映に<strong>数分〜数時間</strong>かかる場合があります。確認コマンドはこちら：</p>



<pre class="wp-block-code"><code>dig TXT kazuban.com | grep spf</code></pre>



<p class="wp-block-paragraph"><code>v=spf1 include:nifty.com ~all</code> が表示されれば成功です。</p>



<h2 class="wp-block-heading">正常にもどった</h2>



<p class="wp-block-paragraph">いまさらですが、Aiはすごいですね<br>ちょっと前までは、プロンプトが重要とか言われていましたが、最近ではあまり感じません<br>普通に個人の言葉で、質問すれば、かなり理解してくれます<br>もしかすると、サポート会社などへ、電話質問するよりも簡単かもしれません<br>理解力と分析力は、はるかに人間を超えているように思います</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
