こちらは「コドモンAdvent Calendar 2023」の10日目の記事です🌱 qiita.com こんにちは! プロダクト開発部でエンジニアをしている23新卒の藤村です🏐
新卒研修のアウトプットも兼ねて取り組んでいる個人開発について、特に学びの大きかったインフラまわりに焦点を当ててお話しします!
開発の狙い
研修のアウトプットをする狙いの他に、バックエンドを自分で作ることを経験する狙いがあります。 これまでの個人開発では、バックエンドをすべてFirebaseに任せていたので未知の世界でした。
また、個人のプロダクトを育てることで
- ユーザーが何を求めているか悩んだり
- システムを止めずに負債を解消する方法を考えたり
- 負債を潰したいけどこの機能早く出さないと使いづらいんだよな〜と優先順位に迷ったり
仕事でぶつかる壁を幅広く自分ごととして経験できるのでは? という野望も抱いています🔥
どんなアプリか?
会社に何の本があるのか把握できるようにするアプリです。 会社の書籍購入補助の制度を使って本を買おうと思ったときに、それが既に会社にあるものなら買わずに済むということで、要望が多いテーマでした。
目的の本が今借りられる状態かわかる世界を目指すため、下記二つのデータが必要になります。
- 本のマスタを持つこと
- 貸出状況を把握すること
そのため、それぞれ本の管理コンソールと貸出申請フォームを用意してこれらのデータを集め、目的の本が今借りられる状態かわかる世界を目指します🚀
インフラを整備した話
サーバー上にアプリケーションを公開することが初めてだったので、新しい学びがたくさんありました。
今回は三つピックアップして紹介します。
サーバーとDNS
料金面でとっても安心できるレンタルサーバーを借りました。
sshでサーバーに入りDockerとDocker Composeのインストール、レポジトリのクローンをしてアプリを立ち上げると、IPアドレスを使ってサイトにアクセスできるようになりました! 🎉
また、ドメインを借りてDNSレコードの設定をしました。IPアドレスを登録しながら、名前解決ってそういう感じなんだ! と腹落ちできていい経験でした。
一つのサーバーで複数アプリケーションを動かす
今回のアプリは一つのサーバーでバックエンドのアプリケーションとフロントエンドのアプリケーションを動かすモノリス構成になっており、それぞれDockerコンテナを立てています。
ここで、サーバーが一つなので443番ポートを割り当てられるサービスが一つしかなく、複数アプリケーションを公開する方法がわかりませんでした。
この問題はどんなワードで調べるといいのか? というところから難しかったのですが、ChatGPTに壁打ちしてそれらしいワードを探したり、良さそうな方法をプロトタイプ的に試したりといった調査の末、リバースプロキシが解決策になりそうだと考えました。
最終的にはリバースプロキシに来たリクエストをURIごとにそれぞれのコンテナに振り分けられるようになり、問題を解決することができました。 また、結果的にこの方法にはリバースプロキシ一つをSSL化することで各サービスへhttpsでのアクセスができるようになる良さもありました。
ボタン操作でデプロイできるように!
開発を進めるうち、デプロイ操作に手を止められることに課題を感じるようになりました。
そこでGitHub Actionsのself-hosted runnerにサーバーを登録し、pullとimageのビルド、コンテナの立ち上げまで行うワークフローを作ることでGitHub上からボタン一つでデプロイ操作を実行できるようにしました。
デプロイのために毎回サーバーにsshで接続していた頃と比べると、とても楽になったのを感じます!
CI/CDが開発に集中できる環境を作ると聞いていたけれど、実際にこれだけ違うのか! ということを肌で感じました🚀
まとめ
サーバーを借りてアプリケーションを公開するところまでを一通り自分でやってみることで、知識として知っていても具体的なイメージを掴めていなかったことや、存在を知りもしなかった課題に出会い、それらすべてに自分で対応するという経験ができました。
今回記事を書いてふりかえる中で、自分のプロダクトを育てることで得られるものは多いんじゃないかな? と改めて思えたので、それをモチベーションにして今後も開発を続けようと思います!
先の話になりそうですが、さらなる野望としてモノリスからマイクロサービスへの切り出しにも挑戦したいなと思っています。 この規模でマイクロサービス化はむしろよくなかった! となるかもしれませんが、それも含めてとにかく実際に経験してみようと思います😊