スリ飯屋MaLankaのフリーエンジニアな日々

このブログでは、フリーランス5期目となる自身の実体験から、フリーランスエンジニアになるためのノウハウ、ブログや沖縄移住、スリランカの最新情報について発信します。

技術関連

【Rubyでスクレイピング】Seleniumでdata属性を取得

attribute() を使います。 attribute('data-XXX') のような形です。 # data-remarksというプロパティを持つ要素を全て取得。戻り値は取得出来た要素の配列 driver.find_elements(:xpath, "//*[@id='search']/div[1]/div[2]/div/span[4]/div[1]/div[#{i + 1}]…

【正規表現】Rubyで、文字列がURLかどうかをチェックする

URI.regexp.match(検証したい文字列).nil? で出来ます。 # URLなのでMatchDataオブジェクトを返す。よって .nil? はfalseを返す > URI.regexp.match('https://www.malanka.tech').nil? => false # URLではないのでマッチせずにnilを返す。よって .nil? はtru…

【図解】AWS S3で定期的にオブジェクトを削除する手順

定期削除には ライフサイクル という仕組みを使います。

【Rails】joinしたテーブルに対し、where句で特定の日付前後(以前以降)で絞り込みしたい

where句でテーブル名とカラム名両方を指定し、 文字列で条件指定すれば出来ました。 Model.joins(:join対象のテーブル名).where("join対象のテーブル名.join対象のテーブルにあるカラム名 >= ?", 日付) 例: ordersテーブルのorder_dateが、2020/01/20以降のU…

【CSSセレクタ】超便利! chromeでCSSセレクタを1クリックで取得

手順 opt + cmd + i でchromeのdevtoolを起動します。 一番左上の角のボタンをクリックします。 CSSセレクタを取得したい要素の上で、右クリックします。 Copyにカーソルを合わせると、Copy selector という項目が出てくるのでそれをコピーします。 これで対…

【Ruby】privateメソッドはModule#instance_methodsでの検索対象外

privateメソッドは、Module#instance_methodsの検索対象外。 Hoge.instance_methods(false).include?(:public_method) #=> インスタンスメソッドの名前が配列で返却される。

【cloud9】AWS cloud9でファイルを自動保存する方法

cloud9、 自分のPC汚さずに開発出来て便利ですよね。 ですが、 cloud9は通信状態が悪いと、 ファイルの保存が出来ない時があります。 新幹線内や、wifiが弱い所での作業は要注意です。 自分はなんども痛い目を見てきました。。。笑 「せっかく書いたコードが…

【cloud9】AWS cloud9でダークテーマにする方法

手順 1. cloud9を開きます。 2. 右上の歯車マークをクリックします。 3. 開いたメニューの下から2番目の、THEMES をクリックします。 4. その中の、 Flat Theme Classic Theme Syntax Theme をそれぞれ設定します。 自分は、 Classic Theme => 黒 Syntax…

herokuで画像ファイルをassets/下に置いても認識されない

herokuではどうもassets/audios以下を読み込んでくれない。 そのため、Tempfile, Tempdirライブラリを使用し、 1. mp3ファイルをTempfileとして生成し、Tempdirに仮置き 2. S3にアップロード 3. 1のファイルを削除する という手順を取ることで対応出来ました…

【Rails】enum型でカラム名を定義すると、scopeが自動生成される

enum型でカラム名を定義すると、scopeが自動生成されます。 enumで定義したカラム名はそのまま、 モデル.enumで定義したカラム名 のようにする事ができます。 なので、 enumで定義したカラム名のscopeは自分で定義する必要はありませんし、 当然、whereを使…

【Rails】ファイルの作成日時順に、ファイルを並び替える File.mtime()

File.mtime() でファイルの作成日時が取れるので、それをsort_byで並び替える。

【Ruby】URL文字列から、相対パスを取得する手順

まず URI.parse でURI::Generic のサブクラスのインスタンスを生成します。 相対パスは、.path で取得出来ます。 自分はパスの頭の / が不要だったので、delete(‘/‘)で削除します。 これでURLから欲しい文字列を取り出す事ができました。

【Rails】viewでaタグを削除したい sanitize gem

sanitize gemを使います。 Sanitize.cleanメソッドに、オプションを渡します。 第二引数elementsの引数に、残したいタグを配列で指定することで、指定したタグ以外を削除出来ます。 # @hoge.textにはhtml文字列が入っているとします。 Sanitize.clean(@hoge.…

【Rails】配列でクエリパラメータを渡したい to_query

Railsで、 クエリパラメータを配列として渡したい場合は、 to_queryメソッドを使います。 `値.to_query(キー)` という風に使うと、 うまくクエリパラメータの形に整形してくれます。

【git revert】マージ済みのコミットを取り消ししたい

