【Rails】Pretty Print(PP)を利用したデバッグ 【API】

実務に於いて、先輩から「PP」をコード内に仕込み、デバッグする方法を教わった。

RailsAPIを叩いた際、エラーが発生してもどこを直せばよいか分からないことが多いかと思う。

そこで役に立つのが、

pp

で、まずは表示されているエラー文からある程度の目処を付ける。

目処を付けたmethodの処理内で、

例えば

def index
  @user = User.all
  pp @user # pp "aiueo"
end

のように、pp 変数名、pp "文字"を変数の後ろに入れてAPIを叩くと

dockerを利用している場合、正常に実装できている場合はdocker-compose upしているターミナルに文字がプリントされる。

つまり、pp文が通らなかった場合(無反応の場合)、その直前のコードがおかしいことになる。

ppをこまめに利用することで、エラー源を特定しやすくなる。

実務において非常に役立つので、これからもどんどん使っていきたいと思う。

【Mac 小ネタ】Finderで隠しディレクトリをコマンドで表示させる方法

.sshディレクトリのファイルを送付したい時(相手方と公開鍵のやりとり等)、頻繁にはないと思いますが、メモ的に残す。

command + shift + .

finder等で上記3つのキーをホームディレクトリで打つことで一発で表示できる。

Rails(API), Docker利用時、gemを追加した際のコマンド

Docker環境においてRails APIでgemを追加した際のコマンドを忘れがちなのでメモとして残す。

まずはdevelopブランチにおいてgit pullして最新のgitを反映させる。

そして以下のdocker-composeコマンドでgemのupdateなどを行う。

docker-compose run --rm api bundle update
docker-compose run --rm api bundle install
docker-compose build api
docker-compose up

自分以外の操作によってgemが追加される場合があるので、定期的に行うとよい。

class << self について

通常、モデル内(class)にdef~という形で書くと、 それはインスタンスメソッドとなる。インスタンスメソッドはそのモデル内で使用できる。

ではモデル内でよく見る「class << self」とは何か?

class << self

 def クラスメソッド

 end
end

上記のような場合、 class<<selfからend内に書かれたメソッドはクラスメソッドとなる。

クラスメソッドとして定義したい場合、他に

def self.メソッド

end

のように、メソッドの前にself.を書く方法がある。 両者とも効果は同じだが、何度もクラスメソッドを書く場合は、前者のように一段ネストした方がよい。

Rubyスタイルガイドでは、後者のようにself.メソッドという書き方が推奨されている・・・が、状況に応じて選べばいいのではないかと思った。

 Docker で不具合があった場合の対処

このブログではRailsの実務におけるエラーや技術のことなどを備忘録的に記していきます!  

業務でdocker を利用していて偶に各種エラーに遭遇するが、その場合はエラー内容にもよるがDockerを再起動するなどで直る場合が多い。

Docker (右上の鯨)を終了させる。リスタートではなく、一度終了させてから起動させる。

dockerコマンドで不要なキャッシュなどの削除を行う

未使用のvolumeを一括削除

docker volume prune

未使用のimageを一括削除

docker image prune

未使用のcontainerを一括削除

docker container prune

未使用のnetworkを一括削除

docker network prune

停止コンテナ、未使用Volume、未使用network、未使用Imageを削除

docker system prune