LiBz Tech Blog

LiBの開発者ブログ

Vagrantで開発環境をあまりネットを見ずに頑張ったログ(MAC編)

f:id:gac777:20200117115542p:plain

概要

Docker便利ですよね。
git pullして、imageをbuildしたら、後はデータベースを流し込めば開発環境の構築終了

Dockerも便利なのですが、まずはlinuxを知るという意味で、vagrantを使うと PC内に遊べるlinux環境もできて良いと思うので、Vagrantの環境構築を久しぶりにやろうと思います。 また、今回、できるだけネットで検索せずに行き当りばったりでrailsのインストールまでやっていき、エラーとかも全て残しておきます。
なので最終的にはrailsがインストールされているけど、長い戦いになるので、これを見て環境構築をするというよりも、
こんな感じで対応していくのねーぐらいの読み物で読んでもらえると嬉しいです。

  1. Vagrantでlinux起動する
  2. Vagrant上のlinuxにRailsの環境を構築する(壊れてもいいようにスナップショット取る)
  3. Vagrant上で開発できるように母艦とVagrant上のファイルの共有方法を考える(vimで開発するならいらないよw)

Vagrantって何??

Vagrant自体の機能としてを一言で言うなら
「設定しちゃえば簡単に同じ開発環境を構築出来る」
です。Dockerも同じような用途で使われるので同じですね
個人的な使用感でいうと

  • VagrantはPCに仮想的にOS(linux)を起動してそこにsshしてアプリサーバを起動
  • Dockerは仮想環境をあまり意識せずにアプリサーバを起動

なので、開発だけ頑張る!場合は個人的にはDockerがおすすめではあります。 ※LiBだと本番環境もDockerになるので、そういう意味だとDocker

コレ自体には仮想化の機能がないので、仮想化ソフトのVirtualBoxなどと一緒に使います。 個人で1台のPCで開発するだけならVirtualBoxがあれば十分ですw

インストール

今回は、エラー含めて全部記録残して見るので、微妙に動かないとかが見にくいかもしれないです。

VirtulaBoxのインストール

https://www.virtualbox.org/のページから右メニューのDowonloadsを選択してDownloadのページに飛びます

https://www.virtualbox.org/wiki/Downloads 今回はMAC編なので
OS X hosts
をクリックします。 VirtualBox-6.1.0-135406-OSX.dmg
がダウンロードされます。(バージョンは時期によって異なります。)
※ 2020/1/9時点で最新のvagrantが6.1には対応していません。後述していますが、6.1では動かないため6.0を入れ直してます。

f:id:gac777:20200108153956p:plain:w500

ダウンロードしたファイルをダブルクリックしましょう。しばらく待つと英語で出てきます。
1 . このアイコンをダブルクリック
2. アプリケーションフォルダから起動します!

f:id:gac777:20200108154048p:plain:w500

言われるままにダブルクリック

f:id:gac777:20200108154155p:plain:w500

「続ける」押します

f:id:gac777:20200108154216p:plain:w500

再び、「続ける」押します

f:id:gac777:20200108154302p:plain:w500

インストール押します

f:id:gac777:20200108154336p:plain:w500

待ちます

f:id:gac777:20200108154411p:plain:w500

インストール完了です!

f:id:gac777:20200108154539p:plain:w500

いらないのでゴミ箱へ

f:id:gac777:20200108154607p:plain:w500

インストール終わったので、開発環境構築!であればもうここからlinuxいれて・・でいいのですが、このままvagrantまですすみます。

Vagrantのインストール

https://www.vagrantup.com/ Download 2.2.6をクリックしてダウンロードページにいきます(バージョンは時期によって異なります)

f:id:gac777:20200108154907p:plain:w500

macOSの64-bitをクリックするとvagrant_2.2.6_x86_64.dmgがダウンロードされます(バージョンは時期によって異なります)

f:id:gac777:20200108155021p:plain:w500

ダウンロードされたファイルをダブルクリックします

f:id:gac777:20200108155301p:plain:w500

右上のダンボールがあいたようなアイコンをダブルクリックします。

f:id:gac777:20200108160145p:plain:w500

続けるを押します

f:id:gac777:20200108160235p:plain:w500

インストールを押します

f:id:gac777:20200108160257p:plain:w500

待ちます

f:id:gac777:20200108160324p:plain:w500

インストール完了!

f:id:gac777:20200108165216p:plain:w500

いらないのでゴミ箱へ

