% cat

不定期!弊社のslackで話題になった技術tips集!😘 Vol.2

🐉 説明しよう!tips集とは!?

弊社のslackチャンネルには、各々が感じた、技術的なtipsを誰に向けるわけでもなく放り投げるチャンネルがあります!

↑こんな感じです。

この記事は既出であろうがなかろうが、tipsをひたすらまとめていく記事である!!😄

内容にまとまりがないのはご愛嬌です!弊社の仕事の様子の鱗片が少しでも感じられれば幸いです👌

次回: Vol.3
前回: Vol.1

📌 Ruby & Ruby on Rails編

- rubocopが古くてatomのlinter-rubocopでエラー出る問題

configで別の新しいrubocop設定yml用意してあげると大丈夫そうでした😄

/usr/local/bin/rubocop --config /Users/username/pjt/rubocop/.rubocop.yml

- Railsでto_queryに引数を渡すと名前空間付きになる

{ id: 1, name: "hoge"}.to_query("user")
#=> user[id]=1&user[name]="hoge"

- rubyで式が定義されているか調べるときのメソッド

defined? hoge

a = true
b = nil

defined? a #=> "local-variable"
defined? b #=> "local-variable"
defined? c #=> nil

- pry中のwhereamiのエイリアスは

whereami のエイリアス @

- BCryptでハッシュ化したパスワードともとの平文の比較

元の平文のパスワードと合っているかを判定するとき、左辺と右辺を逆にするとfalseになる。

[11] pry(main)> my_password = BCrypt::Password.create("my password")
=> "$2a$10$PTCnedbK76CvSWyGVN.cfuQ2XwFDZWuTENL/OIvpIv0X8XmLksP3K"
[12] pry(main)> decoded_pass = BCrypt::Password.new(my_password)
=> "$2a$10$PTCnedbK76CvSWyGVN.cfuQ2XwFDZWuTENL/OIvpIv0X8XmLksP3K"
[13] pry(main)> decoded_pass == "my password"
=> true
[14] pry(main)> "my password" == decoded_pass
=> false

ちなみに普通の文字列を比較するときは、左辺と右辺を逆にしても結果は変わらない模様。

[15] pry(main)> hoge = "hoge"
=> "hoge"
[16] pry(main)> hoge == "hoge"
=> true
[17] pry(main)> "hoge" == hoge
=> true

※ 🖌 時々遭遇する理屈不明な謎挙動。調べると理由がわかるんですが、なんで!?ってなりがち。
※ しかし、次の日、回答が!

decoded_pass は String なのかな? Stringを拡張したオブジェクトの可能性があると思う。

Stringじゃなかったね。てことは、 == は BCrypt::Password のメソッド

pry(main)> ret = BCrypt::Password.create("my password")
=> "$2a$10$q4p9T2PeNu7yYc34qlVGXup5HBxOFJsQNRlPD0QKbXD0Y9OCw/.XG"
[4] pry(main)> ret.class
=> BCrypt::Password
[16] pry(main)> $ BCrypt::Password

From: /Users/kawamata/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.12/lib/bcrypt/password.rb @ line 23:
Class name: BCrypt::Password
Number of lines: 63

class Password < String
...
  def ==(secret)
    super(BCrypt::Engine.hash_secret(secret, @salt))
  end
...
end

※ 🖌 たしかに、深掘りしてみるとBCrypt::PasswordはStringを継承していて、==メソッドが独自で生えてますね!面白い〜〜!

- rspecでTime.nowを使っているコードを確認したい時

timecopのgemを使って、Time.nowを設定できる

before do
  Timecop.freeze(Time.local(2018, 2, 15))
end
Time.now # いつ実行されても以下の価値が出る
=> 2018-02-15 00:00:00 +0900

📌 Javascript編 (nodeなども含む!)

- npm-check-updates

パッケージ自体の更新と package.json の更新を行う
https://github.com/tjunnone/npm-check-updates

yarnだと
https://github.com/yhnavein/yarn-check
が便利かもしれない。

- npm5からpackage-lock.jsonになった

参考: npm5から導入された package-lock.jsonについて | kakts-log

- setTimeoutの中でもとのthisを呼び出す方法。

最高

  func: function() {
    var self = this;
    setTimeout(function() {
      console.log(self, self.name);
    }, 100);
  }

