この記事について…
普段は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を参照します。
- VirtualBoxをインストールする。今回はVer.5.2.6を選択した。
デフォルトの仮想マシンフォルダーをC:\Workspace\VirtualBox VMs
に変更した。 - Vagrantをインストールする。今回はVer.2.0.2を選択した。
- スターターキットをダウンロードして解凍する。
- 解凍したフォルダを
C:\Develop\railstutorial.jp_starter_kit-master
に配置する。 - 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についても設定してあります。
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
ファイルについては以下のように記述しました。
.
.
[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章開始までに設定しようと思います。
- PowerShell上でGitコマンドタブ補完ができるようにする。
posh-gitを使用すると可能になると何処かで読んだことがあるので、挑戦してみようと思います。 - VSCode上で2つ以上ターミナルを立ち上げたときにキーボードショートカットでターミナル切り替えできるようにする。
今のところPowerShellを2つ立ち上げて、1つはGit/Herokuのコマンドを打つ、もう1つはVagrantで構築した仮想環境に接続して Railsのコマンドを打つ、という形で学習しています。(この方法がいいのかどうかも含めて試行錯誤中…。)
デフォルト設定ではターミナル切り替えにキーボードショートカットが割り当てられていないようなので、よさげなショートカットを設定しようと思います。
それでは、次回 第2章から再開したいと思います。