f:id:gac777:20200108165534p:plain:w500

Linuxのインストール

LinuxはCentOSにします。 AWSを使う場合のAmazon LinuxがRedhat系と言われるもので、CentOSもRedhat系なため、今後AWSで作業する場合などに慣れ親しんでるとよいためです。

Vagrantを使ってLinuxをインストールするには

  1. Boxを追加する (Linuxのイメージファイルだと思ってください。違うけど・・)
  2. 追加したBoxファイルを使って起動するようにVagrantファイルを書く(書くといってもコマンド一発です)
  3. vagrantを立ち上げる

1. Boxを追加する

まずは https://app.vagrantup.com/centos/boxes/8 このBOXをVagrantに追加します!

 vagrant box add centos/8

エラー・・ f:id:gac777:20200108170947p:plain

vagrant plugin update

これしてみる。。。 f:id:gac777:20200108171713p:plain

今度こそ!

 vagrant box add centos/8

動いた! f:id:gac777:20200108173612p:plain

virtulaboxなので2番を選択

f:id:gac777:20200108173653p:plain

待ちます f:id:gac777:20200108173731p:plain

Box追加出来ました

f:id:gac777:20200108174216p:plain

2. vagrantファイルを書く

どこぞか適当なところにフォルダを作成します。 vagrant起動時にはこのフォルダにはいってvagrant upというコマンドで起動するため、アクセスしやすいフォルダにしましょう。 フォルダを作成したら

vagrant init centos/8

うちます。 f:id:gac777:20200108174436p:plain

ls

コマンドでファイルを見てください。Vagrantfileが出来ています。 中を除くと以下のような記載があると思います。これでvagrantがcentosの8で起動するようになります。 (下記はコメントアウト除外してます。)

 Vagrant.configure("2") do |config|

    config.vm.box = "centos/8"
end

3.Vagrantを立ち上げよう

vagrant up

うっうごかねぇ・・・ f:id:gac777:20200108174951p:plain

 vagrant up --provider=virtualbox

で実行してみる。

f:id:gac777:20200108183251p:plain

f:id:gac777:20200108183327p:plain:w500

なるほど。。。。6.1はまだ対応していないのね・・6.0に入れ直します。

virtualBoxをアンインストールします
macならfinderのアプリケーションフォルダから消します

f:id:gac777:20200109103901p:plain

VirtualBoxの6.0をダウンロードしてインストールします
https://www.virtualbox.org/wiki/Downloads
古いバージョンなので、VirtualBox older buildsからダウンロードします

f:id:gac777:20200109104049p:plain

https://www.virtualbox.org/wiki/Download_Old_Builds

6.0をダウンロードします

f:id:gac777:20200109104159p:plain:w500

OS X hostsから6.0をダウンロードします

f:id:gac777:20200109104315p:plain:w500

6.1の時と同じようにインストールします。

vagrant upしてみます! 動き出しました!!

f:id:gac777:20200109110311p:plain

vagrantにsshで入っていましょう! vagrant upしたフォルダで

vagrant ssh

でログインで来ます。

f:id:gac777:20200109111853p:plain

ログインできました!!

f:id:gac777:20200109111943p:plain

開発環境を整える

今回Railsで環境を整えます。

  1. Rubyのインストール
  2. RailsのインストールRailsアプリの作成
  3. MACからRailsアプリへのアクセス
  4. VagrantのファイルとMAC側のファイルの同期

1. Rubyのインストール

ここからはvagrantにログインしている状態でRubyをインストールします
CentOSにRubyを入れるためにはいくつかのコマンドを使います。
基本的にCentOSではyumというパッケージ管理ソフトを使います。

インストールされてる一覧を表示します。

yum list

ネット上にあるパッケージを探します。下記コマンドではrubyに関連するパッケージを探します。

yum search ruby

指定したパッケージをインストールします

yum install ruby

指定したパッケージを削除します

yum remove ruby

従来であればrbenvといったツールでrubyのバージョンを環境ごとに構築もありますが、
Vagrantなので基本は1つのアプリ1つのvagrantの環境にするため、rbenvなどを使わずにrubyを入れます。

sudo yum install ruby

Rubyのバージョン管理のrbenvなどもありますが、今回はyumでインストール出来るrubyのバージョンをそのまま使います。
(現時点では最新ではなく2.5.3がインストールされます。)

yum search --showduplicates ruby

searchのオプションに--showduplicatesつけるとインストールされるバージョンがわかります。

