いてづきブログ

情シスでやってみたことの備忘録

RubyでEXIFの日時を変更する

GWの成果物です。

github.com

Googleフォトのアルバムの並び順は古い順、新しい順、最近、カスタムの4つしかなく、ファイル名でソートすることが出来ません。
カスタムにしても撮影日時などのEXIF情報の時刻が全く同じせいか入れ替わることがあったりして不便(そもそも手動で順番を入れ替えないといけない時点で面倒)

なので、Googleフォトの機能でアルバム内の順番を固定するために画像のEXIF情報を1秒ずらしで設定するコードを書きました。

ただ、使用したmini_exiftoolは実際はexiftoolを使ってるらしく(インストールしないと動かない)Rubyで書いた意味はあんまりなかった気がしなくもない。


次にやることはと言えばこうしてEXIFを書き換えた画像をそのままGoogleフォトにアップできるようにすることだけど、現時点ではGoogle Photos APIsのRubyのラッパーはないらしくますますRubyで書く意味が(ry


一連の流れも含めて全部シェルで書き直したほうがいいかもしれないなと思ったところでGWは終了。
とりあえずやりたかったことは出来たので良しとする。 そもそもGoogleフォトがファイル名でソートできるようにしてくれればいいんだけど。。。

railsにslimを導入するためにしたこと

railsのviewをslimで書くためにやったこと。

slim-railsの導入

Gemfileにslimを入れてbundle install。既存のerbを変換するためにhtml2slimも同時に入れる。

gem 'slim-rails'

group :development do
  gem 'html2slim'
end

erb2slimを実行しようとしたが…

既存のerbをslimにしようとerb2slimを実行したが、erb内で日本語文字を使用していたためエラー。

invalid byte sequence in US-ASCII (ArgumentError)

変換のときだけ日本語文字を省いてもいいが、同様の問題は今後も発生する可能性があるのでなるべくソース内に日本語文字を直書きしないようにするべくI18nを導入*1

railsguides.jp

I18nを導入

Gemを追加。

gem 'rails-i18n'

confg/application.rbでデフォルトのlocaleを指定。

config.i18n.default_locale = :ja

config/locale配下にymlを配置(view.ja.yml)

ja:
  users:
    index:
      name: 氏名

erb内からymlで指定した表記を呼び出す。

<%= I18n.t('.users.index.name') %>
#=> 氏名

erb2slimを再実行

改めてerbをslimに変換する。-dオプションは変換後に元のerbを削除するオプション。

bundle exec erb2slim app/views -d

変換後、上記のerb部分もきちんと変換された。

= I18n.t('.users.index.name')

まとめ

単にslimを入れるだけのはずがなぜか結構大仕事になっていた。 仕事で使ってるプロジェクトが、日本語しか使わないのにI18n使っててなんでなのかなぁと思ったけどこういう理由もあったりしたのかな。わからん。。。

*1:本来の目的ではないが勉強も兼ねて

rbenvで最新版のrubyがインストール出来ないとき

rbenvで最新版のrubyをインストールしようとした

rbenv install 2.6.1 && rbenv global 2.6.1


すると、エラーが出た。

ruby-build: definition not found: 2.6.1
See all available versions with `rbenv install --list'.

If the version you need is missing, try upgrading ruby-build:
  brew update && brew upgrade ruby-build

「2.6.1なんてねーよ」というエラー。 メッセージの通りrbenv install --listを実行してもリストに2.6.1がない。

なので、その下のメッセージに沿ってruby-buildをupdateする。

brew update && brew upgrade ruby-build

アップデートが終わったら再度rbenv install --listを確認して2.6.1があることを確認したので あらためてインストールとバージョンの確認。

# 2.6.1をインストール
rbenv install 2.6.1 && rbenv global 2.6.1
# 設定結果を確認
rbenv versions

Modelのアップデートでカラムを動的に変える

Railsの処理の中で、更新するカラムを動的に変えたい場合の書き方。
公式ドキュメント読んでもよくわからなかった(書いてなかった)のでメモ。

userhogeもしくはmogeのどっちかをfugaに更新したい場合、下記のように書く。

field = user.condition? ? :hoge : :moge
user.update(field => 'fuga')


メタプログラミングRuby 第2版

メタプログラミングRuby 第2版