Ruby
Rails

Carrierwave のファイル名に日本語を許可する

はじめに

SEO 対策として画像に正しい alt を設定したかったのですが、
alt のテキスト用のカラムを作るのも微妙だったので、画像名を alt にすることにしました。
もちろん画像名をちゃんとすることが前提になりますが、微力とはいえ画像名も Google にわかりやすい名前にすることも大切なので一石二鳥ということで。

サイトは Rails で作られており、画像周りは Carrierwave を使っています。
ここで問題があり、Carrierwave はデフォルトの設定ではファイル名には日本語は許可されず、日本語のファイル名を入れると「____」に置き換わってしまうので今回は Carrierwave のファイル名に日本語も許可するようにします。

実装

つらつら書きましたが、実装は以下のみです。

config/initializers/carrierwave.rb
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

こちら github にも載っています。
ちなみにビュー側は以下のようにしました。

app/views/images/show.html.haml
= image_tag @image.url, alt: "#{File.basename(@image.path, '.*')}"

まとめ

上記の1行を入れるだけで簡単に日本語を許可することができました。
ただし alt を設定するという目的の場合、ある程度画像数がある場合は既存の画像を差し替えるなどの作業も必要になるのでケースバイケースでやり方を考えた方がいいかと思います。

参考

公式 github
https://github.com/carrierwaveuploader/carrierwave