Step-to-Rails-Expert.rb#19 に参加しました

Railsの勉強会、Step-to-Rails-Expert.rb#19 に参加してきました!

Step-to-Rails-Expert.rb って?

公式の説明をそのまま…

本勉強会はStep-to-Rails-Expert.rbというRails関連中級者向けの勉強会です。 コンセプトとしては、初心者を抜けたレベルの人が中級者・上級者になる上で、一歩進んだ技術やハマリどころなどを議論形式で共有し、場合によってはともに解決策を考えていけるような勉強会を目指しております。 なお、2017年9月よりExpert-TodoというTodoアプリを各々作って来て参加者同士でレビューし合う企画を実施しております。アプリを作ってきた人だけでなく、そうでない人もレビューの仕方や実装方法などの知見を貯められる企画となっていますので、ぜひご参加ください。

step-to-rails-expert-rb.connpass.com

中級者向けの勉強会!
なんとか初心者からステップアップしたく参加しました👀

感想

今回はTodoアプリのもくもく会でした☁️
環境を作って実装していくはずでしたが、brewの環境がおかしくなってるのかbundle installでコケて環境直してるだけで終わってしまいました…💧
自分の成果としてはほぼゼロでしたが、途中の雑談や懇親会で、できる人達の話を聞いてるだけで勉強になることがいっぱいありました。

トピックス

話していたことをリスト形式でざっと

  • データ変更したユーザーを保存しておく方法
    • created_by updated_byってカラムを持つのはいいかも
  • rails5.2から入ったCurrentAttributesヤバイ
  • e2eとか振る舞いさえできれば単体テストいらないんじゃ?
  • Custom Copはいいぞ
  • RuboCop の実装見るといい
  • current_user.posts.create したら異常系でコケる可能性がある
    • invalidなレコードが残ってしまう
  • 関数型言語勉強するといい
  • 破壊するメソッドよくない
    • pop shift使わないほうがいい
  • after_create はコミットの前なのでメール送信処理とか挟むとsidekiqでnot found になる可能性
    • after_commit にしたらupdateでも飛ぶので on: :create 付けるのをお忘れなく
    • そもそもフィルターで書かないほうが良い。コントローラのsave後に書いたほうが圧倒的楽
  • 「気に入らないコードはapproveしない。こんなコードにapproveした歴史を残したくない」
  • 「既存のコードだいたいだめなので」
  • ActiveRecord eachで回すならsize、回さないならcountがよい
  • bullet 誤検知ある?
  • select * のクエリ重いのなんとかしたい
  • 5.2から入ったbootsnap 起動が早くなるので良い
  • Railsのビュー探索が重い
  • SQLの実行待ちが遅いの
    • 並列実行できたら早くなる

最後に

できる人達の会話、2,3割くらいしか理解できていなかったと思いますがとても勉強になりました。 つまり、

_人人人人人人人人人人人人人人人人人人_
> Step-to-Rails-Expert.rb はいいぞ <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

ぜひ参加してください

step-to-rails-expert-rb.connpass.com

Sidekiqのジョブを削除する [Rails]

ローカル環境で溜まってしまった無駄なジョブにサヨナラする方法です。

  • 処理待ちジョブ確認
  • 処理待ちジョブ1件削除
  • 処理待ちジョブ全件削除
  • リトライ待ちジョブ確認
  • リトライ待ちジョブ1件削除
  • リトライ待ちジョブ全件削除
  • とりあえず全部削除

の7本立て

処理待ちジョブの確認

require 'sidekiq/api'
Sidekiq::Queue.new.each { |job| puts [job.jid, job.klass, job.args].join("\t") }

処理待ちジョブ1件削除

require 'sidekiq/api'
Sidekiq::Queue.new.find_job(<job id>).delete

処理待ちジョブ全件削除

require 'sidekiq/api'
Sidekiq::Queue.new.clear

リトライ待ちジョブ確認

require 'sidekiq/api'
Sidekiq::RetrySet.new.each { |job| puts  [job.jid, job.klass, job.args].join("\t") }

リトライ待ちジョブ1件削除

require 'sidekiq/api'
Sidekiq::RetrySet.new.find_job('job_id /JID').delete

リトライ待ちジョブ全件削除

require 'sidekiq/api'
Sidekiq::RetrySet.new.clear

とりあえず全部削除

require 'sidekiq/api'
# 処理待ちジョブ削除
Sidekiq::Queue.new.clear
# リトライ待ちジョブ削除
Sidekiq::RetrySet.new.clear

