【Rails】プロジェクト名(アプリ名)の変更方法

プロジェクト名を「agribeit」から「agribeit_v1」に変更します。

## ローカル側

(１)Gemfileに以下の行を追加します。
```rb
gem 'rename'
```
(２)追加したら`bundler install`を実行します。
```
agribeit $ bundler install
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using rake 13.0.6
Using minitest 5.18.0
Using erubi 1.12.0
Using racc 1.6.2
Using nio4r 2.5.8
Using mini_mime 1.1.2
Using date 3.3.3
Using concurrent-ruby 1.2.2
Using rack 2.2.6.4
Using bindex 0.8.1
Using msgpack 1.6.1
Using builder 3.2.4
Using crass 1.0.6
Using diff-lcs 1.5.0
Using ast 2.4.2
Using method_source 1.0.0
Using websocket-extensions 0.1.5
Using parallel 1.22.1
Using io-console 0.6.0
Using zeitwerk 2.6.7
Using json 2.6.3
Using marcel 1.0.2
Using rainbow 3.1.1
Using rexml 3.2.5
Using regexp_parser 2.7.0
Using ruby-progressbar 1.13.0
Using nokogiri 1.14.2 (x86_64-darwin)
Using puma 5.6.5
Using tzinfo 2.0.6
Using bundler 2.3.26
Using rack-test 2.1.0
Using sprockets 4.2.0
Using timeout 0.3.2
Using parser 3.2.1.1
Using reline 0.3.2
Using i18n 1.12.0
Using thor 1.2.1
Using net-protocol 0.2.1
Using rubocop-ast 1.28.0
Using irb 1.6.3
Using websocket-driver 0.7.5
Using activesupport 7.0.4.3
Using rspec-support 3.12.0
Using mysql2 0.5.5
Using debug 1.7.1
Using net-imap 0.3.4
Using globalid 1.1.0
Using unicode-display_width 2.4.2
Using bootsnap 1.16.0
Using net-smtp 0.3.3
Using activejob 7.0.4.3
Using loofah 2.19.1
Using net-pop 0.1.2
Using rails-html-sanitizer 1.5.0
Using mail 2.8.1
Using rspec-expectations 3.12.2
Using activemodel 7.0.4.3
Using rubocop 1.48.1
Using rails-dom-testing 2.0.3
Using activerecord 7.0.4.3
Using rspec-mocks 3.12.4
Using rspec-core 3.12.1
Using rubocop-rails 2.18.0
Using actionview 7.0.4.3
Using actionpack 7.0.4.3
Using jbuilder 2.11.5
Using railties 7.0.4.3
Using actioncable 7.0.4.3
Using rspec-rails 6.0.1
Using actionmailer 7.0.4.3
Using sprockets-rails 3.4.2
Using activestorage 7.0.4.3
Using web-console 4.2.0
Using actionmailbox 7.0.4.3
Using actiontext 7.0.4.3
Using rails 7.0.4.3
Fetching rename 1.0.8
Installing rename 1.0.8
Bundle complete! 13 Gemfile dependencies, 77 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
```
(３)データベースを削除します。
```
agribeit $ rails db:drop
Dropped database 'agribeit_development'
Dropped database 'agribeit_test'
```
MySQL側でコマンドを打って以下のようになっていれば削除できています。
```
mysql> select * from jobs;
ERROR 1049 (42000): Unknown database 'agribeit_development'
mysql> 
```
(４)`rails g rename:into 新しいアプリ名`でアプリ名を変更します。
```
agribeit $ rails g rename:into agribeit_v1
Search and replace module in files...
        gsub  Gemfile
        gsub  Gemfile.lock
        gsub  README.md
        gsub  Rakefile
        gsub  config.ru
        gsub  config/application.rb
        gsub  config/boot.rb
        gsub  config/environment.rb
        gsub  config/environments/development.rb
        gsub  config/environments/production.rb
        gsub  config/environments/test.rb
        gsub  config/initializers/assets.rb
        gsub  config/initializers/content_security_policy.rb
        gsub  config/initializers/filter_parameter_logging.rb
        gsub  config/initializers/inflections.rb
        gsub  config/initializers/permissions_policy.rb
        gsub  config/puma.rb
        gsub  config/routes.rb
        gsub  config/database.yml
        gsub  config/cable.yml
        gsub  config/environments/production.rb
        gsub  app/views/layouts/application.html.erb
Search and replace module in environment variables...
        gsub  config/database.yml
Renaming references...
Renaming directory...Done!
New application path is '/Users/me/environment/agribeit_v1'
agribeit $
```

