Skip to content

Instantly share code, notes, and snippets.

@toshimaru
Last active August 15, 2024 02:24
Show Gist options
  • Save toshimaru/cf040c8a8d87188ac9f119d4f2fbebbb to your computer and use it in GitHub Desktop.
Save toshimaru/cf040c8a8d87188ac9f119d4f2fbebbb to your computer and use it in GitHub Desktop.
raiils コマンド解説。

Ruby Docker イメージ起動

docker run -it ruby:3.3 bash
root@49041da525d4:/# ruby -v
ruby 3.3.4 (2024-07-09 revision be1089c8ec) [aarch64-linux]

rails install

root@49041da525d4:/# rails
bash: rails: command not found

root@49041da525d4:/# gem install rails
Fetching rackup-2.1.0.gem
Fetching rack-3.1.7.gem
Fetching webrick-1.8.1.gem
Fetching zeitwerk-2.6.17.gem
Fetching thor-1.3.1.gem
Fetching concurrent-ruby-1.3.3.gem
Fetching tzinfo-2.0.6.gem
Fetching i18n-1.14.5.gem
Fetching connection_pool-2.4.1.gem
Fetching activesupport-7.1.3.4.gem
Fetching nokogiri-1.16.7-aarch64-linux.gem
Fetching crass-1.0.6.gem
Fetching loofah-2.22.0.gem
Fetching rails-html-sanitizer-1.6.0.gem
Fetching rails-dom-testing-2.2.0.gem
Fetching rack-test-2.1.0.gem
Fetching rack-session-2.0.0.gem
Fetching erubi-1.13.0.gem
Fetching builder-3.3.0.gem
Fetching actionview-7.1.3.4.gem
Fetching actionpack-7.1.3.4.gem
Fetching railties-7.1.3.4.gem
Fetching marcel-1.0.4.gem
Fetching activemodel-7.1.3.4.gem
Fetching activerecord-7.1.3.4.gem
Fetching globalid-1.2.1.gem
Fetching activejob-7.1.3.4.gem
Fetching activestorage-7.1.3.4.gem
Fetching actiontext-7.1.3.4.gem
Fetching mini_mime-1.1.5.gem
Fetching mail-2.8.1.gem
Fetching actionmailer-7.1.3.4.gem
Fetching rails-7.1.3.4.gem
Fetching actionmailbox-7.1.3.4.gem
Fetching websocket-extensions-0.1.5.gem
Fetching websocket-driver-0.7.6.gem
Fetching nio4r-2.7.3.gem
Fetching actioncable-7.1.3.4.gem
Successfully installed zeitwerk-2.6.17
Successfully installed thor-1.3.1
Successfully installed webrick-1.8.1
Successfully installed rack-3.1.7
Successfully installed rackup-2.1.0
Successfully installed concurrent-ruby-1.3.3
Successfully installed tzinfo-2.0.6
Successfully installed i18n-1.14.5
Successfully installed connection_pool-2.4.1
Successfully installed activesupport-7.1.3.4
Successfully installed nokogiri-1.16.7-aarch64-linux
Successfully installed crass-1.0.6
Successfully installed loofah-2.22.0
Successfully installed rails-html-sanitizer-1.6.0
Successfully installed rails-dom-testing-2.2.0
Successfully installed rack-test-2.1.0
Successfully installed rack-session-2.0.0
Successfully installed erubi-1.13.0
Successfully installed builder-3.3.0
Successfully installed actionview-7.1.3.4
Successfully installed actionpack-7.1.3.4
Successfully installed railties-7.1.3.4
Successfully installed marcel-1.0.4
Successfully installed activemodel-7.1.3.4
Successfully installed activerecord-7.1.3.4
Successfully installed globalid-1.2.1
Successfully installed activejob-7.1.3.4
Successfully installed activestorage-7.1.3.4
Successfully installed actiontext-7.1.3.4
Successfully installed mini_mime-1.1.5
Successfully installed mail-2.8.1
Successfully installed actionmailer-7.1.3.4
Successfully installed actionmailbox-7.1.3.4
Successfully installed websocket-extensions-0.1.5
Building native extensions. This could take a while...
Successfully installed websocket-driver-0.7.6
Building native extensions. This could take a while...
Successfully installed nio4r-2.7.3
Successfully installed actioncable-7.1.3.4
Successfully installed rails-7.1.3.4
38 gems installed

A new release of RubyGems is available: 3.5.11 → 3.5.16!
Run `gem update --system 3.5.16` to update your installation.

