説明しよう!tips集とは!?
弊社のslackチャンネルには、各々が感じた、技術的なtipsを誰に向けるわけでもなく放り投げるチャンネルがあります!
↑こんな感じです。
この記事は既出であろうがなかろうが、tipsをひたすらまとめていく記事である!!
内容にまとまりがないのはご愛嬌です!弊社の仕事の様子の鱗片が少しでも感じられれば幸いです
Ruby & Ruby on Rails編
rubyの数値系メソッド
zero?
0のときtrueを返す
インデックス付きのループ
インデックス付きのループはeach_with_indexだけかと思ったら、Enumerator#with_indexでいける!
map.with_index => ok!
select.with_index => ok!
Rubyのmapやselectでもeach_with_indexみたいにindexを使いたいときはEnumerator#with_index - Qiita
1から始めたいときは
map.with_index(1) do |item, idx|
end
メールがバウンスするのを防ぐ
Bounce rateを防ぐのため、下記のgemでemailが存在しているかどうか確認出来ます。
SMTPのRCPT TOで存在チェックしてますが、一度に大量にチェックするとスパム認定される可能性あります。あと、ezwebにはこの手段は使えないようですね。
Ruby で メールアドレスの有効性チェックしてみた - Qiita
Rails5からbelongs_to関連はデフォルトでrequired: trueになる
Rails5からbelongs_to関連はデフォルトでrequired: trueになる - Qiita
これ気づかずにRails5使い始めてハマったのはいい思い出...
RailsのRoutingでresourceとresourcesが2つある。
- resourcesは、複数のリソースに対するCRUD処理を行うためのルーティングを生成する。
- resourceは、ただ1つのリソースに対するCRUD処理を行うためのルーティングを生成する。
これがどういう挙動の違いを出すかと言うと
resource :video # get '/video' => Videos#show
resources :videos # get '/videos' => Videos#index
みたいな挙動になるぞ!
WARN: Clearing out unresolved specs.が出た時
「同一のgemが複数バージョンでインストールされていて、システムでどれを選ぶか決めきれないよ」という警告。
RubygemでWARN: Clearing out unresolved specs.が出た時の対応 - Qiita
def 内で定数への代入文を書くとエラーになる(呼び出し時ではなくて定義時)
define_method でなら定数代入可能
Request-log-analyzer
Railsのログ解析に使えそうなgemとしてRequest-log-analyzerというgemがある
$ gem install request-log-analyzer
$ request-log-analyzer path/to/production.log
でうごく。絞り込みができ
$ request-log-analyzer --select controller HogeContoroller --select show path/to/production.log
みたいなこともできる・・・が、これらは統計的な情報しか得られない。こいつの真骨頂はdオプションで、なんとログデータからsqilte形式のDBを作ってくれる。
$ request-log-analyzer hoge.db path/to/production.log
とすればなんかhoge.dbにアクセスログのDBが出来上がるよやったね!
gemの最終更新が2014年と古いですがRails4系のlogは大丈夫でした。
nestされたresourceに対してlink_to使いたい時
resources :hoges do
resources :piyos
end
みたいなときに、 [GET] /hoges/:hoge_id/piyo/:id
みたいなアクセスしたときは
link_to hoge_piyo_path(@hoge,@piyo)
みたいに変数を2つ与えてやると良い
form object
ざっくりいうと、modelクラスとして定義し、それをform生成のためだけに使う。そのクラス自体は保存処理などのデータのやり取りを請け負う。
保存の際の処理などを分家して記載しておくことができるのでfat class対策になる。いいね!
↓スレッド返信
これのおかげでかなり有用になりましたね
ActiveModel::Attributes が最高すぎるんだよな。 - Qiita
プライベートで採用してるんですけど、超きもちよいです
pdfを開かせずに、DLさせたい場合
send_data
を使うと良い。もしくはcontent_typeを、'application/force-download'
と指定するとよい。
migration null 許可 / 非許可 変更
文字列から直接日時に変換できる
'2015-10-01 00:00:00'.in_time_zone
boolean を 入力必須にする
【Rails】ValidationでBoolean型を入力必須にしたいとき
結合強度
三項演算子さん...
piyo = []
piyo << true ? : 'dog' : 'cat'
p piyo
# => [true]
でも
piyo = true ? 'dog' : 'cat'
p piyo
# => "dog"
→スレッド返信
File: precedence.rdoc [Ruby 2.2.0]
Operator precedenceだね。優先度が高いやつが優先で実行してくれる。
HTML編
input タグ
inputタグに pattern: '\d*'
(←slimの書き方)をオプションとして付けてやることでスマホのキーボードを数値入力に変更できる(数値以外を入れさせない)
HTML5におけるinput要素のpattern、type属性のおさらい - Qiita
input type = 'range'
(範囲選択バー)なんてものもあるんですね
Javascript編 (nodeなども含む!)
JavaScript の動画に関するAPIが便利
videoElement.loop = true
でループになる。videoElement.muted = true
でミュートになる。他にも倍速にできたり自動再生にできたりと便利。
開発者ツールで選択した要素はconsoleから$0
で呼べるので、⌘ + shift + c
で動画要素選択、 console から $0.loop = true
で手軽に動画ループさせられる
javascriptはmethodを呼び出す時
javascriptはmethodを呼び出す時は絶対に()
必要ですね。coffeeはちょっと曖昧です
hoge "piyo"
-> hogeのメソドを呼び出す
hoge
-> hogeのsource codeを表示される
ajaxで通信しているサイトで、ブラウザバックでJSONが表示されてしまう場合
$.ajaxに cache: false
のオプションをつけてあげるとなおる
その場合URLは
http://www.example.com/sample?_=12345678123456
といった感じのパラメータが付与されます
nullや空文字を配列から排除したいとき
.filter(Boolean)
でいけたりする。
というかBoolean()は引数に入った値が 0, -0, null, false, NaN, undefined, ""のいずれかだった場合にfalseを返すので、基本的に文字列が入った配列など、中身の要素の型が限定されるときに使った方がよさげ。
["hoge", "", null].filter(Boolean)
=> ["hoge"]
["hoge", true, false, "", null].filter(Boolean)
=> ["hoge", true]
CSS(style)編
自分のオブジェクトの中心点を操作
transform: translateX(-50%);
自分のオブジェクトの中心点を開始位置にできる。中央揃えする時にすごく便利。
データベース編
Mysqlのpecified key was too long
MySQLでpecified key was too longとエラーが出た - Qiita
varcher型にindexつけようとすると怒られた。utf8mb4設定なので767 bytesを超える可能性があるらしい。
SET GLOBAL innodb_large_prefix = 1
これで回避できる。
Git & Github編
GitHubのコメントのプレビューを表示/非表示
Cmd + Shift + p
でGitHubのコメントのプレビューを表示/非表示を切り替えることができる
Docker & Kubernetes編
Kubernetes is 何
コンテナオーケストレーションシステムというものらしい。
コンテナ化されたアプリケーションの展開、スケーリング、および管理を自動化するためのオープンソースシステムです。
ほげ...(´Д`)
kubectl
kubectl
はKubernetesを操作するためのコマンド。gcpを操作するものとは関係ない。gcp上にあるKubernetesを操作するのに使ったりする。
やれること多すぎて大変
minikube
Kubernetesを試しに触ってみたい場合minikubeが便利
ローカルVM上でシングルノードのKubernetesクラスタを稼働するやつを使うと気軽に使える。
Mac便利にする編
macをcli上で便利に扱えるコマンドラッパー
使い方はこっち観たほうがいいかも?→ https://www.softantenna.com/wp/review/m-cli/
ツール編
絵文字を無限につくる
と
Slack Emoji Uploader | Chrome ウェブストア
を使うと無限に絵文字が作れる(が動く絵文字(gif)に非対応・・・)
Redashテクニック
Redashで1つのカラムに保存されたJSONデータを取り扱う - LCL Engineers' Blog
OSSで提供されているダッシュボードツール、Re:dash(リダッシュ)は弊社でもかなり活用されているツールです。
SQLがわかればエンジニア以外も動的にデータを閲覧できるので非常に便利です!
Rico's cheatsheets
様々なチートシートが確認できる。非常におしゃれで見やすい!
circle ci テクニック
CircleCIで.gitディレクトリをキャッシュしてチェックアウトを高速化する - Qiita
iTerm起動できない?
これにハマり、iTermが起動出来ない状態でプチパニックでした
teminalが動かなくなってしまいました - umegusa's blog
レターパックの宛名をPDFでいい感じに出力してくれるサイト
考え方編
死活監視
死活監視にはExponential Backoffを考えて実装するといい。
例えば1秒おきに監視して500が返ってくるとき、たまたまか本当にだめなのかを切り分けたい場合もう一秒待ってx5回で確認ではなく、相手のこと思いやり1,2,4,8...秒と少し待ってから確認すると良い。
AWSユーザーは必ず覚えておきたいExponential Backoffアルゴリズムとは何か
おすすめ編
フリーフォントのチェックができるサイト
おしゃれやな〜
小ネタ
chrome 開発者ツール
-
chrome 開発者ツールの console で copy(piyo) を使うと piyo をクリップボードにコピーできる。
-
console に一度表示された Object は右クリックから Strore as Global Variable で変数に格納できるcopy() と組み合わせると便利かも。
-
Style のプロパティ値を
⌘ + Click
すると、その指定があるCSSの行まで飛ぶ
Surprise me!
slack の Advanced にある Surprise me! を押すとサプライズされる
編集後記
ひぇ〜急にtipsの量が尋常じゃなく増えてきてるぅううう。
3人よれば文殊の知恵とかって言うけど、こんだけの人が知見出しまくればすぐに賢者になれそうですね!
さて、今回は2018/07/02 ~ 2018/07/09で放出されたtipsをまとめてみました。こんな感じで弊社の開発部はわいわいがやがややっておりますぞい!
知見はやっぱり貯めるだけじゃなくて使うことで肉になる。得た知見はどんどんみんなで使っていきたいですね。
とはいえ、投げられた知見のスレッドには、使ってみた感想がすぐに集まるのでみんなフットワークが軽い!コミュニケーションが盛んで楽しいですぞ〜。
では、この企画が続けば、また次回に!