テストが楽しくなる!関数型アーキテクチャで実現する「美しく強い」設計術
詳細情報
| 日時 | 2026年05月18日 22:30 - 22:45 |
|---|---|
| テーマ | テストの成否はアーキテクチャで決まる ——「後付け」テスト計画からの脱却 |
| 発表者 | Kagu3さん |
| 集会名 | SW_Arch ソフトウェアアーキテクチャ集会 |
| 発表資料 | ファイル |
2026年5月18日、VRChatの技術者コミュニティが熱く盛り上がる「SW_Arch ソフトウェアアーキテクチャ集会」が開催されました!
今回の注目は、Kagu3さんによる「テストの成否はアーキテクチャで決まる」というワクワクする発表です。
「テストコードを書くのが大変……」という悩みを、設計の工夫で魔法のように解決してしまう素敵なアイデアを皆さんに共有しますね!
複雑なコードを解きほぐす設計の魔法
皆さんは、後からテストを書こうとして「どこから手をつければいいのか分からない!」と頭を抱えたことはありませんか?
Kagu3さんは、テストがしにくい「ひどいコード」には共通の特徴があると言います。
例えば、関数の外にある変数を勝手に書き換えたり、計算の途中でいきなりデータベースにアクセスしたりするコードです。
これでは、まるで料理の途中で勝手に冷蔵庫の中身が変わってしまうようなもので、何が起きるか予測できません。
さらに、深いネストや複雑な条件分岐が絡み合うと、もうお手上げですよね。
こうした問題を解決するために、Kagu3さんが提案してくれたのが「関数型アーキテクチャ」という考え方です。
これは、プログラムを「計算」と「行動」にきっちり分けることで、誰でも中身を理解しやすく、テストもしやすくする魔法のような設計術なんです!
「純粋な計算」と「外の世界への行動」を分ける
この設計の核心は、関数を「純粋関数」と「副作用のある関数」の2種類に分けることにあります。
純粋関数とは、例えるなら「完璧なレシピ」のようなものです。
同じ材料(入力)を渡せば、誰がいつ作っても必ず同じ味(出力)になります。
外の状態に左右されないので、テストも驚くほど簡単になるんですよ!
一方で、副作用のある関数は「実際に買い物に行く」ような行動を指します。
データベースの読み書きやAPI通信など、外の世界とやり取りする部分ですね。
Kagu3さんは、この「行動」の部分には複雑なロジックを持たせないことが大切だと教えてくれました。
「計算」は純粋な世界で行い、「行動」はそれを呼び出すだけにする。
この役割分担こそが、美しくテストしやすいコードへの第一歩なのです。
どこまでを「複雑」と考える?
でも、具体的にどこからを切り分ければいいのか迷ってしまいますよね。
Kagu3さんは、初心者にも分かりやすい「ブラックリスト方式」という基準を教えてくれました。
例えば、for文の中にif文が入っているような、深さ2以上のネスト。
あるいは、金額や税率の計算といった、ビジネス上の大切なルール。
これらが1つでも含まれていたら、それは「純粋関数」として外に切り出すサインです!
逆に、データの単純な受け渡しや、エラーが起きた時の処理などは、副作用のある関数の中に残しておいても大丈夫。
このように明確なルールを決めておけば、チームみんなで迷わずに「良いコード」を目指せますね。
「複雑なことは純粋な場所で、外とのやり取りは単純な場所で」という合言葉を覚えておきましょう!
フロントエンドの世界でも活きる知恵
この素晴らしい考え方は、バックエンドだけでなくReactなどのフロントエンド開発にも応用できるそうです!
Kagu3さんは、Reactのコンポーネントを「見た目を作る純粋関数」として捉える方法を紹介してくれました。
ボタンやカードといった部品は、渡されたデータ(props)を表示するだけの純粋な存在にします。
そうすることで、Storybookなどのツールを使って、見た目のチェックが驚くほどスムーズになります。
データの取得や通信といった「副作用」は、カスタムフックという専用の場所に閉じ込めてしまいます。
こうして役割を分けることで、画面の表示が崩れる心配をせずに、ロジックの修正ができるようになるんです。
バックエンドもフロントエンドも、根底にある「整理整頓」の精神は同じなんですね!
未来の自分へのプレゼント
テストを「後から付け足す面倒な作業」にするのではなく、最初から「テストしやすい形」で設計する。
これは、未来の自分や一緒に働く仲間への、最高のプレゼントになります。
Kagu3さんの発表を聞いて、アーキテクチャを考えることが、パズルを解くような楽しいチャレンジに感じられました!
皆さんも、今日から自分のコードの中に「純粋な計算」を見つけて、切り出してみませんか?
きっと、今までよりもずっとプログラミングが楽しく、軽やかになるはずです。
技術コミュニティの知恵を借りて、みんなでより良いソフトウェアを作っていきましょう!