This is IT

技術、日常

【Ruby】public_sendを使って、「新しいインスタンスを作成する際、既存のインスタンスの属性をコピー」する処理をDRYにした

はじめに ruby 3.1.4 「新しいインスタンスを作成する際、既存のインスタンスの属性をコピーしたい」処理について。 Railsのコントローラのnewアクションでこんな処理をしていた。 ただDRYじゃないな~と思ったので、リファクタリング前と後でどういう風にし…

【Rails】【migration】ローカルの範囲で、1個前のmigrationファイルのカラム名を変更メモ

tl;dr rails db:rollbackで1個前のmigrationファイルをdownする。 rails db:resetで、ロールバック後のDB状態にする。 新しく、カラム名追加のmigrationファイルを書く。 rails db:migrateで反映。 背景 まだチームに共有されていないので、わざわざRename…

【Rails】DISABLE_SPRING=1 PARALLEL_WORKERS=1でテスト

メモレベル。 DISABLE_SPRING=1 PARALLEL_WORKERS=1 bin/rails test ...でテストをする。 「テストがバリデーションに引っかかるぞ?」 「バリデーションに引っかかる変更なんてしていないぞ?」 って時に。 DISABLE_SPRING=1 spring gemをOFFにする 悪さを…

【github】PRにほかの人のコミットが入ってしまったとき

メモレベル。 OSSで開発していて、普通にpullとかしていたら、なんか他人のコミットが紛れ込んできた。 ブランチ派生元のmainブランチが変わってしまったときとかに起こりうるっぽい。 そんな時は、 いったんgit pull --rebase origin main そいで、git push…

サウナとヘッドスパで瞑想の練習

寝れへん 寝るとき、いろんなやなこと考えたり、昔の失敗を思い出して2~3時間くらい寝られない時があります。 もうほんと些細な発言の反省とか、あの人のあの言動は僕にこう思ってるのかな~とか。なんと気の小さい人間なのだろう。 「もう寝たいのに~」…

【VisualStudioCode】Vimの拡張機能を入れたけど、Ctrl+A・Ctrl+C・Ctrl+VのWindowsショートカット機能は残したい

