本文へ移動
cccskills
無料GitHub で公開

functional-core-style

コードを実装・修正・リファクタリングするすべてのタスクで使うスキル。純粋関数を中心に設計し、副作用(DB、HTTP、ファイル、時刻、乱数、ログなど)を境界へ寄せ、データ変換、エラー表現、コレクション操作、可変状態の扱いを既存コードに合う形で整理する。ユーザーが明示的に指示しなくても、言語を問わず、コードを書き始める前に発火する。

設定値やドキュメントだけの変更では不要。

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

関数型コアスタイル

基本方針

実装では、可能な限り純粋関数を中心に設計する。

同じ入力に対して同じ出力を返せる処理は、DB、HTTP、ファイル、時刻、乱数、環境変数、ログ、spawn などの副作用から分離する。副作用は、外部入出力を扱う境界や、処理の順序を組み立てる層へ寄せる。

ただし、関数型風に書くこと自体を目的にしない。近くのコードより読みにくくなる chain や、意図を追いにくくする抽象化は避ける。

実装時の判断

  • データ変換は、可能なら純粋関数として切り出す
  • usecase や handler に、細かい変換処理を散らさない
  • 可変の配列や list へ順に値を追加している場合は、map / filter / filter_map / flatMap / collect / partition / chunks などで自然に表現できないか確認する
  • nullable、optional、result、either、例外などのエラー・欠損表現は、その言語とコードベースで自然な形にそろえる
  • 例えば Rust の Option / Result、Scala の Option / Either、TypeScript の discriminated union のように、言語ごとの型表現で分岐を明瞭にできる場合は使う
  • match、if let、switch、早期 return の方が読みやすい場合は、無理に chain にしない
  • 可変状態は必要な範囲に閉じ込め、関数外へ漏らさない
  • エラーは panic、throw、暗黙のログだけにせず、呼び出し側が扱える値や型で表現できないか考える
  • 既存コードの命名、分割、エラー処理、テストスタイルを優先する

副作用の境界

副作用を完全になくすのではなく、境界を明確にする。

  • 入力値から出力値を作る処理は、できるだけ副作用なしの関数にする
  • 値の意味、不変条件、状態遷移は、外部入出力から切り離して表す
  • 保存、取得、外部呼び出し、spawn などは、処理の順序を組み立てる境界へ寄せる
  • DB、HTTP、外部 API、ファイルなどの型や都合を、ドメインロジックへ直接漏らさない
  • request / response の変換や表示上の都合は、中心のロジックから分ける

言語やフレームワークによって層の名前が違う場合は、同じ責務を持つ境界に読み替える。

テストしやすさ

純粋関数として切り出せる処理は、fake や mock を使わずにテストできる形にする。

特に次の処理は純粋関数にしやすい。

  • payload の組み立て
  • 検証結果の変換
  • 表示用データの整形
  • retry policy の計算
  • 状態遷移の判定
  • domain rule の適用

差分レビュー

実装後、差分に対して行う。差分だけを渡された第三者でも同じ結果になるように、対象を列挙してから、対象ごとの問いに答える。誰がこのレビューを行うかは、このスキルでは決めない。実装の進め方を管理する側に従う。

手順:

  1. 差分から対象を列挙する: 新規・変更した関数・メソッド / 可変状態を導入・変更した箇所。
  2. 対象ごとに下の問いに答える。「問題なし」で済ませず、根拠を 1 行で言い切る。言い切れない対象は、本文の該当節へ戻って設計から見直す。
  3. 問題が見つかった対象は修正し、修正した対象にもう一度この手順を適用する。

関数・メソッドごとの問い:

  • 純粋性: 同じ入力に対して同じ出力を返せるか。返せないなら、その副作用(DB、HTTP、時刻、乱数、ログなど)はこの関数の責務か、境界へ寄せられるか
  • 変換の置き場所: usecase / handler に細かいデータ変換を抱えさせていないか。純粋関数として切り出せる変換が、副作用のある関数に混ざっていないか
  • 読みやすさ: コレクション操作や optional / result / either の使い方は、近くのコードと比べて読みやすいか。関数型風にしたことで意図が追いにくくなっていないか
  • テスト: fake や mock なしでテストできる単位に分かれているか

可変状態を導入・変更した箇所ごとの問い:

  • その可変状態は関数の外へ漏れていないか。より小さい範囲に閉じ込められないか
  • 順に値を追加する loop なら、map / filter / collect などで自然に表現できないか。chain にしないほうが読みやすいなら、その理由を言い切れるか

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

add-npm-package

無料日本語概要

modules/npm/packages/ に新しい npm/pnpm パッケージを追加するスキル

rito528/dotfiles22026年10月11日 更新

add-script

無料日本語概要

install/ 配下に新しいセットアップ用シェルスクリプトを追加するスキル

rito528/dotfiles22026年10月11日 更新

create-issue

無料日本語概要

GitHub issue を新規作成・下書きするとき、または既存 issue の本文を書き直すときに必ず使うスキル。「issue を作って」「issue 化して」「これを issue にまとめて」のような依頼で発火し、`gh issue create` を直接呼ぶ前に必ず参照する。人間が合意した内容だけを、意味を足さずに issue へ残すための基準を定める。

rito528/dotfiles22026年10月11日 更新

create-pr

無料日本語概要

GitHub に Pull Request を作成するスキル。ユーザーが「PRを作って」「プルリクエストを出して」「PR作成して」と言ったとき、またはコミット済みの変更をレビューに出したいときに使用する。

rito528/dotfiles22026年10月11日 更新

domain-design-safety-discipline

無料日本語概要

ドメインモデル、可視性、操作可能性、不変条件、層境界、API 設計に関わる実装時に使う。不正な状態や誤った呼び出し方を、型、関数の境界、ドメイン語彙で表し、正しい使い方が自然になる設計へ寄せるためのスキル。

rito528/dotfiles22026年10月11日 更新

ensure-branch

無料日本語概要

コミットやPR作成の前に、作業ブランチが適切かどうかを確認・切り替えるスキル。git-commit や create-pr からサブルーチンとして呼び出される。

rito528/dotfiles22026年10月11日 更新

rito528 のスキルをすべて見る

このスキルの問題を報告する