Misogiは、ファイルの内容を解析して、そのファイル名やディレクトリ配置が適切かをチェックするlintツールです。コードの内容とファイルパスの整合性を保ち、プロジェクトの構造を整理された状態に保つことを目的としています。
Warning
このプロジェクトは現在開発段階にあり、多くのコードがAIによって生成されています。そのため、すべての機能の動作を完全には保証できません。本番環境での使用前に、十分なテストと検証を行うことをお勧めします。
次のコマンドを実行して、gemをインストールし、アプリケーションのGemfileに追加します:
bundle add misogiBundlerを使用していない場合は、次のコマンドでgemをインストールします:
gem install misogigemをインストール後、misogiコマンドが使えるようになります。
# デフォルト(lib, app, spec配下のファイルをチェック)
misogi
# 特定のファイルをチェック
misogi lib/foo.rb
# 複数のファイルをチェック
misogi lib/**/*.rb
# パターンを指定してチェック
misogi --pattern "lib/**/*.rb"
# 使用するルールを指定
misogi --rules ruby_standard,rails,rspec
# ベースパスを変更
misogi --base-path src
# ヘルプを表示
misogi --help
# 出力フォーマット指定
misogi --format json
# バージョンを表示
misogi --version-r, --rules RULES- 使用するルール(カンマ区切り)ruby_standard: Ruby一般の規約rails: Railsの規約rspec: RSpecの規約
-b, --base-path PATH- Ruby一般ルールのベースパス(デフォルト: lib)-p, --pattern PATTERN- 検証するファイルパターン-c, --config PATH- 設定ファイルのパス(デフォルト: .misogi.yml)-h, --help- ヘルプを表示-v, --version- バージョンを表示
0: 違反が見つからなかった1: 違反が見つかった、またはエラーが発生した
プロジェクトのルートに.misogi.ymlを配置することで、ルールごとに適用するファイルパターンや除外パターンを設定できます。
サンプル設定ファイルをコピーして使用できます:
cp .misogi.yml.example .misogi.yml# 使用するルールと適用パターン
rules:
# Ruby一般ルール: lib配下のファイルに適用
ruby_standard:
patterns:
- "lib/**/*.rb"
base_path: "lib"
# Railsルール: app配下のファイルに適用
rails:
patterns:
- "app/**/*.rb"
# RSpecルール: spec配下のファイルに適用
rspec:
patterns:
- "spec/**/*_spec.rb"
# 検証から除外するファイルパターン
exclude:
- "tmp/**/*"
- "vendor/**/*"
- "db/schema.rb"- コマンドラインオプション(最優先)
- 設定ファイル(
.misogi.yml) - デフォルト設定
--rulesオプションを指定した場合は、設定ファイルのルール設定を無視して、指定されたルールを全ファイルに適用します。
require "misogi"
# Ruby一般ルールを使用
rule = Misogi::Rule::RubyStandard.new
validator = Misogi::Validator.new(rules: [rule])
# ファイルを検証
violations = validator.validate_file("lib/foo/bar.rb")
violations.each do |violation|
puts violation.to_s
# => lib/foo/bar.rb: [RubyStandard] 期待される名前空間 'Foo::Bar' が見つかりません。定義されている名前空間: Baz
endRubyの一般的な規約に従ってファイルパスとクラス/モジュール名の対応をチェックします。
# lib/foo.rb -> Foo
# lib/foo/bar.rb -> Foo::Bar
# lib/foo_bar.rb -> FooBar
rule = Misogi::Rule::RubyStandard.new(base_path: "lib")Railsの規約に従ってファイルパスとクラス/モジュール名の対応をチェックします。
# app/models/user.rb -> User
# app/controllers/users_controller.rb -> UsersController
# app/services/admin/user_creator.rb -> Admin::UserCreator
rule = Misogi::Rule::Rails.new対応しているディレクトリ:
app/modelsapp/controllersapp/helpersapp/mailersapp/jobsapp/servicesapp/decoratorsapp/presentersapp/validatorsapp/policiesapp/channelsapp/mailboxes
RSpecの規約に従ってspecファイルとテスト対象の対応をチェックします。
# spec/models/user_spec.rb -> Userのテスト
# spec/controllers/users_controller_spec.rb -> UsersControllerのテスト
# spec/lib/foo/bar_spec.rb -> Foo::Barのテスト
rule = Misogi::Rule::RSpec.newrules = [
Misogi::Rule::RubyStandard.new(base_path: "lib"),
Misogi::Rule::Rails.new,
Misogi::Rule::RSpec.new
]
validator = Misogi::Validator.new(rules: rules)
violations = validator.validate_files(Dir.glob("{lib,app,spec}/**/*.rb"))独自のルールを作成することもできます。Misogi::Rule::Baseを継承して実装します。
class MyCustomRule < Misogi::Rule::Base
def validate(file_path, parsed_content)
violations = []
# カスタムロジック
if some_condition?(file_path, parsed_content)
violations << violation(
file_path: file_path,
message: "カスタムルールに違反しています"
)
end
violations
end
end
# 使用例
rule = MyCustomRule.new
validator = Misogi::Validator.new(rules: [rule])リポジトリをチェックアウト後、bin/setupを実行して依存関係をインストールします。その後、rake specでテストを実行できます。また、bin/consoleで対話的なプロンプトを起動して実験することもできます。
このgemをローカルマシンにインストールするには、bundle exec rake installを実行します。新しいバージョンをリリースするには、version.rbでバージョン番号を更新してから、bundle exec rake releaseを実行します。これにより、バージョンのgitタグが作成され、gitコミットと作成されたタグがプッシュされ、.gemファイルがrubygems.orgにプッシュされます。
バグレポートやプルリクエストは、GitHubの https://github.com/kufu-ai/misogi で受け付けています。このプロジェクトは、安全で歓迎される協力の場であることを目指しており、コントリビューターは行動規範を遵守することが期待されます。
このgemはMITライセンスの条件の下でオープンソースとして利用可能です。
Misogiプロジェクトのコードベース、イシュートラッカー、チャットルーム、メーリングリストでやり取りするすべての人は、行動規範に従うことが期待されます。