GMOペパボに入って3年、やってきたことを振り返った

2018年7月1日でGMOペパボに入社してから3年がたった。自分自身1つの会社で3年を超えて働いたことがなかったので、もう3年も経つのかという気持ちが大きい。3年間あっという間のような長かったような不思議な感覚がある。いい機会なので何をやってきたか振り返ってみた。

ちなみに入社前まではWEBの会社では働いたことはなく、PHPRubyも仕事では書いたこともない、ましてや技術イベントで登壇などしたこともない、ほぼゼロからのスタートのようなものだった。なぜ入社できたのかはわからないが、とにかくがむしゃらに自分で書いたコードをGitHubにおいたり、ある程度人に見せれるものを作ってHerokuで動かしたりてアピールしていたように思う。

サービス運用

入社してしばらくはがむしゃらに日々の運用案件をこなしていた。サービスの全体像を掴んだり、PHPRubyで書かれたアプリケーションのソースを読みながら、バグの原因を掴んで治したりして、まずはチームに不可欠な人になろうと必死にやっていた。

先にも書いたように、PHPRubyも入社まで書いたことがなかったので、入社後勉強の時間を設けてくれてパーフェクトPHPやパーフェクトRubyを読みつつ勉強させてくれてすごくありがたかった。

コードのリーディング力(というか勘所を掴む能力的なもの)は低い方ではないので、「すべての答えはソースコードにある」という気持ちで読みまくっていた。RubyGemsやComposerのようなエコシステムにも触れ、自分でライブラリを書いてみたりした。

github.com

github.com

github.com

コードレビューや先輩のコードを見たり、OSSソースコードを読んだりして設計を学んだ。仕事では、運用を省力化してそれ以外の新規開発に充てる時間を増やすために自動化をしたりBotガリガリ書いたりした。運用案件のissueがopenされてからcloseされるまでの時間を自動で計測してくれるBotを作ってその時間をいかに短くしていくか取り組んだりもした。

f:id:kimromi:20180722230940p:plain

開発環境についてはVagrantで立ち上げたVMにChefをあてて作るスタイルがすでにできていた(現在も利用している)。当時は技術的にもよくわかっていなかったので、vagrant upで開発環境出来て便利だな思っていた。

社内の読書会をきっかけにGolangも少しだけ書いてみたがいまいち身が入らず挫折した。

インフラ

そのうち、アプリケーションのサーバーが物理サーバーから自社のプライベートクラウド(OpenStackで組まれている)に移設されていくようになり、自分も進んで取り組み始めた。インフラの構築や監視、ネットワーク周り、ChefやTerraformでコード管理していく技術を学んだ。Dockerも本を読むなどして勉強し、世の中にはこんな便利なものがあるのかと感じた。

一般的なWEBアプリケーションの構成も知り、keepalivedをつかったロードバランサや、Nginxでリバースプロキシを作って各アプリケーションサーバーにリクエストを振り分けたりできるようにもなった。ドメインのサービスに携わっているのもあって、DNSの知識も得ることができた(DNSサーバーの運用はしてないけど)。一通りアプリケーションをサーバーから立ち上げてドメインの設定して、SSL証明書とってNginxに設定してhttpsでサービス公開して監視、運用、移設もできるようになった。

この頃、それまで既存のPHPのレガシーアプリにツラミを感じていたのだが、10年以上問題なく動いててサービスを支えてくれていることに感謝の気持ちを持てるようになってきた。

あともうひとつ、この頃にシニアエンジニアの昇格試験を受けた。udzuraさんにメンターになっていただき、それまでの自分のやってきたことを振り返りつつアドバイスいただいた。結果は見事に撃沈だったが本当に勉強になったし、自分には何が足りないのかがわかった。

チームリーダー

2017年9月、長年チームに在籍してサービスをまるっと知り尽くしている先輩が退社されたのと同時に、ムームードメインチームのリーダーになった。先輩が抜けた穴はかなり大きく大変だったが、コード化や自動化できていなかったところを皆で協力して少しずつコードにしていくことで省力化することができてきている。

