『Ruby警官から警告を受けろ』環境準備奮闘記

はじめに

CodeIQの『Ruby警官から警告を受けろ』に挑戦しました。

今回は、解答の解説ではなく、問題を解き始める準備をするまでの経過について書きます。同じ感じで環境構築にハマっている人の参考になれば幸いです。こんなハマり方をする人が私以外にいればの話ですが…

ちなみに、私のマシン環境は次の通りです。

1日目

おっ、たべぷげらさん*1の新しい出題だ。ふむ、 Ruby でわざと警告を出すとな。 Ruby は全く触ったことがないけれど、いい機会かもしれないな。
(*1 出題者の tbpgr 様の、私の中での呼び名。関連:「おじいさん」「ばあさん」)

なになに、

  • Ruby 2.0.0-p451
  • rubocop 0.21.0
  • rspec 2.14.1

ふむ。 rubocop も rspec も、聞いたことすらない。

(要VagrantVirtualBox

あれだ、英文を読んでいるときに、知らない単語が1つ出てきても何とか推測できるが、4つも続くとお手上げだ。まさにその状態。

警告を出すために以下の情報をご活用ください。

RuboCopのGitHub URL
https://github.com/bbatsov/rubocop

RuboCopのGemのURL
https://rubygems.org/gems/rubocop

 

挑戦支援ツール
https://github.com/tbpgr/codeiq_vagrant_for_rubocop

やばい。鉄壁のディフェンスだ。俺を全く寄せ付けないぞ。 GitHub とか Git って、よく聞くけど何だろ。 subversion みたいなもんかな。 Gem って、まさか Game Programming Gems のことじゃないよな。でも他に知らんし。

何から手を付けていいかさっぱりわからんが、とりあえず GitHub というのを見てみるか。

RuboCop is a Ruby static code analyzer. Out of the box it will enforce many of the guidelines outlined in the community Ruby Style Guide. Most aspects of its behavior can be …

…うむ、さっぱりわからん。

この挑戦支援ツールというのはどうだろう。

環境構築用 Vagrant

環境構成

  • OS : Ubuntu 1204 LTS 64bit
  • ……

う、う、うぶんつ!?(って読むのか?)これって確か Linux の一派だよな? 下で ssh とかやってるし、間違いないな。そうか、どうりで、どれもこれも聞いたことがないわけだ。この Vagrant ってのも、 Ubuntu のアプリか*2。だめだ、ちょっと俺には無理。
(*2 後で誤りと判明する。)

2日目

いや、高いも何も、 Ubuntu 限定って、ありえないっしょ! …いや、実際有り得ないよな、俺の勘違いか? っていうか、挑戦者少ないみたいだし、みんなわかってないのでは? 折角だから、ちょっくら聞いてみるか!

(…しばらくやり取り…)

うおぉ仕事はええ!

3日目 ~Vagrant編~

やっと週末だぜ。さて、折角書いてくれたドキュメントに素直に従ってみましょうかね。俺の場合は、この【ホストOSにVagrantVirtualBox環境がないが、これから入れようとしている場合】になるのかな。ええと、

・Vagrant1.5.3をインストール
・VirtualBox4.3.10をインストール
・残りは、下記のREADMEの手順で環境構築できます。
https://github.com/tbpgr/codeiq_vagrant_for_rubocop

ふむ、まずは Vagrant ですな。ダウンロード…すげーでかいな!残り10分とか言ってやがる。やっと終わった。はい、同意します、はい、はい、…と。さて実行してみよう。va… va…(スタートメニューの中を探し中)…あれ、ないぞ? まあいいか。

次は VirtualBox か。うお、こっちもなかなかでかいな…やっと終わった、はいはい同意しますよ。うっ、何やらデバイスドライバがびしばしとインストールされるぞ。

次はREADMEか…って、これはいつぞやの挑戦支援ツールのページではないか! ふーむ、冷静に見ると、「動作確認済み:Windows 7」って書いてあるな。そうか、 VirtualBox を使って Windows 上で Ubuntu を動かすのか! ということは、 VagrantVirtualBox に環境を構築するツールなのか! ピカッチ!

さてさて、手順通りに素直にやりますよ。今日の俺は素直だよ!

利用手順

ええと、git よくわからないし(早速素直じゃない)、ZIPをダウンロードして解凍するのでもいいみたいだから、そうしよう。

  • cloneしたフォルダに移動
  • VMを起動
vagrant up

え、なんだ、この VMを起動、vagrant up ってのは、何をどうするんだ? まだ Ubuntu の構築前なのにシェルが必要? 試しにコマンドプロンプトを開いてそこに打ってみるか。

C:\Users\saito\work\codeiq\q883\codeiq_vagrant_for_rubocop-master>vagrant up
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:

Vagrant could not detect VirtualBox! Make sure VirtualBox is properly installed.
Vagrant uses the `VBoxManage` binary that ships with VirtualBox, and requires
this to be available on the PATH. If VirtualBox is installed, please find the
`VBoxManage` binary and add it to the PATH environmental variable.

おっ、なんか出た! やった! …ってこれエラーメッセージじゃんか! ええとなんだ、PATHが通ってないのかな。よし、

C:\Users\saito\work\codeiq\q883\codeiq_vagrant_for_rubocop-master>PATH=%PATH%;C:\Program Files\Oracle\VirtualBox

(↑直接打ったもんだから、コマンドプロンプトを開くたびに毎回打つはめに…)

C:\Users\saito\work\codeiq\q883\codeiq_vagrant_for_rubocop-master>vagrant up

恐ろしく時間がかかるな…

数分~十数分程度かかると思いますので、こんなことをしながら待つ
  • コーヒーを飲む
  • トイレに行く
  • CodeIQの即答系問題を解く
  • 「rubocop vagrant up なう #CodeIQ #rubocop問題」とつぶやく

まじか。

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
The guest machine entered an invalid state while waiting for it
to boot. Valid states are 'starting, running'. The machine is in the
'poweroff' state. Please verify everything is configured
properly and try again.

If the provider you're using has a GUI that comes with it,
it is often helpful to open that and watch the machine, since the
GUI often has more helpful error messages than Vagrant can retrieve.
For example, if you're using VirtualBox, run `vagrant up` while the
VirtualBox GUI is open.

やっと終わったけど、電源が入らないとか、 VirtualBox GUI を開いたままやってみそ、とか言ってるような。ためしに VirtualBox GUI から起動してみるか。

f:id:saito_ta:20140527013038g:plain

VT-x is not available. (VERR_VMX_NO_VMX).

ななな何ですと? よくわかんないので、ググってみるか。…おお、対処法がいっぱい出てくる。みんなもこのエラーで困ってるのか。なになに、

VBoxManage modifyvm vmname --longmode off

うむ、試してみるか… だめだな。

<HardwareVirtEx enabled=”false”/>

…これもだめか。

VBoxManage modifyvm (VM名) –hwvirtex off
VBoxManage modifyvm (VM名) –vtxvpid off

やっぱりだめ。

Make sure Virtualization is enabled in your BIOS

これだ!ていうか、BIOS以前にそもそも、俺の石 Celeron M だからVT機能ない!おわた\(^o^)/

ぬほー! こうなったら、ぼくがんばっちゃう!

3日目 ~Ubuntu編~

Ubuntuの環境を作ってから」。この一言がどのくらいの試練を意味するのか、正直判らない… さて、Ubuntuの環境を作るからには、まずは「Ubuntu」をググるか。

http://www.ubuntulinux.jp/download/ja-remix-vhd

おっ、ここでダウンロードできるらしいぞ。…って、1GBですか!ほげー!ADSL接続でダウンロードするのに何十分かかるんだ。しかもHDD空き2GBしかないのに、展開できるんかいな。…展開後3GB、むりじゃんか。

まあね、こんなこともあろうと、USB接続の外付けHDDがあるんですよフフン。この家のどこかにね!…あった。100GBほど空いてるし、ここに展開すれば完璧!

さて、 VirtualBoxVHD ファイルを設定して、いざ起動 ………動いた!動いたよ! デスクトップが表示された! 操作がさっぱりわからない! しかも、超もっさり! アイコンをクリックすると、数秒かけてゆっくり明滅した後で、20秒くらい経ってからウィンドウが開く!

っと、突然ソフトウェアのアップデートのウィンドウが開いたぞ。更新が707個あります、らしい。念のため更新しときますかね。ぽちっと。…… Disk full で仮想マシンが落ちたっ!なんで! 仮想ディスクの上限設定は60GBで、使ってるのはまだ4GBくらいだから、……はっ、4GB! もしや…やっぱり。この外付けHDD、FAT32だ!

仕方ない、外付けHDDのパーティションを切りなおすか。確かパーティション管理のソフトを持ってたような… あった、 Partition Wizard 4 だ。って、最新版は 8 か!メジャーバージョンが 4 つも上がってるとは。無料のようだし、折角だから更新しとくか。(激しく寄り道)

80GBほど確保して、NTFSでフォーマットして、VHDファイルを移動して、いざ起動!今度はアップデートもうまくいっているようだ。遅々として進まないが。

3時間半経過)