手順 1、 git logなどで、取り消ししたいコミットNoを特定する。 2、 revert実行。 $ git revert 対象のコミットNo 以下のエラーが返って来たら、 error: commit 16f46cdcdcf2c16136eb501d7d757f28eaeba60f is a merge but no -m option was given. fatal: r…

【safari】safariでclickイベントが動かないのは、非対応であるWebSpeechAPIのコードが残っていることが原因だった

音声合成を使うため、WebSpeechAPIを使っていました。 が、safariは非対応だった。 WebSpeechAPI Web Speech API - Web API | MDN そのため、safariの場合は Amazon Polly を使って音声合成を実現しようとしました。 Amazon Polly https://docs.aws.amazon.c…

【Rails】SymbolとStringの違いとenumについて

シンボル オブジェクトidが一意に振られる。一つのシンボルは常に同一のオブジェクト。なのでメモリの節約になる。 変更が加えられない(イミュータブル) class Symbol (Ruby 3.0.0 リファレンスマニュアル) ・文字列 オブジェクトidが毎回変わる。別のオブジ…

【Rails】audio_tagのsrc属性の値に + を含めるとエラーになる

調査していくと、srcの値に + が含まれているとエラーになることがわかった。 DateTimeにはタイムゾーンの +09:00 に +が含まれているのでエラーになる。 Dateには + が含まれていないので実行出来る。

【Git】GitHubのgui上での、複数ファイルのコンフリクト解消について

複数ファイルにコンフリクトが起きていると、gui上では全てのファイルのコンフリクトを解消しないと、その解消は保存されない。 1つのファイルだけ解消して、 Mark Resolvedボタン を押しても、1つのファイルのコンフリクト解消は保存されていない。 Commit …

【Railsチュートリアルでエラーが出た時のチェックリスト】

1. 文章を読み飛ばしていないか? 2. 応用問題を解いたままの状態で進めていないか? 3. サーバーを再起動 4. コマンド実行しているディレクトリ、gitのブランチは正しいか? 5. ifのend抜け、インデントの位置 6. その日は諦めて潔く寝る 7. こまめにコミット…

【Rails】htmlタグを削除する strip_tagsメソッド

ApplicationController.helpers.strip_tags(対象のhtml) を使えばOKです。

【Ruby】論理演算子 &&= について

【Ruby】論理演算子 &&= について 左辺がtrueと見なされる値なら、右辺を評価し、結果を左辺に代入するという挙動をします。

【Vue.js】computedとmoment.jsで日時をフォーマットする

手順 1、computedに、moment.jsでフォーマットする処理を記述 // component.vue computed: { // 開始日時 startParse: function() { return moment(this.task.start).format('YYYY-MM-DDThh:mm') }, // 終了日時 endParse: function() { return moment(this.…

【Rails】コントローラーから、status204(no_content)を返す方法

head :no_content でOK。 head: :no_content ではないです! headにシンボルいりません。 つけてしまってて、ハマりました。。

【Rails5】viewでflashメッセージを動的に表示させる方法(コピペでOK!)

以下のコードを、application.html.erbのbodyタグの一番始め に設定すればOK。 " align="center"> bootstrapを導入していれば、alert-〇〇〇〇の部分に動的にcssが当たります。 bootstrapでcssを適用出来るflashの種類は、以下の4つ。 flash[:info] flash[:s…

【Rails5】form_withでhidden_fieldを使って、値を配列で送信したい

hidden_field_tag を使うことで対応出来た。 第一引数: name属性 第二引数: 送信したい値 例. = form_with url: '/articles' do |f| = hidden_field_tag 'hoge_item[]', 1 = f.submit '送信' これは下記のように送信されます。 #=> "hoge_item"=>["1"]

【Vue.js】checkboxでclickイベントが反応しない

checkboxをチェックした時のイベントについて checkboxをチェックした時のイベントは、 change イベントで発生する。 clickでは反応しないので注意。 hogefuga

【Rails5】自作のディレクトリを、autoload_pathsに追加して自動読み込みさせる

application.rbの編集は、サーバーを再起動しないと反映されない。 Rails5から、本番環境でのautoloadが無効化されている。 Rails5のproduction環境でlib/配下のクラス読込みがNameErrorになるのはautoloadが無効化されたからだった - Qiita 若干厄介なのは…

【OGP設定】facebookシェア時のog:imageの設定が反映されない!

herokuにRailsアプリをデプロイし、facebookシェアボタンを設置。 が、シェア時のogp画像が上手く表示されない。 色々調べていると、 Dynoに書き込まれたファイルはアイドル状態、または再起動したときに消えてしまいます。永続化したいファイルはS3などのフ…

【Vue.js】スマホで日本語入力時、keyupイベントが動作しない

スマホで日本語を確定入力した時に、動作しないことが発覚。 調査すると、 keyupイベントが動いていないことが原因。 inputイベントに変更することで対応出来ました。