Claude Codeをバージョン指定でインストールする

この前、Claude Code 2.1.27でフリーズして使えなくなる問題が発生しました。このような場合、過去のバージョンを指定してインストールすることで回避できます。

バージョン指定でインストール

Claude Codeは通常のインストールスクリプトにバージョン引数を渡すことで、特定のバージョンをインストールできます。

curl -fsSL https://claude.ai/install.sh | sh -s -- 2.1.25

これで~/.local/bin/claudeにコマンドがインストールされます。

自動更新を無効化して実行

Claude Codeは実行中に自動更新が行われるため、せっかくバージョン指定でインストールしても更新されてしまいます。自動更新を無効化するには、環境変数DISABLE_AUTOUPDATERを設定して実行します。

DISABLE_AUTOUPDATER=1 ~/.local/bin/claude

毎回入力するのが面倒な場合は、エイリアスを設定しておくと便利です。

alias claude='DISABLE_AUTOUPDATER=1 ~/.local/bin/claude'

アンインストール

Claude Codeをアンインストールする場合は、以下のファイルとディレクトリを削除します。

rm -f ~/.local/bin/claude
rm -rf ~/.local/share/claude

まとめ

新しいバージョンで問題が発生した場合は、この方法で過去のバージョンに戻すことで一時的に回避できます。問題が修正されたら、通常通りインストールし直して最新版に更新しましょう。

AIドリブン開発のためのfess-workspaceリポジトリ

Fessの関連リポジトリは30個を超える感じになっており、Claude Codeとか使って、個々のリポジトリでの改修も限界がありました。たとえば、FessのWebアプリ側を修正しながら、クローラーのコードも修正するような場合は、リポジトリを横断して、対応する必要があったりと。

関連するリポジトリを横断的に修正ができるようにするために、fess-workspaceを作りました。今のところ、いい感じに使えています。たとえば、Fess 15.5からJUnit 5に移行しましたが、30個くらいあるリポジトリも同様に移行する必要があるのですが、Fess本体を参考にして、各リポジトリをClaude Codeに修正依頼したら、JUnit 5移行もさくっと完了しました。

という感じで、今まで、横断的な修正が面倒だなーと思っていたものはfess-workspaceで修正していこうかなと考えています。

FessのMIMEタイプ判定を拡張子ベースで上書きする

Fessのクロール時のMIMEタイプ判定は、Apache Tikaを使ったコンテンツベースの検出を行っています。しかし、ファイルの内容によっては誤判定されるケースがあります。例えば、REMコメントで始まるSQLファイルがWindowsバッチファイル(application/x-bat)として検出されてしまうことがあります。この問題に対応するため、Fess 15.5でfess_config.propertiesに拡張子ベースのMIMEタイプ上書き設定を追加しました。

背景

Tikaによるコンテンツベースの検出は多くの場合正確ですが、ファイルの内容が別のファイル形式と類似している場合に誤判定が発生することがあります。特にSQLファイルでは、Oracle Database用のスクリプトがREM(remark)コメントで始まることが多く、これがWindowsバッチファイルのコマンドと同じキーワードであるため、application/x-batとして誤検出されます。

このような場合、拡張子ベースでMIMEタイプを指定できれば、コンテンツベースの検出結果を上書きして正しいMIMEタイプを設定できます。

設定方法

fess_config.propertiesに以下の設定を追加します。

# 拡張子に基づくMIMEタイプの上書き設定(1行に1つ: .拡張子=MIMEタイプ)
crawler.document.mimetype.extension.overrides=\
.sql=text/x-sql\n\
.plsql=text/x-plsql

各行は.拡張子=MIMEタイプの形式で指定し、改行文字(\n)で区切ります。この設定で指定された拡張子のファイルは、コンテンツベースの判定結果よりも拡張子ベースの設定が優先されます。

動作の仕組み

新しく追加されたFessMimeTypeHelperクラスが、従来のMimeTypeHelperImplを拡張しています。初期化時にfess_config.propertiesから設定を読み込み、拡張子とMIMEタイプのマッピングを構築します。

ファイルのMIMEタイプを判定する際の動作は以下の通りです。

  1. ファイル名から拡張子を取得(大文字・小文字は区別しない)
  2. 拡張子が上書き設定に含まれている場合、設定されたMIMEタイプを返す
  3. 含まれていない場合、従来通りコンテンツベースの検出を行う

設定の記述ルール

  • 1行に1つのマッピングを記述する(\nで区切り)
  • 形式: .拡張子=MIMEタイプ
  • 拡張子の大文字・小文字は区別されない(.sql.SQLは同じ扱い)
  • 前後の空白は自動的にトリミングされる
  • 不正な形式の行(=を含まない行)は無視される
  • 空行は無視される
  • デフォルトは空文字列(上書きなし、従来の動作を維持)

設定例

SQLファイルの誤判定を修正する場合:

crawler.document.mimetype.extension.overrides=.sql=text/x-sql

複数の拡張子を設定する場合:

crawler.document.mimetype.extension.overrides=\
.sql=text/x-sql\n\
.plsql=text/x-plsql\n\
.pls=text/x-plsql

注意事項

  • この機能はFess 15.5以降で利用可能です
  • デフォルトでは上書き設定は空のため、従来の動作と変わりません
  • 拡張子の上書き設定はコンテンツベースの判定より優先されます
  • パスを含むファイル名(/path/to/file.sql)でも拡張子は正しく認識されます