1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📝 Packwerk調査メモ

Last updated at Posted at 2025-06-12

📦️ Packwerk とは

Shopify/packwerk

Packwerk is a Ruby gem used to enforce boundaries and modularize Rails applications.

日本語訳は以下のとおりです。

Packwerk は、Rails アプリケーションにおける境界の強制とモジュール化を行うための Ruby 製の gem です。

つまり、Packwerk は Rails アプリケーションをモジュラーモノリスとして構築するのを支援するツールです。

導入手順

準備

公式ドキュメントに沿って導入を進めます。

まずは Gemfile に packwerk を追加し、bundle install を実行します。

gem 'packwerk'
bundle install

次に、binstub を生成します。

bundle binstub packwerk

初期設定を行い、各種設定ファイルを生成します。

bin/packwerk init

以下の2つのファイルがルートディレクトリに作成されます。

./packwerk.yml
./package.yml

モジュールを作成してコードを整理する

1.モジュールを格納するディレクトリを作成します

mkdir -p packs/item

2.パッケージ定義ファイルを作成します

touch packs/item/package.yml

3.package.yml を以下のように定義します

# このパッケージが他のパッケージに依存する場合、その依存先を明示的に dependencies に書かなければならないことを強制するか
enforce_dependencies: true

# 依存先の指定
dependencies: []

4.コードをパッケージ内に移動します

  • Item に関連するコントローラー、モデル、spec などを packs/item ディレクトリ内に整理します
git mv app/models/item.rb packs/item/app/models

5.依存関係の違反リストを更新します

bundle exec packwerk update-todo

6.依存関係チェックが通るか確認します

bundle exec packwerk check

7.依存違反を少しずつ解消していきます


packwerk コマンド

packwerkが提供しているコマンドは以下のとおりです。

コマンド 説明
bundle binstub packwerk Packwerk の binstub を生成します(bin/packwerk が作られます)
bin/packwerk init 初期設定を行い、packwerk.ymlpackage.yml を生成します
bin/packwerk check 依存違反や定数参照の違反がないかをチェックします
bin/packwerk update-todo 現在の違反状態を packwerk_todo.yml に記録します(無視設定)
bin/packwerk validate package.yml や構成ファイルの妥当性を検証します
bin/packwerk help 定義されているパッケージ(package)を一覧表示します

設定ファイル

packwerk.yml

Packwerk 全体の挙動を制御するためのルート設定ファイルです。

# Patterns to find package configuration files
package_paths: "packs/*"

package.yml

各パッケージのルートディレクトリに配置し、そのパッケージの依存ルールや公開APIの制約などを記述します。

enforce_dependencies: true
enforce_privacy: true
dependencies:
  - packs/shared
項目名 説明
enforce_dependencies 他パッケージに依存する場合に dependenciesに明示することを強制する
enforce_privacy public/ 以下以外のファイルを他パッケージから使うと違反にする
dependencies このパッケージが依存可能他パッケージを一覧で指定する

package_todo.yml

bin/packwerk update-todo により生成される、Packwerkの制約に違反している箇所が記録されるファイルです。

Packwerkを利用したモジュラーモノリス化事例


参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?