副業×AWSでわりと人生変わったエンジニアの話 

# はじめに
何を書こうか迷ってたんですが、ちょうど副業始めて1年ほどたったので、どういうきっかけで始めたか、何をしてるのか、やってみたメリットなどを書いていこうと思います。
なぜ**副業×AWS**なのかというと、自分が副業をやっていく中で普段AWSに触れていることが強みになっていたので、単に副業だけじゃなく**AWS**も混ぜてみました。
これから副業を始めようと思っている人、特に本業で役割が変わってあまりコード書けなくなった人に参考になれば。

# 自己紹介
本業ではSREという部署でCloud Architecture Grpというチームを持っており、自社サービスである[COMPANY](https://www.works-hi.co.jp/products)のクラウドネイティブ化を推進しています。
主にクラウドプラットフォームとしてはAWSを利用しているため、日常的にAWSのサービスに触れる機会が多いです。
そんな本業の傍ら、3社で副業やってます。(20名規模ぐらいのベンチャー)
それぞれ

- 介護事業所向けSaaS
- 外食向けSaaS
- 会議改善SaaS

なので会社とは全く関係ない領域ですね笑
一応副業でもメインはAWS周りを触ってます。

以前会社でAWSの西谷さん([@keisuke69](https://twitter.com/keisuke69))とお話させていただく機会があり、そちらでも少し触れていたんですが、記事では結構省略されていたので、そちらをちょっと掘り下げて書こうと思っています。
話した内容はこちら([前編](https://note.com/works_hi/n/nbdcf04058c75), [後編](https://note.com/works_hi/n/n4e7db4a64bfa))で記事にまとめてもらってます。

# 副業を始めたきっかけ
一昨年ぐらいから転職の誘いをいくつかもらってました。(今でも継続して誘っていただいてありがとうございます)
その時は本業の方もわりと楽しく、やめる理由がなかったので、ありがたいと思いながらも断ってました。
(もともとアプリエンジニアで、ちょうどアプリ作りたいなーと思っていた時期だったので迷いましたが...)
そんな中、去年の11月に会社で副業が解禁されたことをきっかけに、当時転職誘ってもらってた会社から「副業ならいいですよー」と伝え、始めました。[^1]

[^1]: このあたり世間的にはランサーズとかクラウドワークスとか、あとはtwitterで直接やり取りとかがきっかけとして多いんですかね？

# 副業先では何やってるの？
メインは本業に近い内容で、AWS上の既存のアーキテクチャを[Well-Architected Framework](https://wa.aws.amazon.com/index.ja.html)にしたがって改善してます。
あとはアプリ側の不具合修正、機能追加などもやってます。
その他には新しいサービスを作るときのプロトタイプ作ってみたり、AWS上にサービスを作るときの相談を受けたりなどしてます。

ちょっと具体的に書くとこんなことやってました。

- サービスの耐障害性向上のための冗長化
- セキュリティ向上のための施策実施
- CI/CDフローの改善
- サービスの分割に伴うサービス間のWebAPI連携実装
- APMの導入[^2]

[^2]: 本業でAppDynamics, 副業でDatadog, NewRelicを触ってるので、それぞれの長所、短所が見れて楽しいです

本業の方ではあまりコーディングすることがなくなり、お金の計算、みんなの話を聞いたりするだけでエンジニアしてなかったので、すごい楽しくやってます。

# 週にどれぐらいやってるの？
だいたい週に20時間ぐらいですね。
1週間の働き方としては、平日の夜に合計10時間ぐらい、休日どちらかで10時間ぐらいというのが多いです。

# なんで3社もやってるの？
正直3社もやる予定はなかったです。
始めた当初は1社だけだったんですが、4月から在宅勤務になり毎日の通勤時間と飲みに行く時間がなくなって余裕が出てきたこともあって、2社目、3社目と副業を始めました。
どちらも元同僚に声をかけてもらったのがきっかけですが、提供しようとしてるサービスの中身を聞いてるうちに、どういう構成で動かしてるのか興味を持ったことが大きかったですね。

# 副業やってみて見えた各企業の特徴
実際3社もどうやってやってるの、と聞かれるのでちょっと理由的なものを書いてみました。
まず、3社の特徴として以下2つがあります。

## 1. 使っている基盤がほぼ同じ
- クラウド -> AWS
- サーバーサイド -> Ruby on Rails
- クライアントサイド -> React
- CI/CD -> CircleCIでテストはRspec、DeployはCapistrano[^3]実行

## 2. 企業としてのフェーズが近い
どこもアーリーステージで、以下の問題に直面している印象でした。

- 実際にお客様が使い始めて耐障害性、セキュリティを高めていく必要がでてきた
- 運用、監視周りを整える必要がでてきた
- 開発者が増えてきて開発環境を簡単に整えられる必要がでてきた
- 不具合修正を高頻度で適用する必要がでてきた
- 複数の検証環境が必要になってきた

最初はまったく領域の違うSaaSだし違う会社なので別物と考えてましたが、**使っている基盤**も**会社としてのフェーズ**も似通っていたので、だいたいどの会社も同じ問題を抱えていました。
それらの問題を解決するために1社でやったことが他の会社でも流用できるため、自分の中でテンプレートとして落とし込むことで時間短縮をしました。
テンプレートはInfrastrcture as Code的な意味もありますが、現状把握と今後どうするかという話をする上でのテンプレートも用意してました。
ざっと書くと以下のようなことを各社でやってました。

1. AWSのIAMを払い出してもらい、現状のサービスの構成図を作成
2. 現状の構成の問題点を洗い出し
3. サービスの特性上、どういう要件が求められるか洗い出し
4. 2,3を満たす構成図とCI/CDフローの作成
5. 4を達成するためのプランを作成
6. プラン実行

[^3]: Capistranoって初期的には便利かもしれないですが、やってることはEC2インスタンスにssh接続してgit cloneしてbundle installとかしてるので、本番で冗長化して動かすこと考えると大変ですよね...

# ベンチャー3社で副業して見えたメリット
## 1. 副業⇔本業、副業⇔副業でフィードバックループが回せる
製品の規模と会社のフェーズが違うので、それぞれの強みをいかすことができます。

- **副業 to 本業**
  - 本業ですぐに使えない新しい技術の検証結果の共有
- **本業 to 副業**  
  - セキュリティや耐障害性、パフォーマンスなど、観点の共有
- **副業 to 副業**
  - 同じような問題の解決方法の共有

単に一方向への知見の使いまわしや共有ではなく、他の会社に適用してみたときに強いところがわかったり、足りないところを補強していったりできるところがいいですね。

## 2. 自分で手を動かす機会が増える
本業だと役割が変わって自分が手を動かす機会が減ったので、アウトプットする場として副業があるのはありがたいです。
こういうのって自分一人だとわりとできなかったりしますし...

## 3. 転職せずに他のサービスの裏側や特性を見れる
これは自分がやってる副業先のサービスがばらばらというのもありますが、サービスごとに特徴があって面白いです。
例えば、会議改善サービスであれば議事録を書く際の共同編集機能、外食向けであればPOSレジからFTPでファイルを転送して処理する機能、介護事業所向けサービスであれば文字の視認性に対するこだわりなど、本業だけではわからないような世界が見れます。

#### 4. あと、さすがにめっちゃお金もらえます...
(これは書けないので直接聞いてください笑)

# デメリット
正直ないです。
ただ、休日が副業でほぼ埋まるため、それが嫌な人はデメリットかもしれないです。
自分は楽しくやってるので、あまりその辺は気にしてないです。
**が、最近それが原因で彼女と別れました...**
まあ人生変わったのは主にここですね。
とりあえず最近書かれた[こちらの記事](https://qiita.com/Let_kdm_free/items/7287325f4a3541e4551e)を参考に彼女見つけたいですね。(あ、でも今日もうクリスマスイブか...)

# おわりに
副業やろうか迷っている方がいれば間違いなくやった方がいいです！
あと、まだAWSを触っていないアプリエンジニアの方がいれば触ってみてください！
自分自身もともとインフラに全く興味なかったですが、エンジニアとしての幅が広がったと思います。