Skip to content
cccskills
FreePublished on GitHub

functional-core-style

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

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

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md5.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

関数型コアスタイル

基本方針

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

同じ入力に対して同じ出力を返せる処理は、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 にしないほうが読みやすいなら、その理由を言い切れるか

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

rito528/dotfiles2Updated Oct 19, 2026

See all skills by rito528

Report a problem with this skill