reizist's blog

ウェブ

株式会社Reproで働き始めてから3ヶ月経った

Reproで働き始めてから3ヶ月経った。経ってしまった。

入社してから、ではないのは、始めの2週間はフリーランスとしての契約だったため。正社員としての入社は4/1からなので、社員として2ヶ月半を過ごしたことになる。時間が経つのが早すぎる。

なんで3ヶ月経った時点でブログを書いているかというと、一瞬で会社を辞めることも無くはなかったしそもそもアウトプットするほど大した仕事をしていなかったから。

まだまだだけど最近はできそうなことを少しずつやっている感じで一旦「僕はReproの社員です」と名乗ってもいいか、という自分なりの解を得たので、

そろそろちゃんとパフォーマンス出していかないとという戒めも込めて自分のためにも振り返りと、あわよくばこれをもってReproという会社に興味を持ってくれる人がいてくれたらと思い思考を垂れ流しつつ記事に落とす。

何をしているか

今自分はSREチームとして働いている。SREチームの定義でいうとまぁやっぱりメルカリのそれに近くて、

可用性の向上、パフォーマンスの担保、開発環境の効率化を軸に機能開発以外の開発を全て見る、という方針で動いている。

とはいえ扱うミドルウェアからサービスまでとても幅広く、多くのOSSを採用していることから身につけるべき知識は大量にあり、 高パフォーマンスを維持するためのシステムの複雑度もあり最初の1ヶ月はただただ翻弄されていたように思う。

少しずつ深いところに手を出しつつあるが、入社当時は「docker is 何」状態だったこともあり苦労が絶えない。

流石になんでもやりますと言って全て中途半端な状態は良くないので最近は専門性を持つことになっていて、自分に関してはデータストアを中心にインフラに近いところでコードを書く仕事をしている。

主に触っているものを挙げると以下の通り。

AWS

  • cloudfront/s3/ec2/elb/rds(aurora)/elasticache/route53/sqs/などの一般的なウェブアプリケーションに使用するもの
  • ecs
  • lambda
  • cloudwatch
  • emr
  • その他これらに付随するacm/kms/iam等を使った権限やパラメータ管理

OSS/PaaS

大体terraformとにらめっこしていたり、ミドルウェアのバージョンを上げたり、他チームから挙がってきた機能追加に合わせてパフォーマンス監視したり、コードレビューをしたりされたりしている。

いまいまでいうとドメイン分離(静的サイトとアプリケーションの分離)、ridgepoleを運用に乗せるにあたって発生した諸々(fk貼り直しとか)の作業と、emr cluster周りの設定の確認と見直しをやっていて、少しずつデータストアに作業がよってきている。わからないことだらけで辛いがわかるようになるのは楽しい。

なぜReproに入ったか

そもそもなんでReproを選んだかというとスピード感のある組織の中で働くイケてる開発メンバーに惚れ、イケてる開発に携わりたいと思ったからだった。 どの辺がスピード感があるかというと、「とりあえず会社に遊びに来てください」ということになり会社に遊びに行ったところ、会議室に入って15分でその日からお試しで働くことになったことがまず筆頭に挙がる。

エンジニアの採用は採用する側もされる側も大切な意思決定であるにも関わらず、入社するまでの間に100%お互いの意思をすり合わせることは難しい。 個人的には「とりあえず一緒に働いてみる」が一番手っ取り早い手段だと思っている。趣向や技量を把握するのにこれ以上効率的なことは無く、表面上の経歴や上辺だけの会話より遥かに確度は高いと思う。

そんなわけで働き始めると、当初聞いていた以上に高い技術力で作業をこなすメンバーばかりで控えめに言ってビビった。 登壇を良しとする社風があるのでCTOのjoker氏を筆頭に勉強会やカンファレンスで登壇するメンバーもおり、かっこよい。

実際に入ってどうか

日々多くの知識を持っていないと進められない業務があり辛い。1つわからないことを調べると10個くらいわからないことが増える気がする。 スタートアップなのでそれなりのアウトプットは求められており、期待に達しているかどうかでいうと censored。 GRITを読み自分を鼓舞しながらなんとかやっているというのが実際のところ。

関係ないけどGRITはいいぞ。人生という荒波に立ち向かう勇気を無くした際は是非読んでください。

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

やり抜く力 GRIT(グリット)――人生のあらゆる成功を決める「究極の能力」を身につける

GRITの紹介終わり。

とはいえ技術力の高いメンバーに囲まれているので刺激になるし、相談すれば答えてくれるし、エンジニアとして幸せな環境だと思う。

