ruby-optimise について
Ruby アプリや gem の開発者向けに、コミュニティが保守するパフォーマンス指針です。オブジェクト割り当てからランタイム設定まで、影響度順の8カテゴリに42のルールをまとめています。
主な機能
- 018カテゴリにわたる42のルール
- 02性能への影響度順に整理
- 03割り当てとコレクション処理
- 04I/Oとデータベースの指針
- 05並行処理とランタイムの調整
活用シーン
- 01Rubyコードの性能問題をレビュー
- 02ActiveRecordクエリの最適化
- 03大規模コレクションのバッチ処理
- 04メモリ使用量とGC負荷の削減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill ruby-optimiseインストール後、Claude Code で/ruby-optimiseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mdalloc-avoid-implicit-conversions.mdalloc-avoid-temp-arrays.mdalloc-avoid-unnecessary-dup.mdalloc-freeze-constants.mdalloc-lazy-initialization.mdalloc-reuse-buffers.mdconc-avoid-shared-mutable-state.mdconc-fiber-for-io.mdconc-ractor-cpu-bound.mdconc-thread-pool-sizing.mdds-array-preallocation.mdds-hash-default-value.mdds-set-for-membership.mdds-sort-by-over-sort.mdds-struct-over-openstruct.mdenum-avoid-count-in-loops.mdenum-chunk-batch-processing.mdenum-each-with-object.mdenum-flat-map.mdenum-lazy-large-collections.mdenum-single-pass.mdio-avoid-queries-in-loops.mdio-batch-find-each.mdio-cache-expensive-queries.mdio-connection-pool-sizing.md詳細
Ruby コミュニティのベストプラクティス
コミュニティが管理する、Ruby アプリケーション向けの包括的なパフォーマンス最適化ガイドです。8 つのカテゴリにわたる 42 のルールを収録し、自動リファクタリングとコード生成の指針となるよう、影響度順に優先順位を付けています。
適用する場面
次の場合に、これらのガイドラインを参考にしてください。
- 新しい Ruby コードや gem を作成するとき
- ActiveRecord のクエリやデータベースアクセスパターンを最適化するとき
- 大規模なコレクションを処理するときや、データパイプラインを構築するとき
- メモリの肥大化や GC への負荷がないかコードをレビューするとき
- 本番環境向けに Ruby のランタイム設定を行うとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | 接頭辞 |
|---|---|---|---|
| 1 | オブジェクト割り当て | CRITICAL | alloc- |
| 2 | コレクションと列挙 | CRITICAL | enum- |
| 3 | I/O とデータベース | HIGH | io- |
| 4 | 文字列処理 | HIGH | str- |
| 5 | メソッドとディスパッチ | MEDIUM-HIGH | meth- |
| 6 | データ構造 | MEDIUM | ds- |
| 7 | 並行処理 | MEDIUM | conc- |
| 8 | ランタイムと設定 | LOW-MEDIUM | runtime- |
クイックリファレンス
1. オブジェクト割り当て(CRITICAL)
alloc-avoid-unnecessary-dup- 不要なオブジェクトの複製を避けるalloc-freeze-constants- 定数コレクションを凍結するalloc-lazy-initialization- コストの高いオブジェクトには遅延初期化を使うalloc-avoid-temp-arrays- 一時的な配列の生成を避けるalloc-reuse-buffers- ループ内でバッファーを再利用するalloc-avoid-implicit-conversions- 処理頻度の高い箇所での繰り返し計算を避ける
2. コレクションと列挙(CRITICAL)
enum-single-pass- コレクションの変換には単一パスを使うenum-lazy-large-collections- 大規模なコレクションには遅延列挙子を使うenum-flat-map-map.flattenの代わりにflat_mapを使うenum-each-with-object- コレクションの構築にはinjectよりeach_with_objectを使うenum-avoid-count-in-loops- 条件式でコレクションのサイズを再計算しないenum-chunk-batch-processing- バッチ処理にはeach_sliceを使う
3. I/O とデータベース(HIGH)
io-eager-load-associations- ActiveRecord の関連を事前読み込みするio-select-only-needed-columns- 必要なカラムのみを選択するio-batch-find-each- 大量のレコードにはfind_eachを使うio-avoid-queries-in-loops- ループ内でデータベースクエリを実行しないio-stream-large-files- 大きなファイルは1行ずつストリーム処理するio-connection-pool-sizing- スレッド数に合わせてコネクションプールのサイズを調整するio-cache-expensive-queries- コストの高いデータベースクエリの結果をキャッシュする
4. 文字列処理(HIGH)
str-frozen-literals- 文字列リテラルの凍結を有効にするstr-shovel-over-plus- 文字列の組み立てにはショベル演算子を使うstr-interpolation-over-concatenation- 文字列の連結より文字列補間を使うstr-avoid-repeated-gsub- 複数のgsub呼び出しを1回の置換にまとめるstr-symbol-for-identifiers- 識別子やハッシュキーにはシンボルを使う
5. メソッドとディスパッチ(中〜高)
meth-avoid-method-missing-hot-paths- ホットパスでのmethod_missingの使用を避けるmeth-cache-method-references- 繰り返し呼び出すメソッド参照をキャッシュするmeth-block-vs-proc- ブロックを Proc に変換せず、そのまま渡すmeth-avoid-dynamic-send- パフォーマンスが重要なコードで動的なsendを避けるmeth-reduce-method-chain-depth- ホットループでのメソッドチェーンの深さを減らす
6. データ構造(中)
ds-set-for-membership- メンバーシップテストに Set を使用するds-struct-over-openstruct- OpenStruct より Struct を使用するds-sort-by-over-sort- ブロック付きのsortではなくsort_byを使用するds-array-preallocation- サイズがわかっている場合は配列を事前に確保するds-hash-default-value- 条件付き代入ではなく Hash のデフォルト値を使用する
7. 並行処理(中)
conc-fiber-for-io- I/O バウンドの並行処理に Fiber を使用するconc-thread-pool-sizing- ワークロードに合わせてスレッドプールのサイズを設定するconc-ractor-cpu-bound- CPU バウンドの並列処理に Ractor を使用するconc-avoid-shared-mutable-state- スレッド間での共有可変状態を避ける
8. ランタイムと設定(低〜中)
runtime-enable-yjit- 本番環境で YJIT を有効にするruntime-tune-gc-parameters- ワークロードに合わせて GC パラメーターを調整するruntime-frozen-string-literal-default- プロジェクトのデフォルトとして Frozen String Literal を設定するruntime-optimize-require-requireの読み込み順序を最適化する
使用方法
詳しい説明とコード例については、個別のリファレンスファイルを参照してください。
- セクションの定義 - カテゴリー構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応