愛と幻想のアジャイル

道産子ソフトウェアエンジニアの技術メモ

Claude Codeのセッションにどんな名前をつけようか

これでセッションを名前変更して、後で簡単に見つけたり再開したりできるようになりました。

/rename と入力して、以前のセッションにカスタム名を付けてください。

/resume 画面にもキーボードショートカットを追加しました。セッションを名前変更するには「R」を、セッションをプレビューするには「P」を押してください。

会話セッションにどういう名前をつけようか。

大したことじゃないように見えて、それなりに大事だと思ってる。

xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com

個人的には適切な名前をつけることができた機能については、その設計の8割が完成したと考えても言い過ぎでないことが多いように思います。

名前の重要さは、プログラマのコーディングの文脈で語られることが多いけど、

あらゆることに言えると自分は考えている。

Googleスプレッドシートのシートの名前を「シート1」にするか「サマリ」にするかだけで大分違う。

セッション名は、日付を付与するのもいいアイデアだと思う。(ソースコードの末尾に日付を入れるのはおすすめできないが) AIエージェントの進化・変化は日進月歩なので、例えば3ヶ月前の履歴はまだ重要かわからないし、半年前の履歴はもう参考にならないだろう、といったコンテキストを日付に込めることができる。

Claude Codeは自動的にセッション名を付けてくれるが、適切な名前を任せすぎずに考えた方がいいと思う。

より良い名前を付けることが目的なだけではなく、名前を付けるという過程自体が、何よりその対象を深く理解する機会になるからだ。

マイクロサービス、結局どうすればいいの?を改めて整理

ここ10年くらい、マイクロサービスの話題が絶えなけど、「で、結局どうすればいいの?」と思ったので。

Martin Fowlerが「MonolithFirst」を公開したのが2015年。もう10年近く前の話なのに、未だに「うちもマイクロサービス化しました!」って記事を見ると、「チーム規模とか、本当に合ってるのかな?」って思うことがある。

martinfowler.com

情報が多すぎて、逆に何が正解/本質なのか見えにくくなってきてると思う。なので、一度整理してみる。

よく言われてる結論

小さいチームなら、まずモノリスで始めて、本当に困ってから分割を考える。

これ、Martin Fowlerも「新しいアプリケーションは最初はモノリスとして構築すべき」って紹介してるし、「モノリスからマイクロサービスへ」って本のタイトルにもなってる。

martinfowler.com

www.oreilly.co.jp

ただ、Stefan Tilkovみたいに「最初からマイクロサービスで始めるべき」って反論もあって、完全に一致してるわけじゃない。

martinfowler.com

なぜモノリスから始めるという意見があるのか

理由は、最初はドメインの境界が見えてないから。

マイクロサービスって、「どこで分割するか」が重要。でも、サービス作り始めた段階で、どこで切るべきかなんて分からないことが多い。分からないまま無理やり分割すると、サービスAがサービスBを呼び、サービスBがサービスCを呼ぶ、みたいな連鎖が起きて、1つの機能追加で3つのサービス修正とデプロイ調整が必要になる。

これ、「分散モノリス」って呼ばれてて、マイクロサービスの複雑性とモノリスの硬直性、両方の辛いとこを抱えることになりがち。

逆に、モノリスで運用してると、「ここ、よく一緒に変更するな」「ここは独立してるな」っていうのが見えてくる。その時に初めて、適切な分割の境界が分かる、という考え方。

DB共有してるパターンもある

もう一つ見かけるのが、サービスは分かれてるけどDBは共有してるパターン。

Microsoftのドキュメントでも「各サービスは独自のデータストア持て」って書いてあるんだけど、実際にはDB分けるとデータの整合性をどう保つか、っていう問題が出てくる。Sagaパターンとか分散トランザクションとか、考えること増えるので。

learn.microsoft.com

DB共有したままだと、「テーブルのスキーマ変えたら全サービス修正」みたいなことになって、独立性が薄れる。それなら最初からモノリスの方がシンプルだったかも、ってなることもある。

チーム規模との関係

Amazonの「ツーピザチーム」って、ピザ2枚で足りる人数(10人以下)が理想、みたいな話がある。

aws.amazon.com

これって、「そのくらいのチームが独立して動ける」っていう前提がある。少人数のチームで多数のマイクロサービスを持つと、運用の負荷が高くなることもある。

逆に、100人、200人のチームだったら話が変わってきて。全員が同じリポジトリ触ってたらコンフリクトも増えるし、そういう規模ではマイクロサービスの利点が活きてくるかもしれない。

モノリスに戻す選択肢もある

マイクロサービスからモノリスやモジュラーモノリスに戻した事例もある。Shopifyは「モジュラーモノリス」っていう、モノリスとマイクロサービスの中間的なアプローチを取ってる。

www.infoq.com

「自分たちの規模や状況に合わなかった」っていう判断。

改めて、どう考えればいいか

まとめると、こういう感じ。

小規模チーム(〜10人くらい)
モノリスで作って、モジュール構造は意識しておく。本当に困ったら分割を考える、っていう選択肢がいいかも。

中〜大規模チーム(数十人以上)
最初からマイクロサービスも選択肢に入る。ただしドメイン境界の見極めは重要。

DB共有してる場合
独立性が必要ないなら、モノリスに戻すことも検討する価値あり。

マイクロサービスでも何でも、流行ってるからって理由だとおかしくなりそう。 自分たちのチーム規模と解決したい問題から考えるのがよさそう。

でも、この当たり前を自分も忘れがちなので、改めて整理してみました。

参考

さくっとNode.js開発環境構築 (WSL2 + Docker-Compose + VSCode Remote - Containers)

先ほど、WSL2 + Docker + VSCode Remote - Containers でNode.js開発環境構築を行った。

さくっとWSL2 + Docker + VSCode Remote - Containers でNode.jsが動く開発環境を構築する(devcontainer.jsonは自動生成する) - 愛と幻想のアジャイル

しかし、コンテナ名が自動生成だったので、固定にしたいと思った。 その場合、Docker Compose を使えばコンテナ名を指定できたので、手順を記す。

なお、大まかな手順は上記記事と同様なので、差分のみ記す

続きを読む

さくっとWSL2 + Docker + VSCode Remote - Containers でNode.jsが動く開発環境を構築する(devcontainer.jsonは自動生成する)

以前、VSCode Remote -Containers を使ってDockerコンテナにアクセスする方法を記事に書いた。

takeken1.hatenablog.com

しかし上記記事ではdevcontainer.jsonを手書きする必要があった。

今回は、devcontainer.jsonを用意せず、Dockerfileのみ用意してコンテナにアクセスする方法を記載する。

続きを読む

VSCodeでESLint/Prettierを有効化する (eslint-config-prettierで連携(Prettier公式の推奨設定(2020.6.28時点)))

先日、Next.js の チュートリアルを行うために、環境構築を行った。

takeken1.hatenablog.com

次に、ESLintとPrettierを導入する。

続きを読む