リーダーとしては俺について来いタイプでは無いので、どちらかというと見守りつつ下から支えるタイプであると思う(サーバント型?)。自分の意見を押し通すではなく、自分の意見は持ちつつも皆できちんと議論した上で噛み砕きつつ、スッと説得力のあるアイデアを出してまとめるみたいなのを心掛けている。今までリーダーの経験はなくて、最初はどうやったらチームがうまく纏まって機能するか、また雰囲気のいいチームになってメンバーたちが出社が苦にならないかを考えていた。うまくいったかどうかはわからないが、問題はない(と思っている)。リーダーになってから3ヶ月くらい、技術的なアプローチが全然できてなかったので、2018年からは少し肩肘の力を抜いて、本来のエンジニアとしての技術を磨いてアウトプットする作業もやっている。

学生のインターンシップのメンターも初めて経験した。また中途採用の面接官もするようになった。今現在高いスキルはは持ち合わせていなくても継続して学び続けることのできる人かどうか、ペパボの風土に合うかどうかなど、人を見る目が少しついたように思う。

tech.pepabo.com

フロントエンド

最初にフロントエンドの技術に触れたのは社内サービスの顧客管理システムの1機能の中にVue.jsを採用したところから。それまではPHPRuby on Rails内で愚直にjQueryCoffeeScriptで書いていた。その後ショッピングカートを実装したときにユーザーが目に触れるところでVue.jsを採用してリリースした(2017年7月)。

tech.pepabo.com

そのあたりは本番環境にVue.jsを使った話とかVue.js on RailsとかムームードメインJavaScript環境を整えた話で外部、社内イベントで登壇した。最近のプロジェクトではVue.jsに加えてNuxt.js、TypeScriptを採用してサービスのリニューアルの実装をしている(リニューアルについてはインフォメーションで少しだけ触れている)。

最近触れるようになってきたフロントエンドの技術だが、なぜか面白みと楽しさを感じる。ただうまく言語化できていないので考えていきたい。

見えてきた自分の長所と短所

3年間とにかくがむしゃらに走ってきたように思う。その中でもとにかく手を動かすというのを心がけている。最初はあまり大きくない問題に対して大きなコスト(時間)をかけていた。シニアエンジニアの立候補をきっかけに、問題の大きさをきちんと捉え大きな問題をなるべく小さなコストかつ未来につながる方法で対応していくということをできるようになってきたように感じる。技術的に何かが突出しているエンジニアではない(自分もそれが向いているとあまり思っていない)ので、バランスをとりつつ引き出しをたくさん持った中から手数を多く出していくようにこれからもやっていく。

あとエンジニアにはあまり関係ないが、私は周りの人のことをものすごく観察していて、ちょっと見ただけでその人が何を考えてどんな気持ちなのかなんとなく分かるようなスキルが人よりもありそうということがひょんなことからわかった。自分ではそれが普通だと思っていたのだけど、意外に人はそこまで敏感ではないということに気づいた。チームのリーダーもそのあたりを見込まれて選ばれたのかもしれない。その点も強みとしていけたらよいと思う。

短所として、中長期的な観点で考えて道筋を立てていくことが得意ではない。個人的なことでも、仕事においてもそうである。入社する前まではとにかくWEBの会社に入るというのを目標にしてきてそれに向かっていたが、それが実現してからの3年間特に目標もなく進んでいたように思う。立場的にも中長期的な観点でかつ広い視点で見なければならないようになりつつあるので大きな課題である。

所感

3年間やってきて、本当にやっと最近になって自分のやっていることが売上に直結したりチームにものすごく役に立つものであったりすることが増えてきたように思う。エンジニアは様々な問題を解決する職種であるというところから、問題の重要度&緊急度に対してのコストのかけ方を肌感で掴んできたからだと考えている。まだまだやることは膨大にあるし一つ一つクリアしていきながら自分自身をレベルアップさせていきたい。またこの先エンジニアとしてどうなりたいのか、そもそもなぜエンジニアをやっているのか、エンジニアとしてこれからもやっていきたいのかというところからもう一度見直しながら残り半年過ごしていきたい。

【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時間弱立って作業してみましたが足と腰の疲労がすごいです。肩こりによさそう。腹筋がつきそう。もともと姿勢が悪いので相当効いてる感じがします。

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