Skip to content

[fix] MariaDB環境でFULLTEXTインデックスが作成されないバグを修正#2391

Open
dreamer9999 wants to merge 3 commits intoopensource-workshop:masterfrom
dreamer9999:master
Open

[fix] MariaDB環境でFULLTEXTインデックスが作成されないバグを修正#2391
dreamer9999 wants to merge 3 commits intoopensource-workshop:masterfrom
dreamer9999:master

Conversation

@dreamer9999
Copy link

@dreamer9999 dreamer9999 commented Mar 24, 2026

fix: MariaDBバージョン文字列のパースバグ修正

概要

MariaDBのバージョン文字列に -log などのサフィックスが付く環境(例: 10.5.19-MariaDB-log)で、
databases_inputsテーブルへのFULLTEXTインデックス作成がスキップされ、
データベースプラグインのキーワード検索で500エラーが発生する問題を修正。

※作業中、500エラーが出たので、claude.ai に原因を調べてもらい、対応プログラムを作ってもらい、プルリクエストさせていただきました。はじめてのプルリクエストで、何かご迷惑をおかけしてまっているようでしたらお詫び申し上げます。

レビュー完了希望日

なし

関連Pull requests/Issues

なし

参考

str_replace('-MariaDB', '', $version) だけでは -log が残り、
explode 後の $version_arr[1]"19-log" となり >= 6 の比較が正しく動作しない。
preg_match で数字部分のみを抽出し int にキャストして比較するよう変更。

DB変更の有無

なし

チェックリスト

  • プルリクエストにわかりやすいタイトルとラベルを付けました。

HTTP500エラー
画面でのエラー
設定


修正内容の追記(レビュー対応)

概要

2023_09_04_153112_add_full_text_search_to_databases.php において、MariaDBのバージョン文字列に -log 等のサフィックスが付く環境(例: 10.5.19-MariaDB-log)では、バージョン判定が正しく動作せず databases_inputs テーブルへの FULLTEXTインデックス作成がスキップされていた。その結果、データベースプラグインのキーワード検索で500エラーが発生する。

本PRでは既存環境にも対応するため、新規マイグレーションファイルを追加して修正する。

バグの原因

元のコードでは以下の処理でバージョン文字列を加工していた。

$version = str_replace('-MariaDB', '', $version);
$version_arr = explode('.', $version);
if ($version_arr[0] >= 5 && $version_arr[1] >= 6) {

10.5.19-MariaDB-log に対して str_replace('-MariaDB', '') を適用すると 10.5.19-log が残る。
これを explode('.') すると $version_arr[1]"19-log" となり、>= 6 の比較が正しく動作しない。

修正内容

新規マイグレーションファイル 2026_03_25_000000_fix_mariadb_fulltext_index_on_databases_inputs.php を追加。

  • preg_match でバージョン文字列の数字部分のみを抽出し int にキャストして比較することでサフィックスの影響を排除
  • preg_match が失敗した場合(異常ケース)は Log::warning を出力してスキップ
  • FULLTEXTインデックスが既に存在する場合はスキップ(正常環境への二重実行を防止)
  • MariaDB以外はスキップ(MySQL環境では元のマイグレーションが正常動作しているため)

既存環境への対応について

Laravelは一度実行したマイグレーションを migrations テーブルに記録し、php artisan migrate を再実行してもスキップする。そのため元ファイルの修正だけでは既存環境には反映されない。本PRでは新規マイグレーションとして追加することで既存環境にも対応する。

レビュー完了希望日

なし

関連Pull requests/Issues

なし

DB変更の有無

有り(databases_inputs テーブルに FULLTEXTインデックスを追加)

チェックリスト

fix: MariaDBバージョン文字列のパースバグ修正
@masaton0216 masaton0216 self-requested a review March 25, 2026 02:52
@masaton0216 masaton0216 added the bug バグ・不具合連絡 label Mar 25, 2026
Copy link
Contributor

@masaton0216 masaton0216 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ご対応ありがとうございます。
2点コメントしたのでご確認ください。

Comment on lines +36 to +41
preg_match('/^(\d+)\.(\d+)\.(\d+)/', $version, $matches);
$major = isset($matches[1]) ? (int)$matches[1] : 0;
$minor = isset($matches[2]) ? (int)$matches[2] : 0;

// MariaDBは5.6以上でFULLTEXT対応
if ($version_arr[0] >= 5 && $version_arr[1] >= 6) {
if ($major > 5 || ($major === 5 && $minor >= 6)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1. preg_matchの失敗ケースのハンドリング

preg_matchがマッチしなかった場合、$major=0, $minor=0 となりFULLTEXTインデックスが作成されません。
strpos($version, 'Maria') !== false を通過しているにもかかわらずバージョン番号がパースできないケースは異常であるため、ログ出力やWarningを出した方がデバッグしやすいかと思います。

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

class AddFullTextSearchToDatabases extends Migration
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

問題点

Laravelは migrations テーブルに実行済みのマイグレーションファイル名を記録し、一度実行されたマイグレーションは php artisan migrateを再実行してもスキップされます。
つまり、この2023年9月のマイグレーションファイルを修正してもケースに応じて下記の状態になります。

  • 既存環境: すでに実行済みなので、修正後のコードは永遠に実行されない (500エラーは解消されない)
  • 新規環境: 新規に migrate を実行する場合のみ修正が反映される

対策

新しいマイグレーションファイルを作成し「Maria、且つ、インデックスが存在しなければ作成する」という設計とするのが望ましいと思われます。

@dreamer9999
Copy link
Author

dreamer9999 commented Mar 25, 2026

ご指摘ありがとうございます。
以下の対応を行いました。
※AIのclaude.aiと相談して対応しました。

  1. preg_matchの失敗ケース: Log::warningを追加しました。
  2. 既存環境への対応: 新規マイグレーションファイルを追加します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug バグ・不具合連絡

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants