🛤️

DockerのubuntuイメージにRuby on Railsをインストールしてみた話

2024/10/21に公開

要目

dockerのubuntu:latestにRuby on Railsをインストールし、起動確認できるまでの作業まとめです。
実施日は 2024/10/21 ですので、その時点の最新のubuntuイメージで行っています。
インストールが必要なものだけ知りたい方は、まとめを参照ください。

動機

普段、開発環境を構築する時は最初からRubyがインストールされたDockerイメージを使ってますが、
素のubuntuにインストールしたらどうなるのかという興味本位の試みです。

用意したもの

Dockerが実行できる環境(今回はMac)

作業記録

とりあえずubuntuの入ったコンテナを使えるようにする

compose.yml
services:
    app:
        image: ubuntu:latest
        tty: true
        ports:
            - 3000:3000

最近のDocker Composeはcompose.ymlというファイル名で良いのですね。
最低限の設定だけ済ませました。
ポート3000はRailsのローカルサーバ起動時のデフォルトです。

公式に従ってインストールを開始。
今回はSQLite使わないけど、マニュアルにあるのでインストールしてみます。

apt update
apt install -y ruby-full
apt install -y sqlite3

次にRailsのインストール

gem install rails

ERROR:  Error installing rails:
:
make failedNo such file or directory - make

ここで早くもエラーが出ました。makeがない。

makeをインストールします。
再度railsのインストール

apt install -y make
gem install rails

ERROR:  Error installing rails:
:
compiling cparse.c
make: aarch64-linux-gnu-gcc: No such file or directory

gccがない。

gccもインストールします。
3度目のrailsインストール

apt install -y gcc
gem install rails

今度は成功しました。

次にRailsアプリケーションを作ります。
名前はなんでも良いけど公式通りにblogにしました。

rails new blog

/var/lib/gems/3.2.0/gems/railties-7.2.1.1/lib/rails/generators/app_base.rb:750:in ``': No such file or directory - git (Errno::ENOENT)

またエラー。gitがない。ないものだらけですね。

gitをインストールします。
もう一度 rails newします。

apt install -y git
rails new blog
:
run  bundle binstubs bundler
Could not find importmap-rails-2.0.3, turbo-rails-2.0.11, stimulus-rails-1.3.4,
debug-1.9.2, web-console-4.2.1, rdoc-6.7.0, psych-5.1.2 in locally installed
gems

さっきより進みましたが別のエラーが出ました。
なんか色々パッケージがないとのこと。

importmap-rails, turbo-rails, stimulus-rails, debug, web-console, rdoc, psychをgemを使ってインストール

gem install importmap-rails turbo-rails stimulus-rails debug web-console rdoc psych
:
Building native extensions. This could take a while...
ERROR:  Error installing psych:
ERROR: Failed to build gem native extension.
:
    current directory: /var/lib/gems/3.2.0/gems/psych-5.1.2/ext/psych
/usr/bin/ruby3.2 -I/usr/lib/ruby/vendor_ruby extconf.rb
checking for yaml.h... no
yaml.h not found
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

yamlがどうのこうのエラーが出ます。yamlがないのか。

yamlをaptでインストール。
そしてgemでpsychをインストール。

apt install -y libyaml-dev

gem install psych

rails new blog
:
       exist  
   identical  README.md
   identical  Rakefile
   identical  .ruby-version
   identical  config.ru
    conflict  .gitignore
Overwrite /home/ubuntu/blog/.gitignore? (enter "h" for help) [Ynaqdhm]
:
bin/rails aborted!
TZInfo::DataSourceNotFound: tzinfo-data is not present. Please add gem "tzinfo-data" to your Gemfile and run bundle install (TZInfo::DataSourceNotFound)
/home/ubuntu/blog/config/environment.rb:5:in `<main>'

新しいエラーが出ました。
タイムゾーンの設定がないのかしら。

設定しようにも timedatectl がなかったので tzdata をインストールします。

apt install -y tzdata

  1. Africa   3. Antarctica  5. Asia      7. Australia  9. Indian    11. Etc
  2. America  4. Arctic      6. Atlantic  8. Europe     10. Pacific
:
rails new blog
:
       exist  
   identical  README.md
   identical  Rakefile
   identical  .ruby-version
   identical  config.ru
    conflict  .gitignore
Overwrite /home/ubuntu/blog/.gitignore? (enter "h" for help) [Ynaqdhm]

途中で色々聞かれましたが、
5. Asia
78. Tokyo
を選択しました。
そして rails new を実行したらすでにblogが中途半端に出来てるので怒られます。
aを選択して上書きします。

これでようやく最後までインストールできました。

確認します。
blogディレクトリに移動してrails serverを実行します。
docker環境から動かしているのでホスト0.0.0.0を指定します。

cd blog
bin/rails server -b 0.0.0.0

webブラウザでlocalhost:3000を開くと、無事Railsアプリが動いてました。

まとめ

とりあえず素のubuntuにRuby on Railsをインストールしようとすると、以下のパッケージインストールが必要になりました。

#事前準備
apt update
apt install -y ruby-full sqlite3 make gcc git libyaml-dev tzdata
gem install rails importmap-rails turbo-rails stimulus-rails debug web-console rdoc psych

#Railsアプリケーションの作成
rails new blog
cd blog/
bin/rails server -b 0.0.0.0

おまけ

最初からRubyが入ってるイメージを使ってみましょう。

compose.yml
services:
    app:
        image: ruby:bullseye
        tty: true
        ports:
            - 3000:3000

起動してRailsをインストールしてみます。

gem install rails
rails new blog

わずか2ステップで完了しました。
とっても楽ちんです。

Discussion