Just do IT

思うは招く

ドラゴン桜2をイッキ見した

ドラマのドラゴン桜2を一気に見た。結論、エグいほどモチベ上がった。思ったことや学びをメモる。 チームで目標に突き進む 一人で勉強するより、仲間と勉強したほうが目標を達成しやすい。これは受験に限らず、何にでも当てはまる。友達に教え合うのも良い勉…

An error occurred while installing puma (5.6.5) を解消した

起きたこと pumaを5.6.5に上げてbundle installをしたら以下のエラーが出て実行できなかった。(一部抜粋) Gem::Ext::BuildError: ERROR: Failed to build gem native extension. checking for BIO_read() in -lcrypto... *** extconf.rb failed *** Could …

Railsで日付ごとにGROUP BYしてデータを取得したい

たとえば、過去7日間でどれだけのログが生成されたか知りたい場合。 > today = Time.current => Tue, 23 Aug 2022 15:32:59.608734000 JST +09:00 > seven_days_ago = today.ago(7.days).beginning_of_day => Tue, 16 Aug 2022 00:00:00.000000000 JST +09:0…

Ruby String#tr の挙動を確かめた

RubyのString#trについて調べた。 String#tr (Ruby 3.1 リファレンスマニュアル) シンプルな使い方 まずはシンプルな例から見てみる。 > 'abc'.tr('a', 'd') => "dbc" abcという文字列のうち、a を d に変換した。 もうひとつシンプルな例を見てみる。 > 'ab…

【Ruby】ある文章にアルファベットがすべて含まれているかどうかを判定する方法

Exercismの問題を解いた。 問題 Determine if a sentence is a pangram. A pangram (Greek: παν γράμμα, pan gramma, "every letter") is a sentence using every letter of the alphabet at least once. The best known English pangram is: The quick brow…

【Ruby】配列の要素をチェックするメソッドをサンプル付きでまとめる

Ruby(またはRails)で「配列の中に特定の要素を含むかどうか」を知りたいときは多々ある。そんなときに使える主なメソッドをまとめた。 ※Enumerableモジュールのものは配列だけではなくハッシュでも使えます。 include?「これ入ってる?」 配列が引数と==で…

【読書感想】1440分の使い方

1日を分で表すと1440分。「1440分の使い方」は、時間をいかに効率的に使うかというテーマの本です。我が家には2人のわんぱくな子どもがいるため、「時間のなさ」は日々痛感している…。この記事では、本のなかで印象に残った内容を列挙していきます。 TODOリ…

【Ruby】Array#combination と Array#repeated_combinationの違い

Array#combination RubyのArray#combinationは、配列内の要素の各組み合わせをすべて作る。 Array#combination (Ruby 3.1 リファレンスマニュアル) まずはシンプルな例から。たとえば、バスケ選手が3人集まって1on1をしたいとする。3人の1on1の組み合わせを…

Railsでカラムの属性を調べる方法

モデル.column_hash['属性を知りたいカラム名'].typeでいける。 > User.columns_hash['email'].type => :string 普通ならスキーマとか、annotate gemを入れていたらモデルファイルを見れば済む話だけど、rails consoleを触っていてカラムの属性を知りたくな…

【Ruby】{} と Hash.new(0) でハッシュを作るときの違い

一見すると、どちらも同じハッシュを作っているように見える。 irb(main):001:0> Hash.new(0) => {} irb(main):002:0> {} => {} では何が違うのか? Hash.new(0)はハッシュのデフォルト値を設定している {}はデフォルト値を設定していない irb(main):003:0> …

Ruby Hash#slice の便利な使い方

たとえば、こんな配列とHashがあったとする。 keys = %w[hoge bar] hash = { 'hoge'=> 'ほげ', 'aaa'=> 'あああ', 'bar'=> 'ばあー'} keys配列の各要素をkeyとして、hashからそれぞれ対応するキーとバリューを取得したいときはHash#sliceを使うと便利。 > ha…

Ruby の select と find の違い

たとえば以下の配列から、初めに見つかった3の倍数を取り出したいとき。 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9] selectを使うとこうなる。 > nums.select { |num| (num % 3).zero? }.first => 3 これでも期待するデータを取得できるが、配列内のすべての要素を…

Ruby の flat_map は flatten.map と同じ挙動にはならない

flat_mapがflatten.mapを省略したものだと勘違いしていた話。 ここにネストした配列がある。 > arr = [[1,2], [3,4]] => [[1, 2], [3, 4]] flattenすると、平坦な配列になる。 > arr.flatten => [1, 2, 3, 4] flattenした後にmapして各要素を2倍にしたいとき…

RubyのProcクラスとは何か?

Procクラスとは、処理のまとまりをオブジェクトで表現したものです。Procクラスはコードを見ながらじゃないと理解できないと思うので、まずは以下の例を見てください。 def hello puts 'hello' end なんの変哲もないメソッドです。helloメソッドを実行してみ…

VSCodeでGithubのPRを開こうとすると Error loading webview: Error: Could not register service workers

