【Rails】request.remote_ipの値がプライベートネットワークの通信で120.0.0.1になる

https://qiita.com/yasu/items/da7ebdb01cb3209583df こちら参考にした。

環境

Rails 4.2.10

結論

config/application.rbに以下を追加すればOK

require 'ipaddr'

module Kimromi
  class Application < Rails::Application
    # これを追加
    config.action_dispatch.trusted_proxies = %w(127.0.0.1 ::1).map { |proxy| IPAddr.new(proxy) }
  end
end

原因

request.remote_ipにはTRUSTED_PROXIESというプライベートネットワークのIPアドレス帯を除外する機能がある。

https://github.com/rails/rails/blob/v4.2.10/actionpack/lib/action_dispatch/middleware/remote_ip.rb#L33-L40

    TRUSTED_PROXIES = [
      "127.0.0.1",      # localhost IPv4
      "::1",            # localhost IPv6
      "fc00::/7",       # private IPv6 range fc00::/7
      "10.0.0.0/8",     # private IPv4 range 10.x.x.x
      "172.16.0.0/12",  # private IPv4 range 172.16.0.0 .. 172.31.255.255
      "192.168.0.0/16", # private IPv4 range 192.168.x.x
    ].map { |proxy| IPAddr.new(proxy) }

今回の自分の環境の通信は10.*.*.*だったので、この"10.0.0.0/8"に掛かり除外され、request.remote_ipとして127.0.0.1だけが残る形となっていた。

なお、TRUSTED_PROXIESの設定はconfig.action_dispatch.trusted_proxiesで上書きできる。プライベートネットワーク帯の除外は自環境では特に必要なかったので、ローカル通信の127.0.0.1::1だけ残した形で以下のように設定してOKだった。

config.action_dispatch.trusted_proxies = %w(127.0.0.1 ::1).map { |proxy| IPAddr.new(proxy) }

しかしRailsのログが127.0.0.1のまま

Started GET "/" for 127.0.0.1 at 2018-04-23 20:01:42 +0900

こんな感じでRailsのログには127.0.0.1のまま出力されていた。ただこれは既知の問題だったようで、本家のRailsの方で修正されていた。

github.com

ソースコードを追ってみるとrails v5.0.7には当たっていなく、v5.1.0には当たっていたのでv5.1.0以上にあげる治っていそう。 https://github.com/rails/rails/blob/v5.1.0/railties/lib/rails/application/default_middleware_stack.rb

早くRails5にしたい。

立って仕事ができるモニターアームを導入した

f:id:kimromi:20170508234020j:plain:w400

(写真は同僚の先輩にいきなり撮られたもの)

弊社の@linyowsさんが既に導入していて身体によさそうだなぁと思っていたので上長に相談したところOKが出たので導入しました。本日昼から約4時間弱立って作業してみましたが足と腰の疲労がすごいです。肩こりによさそう。腹筋がつきそう。もともと姿勢が悪いので相当効いてる感じがします。

下を向いては意味がないので下のパソコンの画面はほぼ見ず上の画面のみで作業しています。疲れた時はアームを下げて座って作業もできます。数字のブラインドタッチが苦手なので訓練せねば〜

エンジニアチーム内LTを始めることになりました

私はGMOペパボムームードメインというサービスのエンジニアをしています。2ヶ月ごとにロリポップ!ヘテムルムームードメインと、サービスを横断するインフラチーム合同でTechMTGが開かれています。(1回目の模様はこちら

昨日2回目が開催されたのですが、とても良い内容が多く参考になるものばかりでとても良かったです。ペパボのテックブログにそのうちレポートが書かれると思います。

ムームードメインのエンジニアも1人TechMTGに登壇したのですが、あまり登壇経験がなく準備もすごく大変そうで、チーム内レビューもあるのですがレビュアーも登壇経験が少ないためレビューも大変でした。

チーム内LTを始めてみようと提案

ムームードメインのエンジニアは現在4人なのですが、皆登壇経験があまりなく少し苦手意識を持っているようでした。そこでチームにLTをやってみませんかともちかけたところすぐにみんなOKしてくれました。(フォロワーシップ!)
すぐにいいねと言ってくれるメンバーたちにも感謝。

f:id:kimromi:20170225144031p:plain

LTのルール

◯ 内容

サービスの仕様の話、技術的な話、エモい話、とにかく何でもあり。

◯ 時間

5分程度でまとまるくらい小さなものでOK。大きすぎると逆に負担になるからライトな感じで。

◯ 資料

スライドなりテキストなり何かしら資料としては残す。口頭だけではとにかく忘れてしまうから。

ということで早速始まった

初回、まずは自分がやるぞ!ということで、何にしようかと迷いましたが、エモい話をすることにしました。

その時のスライドがこれです。 speakerdeck.com

内容としては

  • 個人の強みを活かそう
  • その上でチームとして根幹の指針(共通認識みたいなもの)を皆で考えたい

例えば「困ったらコードで解決する」というチームの指針があったとします。何か問題が起こったときや改善したいときなどに「コードで解決するにはどうしたら良いだろう」という考えがまず自然と浮かんで浮かんできて、解決方法に悩んだり迷ったりする時間が減らせるのではないかという感じです。

資料としては全然洗練されてなくて、ただの提案LTですが気持ちは伝わったようでこうするとよさそうだ!とか話が広がってすごくよかったです。

思ったこと

最近、何事も小さく始めてみるというのが良いと思っています。大きくやろうとすると、それについて考えることが多すぎて時間がかかってそのうち熱が冷めてしまって結局なにもできなかったということになることが多いと感じます。

その1つとして小さくチーム内でLTを始められたことは良かったです。事業部全体で!会社全体で!ってなると途端にハードルが上がってしまって手を挙げづらいところがあるので、まずはこの感じで続けていきたいと思います。