root@49041da525d4:/# rails -v
Rails 7.1.3.4

Gemfile で rails install

root@49041da525d4:/app# bundle init
Writing new Gemfile to /app/Gemfile

root@49041da525d4:/app# cat Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

gem 'rails', '7.2.0.beta3'

root@49041da525d4:/app# bundle install --path vendor/bundle
[DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Fetching rake 13.2.1
Installing rake 13.2.1
Fetching bigdecimal 3.1.8
Fetching concurrent-ruby 1.3.3
Fetching connection_pool 2.4.1
Fetching drb 2.2.1
Fetching minitest 5.24.1
Fetching builder 3.3.0
Fetching erubi 1.13.0
Fetching racc 1.8.1
Installing bigdecimal 3.1.8 with native extensions
Installing concurrent-ruby 1.3.3
Installing connection_pool 2.4.1
Fetching crass 1.0.6
Installing drb 2.2.1
Fetching rack 3.1.7
Installing builder 3.3.0
Installing minitest 5.24.1
Installing erubi 1.13.0
Fetching useragent 0.16.10
Installing crass 1.0.6
Installing racc 1.8.1 with native extensions
Installing useragent 0.16.10
Fetching nio4r 2.7.3
Installing rack 3.1.7
Fetching websocket-extensions 0.1.5
Installing websocket-extensions 0.1.5
Fetching zeitwerk 2.6.17
Fetching marcel 1.0.4
Fetching mini_mime 1.1.5
Installing nio4r 2.7.3 with native extensions
Installing zeitwerk 2.6.17
Installing marcel 1.0.4
Installing mini_mime 1.1.5
Fetching io-console 0.7.2
Fetching webrick 1.8.1
Fetching thor 1.3.1
Installing io-console 0.7.2 with native extensions
Fetching websocket-driver 0.7.6
Installing webrick 1.8.1
Fetching i18n 1.14.5
Installing websocket-driver 0.7.6 with native extensions
Installing thor 1.3.1
Installing i18n 1.14.5
Fetching tzinfo 2.0.6
Fetching net-imap 0.4.14
Fetching net-pop 0.1.2
Installing tzinfo 2.0.6
Installing net-pop 0.1.2
Installing net-imap 0.4.14
Fetching net-smtp 0.5.0
Installing net-smtp 0.5.0
Fetching rack-session 2.0.0
Fetching rack-test 2.1.0
Fetching rdoc 6.7.0
Installing rack-session 2.0.0
Fetching rackup 2.1.0
Installing rack-test 2.1.0
Fetching mail 2.8.1
Installing rackup 2.1.0
Fetching nokogiri 1.16.7 (aarch64-linux)
Installing mail 2.8.1
Installing rdoc 6.7.0
Installing nokogiri 1.16.7 (aarch64-linux)
Fetching loofah 2.22.0
Installing loofah 2.22.0
Fetching rails-html-sanitizer 1.6.0
Installing rails-html-sanitizer 1.6.0
Fetching reline 0.5.9
Installing reline 0.5.9
Fetching irb 1.14.0
Installing irb 1.14.0
Fetching activesupport 7.2.0.beta3
Installing activesupport 7.2.0.beta3
Fetching rails-dom-testing 2.2.0
Fetching globalid 1.2.1
Fetching activemodel 7.2.0.beta3
Installing rails-dom-testing 2.2.0
Installing globalid 1.2.1
Installing activemodel 7.2.0.beta3
Fetching activejob 7.2.0.beta3
Fetching actionview 7.2.0.beta3
Installing activejob 7.2.0.beta3
Installing actionview 7.2.0.beta3
Fetching activerecord 7.2.0.beta3
Fetching actionpack 7.2.0.beta3
Installing activerecord 7.2.0.beta3
Installing actionpack 7.2.0.beta3
Fetching actioncable 7.2.0.beta3
Fetching actionmailer 7.2.0.beta3
Fetching railties 7.2.0.beta3
Installing actioncable 7.2.0.beta3
Installing actionmailer 7.2.0.beta3
Installing railties 7.2.0.beta3
Fetching activestorage 7.2.0.beta3
Installing activestorage 7.2.0.beta3
Fetching actionmailbox 7.2.0.beta3
Fetching actiontext 7.2.0.beta3
Installing actionmailbox 7.2.0.beta3
Installing actiontext 7.2.0.beta3
Fetching rails 7.2.0.beta3
Installing rails 7.2.0.beta3
Bundle complete! 1 Gemfile dependency, 59 gems now installed.
Bundled gems are installed into `./vendor/bundle`

root@49041da525d4:/app# ls ./vendor/bundle/ruby/3.3.0/gems/
actioncable-7.2.0.beta3    concurrent-ruby-1.3.3  minitest-5.24.1		 rails-html-sanitizer-1.6.0
actionmailbox-7.2.0.beta3  connection_pool-2.4.1  net-imap-0.4.14		 railties-7.2.0.beta3
actionmailer-7.2.0.beta3   crass-1.0.6		  net-pop-0.1.2			 rake-13.2.1
actionpack-7.2.0.beta3	   drb-2.2.1		  net-smtp-0.5.0		 rdoc-6.7.0
actiontext-7.2.0.beta3	   erubi-1.13.0		  nio4r-2.7.3			 reline-0.5.9
actionview-7.2.0.beta3	   globalid-1.2.1	  nokogiri-1.16.7-aarch64-linux  thor-1.3.1
activejob-7.2.0.beta3	   i18n-1.14.5		  racc-1.8.1			 tzinfo-2.0.6
activemodel-7.2.0.beta3    io-console-0.7.2	  rack-3.1.7			 useragent-0.16.10
activerecord-7.2.0.beta3   irb-1.14.0		  rack-session-2.0.0		 webrick-1.8.1
activestorage-7.2.0.beta3  loofah-2.22.0	  rack-test-2.1.0		 websocket-driver-0.7.6
activesupport-7.2.0.beta3  mail-2.8.1		  rackup-2.1.0			 websocket-extensions-0.1.5
bigdecimal-3.1.8	   marcel-1.0.4		  rails-7.2.0.beta3		 zeitwerk-2.6.17
builder-3.3.0		   mini_mime-1.1.5	  rails-dom-testing-2.2.0

root@49041da525d4:/app# bundle exec rails -v
Rails 7.2.0.beta3

rails new

root@49041da525d4:/app# rails new sample
      create
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  .gitattributes
      create  Gemfile
         run  git init -b main from "."
... 省略 ...

root@49041da525d4:/app/sample# ls bin/
bundle	docker-entrypoint  importmap  rails  rake  setup

root@49041da525d4:/app/sample# bundle exec rails -v
Rails 7.1.3.4
root@49041da525d4:/app/sample# bin/rails -v
Rails 7.1.3.4

Create binstubs

root@49041da525d4:/app/sample# bundle add rubocop
root@49041da525d4:/app/sample# bundle binstubs rubocop
root@49041da525d4:/app/sample# ls bin/
bundle		   importmap  rake     setup
docker-entrypoint  rails      rubocop

rails runner

root@49041da525d4:/app/sample# bin/rails c
Loading development environment (Rails 7.1.3.4)
irb(main):001> Rails.env
=> "development"

root@49041da525d4:/app/sample# bin/rails runner 'puts Rails.env'
development

Genrated by ChatGPT


Binstub(バイナリスタブ)は、特定のコマンドを実行するための小さなスクリプトです。主にRubyやRailsのプロジェクトで使われますが、他の言語やフレームワークでも似たような概念が存在します。

主な目的

  1. プロジェクト固有の設定の反映: Binstubはプロジェクトごとに設定されるため、環境変数や依存関係などのプロジェクト固有の設定を反映することができます。
  2. 依存関係の管理: Binstubは特定のバージョンのライブラリやツールを使用するように設定できるため、プロジェクトの依存関係を一貫して管理するのに役立ちます。
  3. 簡便さ: bin/railsbin/rakeのように、単純なコマンドで実行できるようにすることで、開発者がコマンドを覚えやすくなります。

Ruby on Rails の例

Railsプロジェクトを作成すると、bin/ディレクトリにいくつかのbinstubが生成されます。例えば、以下のようなファイルが含まれます:

  • bin/rails
  • bin/rake
  • bin/setup

これらのファイルは、プロジェクトのルートディレクトリから簡単に実行できるようになっています。また、これによりプロジェクトの依存関係が適切にロードされるようになります。

作成方法

Bundlerを使用してbinstubを生成することが一般的です。例えば、rakeのbinstubを作成するには以下のコマンドを実行します:

bundle binstubs rake

このコマンドにより、bin/rakeファイルが生成されます。

まとめ

Binstubは、プロジェクト固有の設定や依存関係を簡単に管理するための便利なツールです。特に大規模なプロジェクトや複数のプロジェクトを扱う際に、その利便性が際立ちます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment