どうも、三町哲平です!
開発が長引くと、Railsのアプリ名を変更したいということがあると思います。
しかし、初めてアプリ名を変更するとなると、一箇所変えただけでは、不具合の原因となりエラーが発生してしまうのではないかと思ってついつい思い止まって時間だけが無駄にすぎてしまうなんてこともあると思います。
そんな、初心者の方にも必見のアプリ名のRailsのアプリ名変更方法を紹介します。
今回は、Docker-composeで開発環境も構築していますので、流れとして、
1. Railsのアプリ名の変更方法
2. Docker-composeのアプリ名変更方法
3. GitHubのアプリ名の変更方法
この順番で紹介します。
例えば、Docker-composeを利用していないのであれば、2.は、読み飛ばしてもらって構わないですし、GitHubを利用していないのであれば、3.を飛ばして読み進めてください。
1. Railsのアプリ名の変更方法
①gemのrenameを使用
gem 'rename'
$ bundler install
インストールしてください。
②データベースを破棄する。
不具合の原因になりますので、破棄します。
$ rails db:drop
Docker-composeでwebという名称で構築した環境の為、下記のコードを先頭に追加した上で、
$ docker-compose run --rm web
↓
te_app % docker-compose run --rm web rails db:drop
Creating te_app_web_run ... done
Dropped database 'illustration_development'
Dropped database 'illustration_test'
③renameを使用してアプリ名を変更する。
$ rails g rename:into 新しいアプリ名
上記のソースコードを踏まえ私の開発環境だと、
Ⅰ. __②データベースを破棄する。__と同様に、Docker-composeで構築した環境の為、下記のコードを先頭に追加した上で、
$ docker-compose run --rm web
Ⅱ. アプリ名を te_app → illustration に変更しています。
te_app % docker-compose run --rm web rails g rename:into illustration
Creating network "te_app_default" with the default driver
Creating te_app_db_1 ... done
Creating te_app_web_run ... done
Search and replace module in...
gsub Dockerfile
gsub Gemfile
gsub Gemfile.lock
gsub README.md
gsub Rakefile
gsub babel.config.js
gsub config.ru
gsub docker-compose.yml
gsub entrypoint.sh
gsub package.json
gsub postcss.config.js
gsub yarn.lock
gsub スクリーンショット 2020-11-18 20.19.02.png
gsub スクリーンショット 2020-11-18 21.29.05.png
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/application_controller_renderer.rb
gsub config/initializers/assets.rb
gsub config/initializers/backtrace_silencers.rb
gsub config/initializers/content_security_policy.rb
gsub config/initializers/cookies_serializer.rb
gsub config/initializers/devise.rb
gsub config/initializers/filter_parameter_logging.rb
gsub config/initializers/inflections.rb
gsub config/initializers/mime_types.rb
gsub config/initializers/wrap_parameters.rb
gsub config/puma.rb
gsub config/routes.rb
gsub config/spring.rb
gsub config/initializers/session_store.rb
Error: No such file or directory @ rb_sysopen - /te_app/config/initializers/session_store.rb
gsub config/database.yml
Renaming references...
Renaming directory...Error:#<Errno::EBUSY: Device or resource busy @ rb_file_s_rename - (/te_app, /illustration)>
↑エラーが発生しましたが、__②データベースを破棄する。不具合の原因になりますので、破棄します。__の部分をやり忘れていた事で発生したエラーなので、データベースを破棄後、再度実行。
再度実行で下記の結果に↓
te_app % docker-compose run --rm web rails g rename:into illustration
Creating te_app_web_run ... done
[Error] Constant Illustration is already in use, please choose another name.
↑このエラーは、2度同じ、$ rails g rename:into illustration を実行した為に発生したエラーなので、特に問題はありません。
Ⅲ. Railsアプリのディレクトリ名を変更する。
④データベースの作成→migrate
$ rails db:create
$ rails db:migrate
⑤残りの部分を修正する。
__gem 'rename'__だけでは、修正できていない、旧アプリ名の部分を検索して手動で削除します。
アプリの名称は、ファイル名やHTML内など様々な場所で使用されることがあると思います。database周りやconfigなどのRailsの仕組みとしてアプリ名称が入ると決まっている場所はgemが一括で修正してくれますが、さすがに個別にアプリ名称を使用した場所までは修正できません。ですので、それらは探して修正していくしかありません。
引用元: [Rails]rails newした後からアプリ名を変更する方法 - Qiita
$ grep -rn 古いアプリ名 . --exclude-dir={.git,tmp,log}
私の場合だと、
illustration % grep -rn te_app . --exclude-dir={.git,tmp,log}
./config/cable.yml:10: channel_prefix: te_app_production
./config/environments/production.rb:61: # config.active_job.queue_name_prefix = "te_app_production"
./package.json:2: "name": "te_app",
3箇所ほど__te_app__表記の箇所が出てきたので、手動で修正します。
$ grep -rn te_app . --exclude-dir={.git,tmp,log}
もう一度実行してみましたが、何も出てこなかったので、これで、Railsアプリに関しては、完成です。
2. Docker-composeのアプリ名変更方法
Ⅰ. __docker-compose.yml__と__Dockerfile__の旧アプリ名(te_app)の箇所を新アプリ名(illustration)に変更します。
【docker-compose.yml】
変更前
version: '3.8' # docker-composeのバージョン
services: # 下のハッシュにサービスを作る。命名は自由だが、通常はwebとdbと名付ける。
db:
image: postgres # 使用するimage(dbでPostgreSQLを指定)
volumes: # ディレクトリのマウント設定(dbデータなどを残せる)
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
web:
build: . # Dockerfileなどがあるパス(基本的にカレントディレクトリ)
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 4000 -b '0.0.0.0'" # コマンド(server.pidファイルを削除してからrailsサーバー起動)
volumes:
- .:/te_app
ports: # ポート番号。[ホスト:コンテナ]で設定。
- "4000:4000"
depends_on:
- db # 依存関係を示していて、起動順を指定できます。ここではdb→webへと起動します。
↓__変更後__
version: '3.8' # docker-composeのバージョン
services: # 下のハッシュにサービスを作る。命名は自由だが、通常はwebとdbと名付ける。
db:
image: postgres # 使用するimage(dbでPostgreSQLを指定)
volumes: # ディレクトリのマウント設定(dbデータなどを残せる)
- ./tmp/db:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
web:
build: . # Dockerfileなどがあるパス(基本的にカレントディレクトリ)
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" # コマンド(server.pidファイルを削除してからrailsサーバー起動)
volumes:
- .:/illustration
ports: # ポート番号。[ホスト:コンテナ]で設定。
- "3000:3000"
depends_on:
- db # 依存関係を示していて、起動順を指定できます。ここではdb→webへと起動します。
【Dockerfile】
変更前
# [FROM] 使用するイメージとバージョン
FROM ruby:2.7.1
# [RUN] コマンドの実行。railsに必要なnodejsとpostgeqsqlをインストールしています
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
# yarnパッケージ管理ツールをインストール
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt update && apt install -y yarn
# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
RUN mkdir /te_app
# [WORKDIR] 作業ディレクトリを設定
WORKDIR /te_app
# [COPY] ローカルのファイルをコンテナへコピー
COPY Gemfile /te_app/Gemfile
COPY Gemfile.lock /te_app/Gemfile.lock
RUN bundle install
COPY . /te_app
# コンテナが起動するたびに実行されるスクリプトを追加します
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
# [ENTRYPOINT] 一番最初に実行するコマンド(ここではentrypoint.shを参照)
ENTRYPOINT ["entrypoint.sh"]
# [EXPOSE] コンテナがリッスンするport番号
EXPOSE 3000
# メインプロセスを開始します
# [CMD] イメージ内部のソフトウェア実行(ここではRailsを指す)
CMD ["rails", "server", "-b", "0.0.0.0"]
↓__変更後__
# [FROM] 使用するイメージとバージョン
FROM ruby:2.7.1
# [RUN] コマンドの実行。railsに必要なnodejsとpostgeqsqlをインストールしています
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
# yarnパッケージ管理ツールをインストール
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt update && apt install -y yarn
# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
RUN mkdir /illustration
# [WORKDIR] 作業ディレクトリを設定
WORKDIR /illustration
# [COPY] ローカルのファイルをコンテナへコピー
COPY Gemfile /illustration/Gemfile
COPY Gemfile.lock /illustration/Gemfile.lock
RUN bundle install
COPY . /illustration
# コンテナが起動するたびに実行されるスクリプトを追加します
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
# [ENTRYPOINT] 一番最初に実行するコマンド(ここではentrypoint.shを参照)
ENTRYPOINT ["entrypoint.sh"]
# [EXPOSE] コンテナがリッスンするport番号
EXPOSE 3000
# メインプロセスを開始します
# [CMD] イメージ内部のソフトウェア実行(ここではRailsを指す)
CMD ["rails", "server", "-b", "0.0.0.0"]
Ⅱ. buildし直します。
$ docker-compose build --no-cache
Dockerfileを更新したので、念のため__--no-cache__を追加しました。
3. GitHubのアプリ名の変更方法
Ⅰ. GitHubの旧アプリ名で利用していたリポジトリを開き、__Settings__を選択します。
Ⅱ. __Repository name__を変更します。
Ⅲ. 新アプリ名を入力したら、入力欄横の__Rename__をクリックします。
これで、完成です。
後の操作(git add → git commit → git push)などは、通常通り行うことができます。