タグ

ブックマーク / blog.willnet.in (14)

  • APIに利用制限をかけるとしたらどういうやりかたがあるのか - おもしろwebサービス開発日記

    この記事はSmartHR Advent Calendar 2020 11日目の記事です。 僕のお手伝いしているSmartHRでは、毎週バックエンドエンジニアが集まり、技術的なトピックについて共有、相談しあうミーティングを開催しています。そのミーティングでは僕がTipsなどを共有するコーナーが常設されています*1。 このエントリでは、そのコーナーで共有した内容をひとつ紹介します。 APIに制限をかける方法について APIを外部に提供するとき、一定の制限をかけてユーザがAPIを乱用するのを防ぐことはよくあることではないでしょうか。素直に考えると「1時間に5000回までAPIを実行できる」のようなやり方を思いつきますね。GitHubAPIもそのやり方ですし、SmartHRAPIも同様です。 じゃあそれでいいのでは。となるかもしれませんが少し待ってください。いろんなクライアントがAPIを大量に

    APIに利用制限をかけるとしたらどういうやりかたがあるのか - おもしろwebサービス開発日記
    asonas
    asonas 2020/12/11
  • 良いエンジニアを採用するにはどうしたらいいか - おもしろwebサービス開発日記

    以前ソフトウェア開発者採用ガイドの読書感想文を書いたときに反響が思ったより大きかったので、エンジニア採用というテーマは関心が高いのだなと感じました。 上記感想文のエントリでも書いていますが、お手伝いしている会社の方などから「どうやったら良いエンジニアを採用できますか?」と聞かれることがよくあります。先のエントリでは「頑張るしかないですねとしか答えようがない」と書きましたが、頑張るとはいったい何を頑張るのか、きちんとまとめておいたほうが良いなと思いエントリをしたためる次第です*1。 あくまで僕はこう思いますという話で、この通りにしたからといって必ず良いエンジニアを採用できる保証はありません。あしからず。 想定読者 良いエンジニアを採用したい偉いひと、もしくは人事のひとです。 前提: 良いエンジニアとは このエントリでの「エンジニア」とはいわゆるweb系のエンジニア(例: サーバサイドエンジニ

    良いエンジニアを採用するにはどうしたらいいか - おもしろwebサービス開発日記
    asonas
    asonas 2018/09/25
  • RejectKaigi2017でファイルアップロードについて発表した - おもしろwebサービス開発日記

    先日行われたRejectKaigi 2017でファイルアップロードについて発表しました。資料はこちら。 内容的には、WEB+DB PRESS Vol.95で書いたファイルアップロード話を最新にしたものになります。Rails5.2で新しく追加されるActive Storageというファイルアップロード機能を紹介しつつ、ファイルアップロード全般の話題について触れています。 ファイルアップロードをただしく実装するにはそれにまつわる様々な要素についての知見が必要で、webエンジニア的には腕の見せ所ではないかと思います。Active Storageの登場でファイルアップロードについての知見が広まって、ただしく実装できる人が増えるといいなと思います(( ⁰⊖⁰)/) あわせて読みたい WEB+DB PRESS Vol.95posted with amazlet at 17.08.20小出 淳子 黒澤

    RejectKaigi2017でファイルアップロードについて発表した - おもしろwebサービス開発日記
    asonas
    asonas 2017/08/21
  • rails-assets の調子が悪い時の回避策 - おもしろwebサービス開発日記

    皆さん、rails-assets は使っていますか? rails-assets は、Gemfile で js や css のライブラリを指定して、バージョン管理や依存の解決などをしてくれるとても便利なサービスです。 しかし最近ではその役目を終えたとして、最大で今年末でサポートを終了するとしています。 Future of rails-assets · Issue #291 · rails-assets/rails-assets そしてもう閉じることが決まったプロジェクトだからなのか、あまり活発にメンテナンスをしていないような印象を受けます。昨年からrails-assets を運営しているサーバが不安定になることが多く、rails-assets に依存しているプロジェクトを持つ会社さんは、bundle update やデプロイに失敗して辛い日々を過ごしたのではないでしょうか。 そんな折、明日

    rails-assets の調子が悪い時の回避策 - おもしろwebサービス開発日記
    asonas
    asonas 2016/01/19
  • Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記

    このエントリで書いた内容は、ほぼ Growing Rails Applications in Practice の内容が元になっています。英語ですが、ここで挙げた内容以外にもコードを綺麗に保つテクニックが書かれており、かつページ数も少なく読みやすいです。コードを綺麗に保つのが好きな方は一読してみることをおすすめします。 はじめに Rails で fat model を避けるための方法は、7 Patterns to Refactor Fat ActiveRecord Models を始めとして、多くのやり方が存在します*1。 validation や callback は ActiveRecord(以下AR) を継承せずとも利用することができます。7 Patterns to Refactor Fat ActiveRecord Models の 「3. Extract Form Objects

    Rails で fat model を避けるための、あまり知られていない方法について - おもしろwebサービス開発日記
    asonas
    asonas 2015/08/25
  • Rails で DB の Time 型を扱う - おもしろwebサービス開発日記

    Rails では、DB の Time 型 を扱うことができます。これは日付を必要とせず、時間だけを格納したいときに使います。 定義方法は、他の型と同じく add_column メソッドなどで time を指定するだけです。 add_column :users, :lunch_time, :time ただ、これを使おうとするにはちょっとしたノウハウが必要です。 RubyRails には、時間のみを扱うクラスはありません。DB の Time 型は Ruby の Time オブジェクトに変換されます。Time オブジェクトは年月日の情報を持っています。その際、タイムゾーンは utc (正確には ActiveRecord::Base.default_timezone で設定されたタイムゾーン) として扱われます。 lunch_time カラムに 12:00 が格納されていた場合、次のような

    Rails で DB の Time 型を扱う - おもしろwebサービス開発日記
    asonas
    asonas 2015/06/12
  • 最近の Rack サーバ事情について - おもしろwebサービス開発日記

    先月、heroku推しサーバが unicorn から puma に変わったという発表がありました。unicorn だとスロークライアントの影響を受けやすいというのが理由なようです。 もう少し詳しく調べてみましょう。 そもそもスロークライアントってなに その名の通り遅い回線のクライアントです。3G環境のモバイル端末などが該当します。 「unicorn だとスロークライアントの影響を受けやすい」とは unicorn はプロセスモデルのサーバであり、blocking I/O モデルを採用しています。つまり、クライアントとの通信中プロセスが専有されるということです。 例えば unicorn がワーカプロセスを3つ立ち上げていて、そこへ通信完了に10分かかるようなスロークライアントが3つ接続されたら…、続くクライアントはスロークライアントの通信が完了するまで実行を待たなければならなくなります。プ

    最近の Rack サーバ事情について - おもしろwebサービス開発日記
    asonas
    asonas 2015/02/25
  • Redcarpet2のざっくりまとめ - おもしろwebサービス開発日記

    githubで使われているMarkdown用ライブラリRedcarpetが後方互換性のない version 2 になるみたいです。現時点のバージョンは 2.0.0b3 で、まだリリースではないようですが、これから使うなら2の方を勉強しておくべきだと思うのでまとめます。 基的にいつものようなREADMEの意訳です。 基情報 Redcapet は Redcloth の代換として使われてきたけど、バージョン2からは独自のAPIを持つようになる。 Redcarpet は Sundown という名前の Markdown をパースする拡張ライブラリを利用している。詳しくはこちら。 インストール 下記のようにインストールする(ただし、現在は普通にインストールすると1系が入ります)。native extensionsがビルドされるけど、スタンドアロンなので他のライブラリをインストールしておく必要は無

    Redcarpet2のざっくりまとめ - おもしろwebサービス開発日記
    asonas
    asonas 2013/06/20
  • js で利用する DOM の名前をどうやってつけたらよいのか - おもしろwebサービス開発日記

    js で DOM をゴニョゴニョしたい時、きっと皆さんは id や class で DOM に名前を付けて、その名前を利用して js の処理を書いていると思います。 例えば<input type="button" class="update" value="更新" />のようなボタンがあったとして、 js 側で更新処理を書くときには下記のように書きます。 $('.update').on('click', function () { // update 処理 }) でもこれだと問題になるケースがあります。よくあるのが、マークアッパーとフロントエンジニアが分業していて、マークアッパーがデザインのために class 名を変えてしまい js が動かなくなるパターン。分業せずに一人で全部やってたとしても、時間が経つにつれ使っている class 名が js だけで使っているのか、css でも使っている

    js で利用する DOM の名前をどうやってつけたらよいのか - おもしろwebサービス開発日記
  • Rails4.0に含まれる strong_parameters について - おもしろwebサービス開発日記

    注意 このエントリは急いで書いたので間違いが含まれている可能性が高いです。気づいた方はご指摘ください。 序文 strong_parameters とは、mass assignment で余計なパラメータをモデルの属性にセットさせないための新しい仕組みです。Rails 4.0 からはこれが標準になります。Rails2.x と 3.x はattr_accessibleやattr_protectedなどで似たような機能が提供されていましたが、これだと管理が煩雑になるケースがありました。 今年の3月くらいにGitHub が mass assignment の脆弱性を突かれたことで 、この問題をどうにかしようという流れが起き、最終的に strong_parameters が作られるという経緯を辿りました。 mass assignment とは Rails ではこんなコードをよく見ると思います。 de

    Rails4.0に含まれる strong_parameters について - おもしろwebサービス開発日記
  • Capybara 2.0 アップグレードガイド - おもしろwebサービス開発日記

    Capybara 2.0 Upgrade Guide - Funding Gates の意訳です。 capybara の 2.0.0 beta がリリースされたらしく、上記エントリでは重要な変更点とアップグレードの仕方について解説してくれています。 good news と bad news 2.0.0 にアップグレードしたら、現在のテストが一部通らなくなるかもしれなません 一度 2.0.0 でテストが通るようになったら、そのまま 1.1.2 に戻すことも出来ます。まだ 2.0.0 が肌に合わないようならまだ切り戻すことができます。 互換性 capybara-webkit や poltergeist はまだ Capybara 2.0 に対応していません。ひとまず selenium ドライバを使いましょう。 How to Upgrade 2.0.0 beta は約一ヶ月前にリリースされました。

    Capybara 2.0 アップグレードガイド - おもしろwebサービス開発日記
  • Rails 3 の Action Mailerまとめ - おもしろwebサービス開発日記

    Ruby on Rails Guides: Action Mailer Basicsを読んでの自分用メモです。 Mailerを作る rails generate mailer UserMailer Mailer概要 defaultでmailメソッドのデフォルト引数を指定できる mailメソッドでmailを送る controllerと同じように、ここで定義したインスタンス変数はviewでも使える class UserMailer < ActionMailer::Base default :from => "notifications@example.com" def welcome_email(user) @user = user @url = "http://example.com/login" mail(:to => user.email, :subject => "Welcome to

    Rails 3 の Action Mailerまとめ - おもしろwebサービス開発日記
  • CSRFの対応について、rails使いが知っておくべきこと - おもしろwebサービス開発日記

    以前、CSRFについてのエントリを書きました。 CSRFについて - おもしろWEBサービス開発日記 上記エントリではCSRFの概念について書きましたが、もう少しつっこんで調べる必要が出てきました。調べたことを書いてゆきます。 基礎 application.rb(ないし適当なController)にprotect_from_forgeryメソッドを定義すれば、railsが自動的にCSRF対策をしてくれます。というか、デフォルトでapplication.rbに下記のように書いてあるので、特に何もせずともCSRF対策はバッチリなのです。 protect_from_forgery # :secret => '8ff3ed33f86a431662d8dfe255acdb4a' railsは、get以外の動詞のリンクに、authenticity_tokenというパラメータを自動的に付け加えます。ge

    CSRFの対応について、rails使いが知っておくべきこと - おもしろwebサービス開発日記
  • Rails 3 のルーティング定義について - おもしろwebサービス開発日記

    Rails 3のルーティングで気になったところについて。いつものメモです。あくまで気になったところなので全部網羅しているわけではありません。あしからず。 基map.connect から match メソッドに変更。オプションも下記のように変更。 # Rails 2 map.connect 'products/:id', :controller => 'products', :action => 'view' # Rails 3 match 'products/:id', :to => 'catalog#view' # :to は省略可能 match "/account" => "account#index" # :controller/:action 形式であればさらに省略可能 match "account/overview" Named Routes asオプションで指定するように

    Rails 3 のルーティング定義について - おもしろwebサービス開発日記
  • 1