コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Rubyのデバッグは p よりも pp のほうが見やすい

最近PHP触ってて、そういやvar_dumpみたいなものって何に当たるんだろう… とかググっていたら、存在そのものを最近まで知らなかったのでお茶濁し系メモ

環境

$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin16]

hash = {
    "key1" => "value_a",
    "key2" => {
        "child_array" => [{"key" => "value"}, {"key_a" => {"key_a1" => "value"}},],
        "child_hash" => {
            "child_child_array" => [1, 2, 3],
            "child_child_hash" => {
                key: "deep_value"
            }
        }

    }
}

こんな感じのHashを定義すると

f:id:shinkufencer:20180705094259p:plain

って感じで、いい感じに改行してくれます。

関連リンク

タイムオーバーにつき今後書きたいネタリスト雑記

寝るまでに記事が書ける気がしないので今後書くかもしれないネタシリーズ

  • 実録AmazonSNSによるPush通知の罠
  • 広告系の略語のひみつ
  • ぴーぶい?ゆーゆー?計測ってどうやるの!?
  • リーダブルビーコード

割と一番上はなう実装中かつそのせいで寝れない夜になりそう。

RubyのAWS SDKの認証情報は読み込み順番があるので気をつける

そういやどういう順番だっけか…みたいになるので

環境

aws-sdk-core (2.9.20)

説明

AWS SDK for Ruby は、次の手順で認証情報を検索します。

クライアントオブジェクト内で認証情報を設定する

Aws.config を使用して認証情報を設定する

環境変数を使用して認証情報を設定する

共有認証情報の設定

IAM を使用して認証情報を設定する

言い換えると

  1. Aws::S3::Client.new(params) のparamsに指定した認証情報
  2. Aws.config.update(params)のparamsに指定した認証情報
  3. AWS_ACCESS_KEY_ID 等シェル内で指定した認証情報用の環境変数
  4. ~/.aws/credentials で記述した認証情報
  5. インスタンスの場合のみ)IAMロールに指定された認証情報

という感じで決まるらしい。(らしいと書いたのは裏付け検証がしっかりできいないため)

大体他の言語のSDKCLIの読み込み条件見ていると

環境変数 > プロファイル情報 > コンテナにセットされた情報

ってのがベースラインにあって、それぞれの要素が間間に挟まるみたい。

参考リンク

状態には初期状態を必要であればつけようという話

データベースとかでもよく状態を表すカラムを用意することがあるとは思います。

その時に要件に併せてパターンを用意することが多いと思うんですが、その場合兎にも角にも「初期状態」つまり何もしていないというデフォルトを考えてほしいなと思いました。

デフォルトをつけるメリットとしては

  • 「何も状態を変化させていない」というのがわかる
  • 状態をリセットしたい時に明示的に書きやすくなる

というのが挙げられます。

特に1番目が結構大事で、データが作られただけという状態が表現できるので、状態に合わせたセットアップなどのぬけもれ判定が容易になります。

具体例を書きたかったんですが力尽きたので今日書きたいのはここらへんまでで。

参考リンク

余談

ステートマシンの文化はゲームプログラムではしっかりと確立されていて、枯れた知識の水平思考したい部分。

暑いし土曜日なので本日の更新は1回休み

たまにはこういう回があってもいいと思う。

余談

そもそも1日記事書こうと思ったのは5月ぐらいの記事に思いをある程度詰めたのですが、モデルケースが実はあって以下のサイト。

RailsDMで登壇されていたの情報集めよーとか思ってみたら毎日投稿しているのにビビり、そして中身を紐解いて行くと 1回休み という回が何個かあった。

こう「今日は休みであることを書く」っていう「毎日書く」というのは定着化できるんだなって思ったので、これを真似れば継続できるのでは?と思い、今日は真似てみました。

JetBrains系IDEでRubyもPHPも使いたい場合はInteliJ Ultimateを使えば解決

実は知らなかったレベルの雑記

発端

  • とあるスクリプト言語別検証をやりたかったのでRubyPHPも同じIDEでやりたい
  • All Products Packは買っている
  • いい方法ないかなーと思ったらUltimateがあった

難点

大本はJavaIDEなのでに各IDEほど特化部分の機能がない雰囲気

というかサムライズムのページに書いてありましたね…

プラグインをインストールすることでRubyPHPPython、Goも扱えます。UIが煩雑になってくる点さえ許容すればRubyMine、PhpStorm、PyCharm、GoLand、WebStormを別途ご購入になる必要はありません。

参考URL

Rubyで違う種類のErrorをrescueで補足して同一処理をやらせたい場合はカンマで区切る

なんかググってもストレートにヒットしなかったのでメモ

環境

$ ruby -v
ruby 2.3.5p376 

やりたいこと

IOErrorRangeError のときだけキャッチして同じ処理してほしいなーとかそういう時にどうやって書くか

答え

IOError, RangeError みたいにカンマで区切ればよい

▼raise_error.rb

def raise_test(arg)
  raise ArgumentError if arg == 1
  raise IOError if arg == 2
  raise RangeError if arg == 3
  p "何も起きてないよ"
rescue ArgumentError
  p "ArgumentErrorだよ"
rescue IOError, RangeError
  p "IOかRangeErrorだよ"
end

raise_test(ARGV[0].to_i)

▼動かしてみた

$ ruby raise_error.rb 0
"何も起きてないよ"
$ ruby raise_error.rb 1
"ArgumentErrorだよ"
$ ruby raise_error.rb 2
"IOかRangeErrorだよ"
$ ruby raise_error.rb 3
"IOかRangeErrorだよ"
$ ruby raise_error.rb 4
"何も起きてないよ"