5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更ながら Ruby on Rails Tutorial をやってみた (その1)

Last updated at Posted at 2018-02-11

この記事について…

普段はRuby on Railsと無縁なプログラマなんですが、今更ながら面白そうという単純な理由からRuby on Rails Tutorialをやってみようと思い立ちました。チュートリアルを読み進めながら備忘録を残せればなぁと思います。また、このような技術的な記録をQiitaに残すのも初めてなので、マイペースで複数回に分けて書いてみようと思っています。
尚、Rails 5.1に対応した第4版を用いて、かつCloud9ではなくVagrantを使用した環境構築で進めていきます。

学習環境

  • Windows 10 Home Fall Creators Update
  • Visual Studio Code(今後VSCodeと呼称)

~著作権とライセンス まで…

Ruby on Railsについて学習しようと思うと必ずこのチュートリアルに出会います。職場でRails案件を担当している方も「チュートリアルを一通り消化すれば基礎は大丈夫」的なことを言ってました。YassLab社の方々のお陰でこのように学習できることに心から感謝いたします。あと、このチュートリアルを3日で読破したDerek Siversすげぇ。

第1章 ゼロからデプロイまで

Vagrantを使用した環境構築

とても丁寧に手順が書いてある為に基本的には備忘録も何もないのですが、今回Vagrantを使用した環境でチュートリアルをやってみたいと思っているので、まずはこれについて備忘録を残します。
といっても、実際はYassLab社が準備した設定ファイルに沿って操作するだけです。
基本的にREADME.md、for_windows.mdを参照します。

  1. VirtualBoxをインストールする。今回はVer.5.2.6を選択した。
    デフォルトの仮想マシンフォルダーをC:\Workspace\VirtualBox VMsに変更した。
  2. Vagrantをインストールする。今回はVer.2.0.2を選択した。
  3. スターターキットをダウンロードして解凍する。
  4. 解凍したフォルダをC:\Develop\railstutorial.jp_starter_kit-masterに配置する。
  5. PowerShellで以下のコマンドを実行する。(初回は時間が掛かるので注意。)
$ cd C:\Develop\railstutorial.jp_starter_kit-master
$ vagrant up

上記手順でVagrantによる環境構築は完了です。とても簡単ですね。
for_windows.mdにはGit for Windowsのインストールを行うよう記載がありますが、スターターキットをzipでダウンロードする場合は必ずしも必要な手順ではないと思います。但し、チュートリアルを進める中でGitによるバージョン管理を学習するので、ゆくゆくはGit for Windowsのインストールが必要になると思います。

尚、Vagrantの簡単な操作は以下の通りです。

# 起動
$ vagrant up
# ログイン
$ vagrant ssh
# シャットダウン
$ vagrant halt
# 再起動
$ vagrant reload
# ステータス確認
$ vagrant status
# 削除
$ vagrant destroy
# SSH接続情報確認
$ vagrant ssh-config

TeraTerm等のSSHクライアントを利用して接続する場合はvagrant ssh-configによって「HostName、User、Port、IdentityFile」を確認する必要があります。

ログイン後にRubyとRailsのバージョンを確認したところ、それぞれRuby 2.4.2とRails 5.1.2でした。
チュートリアルではRails 5.1.4を使用しているのでgem update rails -v "5.1.4"としてアップデートします。
以上、Vagrantを使用することでRailsをインストールするまで進めることが可能です。

hello, world! への道

ここからは「hello, world!」を表示する通過儀礼が始まる訳ですが、実は上記Vagrantを使用するとホストOSとゲストOSで特定のディレクトリが同期しているので、そのディレクトリ上でRailsアプリを開発するととても便利です。
今回の場合はC:\Develop\railstutorial.jp_starter_kit-master\data/vagrant_dataが同期しています。
その為、チュートリアルではホームディレクトリ上にenvironmentディレクトリを作成していますが、今回は/vagrant_data上にenvironmentディレクトリを作成します。

先に進めていくと、bundle installを実行したところで次のエラーが発生しました。

Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/

どうもVagrant上で名前解決ができていないようで、IPアドレス直打ちでpingコマンドを実行すると疎通確認できました。
困ったので一度Vagrantを再起動してみると名前解決できるようになってました。
Retrying fetcher due to errorで検索すると同様のエラーで再起動したら直ったという話が他にもあったので、Vagrant特有で何かあるのでしょうか。今回は原因を追うと切りがないのでこの件は終了。

その後は特に問題もなく、無事ブラウザ上でhello, world!を確認することができました。やったね!
色々な言語でhello, world!を表示してきましたが、動いた時のワクワク感はいつも楽しいです。

使い慣れないGit

業務で使用している開発言語の都合上、普段はGitを使用しません。なのでGitは使い慣れていない為に危機感を感じていたところ、案の定Bitbucketにpushする際にエラー発生して戸惑いました。
git push -u origin --allを実行したところerror: failed to push some refs to 'xxxxxxxxxxxxxxx.git'というエラーが…。
リモートリポジトリをマージしてないから?と思ってgit fetch && git merge origin/masterを実行してもfatal: refusing to merge unrelated historiesというエラー発生。
事例をググったところ、Git 2.9から「mergeコマンドとpullコマンドでは,--allow-unrelated-historiesを指定しない限り,無関係なヒストリを持つ2つのブランチをマージすることはできなくなった。」との情報を発見。そこでgit merge --allow-unrelated-histories origin/masterとしたところ無事マージすることができ、その後リモートリポジトリにgit pushすることができました。
Bitbucketのリポジトリを新規作成した際のInitial commitコミットと、ローカルリポジトリのInitialize repositoryコミットがそれぞれルートコミットでかつ同じでなかったから発生した?と漠然と理解しています。

あともう1点、Gitホスティングサービス毎にSSH Keyを切り替えたかったので~/.ssh/configファイルを作成して次のように記述しました。
以下ではHerokuについても設定してあります。

~/.ssh/config
Host bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile ~/.ssh/sample1_rsa
    IdentitiesOnly yes

Host heroku.com
    HostName heroku.com
    User git
    IdentityFile ~/.ssh/sample2_rsa
    IdentitiesOnly yes

…/hello_app/.git/configファイルについては以下のように記述しました。

…/hello_app/.git/config
  .
  .
[remote "origin"]
	url = bitbucket.org:<アカウント名>/hello_app.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[remote "heroku"]
	url = heroku.com:xxxxxxxxxxxxxxx.git
	fetch = +refs/heads/*:refs/remotes/heroku/*
  .
  .

その後、Herokuへのデプロイも無事成功して第1章を終えることができました。

残件

今回VSCodeを使用して学習しているのですが、以下の点を第2章開始までに設定しようと思います。

  1. PowerShell上でGitコマンドタブ補完ができるようにする。
    posh-gitを使用すると可能になると何処かで読んだことがあるので、挑戦してみようと思います。
  2. VSCode上で2つ以上ターミナルを立ち上げたときにキーボードショートカットでターミナル切り替えできるようにする。
    今のところPowerShellを2つ立ち上げて、1つはGit/Herokuのコマンドを打つ、もう1つはVagrantで構築した仮想環境に接続して Railsのコマンドを打つ、という形で学習しています。(この方法がいいのかどうかも含めて試行錯誤中…。)
    デフォルト設定ではターミナル切り替えにキーボードショートカットが割り当てられていないようなので、よさげなショートカットを設定しようと思います。

それでは、次回 第2章から再開したいと思います。

5
9
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
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?