無料サンプル - Ruby on Rails with OIAX

第1章
タ ーミ ナ ルの使い方
Rails に よ る Web ア プリ 開発では、 タ ーミ ナルと いう ソ フ ト ウ ェ ア
が重要な 役割を 果た し ま す。 本章では、 タ ーミ ナルの起動方法と シェ
ルコ マ ン ド の実行方法に ついて 学習し ま す。
1.1
タ ーミ ナ ルの起動方法
OS X に は タ ー ミ ナ ルと い う ソ フ ト ウ ェ ア が 標準で 備わ っ て い ま す 。
Finder の「 ア プリ ケ ーショ ン 」 →「 ユーティ リ ティ 」 から タ ーミ ナルを 起動
でき ま す。 図 1.1 のよ う な 外観を し て いま す。
図 1.1
OS X のタ ーミ ナル
1
第 1 章 タ ーミ ナルの使い方
Ubuntu の場合は同種のソ フ ト ウ ェ ア に 「 端末」 と いう 名前が付いて いま
すが、 本書では OS X に 合わせて 「 タ ーミ ナル」 と 呼ぶこ と に し ま す。
端末を 起動する に は、 Dash*1 に 対し て 「 term」 と いう キ ーワ ード を 入力
し 、 検索結果の中から 「 端末」 を 探し て ク リ ッ ク し ま す *2 。
そ の外観は図 1.2 のよ う に な り ま す。
図 1.2
1.2
Ubuntu の標準タ ーミ ナル
シ ェ ルコ マ ン ド の実行
私たち はこ のタ ーミ ナルを 用いて コ マン ド( command) を 入力し ま す。 コ
マ ン ド を 入力し た 後で Enter キ ーを 押すこ と を 、「 コ マ ン ド を 実行する 」 と
表現し ま す。
タ ーミ ナルに 入力さ れた コ マ ン ド を 解釈し 、 OS を 操作する ソ フ ト ウ ェ ア
を シ ェ ル( shell) と 呼びま す。 シェ ルはタ ーミ ナルの上で動いて いま す。
シェ ルに は sh 、 tcsh 、 zsh な ど 多数の種類があり ま すが、 OS X と Ubuntu
の標準シェ ルは bash です。
シェ ルが受け 付け る コ マ ン ド を 特に シ ェ ルコ マ ン ド ( shell command) と
呼びま す。 本書では、 シェ ルコ マ ン ド を 次のよ う な 書式で表示し ま す。
*1
Ubuntu のデス ク ト ッ プ左上隅に あ る Ubuntu ロ ゴ マ ーク を ク リ ッ ク する と ア プリ ケ ー
ショ ン やフ ァ イ ルを 検索する ウ ィ ン ド ウ が現れま す。 こ れを Dash と 呼びま す。
*2 Ubuntu の端末に は Ctrl + Shift + T と いう キ ーボード シ ョ ート カ ッ ト が用意さ れて
いま す。 キ ーボード で Ctrl、 Shit、 T の各キ ーを 同時に 押し て く ださ い。 こ の組み合わ
せを 覚え れば、 Dash で検索する よ り も 素早く 端末を 起動でき ま す。
2
1.3 コ マン ド の本体と 引数
$ mkdir work
行頭の $ は 、 シ ェ ル が ユ ー ザ ー か ら の コ マ ン ド 入力を 待っ て い る 状
態を 表す 記号で 、 コ マ ン ド プ ロ ン プ ト ( command prompt) と 呼ば れ ま
す。 実際に タ ー ミ ナ ルに 表示さ れる コ マ ン ド プ ロ ン プ ト は bash-3.2$ や
kuroda@oiax:~$ な ど の形を し て いま すが、 こ の本の中では単に $ と いう
記号で表し ま す。
上記の例では、 mkdir work がシェ ルコ マ ン ド です。 読者の皆さ んがタ ー
ミ ナルでコ マ ン ド を 入力する 際に は、 行頭の $ 記号を 入力し な いよ う に 注意
し て く ださ い。
1.3
コ マ ン ド の本体と 引数
コ マ ン ド は本体と 引数( ひき すう ) に 分かれま す。 先ほど の例では mkdir
がコ マ ン ド 本体で、 work が引数です。 英語では引数を arguments と 呼びま
す。「 数」 と いう 漢字を 含みま すが数値と は無関係で 、 work のよ う な ア ル
フ ァ ベッ ト の列、 ~のよ う な 記号、 100 のよ う な 数字の列な ど を 引数と し て 指
定でき ま す。
コ マ ン ド の本体と 引数の間はス ペース で区切り ま す。 複数の引数を 指定す
る 場合は、 次の例のよ う に 引数と 引数の間を ス ペース で区切り ま す。
$ mv foo bar
こ のと き 、 foo を 第一引数、 bar を 第二引数と 呼びま す。
1.4
文字列について
プ ロ グラ ミ ン グ用語で foo や bar のよ う な 文字の連な り を 文字列と 呼び
ま す。 英語では string と いいま す。
3
第 1 章 タ ーミ ナルの使い方
シェ ルコ マ ン ド の引数と し て 指定し た い文字列の中に ス ペース が含ま れる
場合は、 次のよ う に ダブルク オート ( ") で囲みま す。
$ echo "Ruby on Rails"
ダ ブ ルク オ ー ト の代わ り に シ ン グ ルク オ ー ト ( ’) を 用いる こ と も 可能
です。
$ echo ’Ruby on Rails’
1.5
sudo コ マ ン ド
Unix 系 OS に は、 root と いう 名前を 持つ特別な ユーザーア カ ウ ン ト が存
在し ま す。 root はあら ゆる コ マ ン ド を 実行でき 、 あら ゆる フ ァ イ ルを 変更・
削除でき ま す。 root で誤っ た 操作を 行う と コ ン ピ ュ ータ に 深刻な 影響を 与
え かねな いた め、 文書作成やプロ グラ ミ ン グな ど の日常的な 作業は root 以
外の一般ユーザーで行いま す。
こ こ ま で 私た ち がタ ー ミ ナ ルに 入力し て き た コ マ ン ド はすべ て 一般ユ ー
ザーの権限で実行さ れて いま す。 root でな いと 実行でき な い( root 権限の
必要な ) コ マ ン ド を タ ーミ ナルで実行し たい場合は、 sudo コ マ ン ド に 続け て
そ のコ マ ン ド を 入力し ま す。
試し に 、 タ ーミ ナルで次のコ マ ン ド を 実行し て みて く ださ 。
$ cat /etc/sudoers
する と 「 cat: /etc/sudoers: 許可があ り ま せん」 と いう エラ ーメ ッ セ ージ
が表示さ れま す。 こ のフ ァ イ ルは root ユーザーの持ち 物で、 一般ユーザー
4
1.5 sudo コ マン ド
に は閲覧権限があり ま せん。 し かし 、
$ sudo cat /etc/sudoers
と いう コ マ ン ド を 入力する と 「 [sudo] password for kuroda:」 と パス ワ ー
ド の入力が求めら れ、 あな た自身のパス ワ ード を 入力すれば /etc/sudoers
フ ァ イ ルの中身を タ ーミ ナルに 出力する こ と ができ ま す。
な お 、 こ の sudo コ マ ン ド は誰で も 自由に 使え る わ け で はあ り ま せん 。
sudo コ マ ン ド を 使う 権限を 与え ら れて いな いユーザーがこ のコ マ ン ド を 実
行する と 、 次のよ う な エラ ーメ ッ セ ージがタ ーミ ナルに 表示さ れま す *3 。
kuroda is not in the sodoers file.
*3
This incident will be reported.
OS X や Ubuntu の初期設定時に 作成し た ユーザーア カ ウ ン ト に は sudo コ マ ン ド を 使
う 権限が与え ら て いま す。
5
第 12 章
bundle コ マン ド の使い方
本章では、 bundle コ マ ン ド を 用いて Rails ア プリ ケ ーショ ン が依存
する Gem パッ ケ ージ群を 一括し て イ ン ス ト ールま た は更新する 方法
に ついて 解説し ま す。
12.1
Bundler と は
Bundler( バン ド ラ ー ) は、 特定の Rails ア プ リ ケ ー シ ョ ン が依存する
( 必要と する ) Gem パッ ケ ー ジ群を 一括し て イ ン ス ト ー ルま た は更新する
ツ ールです。
✓
✏
正確に 言え ば、 Bundler は Rails ア プリ ケ ーショ ン 専用のツ ールではな
く 、 Ruby 言語で書かれたあら ゆる ア プリ ケ ーショ ン で使用でき ま す。
✒
Rails ア プリ ケ ーショ ン を 配布し たり 、 本番環境に デプロ イ( 設置) し たり
する と き 、 Bundler が重要な 役割を 果た し ま す。 ま た 、 複数人から な る チー
ム で Rails 開発を 行う と き に は、 Bundler のおかげで全員の開発環境を 一致
さ せる こ と ができ ま す。
75
✑
第 12 章 bundle コ マン ド の使い方
12.2
bundle コ マン ド
Bundler が提供する シェ ルコ マ ン ド が bundle です。 語末の�r�が抜け て
いる 点に 注意し て く ださ い。「 包む」 ある いは「 束ねる 」 と いう 意味を 持つ英
語の動詞です。
12.2.1
install サブ コ マ ン ド
bundle の install サブ コ マ ン ド は、 Rails ア プ リ ケ ーシ ョ ン が依存する
Gem パッ ケ ージ群を 一括し て イ ン ス ト ールし ま す。
✓
✏
サブ コ マ ン ド を 省略し て 単に bundle と だ け タ ーミ ナルに 入力する と 、
install サブコ マ ン ド が実行さ れま す。
✒
イ ン ス ト ールの流れはソ ース ツ リ ーのルート ディ レ ク ト リ に
Gemfile.lock と いう フ ァ イ ルがあ る か ど う か で 変化し ま す 。 Rails ア プ
リ ケ ーショ ン の骨格を 作っ た直後はこ のフ ァ イ ルが存在し ま せん。
Gemfile.lock がな い場合、 Gemfile と いう フ ァ イ ルの内容を 解析し て 、
Gem パ ッ ケ ー ジ 同士の依存関係を 調べ 、 で き る か ぎ り 新し いバ ー ジ ョ ン
の Gem フ ァ イ ルの組み合わせを イ ン ス ト ールし ま す。 そ し て 、 そ の情報を
Gemfile.lock に 書き 込みま す。
Gemfile.lock が あ る 場 合 は 、 Gemfile の 解 析 を ス キ ッ プ し 、
Gemfile.lock の 情報に 基づ い て Gem パ ッ ケ ー ジ 群を イ ン ス ト ー ル し
ま す。
あ な た が作っ た Rails ア プ リ ケ ー シ ョ ン のソ ー ス コ ー ド を 別の環境に コ
ピ ーする 際は、 こ の Gemfile.lock を 含めて く ださ い。 そ う する こ と で、 開
発の時に 利用し た バージョ ン の Gem パッ ケ ージ群がコ ピ ー先の環境でも イ
ン ス ト ールさ れる こ と に な り ま す。
76
✑
12.2 bundle コ マン ド
✓
✏
Rails ア プリ ケ ーシ ョ ン のソ ース コ ード を 第 6 章で紹介し た git コ マ ン
ド で管理する 場合、 必ずリ ポジト リ に Gemfile.lock を 登録し て く だ
✒
✑
さ い。
12.2.2
update サブ コ マ ン ド
bundle の update サブコ マ ン ド は、 Gemfile に 記述さ れた Gem パッ ケ ー
ジ群の一部ま たは全部を 更新し ま す。
引数に Gem パッ ケ ージのリ ス ト を 指定すれば、 そ れら が更新さ れま す。
例え ば、 rails と rake と そ れら が依存する Gem パッ ケ ージだ け を 更新す
る に は、 次のコ マ ン ド を 実行し て く ださ い。
$ bundle update rails rake
引数を 省略する と 、 Gemfile に あ る 全 Gem パッ ケ ージが更新の対象と な
り ま す。
$ bundle update
77
第 12 章 bundle コ マン ド の使い方
12.3
Bundler の仕組み
✓
✏
こ の節に は、 少し 高度な 内容が含ま れて いま す。 Rails の学習を 始める
に あたっ て は必ずし も 必要ではあり ま せんので、 初心者の方はいっ たん
読み飛ばし て も 構いま せん。 あ な た の Rails ア プリ ケ ーショ ン に 新し い
Gem パッ ケ ージを 導入する 際に 読み返し て く ださ い。
✒
12.3.1
✑
Gemfile
あ る Rails ア プ リ ケ ー シ ョ ン が 依存す る Gem パ ッ ケ ー ジ の リ ス ト を
Bundler が得る ための情報源が、 Gemfile と いう 名前のテキ ス ト フ ァ イ ルで
す。 前章で作成し た Rails ア プリ ケ ーシ ョ ン AirBoy のソ ース コ ード に も 含
ま れて いま す。 テキ ス ト エディ タ で開いて みま し ょ う 。
次に 示すのは、 そ の Gemfile から の抜粋です。 ただし 、 シャ ープ記号( #)
で始ま る コ メ ン ト 行は省略し て いま す。
source ’https://rubygems.org’
gem
gem
gem
gem
gem
gem
’rails’, ’>= 5.0.0.rc1’, ’< 5.1’
’sqlite3’
’puma’, ’~> 3.0’
’sass-rails’, ’~> 5.0’
’uglifier’, ’>= 1.3.0’
’coffee-rails’, ’~> 4.1.0’
Gemfile に 書か れて い る の は Ruby プ ロ グ ラ ム で 、 各行の 冒頭に あ る
source や gem と いっ た文字列は Ruby のメ ソ ッ ド です。
source メ ソ ッ ド の 引 数 に は 、 Bundler が Gem パ ッ ケ ー ジ を
ダ ウ ン ロ ー ド す る 元 の URL を 指 定 し ま す 。 こ の 値 は 基 本 的 に
78
12.3 Bundler の仕組み
’https://rubygems.org’ 固定で、 変更する 必要はあり ま せん。
gem メ ソ ッ ド の第 1 引数に は、 Gem パッ ケ ージの名前を 指定し ま す。 必
要に 応じ て 、 第 2 引数以降に 次節で 説明す る バー ジ ョ ン 指定子( version
specifier) を 指定し ま す。
Bundler は Gemfile から 得ら れた 情報を 解析し て 、 でき る かぎ り 新し い
バージョ ン の Gem パッ ケ ージの組み合わせを 見つけ 出し ま す。 た だ し 、 す
べて の Gem パッ ケ ージが最新版に な る と は限り ま せん。 Gem パッ ケ ージ同
士の間に も 依存関係があ り 、 古いバージョ ン の Gem パッ ケ ージが必要と さ
れる こ と がある から です。
■コ ラ ム : 依存関係の解決に 失敗する 場合
bundle コ マ ン ド を 実行し た 時、 次のよ う な エラ ーメ ッ セ ージが出る
こ と があ り ま す。 た だ し 、 X の部分に は任意の Gem パッ ケ ージ名が入
り ま す。
Bundler could not find compatible versions for gem "X":
こ れは Bundler が依存関係の解決に 失敗し たこ と を 意味し ま す。 例え
ば、 A およ び B と いう 二つの Gem パッ ケ ージがと も に X に 依存し て い
る と し ま す。 も し こ こ で、 A がバージョ ン 1.0 以上 2.0 未満の X を 要求
し て いて 、 B がバージョ ン 2.0 以上の X を 要求し て いる な ら ば、 Bundler
は X のバージョ ン を 決定でき ま せん。
こ のよ う な 場合、 私た ち 自身が A を ア ッ プグレ ード し た り 、 B を ダウ
ン グレ ード し たり し て 、 調整する 必要があり ま す。
79
第 12 章 bundle コ マン ド の使い方
12.3.2
バージ ョ ン 指定子
バージョ ン 指定子は、 >= のよ う な 演算子と 5.0.0.rc1 のよ う な バージョ
ン 番号に よ り 構成さ れま す。 演算子は =、 !=、 >、 <、 >=、 <=、 ~> の 7 種類
です。 最後の ~> 以外の演算子の意味は明白です。
演算子 ~> は悲観的バー ジ ョ ン 演算子と 呼ばれ、 あ る Ruby ア プ リ ケ ー
シ ョ ン が、 未来に リ リ ース さ れる バージョ ン の Gem パッ ケ ージでも 動作す
る こ と を 保証する ために 使われま す。
例え ば、 あ な た のア プリ ケ ーショ ン が Gem パッ ケ ージ nokogiri のバー
ジョ ン 1.6.0 を 利用し て いる と し ま す。 バージョ ン 2.0 を リ リ ース する ま で
nokogiri の作者が Gem パッ ケ ージの後方互換性*1 を 維持する だ ろ う と あ
な たが考え る のであれば、 Gemfile で次のよ う に 書く こ と ができ ま す。
gem ’nokogiri’, ’~> 1.6’
悲観的バージョ ン 演算子は、 バージョ ン 番号の最後の桁のア ッ プグレ ード
だけ を 許容し ま す。 こ のよ う に 書いて おけ ば、 Bundler は nokogiri のバー
ジョ ン 1.7 や 1.8 がリ リ ース さ れた ら ア ッ プグレ ード する け れど 、 2.0 がリ
リ ース さ れて も ア ッ プグレ ード し ま せん。
し かし 、 nokogiri のバージョ ン を 1.7.0 未満に と ど めて お き た いのであ
れば、 Gemfile に は次のよ う に 記述し ま す。
gem ’nokogiri’, ’~> 1.6.0’
こ の場合、 Bundler は nokogiri のバージョ ン 1.6.1 がリ リ ース さ れた ら
ア ッ プ グレ ード する け れど 、 1.7.0 がリ リ ース さ れて も ア ッ プ グレ ード し ま
*1
新し いバージョ ン の Gem パッ ケ ージで古いバージョ ン と 同じ 機能やデータ 形式が使え
る 状態を 、 後方互換性( backward compatibility) が維持さ れる と 表現し ま す。
80
12.3 Bundler の仕組み
せん。
12.3.3
Gemfile.lock
bundle コ マ ン ド で Rails ア プリ ケ ーショ ン が依存する Gem パッ ケ ージ群
を 一括し て イ ン ス ト ールする と 、 ソ ース コ ード ツ リ ーのルート ディ レ ク ト リ
に Gemfile.lock と いう 名前のフ ァ イ ルが作ら れま す。
Bundler は、 Gemfile を 解析し て 得ら れた Gem フ ァ イ ル同士の依存関係
に 関する 情報を こ のフ ァ イ ルに 記録し ま す。 基本的に 私た ち Rails プロ グラ
マ ーが Gemfile.lock を 書き 換え る こ と はな いので、 そ の中身がど う な っ て
いる かを 気に する 必要はあり ま せん。
た だ し 、 ひ と つ だ け 知っ て お いた 方がい い点があ り ま す 。 そ れは、
Gemfile.lock の 末尾に つ ぎ の よ う な 形式で 、 Bundler の バ ー ジ ョ ン 番
号が記録さ れて いる こ と です。
BUNDLED WITH
1.12.4
私た ち が bundle install ま た は bundle update コ マ ン ド を 実行する
と 、 そ の時点での Bundler のバージョ ン 番号がこ こ に 書き 込ま れま す。 ただ
し 、 元々 書かれて いた バージョ ン 番号の方が新し い場合は、 次のよ う な 警告
メ ッ セ ージが表示さ れま す。
Warning: the running version of Bundler is older than the version
that created the lockfile. We suggest you upgrade to the latest
version of Bundler by running ‘gem install bundler‘.
こ の場合、 Gemfile.lock 末尾のバージョ ン 番号は書き 換わり ま せん。 な
お 、 gem install bundler コ マ ン ド を 実行し て Bundler を ア ッ プ グ レ ー
ド すればこ の警告は出な く な り ま す。 複数人から な る チーム で Rails ア プリ
ケ ーショ ン 開発を 行っ て いる 場合、 時々 こ の警告を 見る こ と に な り ま す。 あ
わて ずに 対応し て く ださ い。
81