Comments
Description
Transcript
無料サンプル - 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