将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察
The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...
人間は、多くの時間と労力を割かなければ、問題の全体像を把握することが難しい。これは、特に大規模で複雑なアプリケーションを扱っているときに起こります。私の変更による副作用は何ですか?なぜこの行がコードベースの離れた部分のテストに影響するのか?完璧な、あるいは完全な解決策は存在しませんが、Shopifyはおそらくあなたとあなたのチームの助けになるツールを開発しました。
について話すために パックワークまず、いくつかの概念を紹介する必要がある。
知っての通りだ、 ルビー は、コード境界を強制する良い解決策を提供しない。可視性を指定することはできますが、依存関係はすべてグローバル名前空間にロードされます。大規模なアプリケーションやモノリス・アプリケーションでは、この境界の欠如が次のような問題を引き起こします。
Shopifyのモノリスをモジュール化し、境界を強化しようと、さまざまな解決策を試したが、期待通りの結果は得られなかった:
- プライベート定数の設定
- 宝石を通して境界線を確立する、
- テストを使用して、コンポーネントの相互関連を防止する、
- RubyのModulation gemを使用、
- マイクロサービスを作る
過去の試行錯誤から得た知識を総動員して、彼らは独自のツールを作ることにした: パックワーク.
パックワーク のグループ間の境界を強制するために使用される静的解析ツールである。 ルビー というファイルがあります。 パッケージ.
A パッケージ はオートロードされたコードを含むフォルダです。Shopifyの チーム は、パッケージを作成する際に最良のデザインプラクティスを使用することを奨励しています。
- 機能性の高いものを詰め込むべきだ 粘着,
プライバシーと依存関係の境界を強制し、境界違反や循環依存関係をチェックすることができる。
パッケージを作成する際に、アプリケーションを構造化したり、構造化し直したりする特定の方法は一つではありません。この記事では、次のようなアプローチに従います。
ステファン・ハーゲマン Ruby on Railsの段階的モジュール化.
新しい プロジェクト または、あなたのプロジェクトの1つを選んでください。というオープンソースのプロジェクトを使うことにした。 コードトリアージ.ここで重要なのは、Rails 6アプリケーションが必要だということです。 パックワーク はツァイトヴェルクを使用している。
まず、Gemfile に次のように gem を追加します。 gem 'packwerk'
を実行する。 バンドル
をコンソールに追加する。そして、gemを初期化する準備ができた。 パックワーク開始
.
その後 パックワーク 私たちのために3つのファイルを作ってくれた:
packwerk.yml
package.yml
inflections.yml
packwerk.yml の設定ファイルである。 パックワーク ここでは、インクルードファイルと除外ファイルの定義、ロードパスのリスト、屈折ファイルの定義などを行う;
package.yml はパッケージのコンフィギュレーション・ファイルである。このファイルに、パッケージの境界の設定を追加します。package.ymlを持つフォルダは、パッケージとして パックワーク.それだけだ、 パックワーク 最初の
パッケージと呼んでいる。 ルート パッケージで提供される。
inflections.yml は、私たちが使用する場合に備えて、私たちのカスタムの抑揚や頭字語を置く場所です。
ファイルとその設定についての詳細は
パックワーク.
モジュール化が機能するためには、3つの基本的な特性が必要だ: 名前付きコンテナその 内容と明示的である。 依存関係 他の 容器.では、これらのプロパティを パックワーク:
名称:のルートからの相対パスです。
アプリケーションを使用する。
内容:package.ymlをフォルダに置くと、そのフォルダ内のすべてのファイルがパッケージの内容になる。
依存関係:他のパッケージとの依存関係を定義するには、依存関係キーを package.yml.
デフォルトでは含まれていないが、推奨されるもう一つのファイルがREADMEである。パッケージの使用方法に関する情報を提供するために重要です。
エピソード1の終わり
続きを読む