LoginSignup
4
4

More than 3 years have passed since last update.

Dockerで開発環境使ったら、Railsコマンドが使えなくなった罠を解決

Last updated at Posted at 2020-08-27

いよいよ本格的に何か作ろうと思いまして、まずは開発環境で、Rails6の環境構築を終了しました。
ちなみに参考にした記事は、
DockerでRuby on Railsの環境構築を行うためのステップ【Rails 6対応】 - Qiita

その他、上手くいかなかった部分には、
Rails6+MySQL+Nginx+Unicorn+Docker環境構築メモ - Qiita
PostgreSQL(Docker)にRails(Docker)が接続できなくなったから調べてみた。(could not translate host name "db" to address: Name or service not known) - Qiita

上記の記事を参考にさせていただきました。

そして、今回は初歩中の初歩で少し躓いたのでその話を少しします。

早速Webサイトのトップページを作ろう!

railsでトップページを作ろうと思い、

ターミナル
$ rails g controller home top

と入力、
すると...

出力結果
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

Google翻訳の力を借りるとこう↓
Railsは現在このシステムにインストールされていません。最新バージョンを入手するには、$ sudo gem install railsを入力してね。

う〜ん、Rails6は間違いなくインストールしているのに何ででしょうか?
0.5秒くらい悩みましたが答えは簡単でした。

Railsが存在するのは、あくまでDocker内だけでの話

まず、Dockerとは?

Docker(ドッカー)は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。
Dockerはコンテナ仮想化を用いたOSレベルの仮想化(英語版)によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。かつその環境自体をアプリケーションと同じようにコード(イメージ)として管理可能にする。Dockerを開発・テスト・デプロイに用いることで「コードを書く」と「コードが製品として実行される」間の時間的ギャップを大きく短縮できる。
引用:Docker - Wikipedia

wikipediaを見てもらっても分かる通り、Dockerって仮想化技術なんですね。
つまりdocker-composeを使ってRailsをインストールしていますが、あくまでもDocker内で使用出来るようになったよ!くらいの認識で良い訳です。

なので、Railsは現在このシステムにインストールされていません。最新バージョンを入手するには、$ sudo gem install railsを入力してね。となったんですね!

解決策は、Dockerコマンド

ターミナル
$ docker-compose run web

これが魔法の呪文です。

この後に、さっきのコマンドを追加したら...

ターミナル
$ docker-compose run web rails g contoller home top
出力結果
Starting guminoki_db_1 ... done
Could not find generator 'contoller'. Maybe you meant "controller"?
Run `rails generate --help` for more options.

これは、どうもcontrollerを誤字ってるみたいなのでやり直し。

ターミナル
$ docker-compose run web rails g contoroller home top
出力結果
Starting guminoki_db_1 ... done
      create  app/controllers/home_controller.rb
       route  get 'home/top'
      invoke  erb
      create    app/views/home
      create    app/views/home/top.html.erb
      invoke  test_unit
      create    test/controllers/home_controller_test.rb
      invoke  helper
      create    app/helpers/home_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/home.scss

無事、完了しました!
やったね!

さいごに

以前、Djangoでアプリケーションを作成するときにも$ docker-compose run webを使っていました。すっかりど忘れしていましたね(汗)

Django開発用サーバー起動例
$ docker-compose run web python3 manage.py runserver

更に、

ターミナル
$ docker-compose run --rm web rails g contoroller home top

の様に、--rmオプションを付けると、コンテナ終了時に自動的にコンテナ削除をしてくれるので、とても便利だったりします。

4
4
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
4
4