create-project は何をしますか?
新しいプロジェクトをユーザーの標準構造で作成するスキル。すべては ~/.claude/rules/ のグローバルルール(主に project-meta.md, spcfctn-code.md, org-babel.md, file-editing.md)に従って行われます。ここではアクションの順序のみを定義します。
このスキルの明示的な呼び出しは、spcfctn/ を作成する許可とみなされます(グローバルルール「ユーザーに spcfctn/ の作成を依頼する」はここでは適用されません — ユーザーはすでに依頼しています)。
ステップ0 — 準備
- プロジェクトルートは現在の作業ディレクトリ(またはユーザーが指定したディレクトリ)です。そこに何があるか確認してください:
ls -la,find -L(シンボリックリンクも考慮)。 .claude-root,.claude/CLAUDE.mdなどがすでに存在する場合、これは新しいプロジェクトではありません。何も上書きせず、不足しているものだけを追加し、存在していたことを報告してください。spcfctn/がすでにモノレポの一部である場合、分割しないでください。報告書でその旨を伝え、次のコミットで履歴を保持したサブディレクトリへの分割を提案してください(spcfctn-code.md)。- 許可を求める前には、常にウクライナ語で短い要約を提供してください(
file-editing.md)。
ステップ1 — プロジェクトの言語
- ユーザーがリクエストで言語を指定しなかった場合、
AskUserQuestionで尋ねてください(「プロジェクトはどの言語で行いますか?」:ウクライナ語、英語、その他)。言語が決まるまで、散文テキストを一切書かないでください。 - プロジェクト言語は、リポジトリのファイル(コード、コメント、コミット、org/md)および プロジェクトの外部成果物(Jira課題、Confluenceページ)に適用されます。ユーザーとのチャット言語は別で、常にウクライナ語です。
ステップ1a — プロジェクトコード
各プロジェクトには独自の2文字の短いコードがあります。3文字は、許容可能な2文字のオプションがない場合にのみ使用します。大文字小文字は固定されません。使用コンテキストに依存します(例:Jira課題キーは大文字 — KB-1676;コード内のプレフィックスや名前は、場所の慣例に従い、通常は小文字)。そのため、提案では大文字小文字を固定せずにコードを示し、CLAUDE.md では主な使用形式で記録し、どの形式がどこで使用されるかを明記してください。
- こっそりコードを考案したり、最初に見つけたものを採用したりしないでください。明示的に 3〜4つの興味深いオプションを提案し、ユーザーに選択させるか、独自のコードを指定させてください(プロジェクト名、本質、言葉遊びから — 簡単な説明付き)。
AskUserQuestionを使用すると便利です(最初のオプションがあなたの評価で最良のもので、「(Recommended)」のマークを付け、「Other」が自動的に追加されてユーザーが独自のコードを入力できます)。 - 選択されたコードがユーザーの既存プロジェクトのコードと重複していないことを確認してください(
~/.claude/projects/*/memory、隣接プロジェクトの.claude/CLAUDE.md、必要に応じてlocateで検索)。重複している場合は、その旨を伝え、別のオプションを提案してください。 - コードを
.claude/CLAUDE.md(ステップ3)に記録し、最終報告書で言及してください。
ステップ2 — 構造
ルートに以下を作成:
| 項目 | 内容 |
|---|---|
.claude-root | 空のファイル(共通ワークディレクトリのルートを示す) |
.dir-locals.el | 以下のフォーム、末尾に改行必須 |
code/ | 空のディレクトリ(サブリポジトリ/コードがここに入る) |
spcfctn/code/ | まだ存在しない場合のディレクトリ(spcfctn/ 自体は作成、上記参照)、その中で個別の git init(ルーチン作業、許可は不要)と *~ のみの .gitignore。ユーザーが依頼するまでコミットしない。spcfctn/ 自体はリポジトリではない |
.mcp.json | 空:{"mcpServers": {}}(project-meta.md — projectスコープのMCPのみ、決して userスコープではない) |
env.org | .env.example のリテラルソース — 以下参照 |
.claude/ | ステップ3参照 |
env.org — プロジェクトの各MCPサーバーに1セクション(* MCP名)、どの変数が必要でなぜ必要なのかを散文で説明;各セクションは :noweb-ref で共通の .env.example にタングルされる(公開、変数名のみをプレースホルダー付きで表示、実際の値なし — org-babel.md、「マルチターゲット」テンプレートはここでは不要、ターゲットは1つ)。実際の .env(パーミッション 600、project-meta.md)はユーザー自身が作成 — 作成も編集もしない;プロジェクトルートに .gitignore は不要。ルートは決してgitリポジトリではないため(project-meta.md)。プロジェクト作成時にMCPサーバーがまだない場合、env.org はセクションの代わりにプレースホルダー文(「まだMCPは接続されていません」)を1つだけ残し、最初のサーバーが現れたときに戻ってくることができる。
.dir-locals.el(orgリンクの略称 root:、ポータブル、ハードコードされたパスなし):
#+begin_example ((org-mode . ((eval . (add-to-list 'org-link-abbrev-alist (cons "root" (locate-dominating-file default-directory ".dir-locals.el"))))))) #+end_example
(ファイル自体は純粋なelisp — #+begin_example/#+end_example 行は含まれない。)
spcfctn/ui/ が必要になった場合(モックアップ分析)は、後で必要に応じて作成;空のディレクトリを事前に作成しない。後で現れる spcfctn/ の各サブディレクトリ(ui/, deploy/ など)は、すぐに独自の git init と *~ を含む .gitignore を取得する — spcfctn/ 自体はリポジトリではない。draft/, raw/, data/ ディレクトリは、何かを入れる必要が生じるまで作成せず、事前に .gitignore パターンを追加しない(project-meta.md)。
ステップ3 — .claude/
-
mkdir .claudeおよび.claude/内に個別のgit init(ルート自体がgitリポジトリであるか、別のリポジトリ内にある場合でも)。これはルーチン作業であり、許可は不要。ユーザーが依頼するまでコミットしない。 -
.claude/.gitignore:#+begin_example settings.local.json *~ #+end_example
(
*~— Emacsのバックアップファイル一般のパターン、*.~undo-tree~を含む;末尾に改行。) -
.claude/CLAUDE.md— プロジェクト言語で。最低限:- 言語に関するセクション:プロジェクトの散文(ドキュメント、コードコメント、コミットメッセージ、orgヘッダーなど)はすべてプロジェクト言語で;Jira/Confluence成果物も同様;ユーザーとのチャットはウクライナ語のまま;
- プロジェクトコード(ステップ1a)を別行で、例:「プロジェクトコード:
kb(Jira課題キーではKB)」; - 構造の簡単な説明:
.claude-rootがルートを示す;code/はコード;spcfctn/code/は既存のコードプラクティスのドキュメント(独自のgit);.claude/はプロジェクトの意図と慣例(独自のgit)。
追加(Jiraキー、担当者など)は考案しない — 作業の過程で現れる。
-
settings.local.jsonには何も書き込まない — これは個人用でgit管理外。
ステップ4 — ルートはgit管理外
プロジェクトルートは決して gitリポジトリにならない(project-meta.md):ルートで git init を実行したり、ルート .gitignore を作成したりしない。ルートにすでに .git がある場合は、触らずに報告書でユーザーに伝える。ルート .mcp.json がある場合も何もしない。
ステップ5 — 既存ファイルの翻訳
作成前にプロジェクトに存在していたすべてのファイル(*~ ファイル、.git、バイナリ、および作成したばかりのサービスファイルを除く)を、別の言語で書かれている場合はプロジェクト言語に変換する:
- テキストは完全な翻訳で書き、構造、テーブル、コードブロック、識別子、引用を保持する(エラーメッセージは原文のまま)。
- ウクライナ語:「список」ではなく「перелік」(list の場合); hook には「зачіпка」;識別子やCSSクラスは翻訳しない(
org-babel.md)。 .mdはエージェントのみが編集;.org— ユーザーの不明瞭な編集は削除せず、尋ねる。tangle付きのorgファイルの場合、orgソースを編集し、emacsclient経由でタングルする(org-babel.md)。- 段落(散文、コードブロックやテーブル以外)の編集後、実際の
fill-paragraphをemacsclient --eval経由で使用して改行を整える(orgの場合は最初に(font-lock-ensure));new_string/Write内の段落は1行で書く。emacsclientが接続できない場合は、ユーザーにサーバーを起動するよう依頼し、模倣しない。 - org/md散文の後、
org-lintスキルを実行する。 - コンテンツの一部がここにないファイル/プロジェクトを参照している場合、リンクを「修正」せず、周囲のテキストのみを翻訳する。
ステップ6 — 報告書
選択されたプロジェクトコード、作成したもの、すでに存在していたもの、翻訳したものを簡潔に列挙し、.claude/ および spcfctn/ のサブディレクトリ内のコミットはまだ行われていない(依頼があれば行う)ことをリマインダーとして伝える。
やってはいけないこと
.env/.env.*(project-meta.md)を編集したり、シークレットを含む.mcp.jsonを作成したりしない。code/*内のコンポーネントのサブリポジトリにあるCLAUDE.md/.claude/ファイルには何も書き込まない — ルートの.claude/のみ。- ユーザーに代わって言語ルールを考案しない — 尋ねられた言語のみ。
- オプションの提案とユーザーの選択なしにプロジェクトコードを割り当てない。
- プロジェクトルートや
spcfctn/のルートでgit initを実行しない:リポジトリは.claude/、code/*、およびspcfctn/*のサブディレクトリのみ。