やっとアップデート終わった!さて、ええと何だっけ、そうだ、「Vagrantfile内に書いてあるシェルを実行」だ。シェルということは、ターミナルか。ええと… これ Linux のくせにターミナルが見当たらないぞ! kterm どこだ(違) ファイラから /bin/bash をダブルクリック…何も起こらないな。ググるか。「Ubuntu terminal」と。なになに、

[アプリケーション] → [アクセサリ] → [端末]をクリックする。 

ほほう… って、そもそも「アプリケーション」が見当たらないぞ。

1. デスクトップ画面左上のDashホームをクリック。
2. テキストボックスに「terminal」と入力する。

…何も一致しないらしい。「gnome-terminal」でもだめ。

[Ctrl] + [Alt] + [T]

…出た!素晴らしい!

さて、Vagrantfileの内容は… ほうほう。コピペの仕方がわからないから見ながら打つしかないけど、まあ順番に打つだけだ。おっと、カレントディレクトリが移動したことに気付かないで、Ruby のディレクトリ内に問題ファイルをばらまいてしまったぞ。まあいいや、できた!

いやもう、達成感は十二分なので、あとはどれでもバッジがもらえればいいです。っていうか、警告以前に Ruby の文法さえわからないし! サンプルを(ネタバレ削除)すれば、6個くらいはすぐだね! 解答欄にコードを貼り付けて、「小悪党バッジください」と書いて、いざ提出! 今度こそおわた!\(^o^)/

あっ… タイミグ的に、俺か! すみません! ごめんなさい! 本当申し訳ないです! もし俺なら誤答扱いしてくださって構いませんので…(フィードバックが来るまで自分の解答を確認するすべがない…)

(5/27追記)

本当だ! 知らなかった~

自分の解答を確認してみたら、ちゃんとラベルあった。そ、そりゃそうだよね。俺がそんなヘマするわけないよねフフン…(←さっきまで青ざめてたやつ)

まあ、こんなに頑張る羽目になったのは、全て俺の知識、技術、思い込みによるわけで…

出題者様としては、 Vagrant 一発で環境が整うようにばっちり準備したのに、こんなネタにされてしまって、さぞ不本意でしょうなぁ(←どの俺が言う)

(5/28追記)

この経験を踏まえて、超初心者(私程度)向けのチュートリアルを書きました。
http://tails.hatenablog.jp/entry/2014/05/29/022033