本音を言えば不満も少なからずあり、小さいものでいうと会社をハードウェアとして見ると前職にはどうしても見劣りする(狭いとか)点や、入った当初考えていたこと(具体的にはグロースハックにもともと興味がありそういった知見を得たい)が今このままだと達成できない(それどころじゃない)というようなこともあるが、どこにいったって100%やりたいことをやるにはそれなりに"“力”“が必要でその能力を今持ち得ていないという背景がありやるべきことを粛々とやるフェーズということで納得することにしている。

これから何をするか

直近1ヶ月は分散データストアというものにフォーカスして安定性/パフォーマンスの向上に寄与したいと思っている。 ちょうど今日は、デフォルトの max open files count4096 であるpresto processが稀に上限に引っかかって例外を起こすので custom bootstrap actionでulimitで調整するPRを出した。そんな感じのことを引き続きやっていきたい。

Reproに興味のある方がいたら

多分ですけどギークっぽいエンジニアの方が趣向は合うと思います。僕は非ギークです。 AWSOSSにたくさん触れたい、技術力を持ったメンバーと一緒に仕事をしたい、大量のアクセスを捌く経験がしたい、そんなエンジニアは面白そうだと思ったら一回遊びに来たらいいんじゃないでしょうか。wantedlyで募集してますよ。

www.wantedly.com

www.wantedly.com

www.wantedly.com

www.wantedly.com

よろしくお願いいたします。

転職活動してた

昨年12月に2年8ヶ月ほど働いた株式会社イグニスを辞めてからスタートアップの立ち上げ的なことに関わり、様々なことをしましたが、

本当に様々なことがあり(本当に)、様々な事情により、転職活動を終えました。スタートアップは大変ですね。楽しいですよ。

転職活動にはwantedlyを主に使用した。 決して自慢とか満足感とかそういうのではなく、ネームバリューのない一エンジニアとしてのwantedlyでの活動報告は以下のようになります。

  • 「話を聞きたい」ボタンを押した数: 9
  • 「企業からの返信待ち」: 3 (そもそもコミュニケーションがとれなかった)
  • 「スカウト」: 7
  • 何かしらコミュニケーションをとった企業数: 13
  • 「話を聞きたい」ボタンから実際に話を聞きに行けた企業数: 4
  • 「話を聞きたい」ボタン押下後、履歴書/経歴書を求められた企業数: 3
  • 「話を聞きたい」ボタン押下後、履歴書/経歴書を求められた後話が進んだ企業数: 0
  • 会社に一度でも足を運んだ企業数: 6
  • 転職の意思を伝え、実際に採用フローに乗っかった企業数: 5
  • お祈り数: 2
  • 内定数: 3

以前はエージェント経由だったりGreenなどの転職サイトを使用したが、今回はwantedlyのみで他のスカウトメール等は一切未使用だったので、 wantedlyでチャットやってるだけで採用進んだみたいな感覚があり、転職活動のハードルも下がったなぁと思った。

pull型転職というか、めちゃくちゃ能動的に仕事探すというよりは降ってくる情報に乗っかる感覚というか。まぁこれでいいのかみたいなのもあるけど。 とはいえ、wantedlyの「話を聞きたい」ボタン、ユーザー・企業間に温度感の隔たりがあって、企業側としては当然効率よく採用活動したいのわかるし、多分正しいんだけど、 ただ話を聞きたいと思ったユーザーに書類求めた挙句速攻お祈りor無視というパターンが何度かあり、告白してもいない女の子に振られる感じでアレだった。

本当に優秀なネームバリューのあるエンジニア陣は退職ブログ書くだけで内定を無限にGETしていたりするので、そうなりたいなーとも思うけれど 二回目の転職活動はこんな感じだった。

あと、フリーランスとしてなら無限に人づてに仕事があり、最悪死なないということがわかった。 (フリーランスの世界に入ると、フリーランスの人にのみ?情報が出回るというか、大体金があるところに仕事の話があり、地球は回っている)

しばらくはエンジニアとしてもう一回りやっていき、視野を広げたい所存。

HyperDrive: Thunderbolt 3 USB-C Hub for 2016 MacBook Proレビュー

www.kickstarter.com

kickstarter経由で購入したMacBook Pro 2016用のusb-cハブ、 HyperDrive: Thunderbolt 3 USB-C Hub for 2016 MacBook Pro のレビューです。

仕様

f:id:reizist:20170320234525j:plain

外観

イカしてます。macbookとマッチする高級感があり、値段相応です。

レザー生地の入れ物もついているので持ち運びも問題なさそう。

f:id:reizist:20170321000328j:plain

実用性