vscode上でレビューするためにPRを開こうと思ったら、PR画面が表示されない。エラーで以下のメッセージが出ていた。 Error loading webview: Error: Could not register service workers: InvalidStateError 解決方法: VSCodeのプロセスをkill(強制終了)…

ROIの概念はプロダクト開発にも応用できる

以下の記事を読んだ感想を残す。 プロダクト開発現場でのROIの考え方|taniguchi(タァニ)|note 僕はマーケティング出身ということもあり、ROIはマーケティング用語という印象が強く、「どれくらいの投資でどれだけ儲けたか」という意味しかないと思ってい…

2022 NBA Finals の感想

自分が応援しているセルティックスはウォリアーズに4−2で負けた。悔しいし残念だ。 2022 NBA Finals | NBA.com でも、ここ数年突破できていなかったカンファレンスファイナルの壁をついに破った。カイリーがいてもダメだったのを、若いメンバーが達成した。…

git fetch してリモートリポジトリの変更確認だけしたいときの方法

Git

結論 リモートリポジトリの変更を確認だけしたいとき。 # リモートリポジトリの変更履歴をローカルリポジトリに持ってくる git fetch # これでリモートリポジトリの変更確認ができる git log origin/master --oneline --graph 詳しく git fetch(git fetch or…

Enumerable#inject 初期値ありなしの挙動の違い

レシーバが配列の場合 初期値がない場合 > [1, 2, 3].inject { |result, item| p result + item*2 } 5 11 => 11 初期値がない場合、先頭の要素と2番めの要素をブロックに渡す 上記の場合、resultに1、itemに2が渡されており、item*2されていることから1+4に…

Ruby 文字列中のアポストロフィも含めて String#scan する

String#scan(/[\w'.]+/)でどうだろうか。 > string = "I'm a good person, and you? You don't look so smart." > string.scan(/[\w'.]+/) => ["I'm", "a", "good", "person", "and", "you", "You", "don't", "look", "so", "smart."] 文末のピリオドを含め…

【Ruby】String#split("") をするなら String#chars を使う

> 'AAAAAAAAA'.split("") => ["A", "A", "A", "A", "A", "A", "A", "A", "A"] > 'AAAAAAAAA'.chars => ["A", "A", "A", "A", "A", "A", "A", "A", "A"] 後者のほうがスッキリ書けてよい。

Ruby の divmod メソッドとは

割った数と、余りを配列で返す。 3 ÷ 2をすると、割った数は1、余りは1なので、[1, 1]という配列が返る。 > 3.divmod 2 => [1, 1] selfがマイナスでも計算できる。 > -3.divmod 2 => [-2, 1] selfと割る数がマイナスでも計算できる。 > -3.divmod -2 => [1, …

Rubocop で spec path should end with *_spec.rb が出たときにチェックすること

Rubocopでたまにこういったふうに怒られることがある。 spec path should end with *_spec.rb こんなときはどこを確認すればいいか? 確認項目: スペックファイルが_spec.rbで終わっているか? ファイル名にタイポや間違いはないか? テスト元のファイルがh…

Ruby の dup と clone の違い

Rubyのリファレンスにはこう書かれている。 dup はオブジェクトの内容, taint 情報をコピーし、 clone はそれに加えて freeze, 特異メソッドなどの情報も含めた完全な複製を作成します dup はオブジェクト内容とtaint情報をコピーする clone は上記に加えて…

Rubyのdupとは何か

結論: dupとはオブジェクトをコピーするメソッドです 細かく言うと「シャロウコピー(Shallow Copy)」します コレクション(配列やハッシュ)をdupするときは要注意です 破壊的な変更は同じobject_idを持つオブジェクトに影響が及ぶ dupのチカラ 配列やハ…

Ruby の eql? と equal? の違い

結論: eql?はオブジェクトの値が同じかどうかを評価する equal?はobject_idが同じかどうかを評価する irb(main):001:0> obj = %w(hoge bar baz) => ["hoge", "bar", "baz"] irb(main):003:0> copy = obj.dup => ["hoge", "bar", "baz"] # 値は同じなのでtru…

Vimium でサイト全体でキーバインドを除外する方法

一番簡単なのは、除外したいサイトを開きながらVimiumの設定を開いて、Keysに何も入力せずにSave Changesを押す。

Ruby の map と filter_map の違い

結論 map ブロック内の評価を返す ブロック内の実装で加工したものをそのまま返す filter_map ブロック内の評価が真である配列を返す 例1 以下の例では、どちらも同じ値を持つ配列を返す。 p (1..3).map { |n| n * 3 } => [3, 6, 9] p (1..3).filter_map { |…

Heroku にデプロイしたら review-app で application error が出て表示されない

Application error が出たときはheroku logs --tail -a review-app名などでログを見ても原因がつかめないことがある。そんな場合はrails cでコンソールを起動してみると良い。きっとコンソールが立ち上がらないはずで、そのとき表示されるエラーログに何かヒ…

vimの設定 map と noremap の違い

map :map j k jを押したらkの機能が発動する jを押すとkを押したときのように上にカーソルが移動するようになる もしkに他の機能がマップされていたら、jにもその挙動がマップされる たとえばkに「右へ移動する」機能がマップされていたら、jにもその機能が…