nariのエンジニアリング備忘録

SRE/Devops/AWS/自動化/IaC/Terraform/Go/DDD など

メインフレームを保守するSIerからWeb Developerにジョブチェンジして、もうすぐ1年経つので振り返る

はじめに

こんにちは!都内でWeb Developerをやっているnariと申します。 現在はアーティスト支援系サービスをGo/AWS/Terraformで開発しています。

今年一年の振り返りはさらっとTwitterで済ませてしまおうと#2019年を振り返るハッシュタグに便乗して上記のようなツイートをしてみたところ、案外多くのリアクションをいただけたので別途記事でも書くかということでこの記事を書いております。

また、今年2月から現職にお世話になっていて、来年の1月末で某金融系SIに所属するメインフレームを保守するSIerからWeb系企業の開発者として転職して丸一年経つということで、そちらもまとめて振り返ってしまおうという感じになってます。(雑)

この記事で書かないこと

  • 抽象的なSIとWeb企業の比較談義

ひたすら私具体的にやってきたこと/それをやった理由を棚卸するだけの記事になります。ご了承ください。

なぜ転職したか

  • ビジネスサイド(銀行)、運用部隊(データセンター)との折衝にひたすら工数を取られる当時の状況に疑問を感じ、devopsを体系的に学びたかった
  • 当時PMとしてキャリアを積んでいく路線だったが、設計/実装/運用を知らないものにエンジニアリングのマネジメントはできないと判断し、全てが効率的に学べるのがWeb業界だと感じた
  • 現職はアーティスト支援をメインの思想として掲げており、音楽やカルチャーが大好きで演者としての人生も考えていた自分にマッチした

結果的にアプリ〜インフラ、設計〜運用まで幅広く経験することができており、ジョブチェンジして正解だったなと思っています。

今年一年で何をしてきたか

業務

GoでのAPI開発

とりあえずJava/Rubyを少し書いていたくらいで、Goが何もわからないので、簡単なWebアプリをMVCで作ってそれをClean Architectureにリファクタする中で基本のお作法を覚えました。正直DIだのDIPだのまじ意味ワカンねぇなってなりましたが、色んな文献を読み実装する中で徐々に自分の中に落とし込めた気がします。

qiita.com

OpenAPI仕様管理ツール(Apicurio,Stoplight)を比較検討を導入し、既存のAPI仕様をドキュメント管理ツールでの管理から移行したりもしました。

qiita.com

qiita.com

それからは、メインプロダクト(動画納品サービス)とショップリコメンドシステム(ポイントモール)のAPI開発を通して、実践的なGoの書き方/generater/testの書き方を学んでいきました。また、チームの流れとしてClean ArchitectureでDI可能な方向にリファクタリングしていくなかで、基本的なレイヤードアーキテクチャデザインパターンも学んでいきました。

AWS上でインフラ全体を設計し、IaC(インフラのコード化)する経験

こちらは、ショップリコメンドシステム(ポイントモール)を構築するにあたって、新規にAWS上にインフラを構築できるということで、先輩と二人でビジネス的な要件に合わせ全体を設計し、TerraformでIaCしながら実装しました。 以下のように、この案件で非常に広範囲のインフラ構築の経験が積めました。

  • http serverをdeployするための基本的なインフラ(VPC, ALB, S3, RDS,Nginx)
  • 急激なアクセス増加に合わせて、低コストでスケールするアプリケーションサーバー(ECS on EC2,ECR, SpotInstance, CloudWatch Event, Lambda)
  • 顧客影響のあるFatalなアラート時は、Slack通知後に電話(Amazon Connect, CloudWatch Event, Lambda, SNS)
  • レスポンスタイムの要求がシビアになっていくことが見込まれていたので、マスターとは別にアプリがやりとりするデータソースとしてRedisを選択し、List/Hash/String(json)型のパフォーマンス計測で比較検討しデータ設計(Elasticache)
  • 親システムとのマスター同期のための非同期ジョブの実行管理(Step Functions)
  • AthenaでもBig Queryでも解析できるログ基盤構築(Fluentd,Kinesis firehose,S3)
  • 仮説検証を高速で行えるようなCI/CDの整備(AWS CodePipeline,Gitops)

もともと「AWS?何それわからん。。IaCなんてよりわからん。。」だったのが短期間でここまで実装し経験を積めたのは、事前にAWS SAAを取得し頭の中に目次を作り、技術書典6でTerraform入門本の名著「Pragmatic terraform on AWS」を購入しプライベートで色々いじっていたのが効いたと思います。

qiita.com

qiita.com

qiita.com

qiita.com

IaC啓蒙

サービスとして、グローバル展開をするということで従来のGUI管理では限界がきているのは目に見えていたので、自身もう上記の案件でノウハウのあったTerraformの勉強会を開催しました。

qiita.com

こちらの具体的なお話は、SRE Advent Calendar 2019の22日目に書いています。

qiita.com

これからも継続して実施していけたらと思っています。

ChatOps導入

チャットツールにインターフェースを集約し、メンバー操作の履歴をシェアするChatOpsの思想が好きで、AWSリソースを操作するのにクレデンシャルに煩わずスラッシュコマンドで呼び出せるSlackBotを作成し、導入したりしました。