推奨どおりの装着だと接触が悪く、しっかりハマっていない感じがする。自分のmacが悪いのかHyperDriveが悪いのかは謎。しかし推奨方法で使えないのでがっかりした。

とはいえ逆だと「カチッ」という音と共にしっかりハマっており通常通り動作している印象がある。 接触が問題ない状態だとすればかなり便利で、各種アダプタがない状態であたふたしないで済みそうなのでmust buy感がある。appleが作って欲しい。

個人的にはmicro-SDをmacbookに挿したいことが多く、この場合2つのアダプタを介すなどしており全く2017年にもなってなんて不便な生活なんだと思わなくもなかった。

所感

minimumで$69, shipping含めて $79したので高い。高いゆえに品質を期待していたので、残念に思う部分もある。

とかでもいいのかもしれない。

HatenaBlogScraper公開してました

1週間くらい前に深夜のテンションで作ったgem HatenaBlogScraper(HBS)を公開してました。

GitHub - reizist/hatena_blog_scraper

まぁ何をするものかというとhatena blogの記事をスクレイピングしますよってだけのgemです。

[1] pry(main)> require 'hatena_blog_scraper'
=> true

[4] pry(main)> c = HBS::Client.new(url: "http://reizist.hatenablog.com")
=> #<HatenaBlogScraper::Client:0x007fe6cc0e2788 @host="reizist.hatenablog.com", @url="http://reizist.hatenablog.com">
[5] pry(main)> c.list_articles
=> [#<HatenaBlogScraper::Article:0x007fe6cc18ab68
  @html=
   "<div class=\"entry-content\">\n  \n    <p>1週間前くらい前に深夜のテンションで作ったgem HatenaBlogScraper(HBS)を公開してました。</p>\n\n<p><a href=\"https://github.com/reizist/hatena_blog_scraper\">GitHub - reizist/hatena_blog_scraper</a></p>\n\n<p>まぁ何をするものかというとhatena blogの記事を<a class=\"keyword\" href=\"http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EC%A5%A4%A5%D4%A5%F3%A5%B0\">スクレイピング</a>しますよってだけのgemです。</p>\n\n<p>それをhatena blogに書いちゃっていてどうなのと思わなくもないので<a class=\"keyword\" href=\"http://d.hatena.ne.jp/keyword/rubygems\">rubygems</a>に公開していないのと、個人ブログでひっそりと。</p>\n\n<p>何か問題があればご指摘いただけますと幸いです。</p>\n\n  \n</div>",
  @markdown=
   "1週間前くらい前に深夜のテンションで作ったgem HatenaBlogScraper(HBS)を公開してました。\n\n[GitHub - reizist/hatena\\_blog\\_scraper](https://github.com/reizist/hatena_blog_scraper)\n\nまぁ何をするものかというとhatena blogの記事を[スクレイピング](http://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EC%A5%A4%A5%D4%A5%F3%A5%B0)しますよってだけのgemです。\n\nそれをhatena blogに書いちゃっていてどうなのと思わなくもないので[rubygems](http://d.hatena.ne.jp/keyword/rubygems)に公開していないのと、個人ブログでひっそりと。\n\n何か問題があればご指摘いただけますと幸いです。\n\n",
  @text=
   "\n  \n    1週間前くらい前に深夜のテンションで作ったgem HatenaBlogScraper(HBS)を公開してました。\n\nGitHub - reizist/hatena_blog_scraper\n\nまぁ何をするものかというとhatena blogの記事をスクレイピングしますよってだけのgemです。\n\nそれをhatena blogに書いちゃっていてどうなのと思わなくもないのでrubygemsに公開していないのと、個人ブログでひっそりと。\n\n何か問題があればご指摘いただけますと幸いです。\n\n  \n",
  @title="HatenaBlogScraper公開してました",
  @url="http://reizist.hatenablog.com/entry/2017/03/17/010417">]

それをhatena blogに書いちゃっていてどうなのと思わなくもないのでrubygemsに公開していないのと、個人ブログでひっそりと。

何か問題があればご指摘いただけますと幸いです。

web+db vol97のMySQL運用最前線を読んだ

前職でソシャゲ開発/運用をしていた関係でちょろちょろ触る程度のなんちゃってDBA/インフラーなのでそこまで深い知識は持っていないけど、 最低限時代についていく必要はあるので読んだ。 なんか間違ってること僕が書いてたら教えてください。

目次

について書かれている。

MySQLの現在

今現在の最新である5.7に至るまでのMySQL史が紹介されている。 次期リリースの「MySQL 8.0」はしばらくでなさそうだし、5.6はリリースされてだいぶ経っている。 5.7に移行したほうがいいよね、という熱感を高める文章が記載されている。

