Note

3年後の自分のために書いています

Rails の API モードで CSRF 対策機能を実装する

半年前に会社の技術ブログの下書きに雑に書いてて公開しどきを忘れたやつ、もったいないのでこちらで公開。 Rails の API モードはデフォルトでは CSRF 対策機能が有効になってないので、クッキーによるセッション機能を使うと脆弱性を生む可能性がある。 Ra…

sinatraとrailsとrfcとmdnと徳丸本から学ぶセッションとクッキーと認証とCSRFとXSS

半年前の下書き、めっちゃ途中だけど埋もれるのも嫌なので公開。(あとから追記していく) 元々 csrf についての記事を書こうと思っていたが、csrf について調べるうちセッションとクッキーのことが気になり、rails のセッションとクッキーの実装方法が気に…

vagrant ssh したときに裏側で何が起こっているか

結論 以下と同義。 $ ssh vagrant@127.0.0.1 -p 2222 -i ~/vagrant/ubuntu-xx/.vagrant/machines/default/virtualbox/private_key $ vagrant ssh --debug すると最後の方に INFO ssh: Invoking SSH: ... から続くログが出るのでそれを確認すれば分かる。 補…

Go + VSCode でサブディレクトリに go.mod を置くと `could not import ... (no package for import ...)` になる

以下のようなやつ。 環境 Go 1.15.2 VSCode 1.49.0 原因 gopls("go.useLanguageServer": true で有効)を使いながら、go.mod をサブディレクトリに置いて、プロジェクトのルートディレクトリから VSCode を開いてたのが原因だった。 解決策 gopls を使いた…

rails stats コマンドで app 以下のディレクリを全て計測できるようにする

$ rails stats コマンドはデフォルトでは以下のディレクトリしか計測しないため、サービスクラスを app/services 以下に置いているような場合、その分は計測されない。 app/controllers app/helpers app/jobs app/models app/mailers app/mailboxes app/chan…

Rails の API モードで静的ファイルをホスティングする

環境 ruby 2.7.1 rails 5.1.2, 6.0.3 の両方 結論 以下、二つの方法がある。 config.public_file_server.enabled を true にして public ディレクトリ以下に置く 静的な HTML ファイルを表示させたいだけなら config.public_file_server.enabled を true に…

Rails の API モードでセッションを有効にする

巷には config/application.rb 内で Rails.app_class.config.api_only = false にすればできる、的な記事が溢れているが、不要な middleware まで読み込みたくない。 環境 ruby 2.7.1 rails 6.0.3 差分 デフォルトの CookieStore を使う場合 diff --git a/co…

gem 'her' コードリーディング

と言いつつ途中から依存してる 'faraday' のコードリーディングがメインになった。 her 側で faraday_options 引数として渡した Hash を faraday 側では url という名前で扱っており、混乱したので記事にしておく。 バージョン her (1.1.0) faraday (0.17.3)…

gem 'pg' コードリーディング

なぜだか急に pg gem の実装が気になった。 # コネクション張って SELECT するだけのコード require 'pg' conn = PG.connect(dbname: 'hoge') conn.exec('SELECT * FROM fuga') do |result| result.each do |row| puts row end end のコードを実行した時に…

非効率なコードレビューをなくしたいというポエムを書くためのメモ