JS 呼び出し元の this を担保するメモ。
javascript jQuery ES5 ES6

📌 CSS(style)編

- SCSS などの各種 CSS メタ言語で & の使い方で class も結合できる

.hoge {
    width: 100px;
    &__piyo{
        width: 120px
    }
}

.hoge {
    width: 100px;
}

.hoge__piyo {
    width: 120px;
}

📌 html(slimやhamlなどを含む)編

- slim で 画像と文字を横並びさせたリンクを張りたいとき

= link_to image_tag('hoge.png') + 'hogepiyo'

+ で繋げれる、 () は必須。

📌 mysql編

- mysql8 以降では 認証方式が変わった

Mysql2::Error (Authentication plugin 'caching_sha2_password' cannot be loaded ~~~

みたいなエラーが出たら、 /etc/my.cnf に下記を記載するとよい らしい

[mysqld]
  default-authentication-plugin=mysql_native_password

📌 Git編

- gitでaddし忘れたファイルがあった時は

git add hoge/foo/bar
git commit --amend --no-edit

で追加できる

- よくつかうエイリアス

git config --global alias.cma '!git cm --amend --no-edit'  
git config --global alias.psf '!git push origin $(git rev-parse --abbrev-ref HEAD) -f'
% git cma
% git psf

※ 🖌 git rev-parse --abbrev-ref HEAD はcurrent branchが出るらしいぞ!

- push.default=current を設定したら

git push origin

だけでもcurrent branchへpushする

📌 linux編 & AWS編

- awsのアクセスキーが最後に使われたサービスがわかる

aws iam get-access-key-last-used --access-key-id XXXXXXXXXXXXXXXXX --output json

📌 ツール編

- chromeでiframeを使った動画の自動再生はmute状態じゃないと再生されないように

参考: Safari, Chromeの自動再生ポリシー変更のまとめ - Qiita

※ 🖌 音量で暴走することあるからこのアップデートは助かりますなぁ!

- CIrcleCI v2 の環境変数優先度

- Global
  - Project(Global)
    - Job (Global/Project)
      - Container (None)
        - Step (Global/Project/Job/Container)
          - Bash (Global/Project/Job/Container)

参考: https://medium.com/veltra-engineering/circleci-2-0-a0549c65bc3b

📌 おすすめ編

- このブログをこっそり眺めていこうと思います

ポンコツ.log

※ 🖌 こっそりじゃなくしてごめんなさい!でも紹介しちゃいます!

- diff2html githubと同じようなdiff画面をnodeでできる

すごそう

https://diff2html.xyz/

- hubコマンド便利

https://github.com/github/hub

手元でissue一覧みたり、
prにcheckoutできたり便利

🖌 編集後記

豊作ですね!!

今回はまとめていて思ったんですが、「あれ?私gitのオプション知らなさすぎ...?」って感じでした! 割といろんなコマンド駆使すればなんとかなるものではありますが、もっとオプション使って便利にやりくりすべきですなぁ。

今回は2018/06/09 ~ 2018/06/15で放出されたtipsをまとめてみました。こんな感じで弊社の開発部はわいわいがやがややっておりますぞい!

休日にも独学のtipsを流してくれる人がいるほど、熱心な人もおります! tips共有ありがてぇ!

では、この企画が続けば、また次回に!

最新記事

「良いプロダクト」とは、どんなプロダクトのことでしょうか?

こんにちは! プロダクトオーナー兼開発部マネージャーをしている長谷川([@roki1801](https://github.com/roki1801))です。普段は山形県山形市にあるベーシックのサテライトオフィス「[山形ラボ](...

roki1801
2019年03月29日

大量アクセスに耐え得る在庫管理システムの構成を考え実装してみた

皆さん「在庫管理」ってどうしてます?itemsテーブルに、stockカラム作ってdecrementしてますか? まぁ正直、それでも良い感じしますよね。楽だし何やってるかわかりやすい。 しかし! **超人気商品に超ア...

mmusasabi
2019年03月13日

kubernetes で Ruby on Rails を動かして kubern...

巷で話題の kubernetes ですが、とってもとってもとっつきにくいですよね そんな kubernetes ですが手元で動かすことができたので解説してみます (情報が間違ってたらごめんなさい! 🙇) 目標はこちら ...

tkhr0
2019年03月07日