私たちは現在、あなたが説明しているものと非常によく似たセットアップで作業しています。
クライアント向けにやや大きな Rails アプリ (販売、在庫管理、製品カタログなど) の開発を開始しました。それを終えた後、ほぼ同じ機能に対するいくつかの新しい要求がありました.
ただし、元のアプリは維持され続け、新しい機能を追加し、バグを修正する必要がありました。
拡張されたものは、ほとんどの機能を維持するために必要でしたが、外観と外観を変更しました。
私たちが行ったことは、一連の手順に従うことでした。
- まず、コードのクリーンアップ、テーブルへのハードコード参照のプル、クエリの削減と最適化、不足しているインデックスの検索、および ActiveRecord の使用を改善する方法を開始しました。
- ある程度満足した後、不足しているテストの開発を開始しました。いくつかのアプリで同じコードベースを維持し、コア機能を新しい変更から可能な限り保護する必要があるため、なぜそれが有用なのかを十分に強調することはできません.
- それは魔法の言葉でもありました: コア機能。再利用できる基本機能の選択と、すべての汎用コードの抽出を開始しました。これにより、コントローラー、モデル、ビューが混在し、モジュール、プラグイン、gem に変更し始めました。何がどこに行くの?コードに大きく依存します。経験則として、ドメイン言語を扱わない機能はプラグイン (Rails にあまり依存しない場合は gem) に移動します。
- このアプローチにより、いくつかのプラグイン、gem を導き出し、それらをまとめて元のプロジェクトを再構築し、独自の GIT リポジトリにたどり着きました。このようにして、すべてのコンポーネントとそれぞれの他のいくつかの GIT リポジトリを接着するメインの「テンプレート」リポジトリができました。
- 最後に、簡単なテーマ システムを開発します (基本的には /stylesheets/themes/:theme_name/ を読み込み、DB から theme_name を取得します)。これはイントラネット プロジェクトであるため、適切な CSS スタイリングがあればほとんど何でもできます。IE で作業するには、より複雑なアプローチが必要になると思います。
- 次に、そのメイン リポジトリを使用して、その上に新しい機能を開発しました。
さて、コアベースへの変更をどのように処理しますか。テンプレートリポジトリから始めます。修正または変更が必要な場所を修正または定義し、その場所または対応する gem/plugin で変更します。適切にテストした後、GitHub アカウントにデプロイします。
最後に、そのテンプレート リポジトリから他のプロジェクトをマージ/リベースし、新しい更新を取得します。
少し複雑に聞こえますが、セットアップのみでした。現在のワークフローは非常にシンプルで簡単で、複数の開発者と大きな問題なく作業できる利点があります。