前提 現在 Web 業界で主流(?)な 100 % PR を完成させてから(マージできる状態にしてから)In Review にするやり方は非効率 PR はざっくりできた 〜 In Review までがけっこう作業ある(commit 粒度の確認、YARD などのコメント、GitHub の 0 コメ、動作確認…

【コードメモ】JS で Object を forEach する方法

$ node > let obj = { hoge: "hogehoge", fuga: "fugafuga" } > Object.keys(obj).forEach(key => console.log(key, obj[key])) hoge hogehoge fuga fugafuga 参考 How to loop through a plain JavaScript object with the objects as members? - Stack Ove…

【コードメモ】FizzBuzz 別バージョン

1から100までの数字を標準出力に改行つきで出力するプログラムを作ってください。 3の倍数と3がつく数字の時だけ、数字のあとに!をつけてください。 出力例: 1 2 3! 4 5 6! 7 8 9! 10 11 12! 13! 14 ...以下100まで続く コンソールで実行しやすいようにワン…

ActiveRecord で create_xx, build_xx 系のメソッドが作られるのは has_one した時だけ

表題の通りですが、 has_many した時も create_xxs 的なメソッドが自動生成されると勘違いしていたのでメモ。 ActiveRecord::Associations::ClassMethods class Project < ActiveRecord::Base has_one :project_manager has_many :milestones end Project#cr…

高階関数とカリー化をそろそろ理解したい with JavaScript

あとでサンプルコード追加するかも。 早く Haskell やれやって話なんですけどね。 この記事のシリーズがだいぶ分かりやすかった。 tech.recruit-mp.co.jp 高階関数 関数を『引数』もしくは『返り値』として扱う関数のこと。 カリー化 期待される数より少ない…

JavaScript のスプレッド構文とレスト構文がややこしいので Ruby の配列展開と splat パラメータで理解する

細かい仕様の違いはあるかもしれないが、大体以下の感じで理解している。 スプレッド構文 Array に関しては Ruby でいう配列の展開(*)とほぼ同じかな。 スプレッド構文を使うと、関数呼び出しでは 0 個以上の引数として、Array リテラルでは 0 個以上の要…

個人開発で使えそうな API まとめ

完全に自分用のメモ。 軽い調査結果も残しておく。 求人検索 Google Job Search API (Cloud Talent Solution) GCP アカウント必要、アカウント作ると12ヶ月3万円無料期間始まるので開発直前に始めた方がいい Cloud Talent Solution documentation | Job Sear…

VSCode x TypeScript x ESLint で自動整形する

2019/12/23 Update この記事の内容は不要になったっぽい。 Revisions of "VSCodeでESLint+@typescript-eslint+Prettierを導入する(v2.0.0修正版)" - Qiita 以下、元記事。 JS のプロジェクトを TS に変更したら ESLint の整形が効かなくなったのでメモ。 V…

Haskell を亀のようなスピードで学び始めている私のための Stack による環境構築メモ

React x Flow or TypeScript の開発をやるにあたり、関数型言語と型システムの知識がないことがボトルネックになってきたと感じるので、ずっと積んでいた『すごいH本』を亀のようなスピードで進めている。 すごいHaskellたのしく学ぼう!作者: Miran Lipovača…

GraphQL のエラーハンドリングについていろいろ調べた

前提 GraphQL のレスポンスのフォーマットに関するベストプラクティスとして、レスポンスの HTTP ステータスコードは 200 で統一、レスポンスの errors キーにエラーの詳細な情報を持たせる というのがある(公式な仕様ではないが、Apollo Client も graphql…

rails, rack, unicorn or puma, nginx の関係についてちゃんと理解したい

だいぶメモ書きです。 表題の件、まだ曖昧にしか理解できてない。 ググっても浅い情報しか出てこないし、各ライブラリのソースコードを読んでみたけどどう繋がってるか、それぞれどんな役割を担っているか把握するのムズいなぁ…。 結論 色々調べてここまで分…

【Rails 5.2 版】スマートな rails new コマンドの叩き方

自分はいつもプライベートの開発ではこんな感じで rails new やってます、というのを備忘録もかねて載せておきます。 基本的に使うか分からないライブラリのファイルは生成しないようにしています。後から genarate コマンドで簡単に追加できるので。 通常の…

React Native × Firebase Authentication での自動ログイン機能に AsyncStorage は使わなくていい

タイトルのまんまですが、 Web に落ちてる記事の中にはわざわざログイン状態を React Native の AsyncStorage を使って保存してる実装のものもあったので、勘違いしないようにメモ。 Firebase Authentication では デフォルトで 明示的にログアウトするまで…

Expo で "This version of the Expo app is out of date. Uninstall the app and run again to upgrade." のエラーが出た時の対処法

iOS Simulator にインストールされている Expo アプリのバージョンが古いとのこと。 iOS Simulator の Hardware > Erase All Content and Settings してから再度 $ expo start -i すれば最新版の Expo アプリが install されます。 参考 javascript - expo i…

React Native にゆかりのあるスタートアップが集う会#5 に行ってきた

普段は Rails でアプリケーション開発してる自分ですが、プライベートで以前から触っていた React Native のイベントに行ってきました。 r-n.connpass.com 詳細なレポートは以下がとてもよくまとまってると思います。 【第5回】 「ReactNativeにゆかりのある…

VSCode の One Dark Pro のサイドバーの色を調整する

デフォルトだと選択されているファイルやフォーカスされているファイルが見づらすぎてキツイので。 // settings.json { "workbench.colorCustomizations": { // 現在選択されている(開かれている)ファイルの背景 "list.activeSelectionBackground": "#777"…

初めての OSS コントリビュート

内容は超ショボいんですが、一応初めての記念として。 自分自身が普段使っている vim-snippets の React の部分を直したいなーと思って、 PR を送りました。 英語力をもっとつけなれけば、と強く思いました…。 github.com

Amazon や Wikipedia の URL を短縮する方法

URL を共有する時にとても便利なやつ。 ちなみに自分は Amazon に関しては必ずこの方法で、 Wikipedia に関しては余裕があればこの方法で URL 共有してます。(メールや Slack で長い URL が来るとウッ、、ってなるので) 詳細は 参考 で挙げたページに書い…

zsh のリダイレクトによる上書き with prezto

zsh

おや、 > で上書きできない? $ zsh --version zsh 5.7.1 (x86_64-apple-darwin18.2.0) $ echo foo > bar.txt $ cat bar.txt foo $ echo baz >> bar.txt $ cat bar.txt foo baz $ echo hoge > bar.txt zsh: file exists: bar.txt $ echo hoge >| bar.txt $ c…

シェルの環境変数にいい感じにクレデンシャルを渡す方法

zsh

例えば CLI アプリケーションを実行するのに何らかのクレデンシャルが必要な時、アプリケーション側で環境変数に対応してくれている場合はこんな感じでやるといいよと職場の方に教えてもらった。 自分は zsh を使ってるので、その前提で話を進めますがどのシ…

neovim でステータスラインのメッセージを英語にしたい

neovim にしたらステータスラインのメッセージが「挿入」とか日本語になってつらいと思って、 vim のドキュメント 見ながら let $LANG='en' を init.vim に追加したらヤンクがバグって複数行のヤンクができなくなった。 let $LANG='en_US.UTF-8' と書いたら…