f:id:gac777:20200110134306p:plain

Rubyを入れます。

sudo yum install ruby

f:id:gac777:20200110134407p:plain

y押してEnter押します。 インストールできました。

f:id:gac777:20200110134449p:plain

インストールされたか確認します。

ruby -v

f:id:gac777:20200110134608p:plain

2. Railsアプリのインストールから作成

Rubyを入れたら、gemというrubyのパッケージ管理ソフトも入っています。

gem -v

してみるとgemのバージョンが表示されます。
Railsを使えるようにするにはこのgemを使います。
インストールできるrailsのバージョンを見てみましょう(-reaで安定版)

gem list rails -rea

f:id:gac777:20200110135158p:plain

最新版の6.0.2.1を入れてみましょう

gem install rails -v "6.0.2.1"

おや・・エラーです・・・・ f:id:gac777:20200110135504p:plain

 can't find header files for

エラー分みるとヘッダーファイルがないってエラーがあります。 ヘッダーファイル系がないのは「開発環境」のパッケージがない場合です。 rubyの開発用を入れてみましょう。 またyumであるか検索してみます。

f:id:gac777:20200110135856p:plain

ruby-develが開発環境のやつなのでインストールしましょう。

sudo yum install ruby-devel

f:id:gac777:20200110140143p:plain

もう一度Railsインストールしてみます!

gem install rails -v "6.0.2.1"

おやまたエラーですw

f:id:gac777:20200116102650p:plain

libxml2-2.9.10を入れようとしてエラーぽいです。 f:id:gac777:20200116102819p:plain

検索してみよう。

 yum search  libxml

f:id:gac777:20200116103042p:plain libxml2とかlibxml2-develとかありますね(develは開発用)

libxml2を入れちゃいましょう

sudo yum install libxml2

あれ・・すでに入ってる・・・

f:id:gac777:20200116103344p:plain

開発用のヘッダが必要なのかな。devel入れてみよう

f:id:gac777:20200116103457p:plain

gem install rails -v "6.0.2.1"

おやまたまたエラーですw

f:id:gac777:20200116103834p:plain

nokogiriのインストールでこけるのでnokogiriだけinstallしてみます

f:id:gac777:20200116110135p:plain

エラーですが gem install pkg-config -v "~> 1.1"しろといわれてます。

f:id:gac777:20200116110232p:plain

入れてみましょう f:id:gac777:20200116110309p:plain

いやぁ先が長いですねw

  gem install nokogiri -- --use-system-libraries

f:id:gac777:20200116110427p:plain

checking for libxslt... no
checking for libexslt... no

ココらへんが怪しい・・・

f:id:gac777:20200116110540p:plain

入ってそうだけど、develがないのかな。

 yum search libxslt

f:id:gac777:20200116112419p:plain

sudo yum install libxslt-devel

f:id:gac777:20200116110730p:plain

同じようにlibxsltも入れちゃいましょう。あれ・・そんなんない?? f:id:gac777:20200116112600p:plain

まぁとりあえずもう一度nokogiriトライしてみましょw おーーインストールできましたw f:id:gac777:20200116111306p:plain

本題のrailsを再度トライしましょう!

gem install rails -v "6.0.2.1"

f:id:gac777:20200116112708p:plain

インストールが終わったのでrails newしてrailsアプリを作りましょう

f:id:gac777:20200116114343p:plain

作成したら

bundle install

します。

f:id:gac777:20200116114626p:plain

ぐはエラーwエラーにg++がないと言ってます。
command not foundなのでg++がないのでしょう。
yumで探してみます

yum search g++

あれ・・ないwww

f:id:gac777:20200116114928p:plain

エラーに対してできるだけネット見ない方針でしたが・・g++のコマンドが何かわからないので、ネット検索します どうやらg++というコマンドはgccのc++コンパイラのようです。
gcc:CやC++をコンパイルするコンパイラー
c++: C++というプログラミング言語

わかったのでyumでsearchします。

f:id:gac777:20200116115329p:plain

gcc-c++がC++ support for GCCとあるのでこれをインストールします。

sudo yum install gcc-c++

f:id:gac777:20200116115510p:plain

インストールできました。(インストールできたかはどのソフトも大体-vをオプションつけるとバージョン情報が出るのでそれで確認します。)

f:id:gac777:20200116115552p:plain

再びbundle installです!!

bundle install

sqlite3で失敗しました。 f:id:gac777:20200116135047p:plain

yum search sqlite3

