説明しよう!tips集とは!?
弊社のslackチャンネルには、各々が感じた、技術的なtipsを誰に向けるわけでもなく放り投げるチャンネルがあります!
↑こんな感じです。
この記事は既出であろうがなかろうが、tipsをひたすらまとめていく記事である!!
内容にまとまりがないのはご愛嬌です!弊社の仕事の様子の鱗片が少しでも感じられれば幸いです
Ruby編
FloatにInfinityはあるがIntegerにはない。
pry(main)> 1.0/0
=> Infinity
pry(main)> 1/0
ZeroDivisionError: divided by 0
*
について
1.引数を渡す際、配列にアスタリスクを付けて関数呼び出しすると、配列が展開して渡される。
(呼び出す側で与える引数の数と、呼び出される側で与えられる引数の数が同じでないとエラー)
2.関数定義の引数にアスタリスクを付けると、0個以上の引数が配列にまとめられて渡される。
Safe Navigation Operator &.
レシーバが nil の場合に nil を返す。
10&.to_s # => "10"
nil&.to_s # nil
gem の内部をいじった時
gem pristine
を使えばインストール次点のソースへ戻すことができる
Enumerable#one?
を、 length == 1 であれば true を返すものだと勘違いしておりました。
真である数が 1 のときに true を返すのですね。
[nil, true, false].one?
# => true
ブロックを与えると、真偽判定を変えることができます。
[3, 4, 5].one?(&:even?)
# => true
精進いたします。
ruby コーディング規約の聖書
ruby-style-guideの和訳Readme - github
レス: これめちゃくちゃいいですね
# 悪い例
class FooError < StandardError
end
# 悪くない例
class FooError < StandardError; end
# 良い例
FooError = Class.new(StandardError)
知見すぎる......
Ruby on Rails編
rails sしてる時にキャッシュのログを見る
config.action_controller.enable_fragment_cache_logging = true を追加するとよい
Railsの詳細情報確認
rails c
中にRails::Info
コントローラー名からモデル名を求めたりしたい
Railsでコントローラー名からモデル名を求めたりしたい、逆もまた
ActiveRecordの挙動
User.send(:sanitize_sql_array, ['WHERE `users`.`id` IN (?)', User.none])
# => "WHERE `users`.`id` IN ()"
User.send(:sanitize_sql_array, ['WHERE `users`.`id` IN (?)', []])
# => "WHERE `users`.`id` IN (NULL)"
ActiveRecord
User.where(id: ids)
するとして、
ids = (1..10000).to_a.shuffle
と
ids = (1..10000).to_a
だと後者のほうが探索が速い
ids = [1] * 10000
と
ids = [1]
も結構違いが出る
scope で nil が返ると all と同じ挙動(なにもしない)になる
scope :piyo, -> { nil }
User.piyo.to_sql
# => "SELECT `users`.* FROM `users`"
コールバック止めるときに throw :abort
する理由
ActiveRecord::RollbackやActiveRecord::RecordInvalidを除く例外は、その例外によってコールバックチェインが停止した後も、Railsによって再び発生します。このため、ActiveRecord::RollbackやActiveRecord::RecordInvalid以外の例外を発生させると、saveやupdate_attributesのようなメソッド (つまり通常trueかfalseを返そうとするメソッド) が例外を発生させることを想定していないコードが中断する恐れがあります。
order/pluck
にSQL文使えなくなるらしいですね。Rails 6から
https://qiita.com/QUANON/items/8fcc8c6cee64d246a5a6
レス: Rails6 では create_or_find_by が使えるようになる…はず
https://github.com/rails/rails/commit/fe6adf43e124f4c9132e5a88a80ebba3f10fd2cb
HTML(slimなども含む)&ブラウザ編
slimでasync属性がついたscriptタグを埋める方法は、{}をつける
script{async src="https://example.com/sample.js"}
data属性で true を表現するときは true と書かないと危ない
CSS用に data-has-errors とだけしてると、js で空文字列が取得されて falsey になってしまう
jQuery の data() は型変換して取得するから尚更よくない
画像のALTタグについて
divタグの背景に画像を指定する background-image で画像を配置しているとaltタグが利用できなくなってしまう。
マウスオーバーした際のTool tipsを表示するだけであれば div タグの title要素に入れてあげれば反応するが
音声読み上げなどには対応していないのでaltタグの代用にはならない。
なので divタグに背景を指定するのではなく、意味のある画像なのであればちゃんとimg タグを利用してaltを設定したほうが良い
Javascript編 (node、vueなども含む!)
body内の要素監視について。
$('body').on 'DOMSubtreeModified propertychange', ->
https://developer.mozilla.org/en-US/docs/Web/Events/DOMSubtreeModified
ただ、DOMSubtreeModifiedこちらは非推奨になってます。下記がいいかも?
https://developer.mozilla.org/ja/docs/Web/API/MutationObserver
vue.js でトランジションするとき
http://chibinowa.net/note/vuejs/vue-22.html
http://chibinowa.net/note/vuejs/vue-23.html
CSS(style)編
scroll-snap-points 神すぎる...
これまで使ってなかったの本当に勿体ない
https://webkit.org/demos/scroll-snap/
iOS の Safari でみると分かりやすいです。
https://caniuse.com/#feat=css-snappoints
もうすぐ対応するブラウザも多し。
Safari transparent と rgba() のグラデーションが作れない
transparent の代わりに rgba でアルファ値 0 にする必要がある
CSSの詳細度の計算のうち、属性セレクターはクラスセレクターと同じ優先度っぽい。
- 型セレクター (例えば h1) と 疑似要素 (例えば ::before)
- クラスセレクター (例えば .example)、属性セレクター (例えば [type="radio"])、疑似クラス (例えば :hover)
- ID セレクター (例えば #example)
https://developer.mozilla.org/ja/docs/Web/CSS/Specificity
Go編
Goには構造体にタグをつけられて、jsonとかに変換する時によしなにやってくれる
(他の静的型付け言語もできるかもですが)
(あとアンスコのメンバ名つけると注意される)
http://text.baldanders.info/golang/struct-tag/
レス: 便利ですよね、値のないものに対して omitempty 付けるとキーごと消しちゃうのもたまに使います。
https://qiita.com/taroshin/items/59e62d8ec852c5f84bc1
go test実行時、-vオプションをつけないとテストが失敗した時しか標準出力してくれない
https://qiita.com/taizo/items/82930518430f940721a0#tlog
amazon linuxにmecab入れて、goから呼べるようにする際
soファイルが読まれなくて上手く入れれなかった。ビルドする際にで他のlinuxだと呼ばれるディレクトリが呼ばれないらしい
https://moznion.hatenadiary.com/entry/2013/08/23/105920
golangで特定の文字列の位置を検索する場合
stringsというpackageの中にIndexというそれっぽい関数があるが、これはbyteとしての位置を返すためちょっと工夫が必要
(あとbyteの方の結果は半角スペースはカウントされてないっぽい?)
https://play.golang.org/p/FEjU0XWKgN6
データベース編
Mysql describe
describe テーブル名
詳細データが見れる。
さらに desc
と省略できる
ClearDB に文字コード utf8mb4 で保存する
http://xyk.hatenablog.com/entry/2015/01/14/143508
shell & Linux編
zshの単語単位で削除
ctrl-w
でできる。今月1の感動でした。
sed /
は任意だった...
以下は同じこと
sed 's/hoge/piyo/'
sed 'skhogekpiyok'
vim
shift + v
で行選択
{
}
で空行ごとにジャンプ
AWS & GCP & Heroku編
Heroku で固定 IP を使いたい場合
Proximo add-ons を使う。月$5
https://elements.heroku.com/addons/proximo
AWS マルチAZのDBインスタンスは停止できない
レス:
それな。マルチAZ やめたら停止できるけど1週間くらいで勝手に起動する
迷惑すぎる...使わないけどデータは保持してたい...修正してほしいですよねぇ。
Docker編
いつの間にかdockerのサブコマンド体型が変わっていた
docker ps # => docker container ls
docker exec # => docker container exec
docker build # => docker image build
https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266
REPOSITORY で docker images
を filter したいとき reference
というのを使う
https://docs.docker.com/engine/reference/commandline/images/#format-the-output
$ docker images --filter=reference='gcr*/*/*:*'
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/banana-ci/dummy-project-rails pr-20-1 d1e54a5f6bf4 4 months ago 917MB
gcr.io/banana-ci/dummy-project-rails pr-20-4 d1e54a5f6bf4 4 months ago 917MB
gcr.io/banana-ci/dummy-project-rails pr-10-1234567 0e331b8e14ff 4 months ago 917MB
こんな感じで、image name に /
があると、 gcr*:*
ではヒットしなかった
コンテナ内でコマンド打っていると、横幅狭いなーってことないですか?ぼくはありました。
https://qiita.com/reflet/items/8722af15200ab2553d9c
なので、 Dockerfile で
ENV COLUMNS=200 LINES=200
しちゃいます。
Git & GitHub編
コミットを一つにまとめたいなーというとき
git rebase -i
の出番。
まとめたい最初のコミットの一つ手前の番号を指定するとまとめる操作ができる。
git commit --fixup=XXXX
も便利
XXXX
に任意の commit の sha を指定するとその commit と fixup するためのマーキングをしてくれます。
そして git rebase -i --autosquash
すると勝手に順番を変えてくれます
gitでcommitログのauthorを変更する方法
git commit --amend --author="hogehoge <hogehoge@example.com>"
git revert テクニック
mergeコミットのrevert(A)のrevert(B)をしたい時、かつ、(A)以降に、(A)に対して既に差分がマージされたあとの場合、 GithubのGUI上ではrevetができないので、 ローカルのコマンドから -m
オプションをつけてrevertしてあげる。
$ git revert xxxxxxxxx -m 1
参考:https://blog.toshimaru.net/git-revert-mainline/
ふとおもむろに修正したコード行数を確認したい時
git diff --stat
git diff --cached --stat
ツール紹介編
slack の特定チャンネルへの動線を作れる
Deep linking into Slack clients - api.slack.com
ATOM todo-show 見やすい
集中線 Webサービス
https://lab.syncer.jp/Tool/Intensive-line-Generator/
Sequel Proを上手く使うコツ
お気に入りに保存する際、色指定ができる。
実際に接続したときのタブの色にもなる。
これを駆使すると複数データベースと接続して触ってるとき、あれ?今どこのやつ触ってたっけ?を防げるのでおすすめ。
google spreadsheetsのショートカット
https://www.popxpop.com/archives/2007/05/google_spreadsheet.html
DevTools で $$('.piyo')
とするとCSSセレクタのクエリが試せる
$x('//*[@class="piyo"]')
で xpath
https://qiita.com/letsspeak/items/80882748daf7060903d8
考え方&仕組み編
GA tips
Aサイト https ⇒ Bサイト http
はリファラルではなくダイレクトで計測される
https://www.uneidou.com/ga-solution/post-12875/
https://web-omusubi.com/blog/omusubi49.html
おすすめ編
下位10%のダメなエンジニアにだけ解けないパズル
http://challenge-your-limits.herokuapp.com/
↓作者のブログ
【パズル1】ほとんどのエンジニアには解けるが、下位10%のダメなエンジニアにだけ解けないパズル? - ベルリンのITスタートアップで働くジャバ・ザ・ハットリの日記
まもなくdev.toがopen sourceになる
https://github.com/thepracticaldev/dev.to
鹿野さんのファンなので鹿野さんのICSデビュー記事を貼っておきます(N回目)
編集後記
久しぶりに書いてみると、流石に量が尋常じゃないことになっていましたw
独断と偏見でtipsっぽいやつを絞って記載してます!少しでもみんなの参考になれば...いいですね!
さて、今回は2018/07/30 ~ 2018/08/14で放出されたtipsをまとめてみました。こんな感じで弊社の開発部はわいわいがやがややっておりますぞい!
雑談こーなー
エンジニアが食べる食べ物は寿司。というのが弊社です。 え?なぜ、寿司なのか?
成る程、いい質問ですね。
弊社では月に1度勉強会を開くのですが、その際にいつも食べるものを注文します。
オードブル? 冷えた揚げ物はちょっと辛い。
ピザ? 最初はいいけどアツアツなうちに食べきってしまいたい。でもそうなると発表に集中できない。
寿司? 成る程、もともと 冷えた食べ物 だし、寿司嫌いな人間はほぼいない。ビール、ワイン、日本酒、ハイボールと全てのお酒との相性も良い。何より一口で一区切りがつくサイズ感で話の合間合間に食べるのに丁度いい。
エンジニアにとって、寿司ほど優れた食べ物はない!!
...少し盛りましたが、色々あって寿司に落ち着きました。
ちなみにエンジニアは日本酒が好き説もあるのですが、この企画が続けば、また次の機会に雑談として載せますね。
それでは、また!