innoDB徹底活用

  • innodbの解説(デフォルトで有効なストレージエンジンだし他のストレージエンジンにする必要ないとか)
  • mysqlのパラメータの中でも最も重要な innodb_buffer_pool_size がオンラインで変更可能になったよ
  • ファイルフォーマット/行フォーマットの変更
  • 日本語の全文検索が可能になったよ

あたりが言及されている。

innodb_buffer_pool_size の動的変更、 バッファプールを増やす場合 全てのアクセスが禁止されるのでパフォーマンス劣化が懸念され、 バッファプールを減らす場合 チャンク単位のページ開放でロックを取得する場合他のトランザクションに影響する等でパフォーマンス劣化が懸念される

あたりが気をつける点としてあって、短期的なパフォーマンス劣化で中長期のパフォーマンスを向上させるものだという認識。 オフラインで対応する場合mysqlプロセスを停止させる必要があるが、その場合buffer_pool_sizeが大きければ大きいほどflushに時間がかかるのでダウンタイムが伸びる可能性があって、 どうしてもダウンタイム作れないものにはアクセス少ない時間帯にオンラインコマンド叩いとく感じになると思う。

とはいえauroraなどマネージド・サービスならデフォルトでインスタンスの ¾ のメモリ量になるよう設定されているようで足らなければインスタンス変更で対応しそうだし、 自前でmysql管理するレベルのチームなら最初に innodb_buffer_pool_size を適切に設定しておくだろうし、 よっぽどリリース時から想定されていないアクセスが来たみたいな状況じゃないと使わなそう?(素人意見)

フォーマットのデフォルトが変更されたあたりは多分メリットしかなくて、

  • デフォルトがAnteropeからBarracudaになった件は、普通のアプリケーションエンジニアが意識するのって絵文字対応などのときだと思っていて、これにより各々の my.cnfinnodb_file_format = Barracuda を書く必要がなくなった
    • 関連して innodb_large_prefix も5.7デフォルトで1になっており絵文字対応がデフォルトで対応されている?
  • デフォルト行フォーマット innodb_default_row_formatdynamic になった件は、ちょっとまだ肌感としてはよくわかってなくて、 圧縮される(のでストレージ負荷が下がる)代わりにCPU負荷が上がるCompact( or Compressed)を採用するか否かの話になると思うんだけど、CPU負荷というのがどれくらいのものなのかわからないのと、もはや近頃はストレージ価格というのはどんどん下がっているのでリスク犯すなら思考停止して dynamic でいいじゃん、と思ってるんだけどどうなんでしょう

日本語の全文検索に関しては結構読み飛ばした(mysql内で形態素解析等するケースが思いつかなかった)

柔軟で安全なレプリケーション

この章がもう結構衝撃的で、正直前職では master_log_file , master_log_pos めっちゃ駆使してたし、 set global sql_slave_skip_counter=1 も手動で叩いていたので GTIDとクラッシュセーフスレーブすげーーという感想になった。

マルチソースレプリケーションに関しては、チャンネル単位で複数スレッドに並列化してスレイブを構築するほどスレイブ遅延が発生する状況を知らないので読み込んでみたけどあまり直近で使う未来は見えなかった。 むしろ

ただしチャンネルはお互いに独立しているため、チャ ンネル間の整合性は保証されません。すなわち、チャン ネル❶のマスタが更新されたあとにチャンネル❷のマス タが更新されたとしても、スレーブ上ではどちらが先に 更新されるか保証することはできない

等のコメントを読んで腰が引けたというかあまり使いたくない印象を持ってしまった。

設定における留意点と分析機能の利用

この章も「フムフム」と言って読んだ。SQLモードの変更やログのスタンプ形式の変更は読んで把握しておいてよかったなと思った。 とはいえ個人的にはDBは常にUTCでもいいんじゃないかとも思っているので(実際に前職はそういう運用をしていた)、頭にindexを作るに留める。

所感

