misogi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 16a145081d2d9ac3ab9f9eae729fc782f25e757823b028b2bb6a4ab2042871ca
4
+ data.tar.gz: 0f954963b9739d50232789ae9864486e8eb10c2040d74dfaf7ec82afe5a69521
5
+ SHA512:
6
+ metadata.gz: 3c36b33996d2ee6bfd3115010b3eca3e4e7e4038bace4b11ff2dd19efd4f5f5f5bfc1c21f6fb4d2ca05cf8f4359695c35339fff42a45eb9504a901a16d2ca6bd
7
+ data.tar.gz: 2859f98328c7a4185a1d3e49e069902ba8cc6ef16a19be28b2e3c11c028b466cd0a41d37607b4e3c7ee3b7d7db4a0f98726f2175e02c110301138aa51d9216bf
data/.editorconfig ADDED
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ insert_final_newline = true
7
+ trim_trailing_whitespace = true
8
+ indent_style = space
9
+ indent_size = 2
@@ -0,0 +1,39 @@
1
+ # Misogi 設定ファイル
2
+ # このファイルを .misogi.yml にコピーして使用してください
3
+
4
+ # 使用するルールと適用パターン
5
+ rules:
6
+ # Ruby一般ルール: lib配下のファイルに適用
7
+ ruby_standard:
8
+ patterns:
9
+ - "lib/**/*.rb"
10
+ base_path: "lib"
11
+
12
+ # Railsルール: app配下のファイルに適用
13
+ rails:
14
+ patterns:
15
+ - "app/**/*.rb"
16
+ # inflections.rbのパス(省略時は自動検出)
17
+ # inflections_path: "config/initializers/inflections.rb"
18
+
19
+ # RSpecルール: spec配下のファイルに適用
20
+ rspec:
21
+ patterns:
22
+ - "spec/**/*_spec.rb"
23
+
24
+ # 検証から除外するファイルパターン
25
+ exclude:
26
+ # 一時ファイル
27
+ - "tmp/**/*"
28
+
29
+ # ベンダーファイル
30
+ - "vendor/**/*"
31
+
32
+ # ビルド成果物
33
+ - "pkg/**/*"
34
+
35
+ # データベースファイル
36
+ - "db/schema.rb"
37
+
38
+ # 自動生成ファイル
39
+ - "**/generated/**/*"
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [未リリース]
2
+
3
+ ## [0.1.0] - 2025-10-31
4
+
5
+ - 初回リリース
data/CLAUDE.md ADDED
@@ -0,0 +1,191 @@
1
+ # CLAUDE.md
2
+
3
+ このファイルは、このリポジトリで作業する際にClaude Code (claude.ai/code) に提供されるガイダンスです。
4
+
5
+ ## 言語設定
6
+
7
+ **このプロジェクトでは日本語で対応してください。**すべての説明、コメント、コミットメッセージ、ドキュメントは日本語で記述します。
8
+
9
+ ## プロジェクト概要
10
+
11
+ Misogiは、ファイルの内容を解析して、そのファイル名やディレクトリ配置が適切かをチェックするlintツールを提供するRuby gemです(現在、初期開発段階)。
12
+
13
+ ### 目的
14
+ コードの内容とファイルパスの整合性を保ち、プロジェクトの構造を整理された状態に保つことを目的としています。ファイル内で定義されているクラスやモジュールの名前空間と、実際のファイルパスが一致しているかを検証します。
15
+
16
+ 標準的な Ruby gem の規約に従い、gem 管理には Bundler を使用しています。
17
+
18
+ ## CLIコマンド
19
+
20
+ ### 使い方
21
+
22
+ ```bash
23
+ # ヘルプを表示
24
+ ./exe/misogi --help
25
+
26
+ # デフォルト設定でチェック(lib, app, spec配下のファイル)
27
+ ./exe/misogi
28
+
29
+ # 特定のファイルをチェック
30
+ ./exe/misogi lib/foo.rb
31
+
32
+ # ルールを指定してチェック
33
+ ./exe/misogi --rules ruby_standard,rails,rspec
34
+
35
+ # パターンを指定してチェック
36
+ ./exe/misogi --pattern "lib/**/*.rb"
37
+ ```
38
+
39
+ ## 開発コマンド
40
+
41
+ ### セットアップ
42
+ ```bash
43
+ bin/setup
44
+ ```
45
+ 依存関係をインストールし、開発環境を準備します。
46
+
47
+ ### テスト
48
+ ```bash
49
+ rake spec # すべてのテストを実行
50
+ bundle exec rspec # RSpecを直接実行
51
+ bundle exec rspec spec/path/to/file_spec.rb # 単一のテストファイルを実行
52
+ ```
53
+
54
+ ### コード品質チェック
55
+ ```bash
56
+ rake rubocop # RuboCopリンターを実行
57
+ bundle exec rubocop # RuboCopを直接実行
58
+ bundle exec rubocop -a # 違反を自動修正
59
+ ```
60
+
61
+ ### デフォルトタスク
62
+ ```bash
63
+ rake # specとrubocopの両方を実行
64
+ ```
65
+
66
+ ### インタラクティブコンソール
67
+ ```bash
68
+ bin/console # gemをロードした状態でIRBを起動
69
+ ```
70
+
71
+ ### Gem管理
72
+ ```bash
73
+ bundle exec rake install # gemをローカルにインストール
74
+ bundle exec rake release # gitタグを作成してRubyGemsにプッシュ(バージョンアップが必要)
75
+ ```
76
+
77
+ ## コードアーキテクチャ
78
+
79
+ ### 構造
80
+ - `lib/misogi.rb` - メインエントリーポイント、`Misogi`モジュールを定義
81
+ - `lib/misogi/version.rb` - gemのバージョン定数
82
+ - `sig/misogi.rbs` - 静的型チェック用のRBS型シグネチャ
83
+ - `spec/` - RSpecテストファイル
84
+
85
+ ### コードスタイル
86
+ - Ruby 3.2以上が必要
87
+ - RuboCopは文字列リテラルにダブルクォートを強制(補間内も含む)
88
+ - EditorConfigでフォーマットを定義: 2スペースインデント、UTF-8、LF改行
89
+
90
+ ### テスト
91
+ - モンキーパッチを無効化したRSpec
92
+ - テストステータスの永続化が有効(`.rspec_status`)
93
+ - expectシンタックスのみ使用(`should`シンタックスは使用しない)
94
+
95
+ ## バージョン管理
96
+
97
+ リリース前に `lib/misogi/version.rb` でバージョンを更新してください。バージョンはセマンティックバージョニングに従います。
98
+
99
+ ## アーキテクチャ設計
100
+
101
+ ### 概要
102
+
103
+ Misogiは、ファイルの内容を解析して、ファイル名やディレクトリ配置が適切かをチェックするlintツールです。様々なルールセット(Ruby一般、Rails、RSpecなど)に対応し、カスタムルールも定義できる拡張可能な設計を採用しています。
104
+
105
+ ### コアコンポーネント
106
+
107
+ #### 1. Rule(ルール)
108
+ - 基底クラス: `Misogi::Rule::Base`
109
+ - 各ルールは`validate(file_path, parsed_content)`メソッドを実装
110
+ - 検証結果を`Misogi::Violation`オブジェクトとして返す
111
+ - ルールは独立して動作し、組み合わせ可能
112
+
113
+ #### 2. Parser(パーサー)
114
+ - ファイル内容を解析してクラス/モジュールの定義を抽出
115
+ - `Misogi::Parser::Ruby`が基本的なRubyファイルの解析を担当
116
+ - 解析結果は`Misogi::ParsedContent`オブジェクトとして返す
117
+ - 名前空間のネストも正しく解析
118
+
119
+ #### 3. Validator(バリデーター)
120
+ - `Misogi::Validator`がルールの実行とViolationの収集を担当
121
+ - 複数のルールを同時に適用可能
122
+ - ファイルパスとパース結果を各ルールに渡して検証
123
+
124
+ #### 4. Configuration(設定)
125
+ - `.misogi.yml`でプロジェクト固有の設定を管理
126
+ - 有効にするルールセットの指定
127
+ - カスタムルールのパス指定
128
+ - 除外パターンの指定
129
+
130
+ #### 5. Built-in Rules(組み込みルール)
131
+ - `Misogi::Rule::RubyStandard`: Ruby一般の規約(ファイル名とクラス名の対応)
132
+ - `Misogi::Rule::Rails`: Railsの規約(app/models、app/controllersなど)
133
+ - `Misogi::Rule::RSpec`: RSpecの規約(spec/ファイルパスとテスト対象の対応)
134
+
135
+ #### 6. Custom Rules(カスタムルール)
136
+ - `Misogi::Rule::Base`を継承してカスタムルールを作成
137
+ - `.misogi.yml`で外部ルールファイルを指定
138
+ - プロジェクト固有のディレクトリ構造ルールを定義可能
139
+
140
+ ### ディレクトリ構造
141
+
142
+ ```
143
+ lib/
144
+ ├── misogi.rb # メインエントリーポイント
145
+ ├── misogi/
146
+ │ ├── version.rb # バージョン定数
147
+ │ ├── violation.rb # 違反情報を保持するクラス
148
+ │ ├── parsed_content.rb # パース結果を保持するクラス
149
+ │ ├── configuration.rb # 設定を管理するクラス
150
+ │ ├── parser/
151
+ │ │ ├── base.rb # パーサーの基底クラス
152
+ │ │ └── ruby.rb # Rubyファイルのパーサー
153
+ │ ├── rule/
154
+ │ │ ├── base.rb # ルールの基底クラス
155
+ │ │ ├── ruby_standard.rb # Ruby一般の規約ルール
156
+ │ │ ├── rails.rb # Railsの規約ルール
157
+ │ │ └── rspec.rb # RSpecの規約ルール
158
+ │ ├── validator.rb # バリデーション実行クラス
159
+ │ └── cli.rb # コマンドラインインターフェース(将来実装)
160
+ ```
161
+
162
+ ### 設定ファイル例(.misogi.yml)
163
+
164
+ ```yaml
165
+ # 有効にするルールセット
166
+ rules:
167
+ - ruby_standard
168
+ - rails
169
+ - rspec
170
+
171
+ # カスタムルールのパス
172
+ custom_rules:
173
+ - lib/custom_rules/my_rule.rb
174
+
175
+ # 除外パターン
176
+ exclude:
177
+ - vendor/**/*
178
+ - tmp/**/*
179
+ - db/migrate/**/*
180
+ ```
181
+
182
+ ### 実装の優先順位
183
+
184
+ 1. `Misogi::Rule::Base` - ルールの基底クラス
185
+ 2. `Misogi::Parser::Ruby` - Rubyファイルのパーサー
186
+ 3. `Misogi::Validator` - バリデーター
187
+ 4. `Misogi::Rule::RubyStandard` - Ruby一般ルール
188
+ 5. `Misogi::Rule::Rails` - Railsルール
189
+ 6. `Misogi::Rule::RSpec` - RSpecルール
190
+ 7. `Misogi::Configuration` - 設定管理
191
+ 8. カスタムルールのロード機能
@@ -0,0 +1,84 @@
1
+ # Contributor Covenant 行動規範
2
+
3
+ ## 私たちの誓い
4
+
5
+ 私たちメンバー、コントリビューター、リーダーは、年齢、体型、目に見える、または見えない障害、民族性、性的特徴、性自認と表現、経験のレベル、教育、社会経済的地位、国籍、外見、人種、カースト、肌の色、宗教、または性的アイデンティティと指向に関係なく、すべての人にとってハラスメントのない体験を提供することを誓います。
6
+
7
+ 私たちは、オープンで、親しみやすく、多様性があり、包括的で、健全なコミュニティに貢献する方法で行動し、相互作用することを誓います。
8
+
9
+ ## 私たちの基準
10
+
11
+ コミュニティにとって前向きな環境に貢献する行動の例:
12
+
13
+ * 他者に対して共感と親切を示すこと
14
+ * 異なる意見、視点、経験を尊重すること
15
+ * 建設的なフィードバックを与え、受け入れること
16
+ * 私たちの過ちによって影響を受けた人々に責任を受け入れて謝罪し、その経験から学ぶこと
17
+ * 個人としてだけでなく、コミュニティ全体にとって何が最善かに焦点を当てること
18
+
19
+ 受け入れられない行動の例:
20
+
21
+ * 性的な言葉や画像の使用、あらゆる種類の性的注目や誘い
22
+ * トローリング、侮辱的または中傷的なコメント、個人的または政治的な攻撃
23
+ * 公的または私的なハラスメント
24
+ * 明示的な許可なく、物理的またはメールアドレスなどの他者の個人情報を公開すること
25
+ * 職業的な環境で不適切と合理的に考えられるその他の行為
26
+
27
+ ## 執行責任
28
+
29
+ コミュニティリーダーは、受け入れられる行動の基準を明確にし、執行する責任があり、不適切、脅迫的、攻撃的、または有害と判断した行動に対して、適切かつ公正な是正措置を講じます。
30
+
31
+ コミュニティリーダーは、この行動規範に沿っていないコメント、コミット、コード、Wikiの編集、イシュー、およびその他の貢献を削除、編集、または拒否する権利と責任を有し、適切な場合にはモデレーションの決定の理由を伝えます。
32
+
33
+ ## 適用範囲
34
+
35
+ この行動規範は、すべてのコミュニティスペース内で適用され、また、個人が公共スペースでコミュニティを公式に代表する場合にも適用されます。コミュニティを代表する例には、公式のメールアドレスの使用、公式のソーシャルメディアアカウントを介した投稿、オンラインまたはオフラインのイベントでの任命された代表者としての行動が含まれます。
36
+
37
+ ## 執行
38
+
39
+ 虐待的、ハラスメント的、またはその他の受け入れられない行動の事例は、執行を担当するコミュニティリーダーに[連絡方法を挿入]で報告できます。すべての苦情は迅速かつ公正にレビューおよび調査されます。
40
+
41
+ すべてのコミュニティリーダーは、すべての事件の報告者のプライバシーとセキュリティを尊重する義務があります。
42
+
43
+ ## 執行ガイドライン
44
+
45
+ コミュニティリーダーは、この行動規範の違反と判断した行動の結果を決定する際に、これらのコミュニティ影響ガイドラインに従います:
46
+
47
+ ### 1. 是正
48
+
49
+ **コミュニティへの影響**: 不適切な言葉の使用や、コミュニティで専門的でないまたは歓迎されないと判断されるその他の行動。
50
+
51
+ **結果**: コミュニティリーダーからの非公開の書面による警告で、違反の性質と行動が不適切だった理由の説明を提供します。公開の謝罪が要求される場合があります。
52
+
53
+ ### 2. 警告
54
+
55
+ **コミュニティへの影響**: 単一の事件または一連の行動による違反。
56
+
57
+ **結果**: 継続的な行動に対する結果を伴う警告。指定された期間、行動規範を執行する人々との一方的な相互作用を含め、関係者との相互作用はありません。これには、コミュニティスペースおよびソーシャルメディアなどの外部チャネルでの相互作用の回避が含まれます。これらの条件に違反すると、一時的または永久的な追放につながる可能性があります。
58
+
59
+ ### 3. 一時的な追放
60
+
61
+ **コミュニティへの影響**: 持続的な不適切な行動を含む、コミュニティ基準の深刻な違反。
62
+
63
+ **結果**: 指定された期間、コミュニティとのあらゆる種類の相互作用または公開コミュニケーションからの一時的な追放。この期間中は、行動規範を執行する人々との一方的な相互作用を含め、関係者との公開または非公開の相互作用は許可されません。これらの条件に違反すると、永久的な追放につながる可能性があります。
64
+
65
+ ### 4. 永久的な追放
66
+
67
+ **コミュニティへの影響**: 持続的な不適切な行動、個人へのハラスメント、または個人のクラスへの攻撃や蔑視を含む、コミュニティ基準の違反のパターンの実証。
68
+
69
+ **結果**: コミュニティ内でのあらゆる種類の公開的な相互作用からの永久的な追放。
70
+
71
+ ## 帰属
72
+
73
+ この行動規範は[Contributor Covenant][homepage]バージョン2.1から採用されており、
74
+ [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]で入手できます。
75
+
76
+ コミュニティ影響ガイドラインは[Mozillaの行動規範執行ラダー][Mozilla CoC]に触発されました。
77
+
78
+ この行動規範に関するよくある質問への回答については、[https://www.contributor-covenant.org/faq][FAQ]のFAQを参照してください。翻訳は[https://www.contributor-covenant.org/translations][translations]で入手できます。
79
+
80
+ [homepage]: https://www.contributor-covenant.org
81
+ [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
82
+ [Mozilla CoC]: https://github.com/mozilla/diversity
83
+ [FAQ]: https://www.contributor-covenant.org/faq
84
+ [translations]: https://www.contributor-covenant.org/translations
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 iyuuya
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,246 @@
1
+ # Misogi
2
+
3
+ Misogiは、ファイルの内容を解析して、そのファイル名やディレクトリ配置が適切かをチェックするlintツールです。コードの内容とファイルパスの整合性を保ち、プロジェクトの構造を整理された状態に保つことを目的としています。
4
+
5
+ > [!WARNING]
6
+ > このプロジェクトは現在開発段階にあり、多くのコードがAIによって生成されています。そのため、すべての機能の動作を完全には保証できません。本番環境での使用前に、十分なテストと検証を行うことをお勧めします。
7
+
8
+ ## インストール
9
+
10
+ 次のコマンドを実行して、gemをインストールし、アプリケーションのGemfileに追加します:
11
+
12
+ ```bash
13
+ bundle add misogi
14
+ ```
15
+
16
+ Bundlerを使用していない場合は、次のコマンドでgemをインストールします:
17
+
18
+ ```bash
19
+ gem install misogi
20
+ ```
21
+
22
+ ## 使い方
23
+
24
+ ### コマンドラインから使う
25
+
26
+ gemをインストール後、`misogi`コマンドが使えるようになります。
27
+
28
+ ```bash
29
+ # デフォルト(lib, app, spec配下のファイルをチェック)
30
+ misogi
31
+
32
+ # 特定のファイルをチェック
33
+ misogi lib/foo.rb
34
+
35
+ # 複数のファイルをチェック
36
+ misogi lib/**/*.rb
37
+
38
+ # パターンを指定してチェック
39
+ misogi --pattern "lib/**/*.rb"
40
+
41
+ # 使用するルールを指定
42
+ misogi --rules ruby_standard,rails,rspec
43
+
44
+ # ベースパスを変更
45
+ misogi --base-path src
46
+
47
+ # ヘルプを表示
48
+ misogi --help
49
+
50
+ # バージョンを表示
51
+ misogi --version
52
+ ```
53
+
54
+ #### オプション
55
+
56
+ - `-r, --rules RULES` - 使用するルール(カンマ区切り)
57
+ - `ruby_standard`: Ruby一般の規約
58
+ - `rails`: Railsの規約
59
+ - `rspec`: RSpecの規約
60
+ - `-b, --base-path PATH` - Ruby一般ルールのベースパス(デフォルト: lib)
61
+ - `-p, --pattern PATTERN` - 検証するファイルパターン
62
+ - `-c, --config PATH` - 設定ファイルのパス(デフォルト: .misogi.yml)
63
+ - `-h, --help` - ヘルプを表示
64
+ - `-v, --version` - バージョンを表示
65
+
66
+ #### 終了コード
67
+
68
+ - `0`: 違反が見つからなかった
69
+ - `1`: 違反が見つかった、またはエラーが発生した
70
+
71
+ ### 設定ファイル
72
+
73
+ プロジェクトのルートに`.misogi.yml`を配置することで、ルールごとに適用するファイルパターンや除外パターンを設定できます。
74
+
75
+ #### 設定ファイルの作成
76
+
77
+ サンプル設定ファイルをコピーして使用できます:
78
+
79
+ ```bash
80
+ cp .misogi.yml.example .misogi.yml
81
+ ```
82
+
83
+ #### 設定例
84
+
85
+ ```yaml
86
+ # 使用するルールと適用パターン
87
+ rules:
88
+ # Ruby一般ルール: lib配下のファイルに適用
89
+ ruby_standard:
90
+ patterns:
91
+ - "lib/**/*.rb"
92
+ base_path: "lib"
93
+
94
+ # Railsルール: app配下のファイルに適用
95
+ rails:
96
+ patterns:
97
+ - "app/**/*.rb"
98
+
99
+ # RSpecルール: spec配下のファイルに適用
100
+ rspec:
101
+ patterns:
102
+ - "spec/**/*_spec.rb"
103
+
104
+ # 検証から除外するファイルパターン
105
+ exclude:
106
+ - "tmp/**/*"
107
+ - "vendor/**/*"
108
+ - "db/schema.rb"
109
+ ```
110
+
111
+ #### 設定ファイルの優先順位
112
+
113
+ 1. コマンドラインオプション(最優先)
114
+ 2. 設定ファイル(`.misogi.yml`)
115
+ 3. デフォルト設定
116
+
117
+ `--rules`オプションを指定した場合は、設定ファイルのルール設定を無視して、指定されたルールを全ファイルに適用します。
118
+
119
+ ### Rubyコードから使う
120
+
121
+ #### 基本的な使い方
122
+
123
+ ```ruby
124
+ require "misogi"
125
+
126
+ # Ruby一般ルールを使用
127
+ rule = Misogi::Rule::RubyStandard.new
128
+ validator = Misogi::Validator.new(rules: [rule])
129
+
130
+ # ファイルを検証
131
+ violations = validator.validate_file("lib/foo/bar.rb")
132
+
133
+ violations.each do |violation|
134
+ puts violation.to_s
135
+ # => lib/foo/bar.rb: [RubyStandard] 期待される名前空間 'Foo::Bar' が見つかりません。定義されている名前空間: Baz
136
+ end
137
+ ```
138
+
139
+ ### 利用可能なルール
140
+
141
+ #### Ruby一般ルール (`Misogi::Rule::RubyStandard`)
142
+
143
+ Rubyの一般的な規約に従ってファイルパスとクラス/モジュール名の対応をチェックします。
144
+
145
+ ```ruby
146
+ # lib/foo.rb -> Foo
147
+ # lib/foo/bar.rb -> Foo::Bar
148
+ # lib/foo_bar.rb -> FooBar
149
+
150
+ rule = Misogi::Rule::RubyStandard.new(base_path: "lib")
151
+ ```
152
+
153
+ #### Railsルール (`Misogi::Rule::Rails`)
154
+
155
+ Railsの規約に従ってファイルパスとクラス/モジュール名の対応をチェックします。
156
+
157
+ ```ruby
158
+ # app/models/user.rb -> User
159
+ # app/controllers/users_controller.rb -> UsersController
160
+ # app/services/admin/user_creator.rb -> Admin::UserCreator
161
+
162
+ rule = Misogi::Rule::Rails.new
163
+ ```
164
+
165
+ 対応しているディレクトリ:
166
+ - `app/models`
167
+ - `app/controllers`
168
+ - `app/helpers`
169
+ - `app/mailers`
170
+ - `app/jobs`
171
+ - `app/services`
172
+ - `app/decorators`
173
+ - `app/presenters`
174
+ - `app/validators`
175
+ - `app/policies`
176
+ - `app/channels`
177
+ - `app/mailboxes`
178
+
179
+ #### RSpecルール (`Misogi::Rule::RSpec`)
180
+
181
+ RSpecの規約に従ってspecファイルとテスト対象の対応をチェックします。
182
+
183
+ ```ruby
184
+ # spec/models/user_spec.rb -> Userのテスト
185
+ # spec/controllers/users_controller_spec.rb -> UsersControllerのテスト
186
+ # spec/lib/foo/bar_spec.rb -> Foo::Barのテスト
187
+
188
+ rule = Misogi::Rule::RSpec.new
189
+ ```
190
+
191
+ ### 複数のルールを組み合わせる
192
+
193
+ ```ruby
194
+ rules = [
195
+ Misogi::Rule::RubyStandard.new(base_path: "lib"),
196
+ Misogi::Rule::Rails.new,
197
+ Misogi::Rule::RSpec.new
198
+ ]
199
+
200
+ validator = Misogi::Validator.new(rules: rules)
201
+ violations = validator.validate_files(Dir.glob("{lib,app,spec}/**/*.rb"))
202
+ ```
203
+
204
+ ### カスタムルールの作成
205
+
206
+ 独自のルールを作成することもできます。`Misogi::Rule::Base`を継承して実装します。
207
+
208
+ ```ruby
209
+ class MyCustomRule < Misogi::Rule::Base
210
+ def validate(file_path, parsed_content)
211
+ violations = []
212
+
213
+ # カスタムロジック
214
+ if some_condition?(file_path, parsed_content)
215
+ violations << violation(
216
+ file_path: file_path,
217
+ message: "カスタムルールに違反しています"
218
+ )
219
+ end
220
+
221
+ violations
222
+ end
223
+ end
224
+
225
+ # 使用例
226
+ rule = MyCustomRule.new
227
+ validator = Misogi::Validator.new(rules: [rule])
228
+ ```
229
+
230
+ ## 開発
231
+
232
+ リポジトリをチェックアウト後、`bin/setup`を実行して依存関係をインストールします。その後、`rake spec`でテストを実行できます。また、`bin/console`で対話的なプロンプトを起動して実験することもできます。
233
+
234
+ このgemをローカルマシンにインストールするには、`bundle exec rake install`を実行します。新しいバージョンをリリースするには、`version.rb`でバージョン番号を更新してから、`bundle exec rake release`を実行します。これにより、バージョンのgitタグが作成され、gitコミットと作成されたタグがプッシュされ、`.gem`ファイルが[rubygems.org](https://rubygems.org)にプッシュされます。
235
+
236
+ ## コントリビューション
237
+
238
+ バグレポートやプルリクエストは、GitHubの https://github.com/kufu-ai/misogi で受け付けています。このプロジェクトは、安全で歓迎される協力の場であることを目指しており、コントリビューターは[行動規範](https://github.com/kufu-ai/misogi/blob/main/CODE_OF_CONDUCT.md)を遵守することが期待されます。
239
+
240
+ ## ライセンス
241
+
242
+ このgemは[MITライセンス](https://opensource.org/licenses/MIT)の条件の下でオープンソースとして利用可能です。
243
+
244
+ ## 行動規範
245
+
246
+ Misogiプロジェクトのコードベース、イシュートラッカー、チャットルーム、メーリングリストでやり取りするすべての人は、[行動規範](https://github.com/kufu-ai/misogi/blob/main/CODE_OF_CONDUCT.md)に従うことが期待されます。
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task default: %i[spec rubocop]
data/exe/misogi ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "../lib/misogi"
5
+
6
+ exit Misogi::CLI.new(ARGV).run