<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>UseCase on 設計で、迷わなくなるために | 奥田智紘</title><link>https://design.okuda-studio.com/tags/usecase/</link><description>Recent content in UseCase on 設計で、迷わなくなるために | 奥田智紘</description><generator>Hugo -- 0.159.2</generator><language>ja</language><lastBuildDate>Wed, 11 Feb 2026 11:50:00 +0900</lastBuildDate><atom:link href="https://design.okuda-studio.com/tags/usecase/index.xml" rel="self" type="application/rss+xml"/><item><title>「サービスクラス」とは何か？</title><link>https://design.okuda-studio.com/posts/0009-what-is-service-class/</link><pubDate>Wed, 11 Feb 2026 11:50:00 +0900</pubDate><guid>https://design.okuda-studio.com/posts/0009-what-is-service-class/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B"&gt;「サービスクラス」とは何か？&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A8%E3%81%84%E3%81%86%E8%A8%80%E8%91%89%E3%81%AE%E8%AA%9E%E6%BA%90%E3%81%A8%E5%9F%BA%E6%9C%AC%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%B3%E3%82%B9"&gt;「サービス」という言葉の語源と基本ニュアンス&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web--%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%81%A7%E3%81%AE-service-%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E8%B5%B7%E6%BA%90"&gt;Web / サーバーサイドでの Service クラスの起源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8C%E5%95%8F%E9%A1%8C%E8%A6%96%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%8B"&gt;なぜ「サービスクラス」が問題視されるようになったのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ddd-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bservice%E3%81%A8%E3%81%AE%E5%88%86%E5%B2%90"&gt;DDD における「Service」との分岐&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%81%AF%E4%BD%95%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E3%82%A2%E3%83%B3%E3%83%81%E3%83%86%E3%83%BC%E3%82%BC%E3%81%AA%E3%81%AE%E3%81%8B"&gt;UseCase は何に対するアンチテーゼなのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#web-%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%8C%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A8%E8%A8%80%E3%81%86%E3%81%A8%E3%81%8D%E3%81%AE%E6%84%8F%E5%91%B3"&gt;Web エンジニアが「サービスクラス」と言うときの意味&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#1-%E4%B8%AD%E7%AB%8B%E7%9A%84%E3%81%AA%E6%84%8F%E5%91%B3"&gt;1. 中立的な意味&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-%E5%90%A6%E5%AE%9A%E7%9A%84%E3%81%AA%E6%84%8F%E5%91%B3%E8%A8%AD%E8%A8%88%E8%AD%B0%E8%AB%96"&gt;2. 否定的な意味（設計議論）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%BE%E3%81%A8%E3%82%81"&gt;まとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="サービスクラスとは何か"&gt;「サービスクラス」とは何か？&lt;/h1&gt;
&lt;p&gt;──語源・ニュアンス・UseCaseとの違いを整理する&lt;/p&gt;
&lt;p&gt;設計の議論をしていると、「それ、サービスクラスじゃない？」という言葉が出てくることがある。
一方で、Web エンジニアの中には「Service クラス」は普通に使う用語だ、という人も多い。&lt;/p&gt;
&lt;p&gt;この「サービスクラス」という言葉は、&lt;strong&gt;厳密な定義がなく、文脈によって意味が変わる&lt;/strong&gt;ため、混乱を生みやすい。
この記事では、語源と歴史をたどりながら、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;なぜ「サービス」と呼ばれるのか&lt;/li&gt;
&lt;li&gt;Web ではどのように使われてきたのか&lt;/li&gt;
&lt;li&gt;なぜ設計議論では否定的に使われることがあるのか&lt;/li&gt;
&lt;li&gt;UseCase と何が違うのか&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を整理する。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="サービスという言葉の語源と基本ニュアンス"&gt;「サービス」という言葉の語源と基本ニュアンス&lt;/h2&gt;
&lt;p&gt;英語の &lt;em&gt;service&lt;/em&gt; は、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;奉仕&lt;/li&gt;
&lt;li&gt;提供&lt;/li&gt;
&lt;li&gt;役務&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といった意味を持つ。&lt;/p&gt;
&lt;p&gt;ソフトウェア設計においては、そこから転じて、&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;「他のオブジェクトのために処理を提供するもの」&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;という、かなり広い意味で使われるようになった。&lt;/p&gt;
&lt;p&gt;この時点では、「サービス」はあくまで
&lt;strong&gt;役割を説明するための便利な言葉&lt;/strong&gt;であり、設計上の厳密な概念ではない。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="web--サーバーサイドでの-service-クラスの起源"&gt;Web / サーバーサイドでの Service クラスの起源&lt;/h2&gt;
&lt;p&gt;「サービスクラス」という言葉が広く使われるようになったのは、
Java EE や Spring に代表される &lt;strong&gt;レイヤードアーキテクチャ&lt;/strong&gt;の文脈である。&lt;/p&gt;
&lt;p&gt;典型的な構成は以下のようなものだ。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Controller
↓
Service
↓
Repository (DAO)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ここでの Service クラスは、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Controller から呼ばれる&lt;/li&gt;
&lt;li&gt;複数の Repository を組み合わせる&lt;/li&gt;
&lt;li&gt;トランザクション境界になる&lt;/li&gt;
&lt;li&gt;業務ロジックを書く場所&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という役割を担っていた。&lt;/p&gt;</description></item><item><title>ViewModel が肥大化する理由</title><link>https://design.okuda-studio.com/posts/0008-cause-of-fat-viewmodels/</link><pubDate>Mon, 09 Feb 2026 11:35:00 +0900</pubDate><guid>https://design.okuda-studio.com/posts/0008-cause-of-fat-viewmodels/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#viewmodel-%E3%81%8C%E8%82%A5%E5%A4%A7%E5%8C%96%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1"&gt;ViewModel が肥大化する理由&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E8%AA%A4%E8%A7%A3viewmodel-%E3%81%AF%E4%B8%AD%E7%B6%99%E5%BD%B9%E3%81%A0%E3%81%8B%E3%82%89%E9%87%8D%E3%81%8F%E3%81%AA%E3%82%8B"&gt;よくある誤解：ViewModel は「中継役」だから重くなる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#viewmodel-%E3%81%8C%E8%82%A5%E5%A4%A7%E5%8C%96%E3%81%99%E3%82%8B%E6%9C%AC%E5%BD%93%E3%81%AE%E7%90%86%E7%94%B1"&gt;ViewModel が肥大化する本当の理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#ui-%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%A8%E6%A5%AD%E5%8B%99%E3%81%AE%E5%88%A4%E6%96%AD%E3%81%AF%E5%88%A5%E7%89%A9"&gt;「UI の判断」と「業務の判断」は別物&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%81%8C%E7%99%BB%E5%A0%B4%E3%81%99%E3%82%8B%E7%90%86%E7%94%B1"&gt;UseCase が登場する理由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#viewmodel-%E3%81%A8-usecase-%E3%81%AE%E5%A2%83%E7%95%8C%E7%B7%9A"&gt;ViewModel と UseCase の境界線&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#viewmodel-%E3%81%8B%E3%82%89%E5%87%A6%E7%90%86%E3%81%8C%E3%81%BB%E3%81%A8%E3%82%93%E3%81%A9%E6%B6%88%E3%81%88%E3%81%9D%E3%81%86%E5%95%8F%E9%A1%8C"&gt;「ViewModel から処理がほとんど消えそう」問題&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%BE%E3%81%A8%E3%82%81"&gt;まとめ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="viewmodel-が肥大化する理由"&gt;ViewModel が肥大化する理由&lt;/h1&gt;
&lt;p&gt;Android アプリを作っていると、ある日ふと気づきます。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ViewModel、でかくなりすぎじゃない？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;State の定義、Flow の合成、エラーハンドリング、変換ロジック、画面固有の分岐……。
気づけば 1 ファイルに数百行。しかも「どこを直すと何が壊れるのか分からない」状態。&lt;/p&gt;
&lt;p&gt;この記事では、&lt;strong&gt;なぜ ViewModel は肥大化しやすいのか&lt;/strong&gt;、そして &lt;strong&gt;それを防ぐための本質的な境界の引き方&lt;/strong&gt; について整理します。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="よくある誤解viewmodel-は中継役だから重くなる"&gt;よくある誤解：ViewModel は「中継役」だから重くなる&lt;/h2&gt;
&lt;p&gt;よく言われる説明に、こんなものがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ViewModel は UI と Domain の橋渡しだから&lt;/li&gt;
&lt;li&gt;Flow や State を扱うから&lt;/li&gt;
&lt;li&gt;非同期処理が集まりやすいから&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;どれも一理ありますが、&lt;strong&gt;本当の理由ではありません&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Flow があるから肥大化するのではなく、
ViewModel が &lt;em&gt;本来持つべきでない判断&lt;/em&gt; を持ち始めたときに肥大化します。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="viewmodel-が肥大化する本当の理由"&gt;ViewModel が肥大化する本当の理由&lt;/h2&gt;
&lt;p&gt;結論から言うと理由はシンプルです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;「何をするか」を ViewModel が決め始めるから&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本来の ViewModel の役割は、次の 2 つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UI からのイベントを受け取る&lt;/li&gt;
&lt;li&gt;UI が描画しやすい State に変換して公開する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ところが実際には、次のような責務が入り込みがちです。&lt;/p&gt;</description></item><item><title>Domain と UseCase の違いを整理してみる</title><link>https://design.okuda-studio.com/posts/0007-domain-vs-usecase/</link><pubDate>Mon, 09 Feb 2026 11:00:00 +0900</pubDate><guid>https://design.okuda-studio.com/posts/0007-domain-vs-usecase/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%A8-usecase-%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E6%95%B4%E7%90%86%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B"&gt;Domain と UseCase の違いを整理してみる&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E4%B8%80%E8%A8%80%E3%81%A7%E8%A8%80%E3%81%86%E3%81%A8%E4%BD%95%E3%81%8C%E9%81%95%E3%81%86%E3%81%AE%E3%81%8B"&gt;一言で言うと何が違うのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B"&gt;Domain とは何か&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%AF%E6%84%8F%E5%91%B3%E3%81%A8%E3%83%AB%E3%83%BC%E3%83%AB%E3%81%AE%E9%9B%86%E5%90%88%E4%BD%93"&gt;Domain は「意味」と「ルール」の集合体&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%AE%E4%BE%8B"&gt;Domain の例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%8C%E3%82%84%E3%82%89%E3%81%AA%E3%81%84%E3%81%93%E3%81%A8"&gt;Domain がやらないこと&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B"&gt;UseCase とは何か&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%81%AF%E5%8B%95%E8%A9%9E%E3%81%AE%E5%B1%A4"&gt;UseCase は「動詞の層」&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%81%AE%E4%BE%8B"&gt;UseCase の例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%A8-usecase-%E3%81%AE%E9%96%A2%E4%BF%82"&gt;Domain と UseCase の関係&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%AA%E3%81%9C-usecase-%E3%81%8C%E5%88%86%E3%81%8B%E3%82%8A%E3%81%AB%E3%81%8F%E3%81%84%E3%81%AE%E3%81%8B"&gt;なぜ UseCase が分かりにくいのか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#usecase-%E3%82%92%E4%BD%9C%E3%82%8B%E3%81%B9%E3%81%8D%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0"&gt;UseCase を作るべきタイミング&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#entity--domain-%E5%A4%89%E6%8F%9B%E3%81%AF%E3%81%A9%E3%81%93%E3%81%A7%E3%82%84%E3%82%8B%E3%81%B9%E3%81%8D%E3%81%8B"&gt;Entity → Domain 変換はどこでやるべきか&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#domain-%E3%81%A8-usecase-%E3%82%92%E5%88%86%E3%81%91%E3%82%8B%E6%9C%80%E5%A4%A7%E3%81%AE%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88"&gt;Domain と UseCase を分ける最大のポイント&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%82%88%E3%81%8F%E3%81%82%E3%82%8B%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3"&gt;よくあるアンチパターン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB"&gt;おわりに&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="domain-と-usecase-の違いを整理してみる"&gt;Domain と UseCase の違いを整理してみる&lt;/h1&gt;
&lt;p&gt;Clean Architecture や DDD を学んでいると、ほぼ確実に次の疑問にぶつかります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Domain と UseCase の違いがよく分からない&lt;/li&gt;
&lt;li&gt;どこまでが Domain で、どこからが UseCase なのか曖昧&lt;/li&gt;
&lt;li&gt;UseCase を作ろうとすると、何を書けばいいのか分からない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;私自身、このあたりで何度も立ち止まりました。
この記事では、実装経験を通して整理できた &lt;strong&gt;Domain と UseCase の違い&lt;/strong&gt; を、自分なりの言葉でまとめてみます。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一言で言うと何が違うのか"&gt;一言で言うと何が違うのか&lt;/h2&gt;
&lt;p&gt;まず、かなり大胆に要約します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Domain&lt;/strong&gt;
→「この世界では、何が正しく、何が成り立つか」を表す&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UseCase&lt;/strong&gt;
→「その正しさを、どういう手順・文脈で使うか」を表す&lt;/p&gt;</description></item></channel></rss>