speakerdeck.com

共通検索基盤事前調査・設計(Pending)

弊社のアーティストサービスでは、アーティスト/曲/リリースといったデータ検索をネイティブアプリ/Webアプリでももちろんできるのですが、双方精度とレイテンシーに問題がありました。 ですので、Elasticsearch(形態解析とユーザー定義辞書のメンテ)とGo製のAPIで双方の問題を解決するというプロジェクトをやっていましたが、USプロジェクトの方が優先度が高くなりPendingの状態となりました。

qiita.com

AWS上のステージング・開発環境のリソースのIaCとアカウント移行

こちらはterraform Advent Calendar 2019 15日目の方に詳しく書かせていただきましたので、そちらをお読みいただければと思います。

qiita.com

手動デプロイをCD as a serviceに委譲(WIP)

こちらはまだWIPの状況ですが、手動デプロイをCircleCIとGitopsのよるデプロイのコントロールに以降しようとしており、AWS Codeシリーズとの比較検証は大枠の設計は終えています。来年落ち着き次第こちらも記事にしたいと思っています。

USチームとの折衝/調整/会議のファシリテート

もともと英語のReading/Writingはまぁまぁ不自由なくできる方だったのですが、Speaking/Listeningにかなり苦手意識がありました。しかし、ここ三ヶ月ほどUSチームと週一でmeetingしたり定常的にChatでやりとりしたり、プライベートでもシャドーイングやDMM英会話のレッスンを受けたりすることでかなり苦手意識がなくなり、ビジネス上での意思疎通くらいなら不自由なくできるようになってきました。これからも継続して英語力はブラッシュアップしていきます。

技術発信支援

もともと入社当時は弊社のアウトプットはお世辞にも活発な状況とは言えなかったので、まず自身が週一でアウトプットし、社内外でシェアすることでアウトプットしていく流れを作ろうとしました。

その結果個人的には社内表彰をされたりもしました。

しかし、それだけではアウトプットの文化作りという面ではあまり上手く行きませんでした。(特に他の人がアウトプットをし始めるとかはなかった)

そこで12月からはアドベントカレンダーのチャンスを生かし、普段アウトプットしていないが書いた記事を読んでみたい人に声をかけまくって、記事を書いてもらいました。その際、アイデアが出てこないという人とは壁打ちしたり、構成に自信がないという人はreviewをしたりしながら、アウトプット/知の共有の楽しさを伝えていきました。

結果Qiita Organizationのメンバーは当初の2倍以上になり、「書いてよかったし、これからも継続して書いていきたい」という声を聞くことができました。継続的に支援し、これからも多くの人が知の共有の大切さに気がつくきっかけを作れればと思っています。

qiita.com

プライベート

1月にギークハウスに引っ越した(2020/01/02 追記)

25年間ずっと実家暮らしだったんですが、もうそろそろ外に出ないとなと思ったのもあって思い切って引っ越しました。 ギークハウスを選んだ理由は、ちょうど技術者として生きていく決意(転職)とともに住む環境もガラッと変えてしまった方がいいと思ったからです。 最初は西新宿の方に2ヶ月くらい住んで、その後代々木の方でずっとお世話になっています。

みんなで開発合宿したり、突然のLT大会で情報共有したり、おうちハックしたりエンジニアにとって最高の環境です。自分にないものを持っている人がたくさんいて、その人々と知のシェアリングができている感じが現代っぽくてとても好きです。 結婚したり同棲する人ができたりするまでは、シェアハウスでフラフラしたいと思ってます。

以下はみんなで作ったシェアハウスの鍵を開けるシステム

鍵システムの紹介と、Go/ラズパイ/Mackerelを使ったおうちハックの勧め記事 qiita.com

AWS SAA(認定ソリューションアーキテクト アソシエート)取得

入社当初クラウドなんもわからん、、チームメンバーの言ってることが全然わからん。。だったので、とりあえず冒険の地図を得る感覚でAWS SAAを取得しました。今振り返ると、入社直後にとったのは英断だったと思います。みなさん是非とってみてください。

qiita.com

モデリング会立ち上げ

ちょうどチームとしてもClean Architectureでリファクタしていくという流れだったのもあり、そもそもの根本のモデリングを学びたくモデリング会を立ち上げました。

geekhouse-shinjuku.connpass.com

fukubaka0825.hatenablog.com

非常に得るものも多く常に定員の2倍くらい応募のくるイベントでしたが、3回ほど行った後Developer Productivity/IaC/SREという領域に興味がかなり移行してしまい、しばらく行えていません。 どこかで再開したいと思っています。。

Gopher道場卒業

Gopher道場とは、Go Conの主催者でもあるtenntenn氏が定期的に開催している体系的にGoをみっちり学べる勉強会です。 課題を提出し無事選考を通り1ヶ月講義と課題をこなし、最後にLTをしてGopher君Tシャツをもらい卒業しました。

gopherdojo.connpass.com

qiita.com