学び方を学ぶ [SOFT SKILLS]

SOFT SKILLSはソフトウェア開発者の人生マニュアルと書いてある通りエンジニアにとって必要な考え方や生き抜き方が書かれている。
その中でも印象に残った第3部「学ぶことを学ぼう」で紹介されている独習のテクニックについて紹介する。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

効率的な独習の方法

この本では以下の3つのことが独習に重要だと言っている

  1. どうすれば始められるか - 学び始めるための基本的な知識は何か。
  2. テーマの幅 - 学ぼうとしているものの規模はどれくらいで、何ができるのか。
  3. 基礎 - その技術を使うために知っていなければならない基本的なことは何か。

全体像を把握し、必要な部分だけを効率的に学ぼうということ。
言葉にしたら単純な話だが、実際に参考書を買って最初から最後まで読んでしまうことが多い。
パレートの法則でもあるように技術の80%をカバーする20%の知識に絞って学ぶようにしようという話のよう。

独習の10ステップ

80%の効果を引き出す20%の部分を見つけ出し、独習をするために、10のステップに分けて解説している。

  1. 全体像をつかむ
  2. スコープを決める
  3. 成功の基準を決める
  4. 参考資料を見つける
  5. 学習プランを作る
  6. リソースにフィルターをかける
  7. 使い始められるようにする方法を学ぶ
  8. 遊び回る
  9. 役に立つことができるところまで学ぶ
  10. 教える

1~6は準備、7~10を繰り返して独習を進める。
各項目について解説する。

1. 全体像をつかむ

数時間使い、ネットの記事や、本の目次などをチェックする。
どのようなサブテーマがあり、どれくらいの大きさなのか、全体像をつかむ。

2. スコープを決める

独習に使える時間に合わせてスコープを決める。

例:簡単なアプリを作るために必要なReactJsの基礎を学ぶ

3. 成功の基準を決める

目標が達成できたか判断するための成功の基準を決める。

例:ReactJsを使って簡単なTODOアプリを作ることができる

4. 参考資料を見つける

ブログや本など可能な限り参考になるものをリストアップする。
クオリティは考えずとにかく多く出す。

5. 学習プランを作る

参考資料を見つける で集めた情報を元に自身の学習プランを作る。
本の目次などを参考に自分が達成するべき目標に最短で届くプランにする。
自身で本を書く場合の目次をイメージするのが分かりやすい。

6. リソースにフィルターをかける

参考資料の中から、自身の学習プランにとって最も役立ちそうな内容を持つものを拾い出す

7. 使い始められるようにする方法を学ぶ

環境構築や基本的な「Hello, World」のように簡単に使い始められるところまでを学ぶ。
参考書を全部読んだりする必要はない。

8. 遊び回る

このステップにルールはない。
前ステップで学んだ基礎を元に遊び倒す。
出てきた疑問をリストアップしておく。

9. 役に立つことができるところまで学ぶ

遊び回った時に出た疑問を参考資料を元に解消していく。
そして設定した目標を達成するために進める。

10. 教える

独習の中で必要不可欠なステップ。
人に教えることで自身の知識を整理し、抜けている知識を埋められる。
直接教える以外にも、ブログ、YouTubeなどでもいい。
重要なのは自分が学んだことを、他の人が理解できるように構成すること。

最後に

自分が欲しいアプリやツールを作ったりする時は、似たようなステップを踏んでいたように思う。
次に新しい言語を学ぶ時はこのステップを参考にして、効率よく独習していきたい。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

Javascriptでクリップボードにテキストコピーする

TL;DR

const text = 'コピーするテキスト';
const textarea = document.createElement('textarea');
textarea.style.position = 'fixed';
textarea.style.opacity = 0;
textarea.value = text;

document.body.appendChild(textarea);

textarea.select();
document.execCommand('Copy');

document.body.removeChild(textarea);

解説

コピーするテキストが入力されたtextareaを生成してDOMに追加 ※ 改行を含まないならtextareaでなくinput[type=text]でも可能

const text = 'コピーするテキスト';
const textarea = document.createElement('textarea');
textarea.style.position = 'fixed';
textarea.style.opacity = 0;
textarea.value = text;

document.body.appendChild(textarea);

textareaを選択させexecCommandを使いコピーさせる

textarea.select();
document.execCommand('Copy');

使い終わったtextareaをDOMから削除

document.body.removeChild(textarea);

参考

developer.mozilla.org