手順 VisualStudioCodeで「Ctrl + Shift + P」を押下 コマンドパレットが開く Preferences: Open Keyboard Shortcuts を検索 (JSON)の方を選ぶ 5.以下を書き込む [ { "key": "ctrl+c", "command": "editor.action.clipboardCopyAction", "when": "textInputF…

【npm】【WSL2】ブラウザを開かず、CLIのみで`npm login`を実行したい

環境 ❯ npm -version 10.0.0 ❯ node -v v20.6.0 ❯ cat /etc/debian_version 12.1 結論 npm login --auth-type legacyを実行してください。 解説 なぜCLIでログインする必要があるのか WSL2ではいい感じにパスを通したりしない限り、CLIからGUIのブラウザを開…

【Ruby】Hashオブジェクトでもall?やnone?メソッドを使いたい

環境 WSL2 Debian12 bookworm Ruby 3.2.1 主題 値に真偽値を設定したHashオブジェクトがあるとする。 そのオブジェクトでも、all?やnone?を使って { bar: true, baz: true, foo: true }.all? #=> true { bar: false, baz: false, foo: false }.none? #=> tru…

git branch --deleteと、git branch -D

mergeやpushをしていないブランチを削除するには、git branch -D branch_nameとする必要がある。 branchのdeleteオプション -d, --delete delete fully merged branch -D delete branch (even if not merged) 訳すと、 -d, --delete 完全にマージされたブラ…

メソッドの引数にはハッシュオブジェクトではなく、キーワード引数を使う。

可読性を上げるためにもそうした方が良いという話。 引数がハッシュオブジェクト まずはハッシュオブジェクトを渡す例 class Bar def initialize(options) @options = options end end def load_options { baz: true, foo: true, bee: true, } end options =…

【JavaScript】ある月の最終日の日付を取得する方法

地味に混乱したためメモ書き。 getMonth()メソッド まずは単純に現時点での日付・時刻を取得する方法。 var now = new Date(); console.log(now) // 2023-07-14T11:41:20.194Z これは特に問題がない。 JavaScriptでは、getMonth()メソッドでDateオブジェクト…

ながーいメソッドになったら、一部を別メソッドに切り出そう

オブジェクト指向設計ガイドを読んでいて、依存を減らすテクニックの一つ。 今3章を読んでいるけど、『隠れた依存はあぶない』って感じの内容。 例 まずは簡単に依存が分かる例。 class Foo attr_reader :bar, :baz, :birthday def initialize(bar, baz, bi…

()はメソッドから離すな

以下の2つのコード。どちらがエラー出るコードか分かるでしょうか # No.1 assert_equal ({ all_files: false, sort_in_reverse: false, long_format: false }, option.load) # No.2 assert_equal({ all_files: false, sort_in_reverse: false, long_format:…

ActiveStorageを用いたファイルのアップロード・サムネイル生成の、各種gem・ライブラリを理解する

はじめに 現在通っているスクールの課題で、「ActiveStorageを用いて、ファイルのアップロード機能・サムネイル生成機能を作る」に取り組んでいます。 ActiveStorage単体だけではなく、Image_processingやmini_magick、ImageMagick、libvipsなどなど様々なラ…

【pg gem】execメソッドと、exec_paramsメソッドの違い

環境 WSL2 Debian 11.5 結論 exec:明示的に、SQL文の中にパラメーターを直接記述してメソッドを使う。 exec_params:明示的に、SQL文のパラメーターは、プレースホルダーを指定してメソッドを使う。 それぞれのコード例 exec・exec_paramsのそれぞれのコー…

【Webを支える技術】HTTPのメッセージのどこら辺がステートレスなんだ?を自己解釈した

概要 「HTTPはステートレスなプロトコルである」 Webに触れている人なら一般的な知識で、"HTTP ステートレス"で検索をすると沢山の記事が出てきます。 自分はお恥ずかしながら、最近Webを支える技術を読んで初めて知った知識です。 という話はさておき、この…

OptionParser.parse!を2回使ったら、オプションがなくなってしまった話

概要 破壊的メソッドは元のオブジェクトも変更してしまいます。 なので当然なのですが、同じ変数に、同じ破壊的メソッドを複数回使ってしまうと、1回目と2回目以降では実行結果が変わってしまいます。 普通の破壊的メソッドだと気を付けられるのですが、Opti…

【PostgreSQL】ユーザ作成後、ログインが出来ない問題を解決した(Peer authentication failed)

エラー内容 [環境] Debian11.0 PostgreSQL15.1 PostgreSQLでユーザを作成後、そのユーザでログインができない!という事象が発生しました。 1日くらいハマっていたのですが、解決できたので手順を共有します。 なお、出力されたエラー文としては下記となって…

(Ruby)optparseの基本をまとめた

はじめに library optparse (Ruby 3.1 リファレンスマニュアル)に記載してある require 'optparse' opt = OptionParser.new opt.on('-a') {|v| p v } opt.on('-b') {|v| p v } # parse() の場合、ARGVは変更されない。 # オプションを取り除いた結果は argv …

`=`の位置は揃えないほうが実はいいかも、というお話

はじめに プログラミング初心者による記事です。 なお、インデントや=の位置は、基本的にチームのコード規約に沿って書くのがベストです。 コードの比較 # =の位置を揃える foo = 'foo' hoge = 'hoge' hogehoge = 'hogehoge' # =の位置を揃えない foo = 'foo…

【プログラム初心者必見】プロによるレビュー内容のまとめ

概要 現在、私はフィヨルドブートキャンプというスクールでお世話になっています。 ここでメンターをしてらっしゃる、伊藤淳一さんからプロ目線でのコードレビューをして頂いたので、自分の後学のためにもまとめておきたいと思います。 なお、実際にプラクテ…

【Debian】Debianでnginxをインストールして、htmlの編集をした。

概要 タイトル通り。インストールの仕方とhtml編集方法 インストールは公式サイトをきちんと読んでやりましょう。 GPTで書いてそうな記事みたいのもありますが、公式に勝る説明はありません。基本的に全てコピペで行えるはずです。 ❯ nginx -v nginx version…

git pushがrejectされてしまう場合

概要 タイトル通り。 ❯ git push origin branch-name To github.com:XXXXXXXX.git ! [rejected] my-ls -> my-ls (non-fast-forward) error: failed to push some refs to 'github.com:XXXXXX.git' hint: Updates were rejected because the tip of your curr…

正規表現は置換で効果を発揮する

概要 コードをつらつら書いていて、「正規表現学んだ方が良いな~」と強く思ったので、適当にお気持ちを書いておきます。 クラス名や変数名を一気に変えたい だったら普通の置換でええやないの~???と思うかもしれないけど、少しだけ長いコードですら、同…

Arrayクラスのdelete_ifメソッドで、正規表現にマッチする文字列を削除できない

概要 タイトル通り、delete_ifメソッドでとある正規表現オブジェクトにマッチする文字列を削除できなかったお話。 w = %w(a b c d).delete_if{|s| s == /b+/} p w => ["a", "b", "c", "d"] ならばdeleteではどうだと試みる。 w = %w(a b c d).delete(/b+/) p…

Enumerableのinclude先には、eachの定義が必要 を理解したい

概要 Ruby幼稚園生の自分にとって、module Enumerableに書いてある、 インクルードするクラスには each が定義されていなければなりません。 が、まぁよくわからなかったので、もう少しだけ理解を深めたいと思い書いてみた。 そもそもEnumerableって何なのよ…

yieldとblock.callの処理の実行フローを理解する

概要 下記は、yieldを使ったコード。 def greet puts "横浜の塩" yield yield puts "話を聞け" end greet do |txt| puts "俺の" end #=>横浜の塩 #=>俺の #=>俺の #=>話を聞け yieldで、メソッド呼び出しのブロック内の処理が実行されることが分かる。 一方…