結果、Table Drivenテストやエラーハンドリングについて特に理解を深め、現場にも持ち帰り導入できたし、何よりGoを学ぶ熱量が高い仲間ができたので非常に有益でした。

技術書典7で技術同人誌初執筆

私はギークハウス新宿というシェアハウスに住んでいるのですが、仲良くさせてもらっている住人(@wamisnetや@samuraikun(元住居人))など技術書執筆経験者が非常に多く、技術書典6に参加し感化されたのもあって技術書典7に参加し技術書を頒布することとしました。

非常に多くのトピックを扱いすぎたり、なかなか執筆のエンジンがかからなかったりで非常に苦労しましたが、住人のサポートのおかげで記事のアウトプットでは得られない経験がたくさんできたので非常によかったです。

fukubaka.booth.pm

note.com

技術書典8は出られないですが、技術書典9では何かしら書くつもりでいます。

SRE NEXTの運営メンバーに加わった

9月に参加したSRE Lounge #10でSRE NEXTなる日本初のSRE Conferenceが開催されるということ知り、昔からdevops/基盤に関する関心が強かったこともあって居てもたっても居られず、気がついたら主催者のkatsuhisaさんTwitterのリプで「是非お手伝いさせてください!」と送っていました。 そうして、運営メンバーとして参加させていただくこととなりました(何処の馬の骨かわらない僕を入れてくれたことに感謝!)

sre-next.dev

私が具体的に何をやっているかというと、Twitter運用/ブログ記事作成/イベントチケット管理/動画制作の取りまとめ などなどをやっていっています。

ちなみにSRE NEXT 2020は2020/01/25開催ですが、もう一般チケットは全てSOLD OUTしてしまっています。

しかし非常にハイレベルはセッションばかりなので、参加できない方も後からスライドをチェックしたりしながら活用していただければと思います。 参加者の方はスタッフ一同、急ピッチで準備進めており、素晴らしいイベントにしますので当日はよろしくお願いいたします。

記事をたくさん書いた

数えたら、はてなブログ、Qiita、note、medium合わせて今年で54記事書いていました。Qiitaで何個かバズったりして、合計2000いいねを超えたりしました。

f:id:st5818129:20191231184833p:plain

一方、アウトプットが散らばってしまいとても見辛い状況になってしまったので、年末に自身のキャリアとアウトプットを集約したポートフォリオサイトを整備しました。

www.fukubaka0825.dev

来年も質を向上させながら継続していきます。

来年一年何をしていきたいか

業務

SRE/Platformerとしての経験を積みたい

現在はいちWeb Developerとしてアーリーな時期のプロダクトにSREの種を植えていっている(IaC,CDなど)状態ですが、片手間ではなく体系的にSREを学び実践していきたいと考えています。(弊社だとこれからUS展開などで開発の方により一層リソースを割かざるおえない)

というのも、もともとドラマーであることも起因しているのか、ビジネス成功可能性を最大化する基盤/開発者の生産性向上への興味関心が何よりも強く、DeveloperとしてというよりSREのスペシャリストとして勝負していきたい思いが強くなったからです。

ですので、グローバルサービスのSREを募集している企業様がありましたらぜひお声がけください。必死でキャッチアップし食らい付き、お役に立つ自信はあります。

プライベート

OSS活動を活発に

最近Goで一つツールを作ったり、terraform-aws-providerやtfnotifyなどへコントリビュートしたりしていますが、この流れをより加速させていきたいです。

qiita.com

qiita.com

具体的には、OSSへのコントリビュートは最低月1で、OSSツールは2ヶ月に一回作成し、50スター以上の皆に愛されるツールを最低1つ作ることを目標とします。

アウトプット改善

質を高める

社内ではreviewしたり壁打ちしたりしている立場ですが、正直自分のアウトプットに関して少し限界が見えているなと思っています。 ですので、この機会にカックさん(有名なブログメンター)のメンタリングを受けたりしながら一旦自分のスタイルを再構築したいと思っています。

英語のアウトプットを増やす

現状、英語用のtwitterアカウントも英語記事用のmediumもうまく活用できてるとは言えないので、これからmediumには最低月2回記事を載せ、twitterも日常の勉強内容をつぶやいていこうと思っています。

登壇を増やす

今年の登壇回数は二回と、お世辞にも多いとは言えませんでした。 記事を量産できたのはいい点ですが、アウトプットの場としてこちらの割合も上げていきたいです。(最低でも月一回LTする)

また、大型カンファレンス(Go Con,SRE Con,SRE NEXT)などのCFPにもプロポーザルをどんどん出していきたいです。国際的なカンファレンスでの登壇を目標に頑張ります。

CS (Computer Science)力の強化

文系卒developerあるあるですが、CSの素養がきちんとあるとは言えない状況です。 将来的にはCSの学位か博士を取っていきたいですが、当面はまずアルゴリズムとデータ構造は螺旋本、ネットワークに関してはネスぺを取得するなどなど書籍や資格勉強で補填していきながら、業務の中でブラッシュアップさせていきたいと思います。

最後に

Global ServiceのSREを募集している企業様、是非お話を聞かせていただきたいです。TwitterのDMからご連絡お待ちしております。