f:id:gac777:20200116135238p:plain

sqlite3というものではなくsqliteでyumにあるようです。再びsqliteで検索

yum search sqlite

f:id:gac777:20200116163301p:plain

見つかったsqliteをインストールします

sudo yum install sqlite

f:id:gac777:20200116163425p:plain

再びbundle installです!!

bundle install

うおっエラー

f:id:gac777:20200116165610p:plain

ふむ

f:id:gac777:20200116165645p:plain

sqlite3.hが必要なのですね、devel版を入れましょう

sudo yum install sqlite-devel

f:id:gac777:20200116165748p:plain

再びbundle installです!!

bundle install

f:id:gac777:20200116173545p:plain

うまくいきました!!!

rails sはまた失敗w

f:id:gac777:20200116174814p:plain

Try: gem pristine bindex --version 0.8.1

と書かれているのでやってみます。

f:id:gac777:20200116174919p:plain

うーんもう!!権限がないとの事なので、sudoしちゃいます

f:id:gac777:20200116175013p:plain

のこりのやつも全部やっちゃいます。

sudo gem pristine bootsnap --version 1.4.5
sudo gem pristine byebug --version 11.0.1
sudo gem pristine ffi --version 1.12.1
sudo gem pristine msgpack --version 1.3.1
sudo gem pristine puma --version 4.3.1
sudo gem pristine sassc --version 2.2.1
sudo gem pristine sqlite3 --version 1.4.2
bundle exec rails s

あれ・・エラー・・

f:id:gac777:20200116193607p:plain

あれ・・appフォルダとかがないwww f:id:gac777:20200116193641p:plain

もう一度rails new

f:id:gac777:20200116193715p:plain

run git init from "." あ・・・・
git入れてないから???・・・・いれましょうw

sudo yum install git

もう一度rails newします。
※ 「.」をいれると現在のフォルダに作成されます。

bundle exec rails new .

f:id:gac777:20200116194047p:plain

あら・・nodeが必要ですね・・

f:id:gac777:20200116194108p:plain

yum search node

f:id:gac777:20200116194146p:plain

sudo yum isntall nodejs

f:id:gac777:20200116194235p:plain

インストール終わり!!

f:id:gac777:20200116194556p:plain

bundle exec rails new .

したら、他のフォルダでもう一度しないさいと言われたので、一度削除してやります。

rm -rf 

f:id:gac777:20200116194752p:plain

f:id:gac777:20200116194838p:plain

成功!!!

f:id:gac777:20200116194858p:plain

bundle exec rails s

f:id:gac777:20200116194959p:plain

あら・・・Please run rails webpacker:install・・・・やります。

rails webpacker:install

yarnがない・・・・ f:id:gac777:20200116195111p:plain

yum search yarnしたけど、そんなのないと言われたのですが、↑のところで下記にいけといわれるので行きます。

yarnpkg.com

f:id:gac777:20200116195308p:plain したがってコマンド実行です。

curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo

f:id:gac777:20200116195406p:plain

sudo yum install yarn

f:id:gac777:20200116195444p:plain

今度こそ!

rails webpacker:install

動き出した!!

f:id:gac777:20200116195526p:plain

インストール完了!!!

f:id:gac777:20200116195632p:plain

rails sするぞー
うごいたーーーーーー

f:id:gac777:20200116195712p:plain

3. MACからRailsアプリへのアクセス

次回へ・・

4. VagrantのファイルとMAC側のファイルの同期

次回へ・・・

まとめ

本来であればこの記事で環境すべて構築して終えようと思ったのですが、ログ全て残そうとキャプチャを貼り続けたらページが長くなり、
はてブロが長文記載したときにプレビューがタブ切り替えなどで確認がなかなか辛く、一度ここで終えようと思います。 (後で考えたら、エラーログも画像ではなくテキストベースなら検索にHITするのに・・・という致命的なミスを犯してました。)

今までの経験で生きたことは下記3つが一番大きいかと思います。

  • makeやヘッダファイルの存在を認識してる
  • yumのコマンドを知っている
  • linuxパッケージでdevelって付いてるとヘッダーファイル込みのパッケージになっている

※過去の知識ですが、トラブル時に対応しながらyumのパッケージ検索ってどうやるの?makeって何?develってなんじゃみたいな事を調べながら知識をつけてきた行動が今の知識に活かされています。

さいごに・・
色々壊してもすぐ構築し直せるvagrantはやはり素敵でした。