思想.md

はじめに

ただただ語りたい項目について思想を乗っけておく。

あくまで思想なので、とりとめも網羅性もないしAWSやGo偏中のバックグランドに偏ったWebの技術の話しかしないし、別にそれらに深い知見があるわけでもないのだが個人Blogだし主観で好きに喋る。

もちろん仕事との結論とは異なる。

クラウド

基本的にはAWSのほうが好み。

GCPには良い製品が何個かあるとは思っているのだが、エッジケースの解決をしようとしたときにそもそもいじれるような箇所が少ないのが気がかり。

とはいえAWSのなんでもかんでもLambdaで解決できますよ!みたいなのもどうなんだろうなーという気持ちもあるので一長一短。

とはいえ筆者の仕事に大まかなユースケースはAWSで実現できるし経験年数的にAWSが好みというぐらいの思想かもしれない。

コンテナオーケストレーション

基本的にはコンテナを実行できるクラウドのサーバーレス系が好み(Fargate,CloudRun, etc...)

クラウドネイティブ界隈ではk8s!ってなっているのはかなり懐疑的に感じている。

過去にEKSの運用経験/GKEの構築経験もあるがどうしてもk8sでないといけない要件には出会ったことなく、Nodeの管理とコントロールプレーンのアップデートをしないといけない点を相当ネガに感じている。

またk8sでプラットフォームエンジニアリング!開発組織の効率化!だのクラウドネイティブ!みたいな言論は好まず、効率化したいならテンプレ提供すればいいと思っている。

なのでプロダクトに対するメリデメで物事を考えたい。

で、特に要件がないのであれば運用が安い方を選ぶ。 インフラコストよりは人件費と人員確保のコストのほうが高いと思っているがまぁどこかに損益分岐ラインはあるので要はバランス。

それでもk8sじゃないと満たせない要件があるのであればk8sにTryするのが良いよなーと思っており、Autifyさんのこの事例にはかなり感動した。

https://speakerdeck.com/hgsgtk/srekaigi2025

じゃあPaaS使えばいいじゃん!っていう話もあるんだが正直ここに結論が出ていない。

過去のHerokuでRailsをデプロイしていた時代もあったし一周回ってそれで良いのではという気持ちも多々ある。 現代だとVercelがそれなのかも。

とはいえなんかあったとき柔軟で無難なのはAWS + Fargateなのかなーと思っている。

なにはともあれ捨てれるようなインフラになっていれば良いかなと思っている。

あとVM上でちゃんとコンテナオーケストレーションを運用したことはないので考慮からは除外されている。

サーバーサイドの言語

基本的にはGoが好み。

ちゃんとCSを履修していないので実務的なメリットで話す。

  • 後方互換性があるのでコードが腐りづらい
  • AOTなのでバッチも高速に動かせるし、デプロイの影響が少ない
  • コードがシンプルになりやすいので挙動が認知しやすい
  • 標準ライブラリが豊富
  • fmtが便利

とはいえそれぞれビジネス要件で実行速度が速い必要があるならRustに分があると思っているし、採用観点でTypeScript + Node.js or Ruby(Rails) or Kotlinなバックエンドもありだとは思う。

強いこだわりはなくそれぞれプロダクト/ビジネス要件を達成するかで考えればよいと思っており、至高の言語だの美しさだのの議論にはあまり興味がない。

CI/CD

Github ActionsでCIとCDを分けるのが好み。

境界としてはArtifact(Docker Image, Oci Image, ZIP) 等の配置までがCIの責務。

それを実際にユーザーが見えるように反映するための様々なタスク(DBのMigrationだったり、CloudFrontのキャッシュのInvalidationだったり)を実行して展開するのがCDの役割だと考えている。

そういう意味でアプリケーションのコードとCDが混ざっているような構成はあまり好きじゃない。

監視SaaS

Datadogが好み。

ログの検索が特に使いやすい感覚がある。

NewRelicはなんか好きになれなかった。

Grafana Stackは使ってたこともあったが、きちんと運用した実感もなくそれを運用するぐらいなら外部SaaSでお任せしたほうがビジネスに集中できると思っている。

手をかけて運用したらGrafana & Prometheusが好きになれる可能性はあるがおそらくそういう選択肢は取らない気がする。

IaC

Terraformが好み。

HCLが素朴で、formatが効くのと最悪なんかあったときに import / remove / movedがコードで表現しやすいのが嬉しい。

あとはマルチクラウド(というか任意のProviderだけど)に対応しているのもたまーに嬉しい。

AWSをメインで使っていてもちょっとGCPとか他のSaaSに出張したりすることがあり、そういうパターンでツールをまたがなくて良いので楽

CDKも思想としては嫌いじゃないのだが結局最終結果がCloudFormationなのが体験が悪いと思っており、Terraformのほうが取り回しが楽だと思っている。 CloudFormationによって更新も削除もできない経験があってそれがトラウマになっているだけという説もあるが素のCDKはそういう状況になりやすいなぁと思っている。 BLEAの2.0とかはまさにそういう感じだった。 3.0以降は違うのかも。

最近AWS CDK on PulumiがGAしたのでこちらの可能性はあるなと思っている。

結局CloudFormationが間に挟まっているのが辛い。

etc...