📝 この記事のポイント
- 「また設計がぐちゃぐちゃだ…」PRレビューで3回目の指摘。
- この言葉を聞いた時、正直言って胸が締め付けられるようだった。
- ビジネスロジックはコントローラーに散らばり放題、データベースのクエリがドメイン層に顔を出している。
「また設計がぐちゃぐちゃだ…」PRレビューで3回目の指摘。この言葉を聞いた時、正直言って胸が締め付けられるようだった。ビジネスロジックはコントローラーに散らばり放題、データベースのクエリがドメイン層に顔を出している。テストは書けたものの、ちょっとした変更ですぐに壊れる。リファクタリングに27時間も費やしたのに、結局元のコードより複雑になってしまった時は、もうエンジニアをやめようかとすら考えたんだ。
クリーンアーキテクチャの記事を50本読み漁り、Qiitaの実装例は15パターンも試した。Twitterでベストプラクティスを毎日2時間追いかけても、いざ自分の手で実装するとなると、「これで合ってるのか?」という不安がどうしても消えない。7ヶ月間、ずっと正解が分からないまま手探りでコードを書き続けてきた。Go言語で美しい設計をしたいのに、どう書けばいいか途方に暮れている人には、僕のこの苦悩、きっと理解してもらえると思う。今日は、僕がその地獄からどうやって這い上がったのか、その経験を共有したい。
最初の印象
ある日、いつものようにネット記事を漁っていたら、偶然「これだ!」と思える情報にたどり着いたんだ。今までも色々な解説書やチュートリアルを見てきたけど、どこか断片的で、全体像が見えなかった。理論は頭に入っているつもりでも、いざGo言語でコードを書こうとすると、手が止まる。同心円の図は暗記してるけど、「じゃあこのユースケース、どう書けばいいの?」ってなると途端にフリーズする。結局、6ヶ月かけて作った3つのAPIは、どれも設計思想がバラバラで統一性がなかった。
ドメイン層、アプリケーション層、インフラ層…言葉は知ってる。でも、実際にコードを書く時、「このロジック、どこに書くべき?」で毎回30分は悩むんだ。結果、全部ユースケース層に詰め込んで、1ファイル800行のFat Usecaseが完成。トランザクション制御も、バリデーションも、すべてがそこ。4ヶ月かけて作ったAPIは、誰もメンテナンスできない負債と化していた。
Go言語での実装例の少なさも悩みの種だった。PythonやJavaの例はたくさんあるのに、Go言語だと途端に数が減る。あったとしても、interfaceの切り方、依存性注入の方法、エラーハンドリング…書き方がバラバラで、Go言語らしい書き方とクリーンアーキテクチャをどう融合させればいいのか、5ヶ月間ずっと試行錯誤の繰り返しだった。
でも、その時見つけた「とある教材」は、今までとは一線を画していた。まるで、自分の抱えていた全ての疑問にストレートに答えてくれるかのような構成。理論だけじゃなく、Go言語でどう実装するかの具体的なコード例が豊富に示されていて、一瞬で「これなら、僕でもいけるかもしれない」と希望が見えたんだ。
実際に使ってみて
正直、最初は半信半疑だった。これまでにも「これが決定版だ!」と思って飛びついた情報源は数知れないからね。でも、この教材は違った。手を動かしながら読み進めていくうちに、今まで点と点だった知識が、線としてつながっていく感覚があったんだ。
特に印象的だったのは、Go言語のinterfaceの概念が、クリーンアーキテクチャの依存性逆転原則とどう結びつくのか、まるで目から鱗が落ちるように理解できたこと。それまでは、「とりあえずinterfaceを切っておけばいいんでしょ?」くらいの表面的な理解だったのが、各レイヤーの責務を明確にし、疎結合にするための強力なツールとして認識が変わったんだ。
あと、実際のプロジェクトでよくある、例えばトランザクション管理やバリデーションのロジックが、どのレイヤーで、どういう形で実装されるべきか、具体的なコードで示されていたのは本当に助かった。Fat Usecase問題も、これを使えば解決できると確信したよ。
良かったところ
- 理論と実装のギャップが埋まった
「The Clean Architecture」をいくら読んでも、Go言語でどう書くかまでは分からなかった。でもこの教材は、抽象的な概念を具体的なコードに落とし込むプロセスを、段階を踏んで教えてくれた。おかげで、「ああ、ユースケースってこういうふうに実装するのか」と、やっと腹落ちしたんだ。
- レイヤーの責務が明確になった
今まで、どこに何を書いていいか分からず悩んでいたのが嘘のようだった。ドメイン層、アプリケーション層、インフラ層それぞれの役割と、そこで何ができて何をしてはいけないのか、コードレベルで理解できた。結果、あんなに悩んでいたFat Usecaseは影を潜め、適切な場所に適切なロジックが配置されるようになったよ。
- Go言語特有の実装パターンが学べた
Go言語でのinterfaceの切り方、依存性注入の方法、エラーハンドリングのベストプラクティスが、クリーンアーキテクチャの文脈で網羅的に解説されていた。まさに「Go言語らしい」クリーンアーキテクチャの書き方が身についたことで、プロジェクト全体のコードに統一感が生まれたんだ。
気になったところ
- 初期学習コストが少し高いかも
これまでの僕みたいに、設計で悩み続けてきた人にとってはまさに救世主のような内容なんだけど、クリーンアーキテクチャの概念自体が初めての人にとっては、少し情報量が多くて最初は戸惑うかもしれない。でも、その分、一度理解してしまえば揺るぎない知識になるのは間違いない。
- 実践的な応用力は求められる
この教材は汎用的な設計思想と実装パターンを教えてくれるから、特定のフレームワークやライブラリにべったり依存しているわけじゃない。だから、学んだことを自分のプロジェクトに合わせてどう応用するか、多少の思考力は必要になる。でも、それが本当の設計力を養うことにつながるんだと思う。
どんな人に向いてる?
僕と同じように、Go言語でクリーンアーキテクチャを導入したいけど、なかなかうまくいかないと悩んでいる人にはぜひ試してほしい。
具体的には、こんな人には特におすすめだよ。
- クリーンアーキテクチャの理論は知っているけど、Go言語での具体的な実装に困っている。
- レイヤーの責務が曖昧で、いつも「このロジックどこに書くべき?」と悩んでいる。
- Go言語のinterfaceや依存性注入を、もっと効果的に使いたいと考えている。
- 表面的なディレクトリ構造の真似事ではなく、本質的な設計力を身につけたい。
- プロジェクトの技術的負債が増えることに危機感を感じている。
使い続けて12週間の今
あの教材に出会ってから、もう12週間が経つ。今では、新しいAPIエンドポイントを作る時も、以前のような不安はほとんどない。どこに何をどう書くべきか、確信を持ってコードを書き進められるようになったんだ。
以前は3週間かかっていたAPIエンドポイントが、今では1週間もかからずに実装できるようになったし、テストもきちんと設計されているから、変更に強いコードが書けている。PRレビューで設計に関する指摘を受けることも格段に減ったよ。
何より、一番の変化は「設計が楽しい」と思えるようになったことだね。コードを書くこと自体はもちろん好きだけど、これまでは常に不安がつきまとっていた。それが今では、新しい機能を追加するたびに、きれいに組み上がるパズルのピースのように、設計の面白さを実感している。
まとめ
Go言語でクリーンアーキテクチャを理解できず、悶々としていた7ヶ月間。あの時の僕は、まさかこんなに晴れやかな気持ちでコードを書ける日が来るとは思ってもいなかった。
もし今、君が過去の僕と同じように、Go言語の設計で頭を抱えているなら、安心してほしい。断片的な知識を継ぎ接ぎするのではなく、体系的なアプローチで学ぶことで、きっと道は開けるはずだ。僕がそうだったように、確信を持って設計できる未来が、君にも訪れることを心から願っているよ。
📚 あわせて読みたい
続きをみる
「また設計がぐちゃぐちゃだ...」Go言語でクリーンアーキテクチャが分からず7ヶ月悩んだ私が、『Go言語で構築するクリーンアーキテクチャ設計』で確信を持って設計できるようになった話
「また設計がぐちゃぐちゃだ...」PRレビューで3回目の指摘。「このコード、どこに書くべきか分かってる?」先輩の言葉が胸に刺さります。ビジネスロジックがコントローラーに散らばり、データベースのクエリがドメイン層に混ざり、テストは書けたものの変更のたびに壊れる。リファクタリングに27時間かけたのに、結...
note(ノート)


コメント