プロジェクトのフォルダ名が変わっていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/b3fa8322-1b77-6bc4-f1ee-57d5691774d9.png)

(５)データベースの作成
参考記事では`rails db:create`と`rails db:migrate`を行っていますが、このプロジェクトはもう使わないので行いません。

(６)残りの部分を修正
`grep -rn 古いアプリ名 . --exclude-dir={.git,tmp,log}`でgem 'rename'だけでは修正できていない、旧アプリ名の部分を検索して手動で削除します。
```
agribeit $ grep -rn agribeit . --exclude-dir={.git,tmp,log}
./config/cable.yml:10:  channel_prefix: agribeit_v1_production
./config/environments/production.rb:63:  # config.active_job.queue_name_prefix = "agribeit_v1_production"
./config/database.yml:22:  database: agribeit_v1_development
./config/database.yml:29:  database: agribeit_v1_test
./config/database.yml:53:  database: agribeit_v1_production
./config/database.yml:54:  username: agribeit_v1
agribeit $ 
```

すべて新しいプロジェクト名に置き換わっているようなのでこれでOKです。

## リモート側
GitHubにアクセスし、`Settings`から`Repository name`を`agribeit_v1`に変更します。

>これで、完成です。
後の操作(git add → git commit → git push)などは、通常通り行うことができます。

これを確かめるために、まずはGitで変更されたファイルを見てみます。

```
agribeit $ git status
On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   app/views/layouts/application.html.erb
        modified:   config/application.rb
        modified:   config/cable.yml
        modified:   config/environments/production.rb

no changes added to commit (use "git add" and/or "git commit -a")
agribeit $
```

たとえば一番上のファイルをdiffしてみると、
```
agribeit $ git diff app/views/layouts/application.html.erb
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 5a9200e..af134fb 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-    <title>Agribeit</title>
+    <title>AgribeitV1</title>
     <meta name="viewport" content="width=device-width,initial-scale=1">
     <%= csrf_meta_tags %>
     <%= csp_meta_tag %>
```

きちんと新しいプロジェクト名で置き換わっていることがわかります。他３つのファイルも同じようでした。これらすべてaddしてcommit、pushします。
```
agribeit $ git add -A
agribeit $ git commit -m "feat:プロジェクト名変更"
[develop e2214af] feat:プロジェクト名変更
 4 files changed, 4 insertions(+), 4 deletions(-)
agribeit $ git push -u origin develop
Enumerating objects: 27, done.
Counting objects: 100% (27/27), done.
Delta compression using up to 8 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 1.35 KiB | 1.35 MiB/s, done.
Total 15 (delta 11), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (11/11), completed with 10 local objects.
remote: This repository moved. Please use the new location:
remote:   https://github.com/yokoyamamn/agribeit_v1.git
remote: 
remote: Create a pull request for 'develop' on GitHub by visiting:
remote:      https://github.com/yokoyamamn/agribeit_v1/pull/new/develop
remote: 
To https://github.com/yokoyamamn/agribeit.git
 * [new branch]      develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/df423cd3-02fc-c33b-e253-8cdc511dabfb.png)
一応できたようです。


### 参考
* [Railsのアプリ名を変更して、GitHubのリポジトリ名を変更するまで - Qiita](https://qiita.com/TeppeiMimachi/items/d0176c4ec5d4b4fad895)