どんどん最新機能出てきてそれを最前線で追っている方々、すげえみたいな小学生のような感想。 今までローカルのmysql5.6だったけど、手元の開発が落ち着いたタイミングで brew install mysql で5.7にあげよう。(今は brew install mysql56

サーバーエンジニアで少しでもDB(mysql)触る人は是非読みましょう

WEB+DB PRESS Vol.97

WEB+DB PRESS Vol.97

(pdfはgihyoから買える)

参考

www.slideshare.net

www.slideshare.net

nippondanji.blogspot.jp

yakst.com

yakst.com

Amazon Auroraを始めるためのパラメータ資料 | 外道父の匠

MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.7 InnoDB 圧縮テーブル

4Kディスプレイ買った

philipsの43インチ/4Kディスプレイ  BDM4350UC/11 を65000円くらいで買った。

買ったのはこれ

自分の部屋に作業環境を構築している最中で、机と椅子を買ったのでようやくサブディスプレイを買うに至った。

24インチとか、オフィスで普通に使っているようなものにしようかとも思った(2万あればソコソコの買えるし)けど、 机と椅子をけちったのでディスプレイくらいいいか、という甘えた考えで4Kディスプレイに手を出した。

当然24インチとか27インチあたりで妥協する選択肢もあったんだけど、

まず解像度。

27インチで4Kディスプレイ写すと文字小さすぎて読めないというレビューが多く。

さらに価格。27インチ帯で4K、まだまだ価格が高くて、

あたりも5-6万してしまう。24インチの4Kでない通常サイズのディスプレイ1枚というのは味気ないし、それなら6万5000円払って43インチ買っちゃおうぜっていう気持ちがあり勢いで買った。

40インチ以上の4Kディスプレイというと選択肢が多いわけではない。

他の選択肢としては

とか

、もしくは40インチ以上のTVをPCモニタに使うとTVも見れるしやすいという判断で

などかな、と考えていたが、

IPS液晶であること、RGBW(いわゆる偽/なんちゃって4K)でないこと、値段などを考慮して最終的にはphilipsのものにした。

今のところ不自由なく使えていて、でかい is 最高!といったところで幸福感が高い。

macbookpro 2016 lateユーザーの人の場合ケーブルには気をつけなくてはいけなくて、

apple純正のusb-c <-> displayport ケーブルでは画面を表示することができない。

この辺の罠に関しては

itstrike.biz

あたりで詳しく解説されているがケーブル単体の購入(変換器ではなく)の場合殆ど選択肢はなくて、

しか無いと思われる。

前者のほうが人気があったようだが、昨年のmacbookpro 2016特需で値段が2倍に跳ね上がり(昨年は2000円程度だった)、かつ送料もかかり、届くまで時間がかかるという点で敬遠し 自分は後者を購入した(displayportの場合1mしかないので注意)。

(ケーブルに4000円程度払うのすごい癪なんだけどHDMIだと30Hzのみ対応っぽく最高のパフォーマンス(4K/60Hz)のために仕方なく買った。)

届いた瞬間はでかすぎてびびった、

でもすぐ慣れた。 参考までに、自分が使っている机のサイズは奥行きx横は60x140で、本当はもっと奥行きあると嬉しいなーという感じ。

少し前まで10万-15万してた4Kディスプレイが、6万円で手に入る時代が来たのでどんどんハードルが下がってきている。

6万で最もQOLを上げるのにコスパの良い買い物だと思うので、特にプログラマーの皆さんは今すぐ買いましょう。

NAS環境整えた

結構前なんだけど備忘録として。

NAS環境を整えた。

NASとは

NAS(Network Attached Storage)。ネットワーク上にストレージがあってネット経由でアクセスできる。

入れ物は選択肢が多々あったんだけど、コスパとエコシステム(Synlogyが出している専用のOSとかアプリとか)で選んだ。

  • NASに関してはド素人
  • 最悪消えても死なないけどそれなりに堅牢にデータ守って欲しい
  • 運用とかに力かけたくない

という状態だったので、

  • RAID1(二本のHDDに同内容を書き込んでおいて一個HDDが死んでも復旧できるようにする)程度の冗長化にとどめた
  • 自分でterminalでコマンド実行するなどの必要がないまま行える拡張(ビューワアプリをインストールしてiPhoneから直にHDD上のpdf見れるようにするとか)のみ
  • ある程度ディレクトリのアクセス権限を設定する

とした。

また中身(HDD)に関しては、WD red を選択。 各色の特徴は

akiba-pc.watch.impress.co.jp

などが参考になる。

補足としては、容量単価では3TBが最もコスパが良い。 自分的には人生で集めた全てのファイルを足しても2TBで事足りるので2TB x2 を購入した。

Synlogyのweb UIが(ド素人には)親切で、webから一通りの操作ができる(もちろんOSはlinuxなのでconsoleであれやこれもできる)。

f:id:reizist:20170302032350p:plain

アプリも多々転がっていて、脳死していてもある程度できることの幅がある。

f:id:reizist:20170302032338p:plain

所感

とにかく導入コストが低く、RAIDも10分程度で組めたし何一つ苦労することなく運用できているので、エントリーとしては非常におすすめできる。

お金が余っていてNAS持っていないみなさんは買いましょう