いてづきブログ

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

サイゼリヤ1000円をRubyでざっくり作ってみた

qiita.com

サイゼリヤ1000円ガチャがバズっていたので自分でも練習として作ってみた。
github.com

フレームワークSinatraにしてみた。 初めて使ったけど爆速でWebアプリが動いてすごい。
ときどき、Railsはオーバースペックみたいに言われるのがちょっとわかった気がした。

sqliteActiveRecordで使う方法とかいろいろ調べながらやったけどそれでもここまで2時間かかってないと思う。
最小限のファイルしかいらないので見通しもいいし、ちょっとしたものなら本当にこれで良さそう。


あとはデザインか…(絶望)
デザインは1時間くらい悩んだ後とりあえず本家と全く同じにしました(何
デザインできる人ほんとすごい。

書いたコードと本家コードを見比べてみてかなり簡潔にコードを書けた気がする。
もちろん本家コードはプログラミング初学者(当時)が書いたものだし、フレームワークも言語も違うんだからそこでマウント取ろうとかそういう気持ちはまったくないんだけど、自分もガチ初心者だった頃より少しはマシになれたのかもなぁと思った。

参考にしたサイト
Sinatra+ActiveRecord+SQLite3で,軽量なWeb-DB連携例tamosblog.wordpress.com

ターミナルでよく使うショートカット備忘録

GWが明けたらiTerm2のショートカットを完全に忘れていたので備忘録を兼ねて書く。

iTermのショートカット

  • Cmd + d
    • 横分割
  • Cmd + shift + d
    • 縦分割
  • Cmd + ],Cmd + [
    • 前後のパネルに移動
  • Cmd + opt(alt) + i
    • 現在のタブのすべてのパネルに同時入力(Broadcast Input to All Panes in Current Tab)

iTermを使い始めた理由は最後の複数タブ同時入力のため。
普段はVSCode内のターミナルで作業しているのでリリースなどでサーバーにsshするときしか使っていない。

ターミナルのショートカット

  • ctrl + w
    • 単語一個分消去
  • ctrl + l
    • 現在のカーソル行を一番上に(clearと同じ)
    • Cmd + kでも同じようなことができるがiTermで同時入力してるときはCurrent Paneしか消えない
  • ctrl + u, ctrl + k
    • カーソルより前/後を全削除

あとは、普段fishを使っているので以前に入力したコマンドはで補完入力されたりする。
fishもとりあえず入れただけで使いこなせてないのでもう少し調べて使いこなしたい。

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