Railway gun

Web系企業に勤めるサラリーマンが書くブログ。技術に関してだったり他の物だったりします。

【登山】富士山登ってきた② ~装備調達編~

さて、富士山に登るには雨具・登山靴・リュック・ヘッドライトがとりあえず必要という事はわかりましたが、どこで買うのかわかりません。

1:リュックサックはある。

リュックサックはたまたま"Coleman"のリュックを持ってました。

f:id:pioneer_in_ocean:20171112162811j:plain

ご存知の方も多いと思いますが、Colemanはキャンプ用品のメーカー。
「キャンプ用品なら登山用品と同じだろう」
という、後から考えれば非常に浅はかな考えで、これでOKとしました。


2:ヘッドライトを買う。

ヘッドライトなんという物を使ったことはありません。

ていうか、「懐中電灯じゃいかんのか」と思っていましたが、これも調べてみると、手が塞がる懐中電灯は登山に全く向いていないようです。

ただ、ヘッドライトの条件は「雨が降っても大丈夫」程度だとのことなので、サクッとAmazonで買ってしまいました。お値段1699円。

懐中電灯と比べれば高いですが、まぁ、重要そうな物にしては安いので良しとします。

https://www.amazon.co.jp/gp/product/B019ILZAUG/

2:登山靴と雨具を買う。

これもそもそも「スニーカーでいいんでは?筑波山は運動靴で登ったよ?」とか思っていましたが、ググってみると「スニーカーは避けろ」という記載がいっぱい出てきます。。タダでさえ、体力のない私が、スニーカーで登ったら酷いことになりそうです。

じゃあ、またネットで買うか、、と、これまたgoogle先生に「登山靴 購入 ネット」等でググる

「登山靴は絶対にネットで買うな!」

という痛烈なお言葉があるわあるわ・・。どうやら単なるスニーカーと違い、登山靴は履いてみないとフィット感が分からず、靴擦れなどの要因になりやすいようです。(普通の靴よりも固いとか。)

じゃあ仕方ないので、どっかで買うか、と思い実店舗に行くことに。といっても登山用品店など行ったことも無いのですが、以前、越谷レイクタウンに行った際、「モンベル」というショップがあったことだけは覚えていました。

www.montbell.jp

つまり、モンベルに行けば買えるんでは、と思い近くのモンベルショップに。

で、行ってみてみると、種類が色々あって、登山童貞の私にはさっぱりわかりません。ひとしきり、「登山やってますよ私」感をだしつつ物色してみましたが、どれを買えばいいのかは結局わかりません。

意を決して優しそうな若い女性の店員さんに聞いてみます。

私「すみません、登山靴が欲しいんですけども。」

店員さん「はい、どのような物をお探しでしょうか。」

私「どのような物かもわからない有様でして・・。とりあえず富士山に登ります。」

店員さん「富士山ですか。初めてのシューズですか?」

私「はい・・。何を買えばいいんでしょう?」

と赤裸々に話してみると、「でしたら、これはいかがでしょう?」と勧めていただいたのが、コレ。

webshop.montbell.jp

第一印象はまず、「(値段が)高っ!」としか思いませんでした。店員さん曰く、「この靴はソールが比較的柔らかく、登山をしたことが無い人でも履きやすい。でもグリップ力はあるし、富士山のような岩場の多い山でも大丈夫。ゴアテックス製だから雨でも問題ない。」との事。

それを聞いても(ソールが柔らかいって、じゃあもっと本格的な登山靴はソールが固いってことか?なんでわざわ歩きにくくするんだ。)としか思わず、そもそもゴアテックスって何?という感じでしたが、とりあえず試し履きして、ショップにあった岩場を再現したような場所を歩いてみると、

「おお、確かに滑らないぞ!」

という事はわかったので、これを買う事に。

~続く~

【登山】富士山登ってきた① ~行きたくない編~

仕事や技術とは全然関係が無い話ですが、8月に富士山に登ってきました。

事の発端は、会社の同期が結婚することになり、その結婚式で流すためのムービーを撮るのに協力することになったんですが。

同期H(結婚する本人)「なんかにチャレンジする的なムービーがいいな。」

同期M「じゃあ、富士山に登るとかいいんじゃね?わかりやすいし!」

同期A「お、いいね!行くしかないね!」

私「え・・・マジ?」

という軽いノリで登ることになってしまいました。はっきり言って、行きたくありません。

この同期達は、文系・テニス大好き・社交性豊か、という私と全く違う人種たちです。偏見を込めていえばリア充たちです。

私は家に引きこもってシミュレーションゲームをやるのが趣味、登山など一切興味もありませんでした。

もちろん経験などあるはずもなく、子供の頃、筑波山金華山(岐阜にある山)に登ったことがあるくらいです。


むしろ、登山好きの方には大変申し訳ないながら、

  • 毎年、あんなに遭難や死者が出てるのに登るヤツはおかしい。人に迷惑をかけている。
  • 熊やスズメバチが出る場所に好き好んでいくのはアホではないか?襲われたらどうする?
  • そもそも趣味として50代以上の人がやることじゃないのか?

という偏りまくった見方をしてました。

しかし、登る事になってしまった以上、体力も無い、山に興味も無いながら、とにかく無事に帰ってくることを考えるしかありませんが、そもそも登山には何が必要なのかとかからわかりません。

という事で、Google先生に「富士登山 装備」と聞いてみたところ、たくさんの参考になるサイトが出てきました。
特に↓のサイトさんの情報が参考になりました。

fujisan.rash.jp


なるほど、雨具・シューズ・リュックサックがとにかく重要、後はヘッドライトが必要なようです。

情報は集まったものの、そもそもどこで買えばいいのかがわかりません。ネット?

~続く~

AWS ソリューションアーキテクト アソシエイトを取得したので勉強方法など

今やIT業界で知らない者はいないレベルのAmazon Web Services(AWS)ですが、ソリューションアーキテクトアソシエイト(以下、SAA)認定を取得してみましたので、(100番煎じくらいですが)勉強方法などを共有します。

基本方針は

  • できるだけお金を使いたくない
  • ダラダラ勉強せずサッサと取りたい

の2点です。AWS Summit Tokyo2017までに間に合わせて合格者バッジが欲しいという事もあり、かなり短めの期間で臨みました。

自分のAWSと知識

  • AWS歴は5年ほど。業務案件と私用の双方で利用。
  • ただ、業務でもEC2の単体利用が中心であり、普通のホスティングを使っているのと変わりはない。
  • EC2もオートスケールやIAMロールなどをガッチリ設定しての利用はほぼ無し。
  • その他、S3、VPC、RDS、DynamoDB、Route53、ELBなどは概要の理解と触ったことがある程度。
  • AWSサポート、リザーブインスタンス、スポットインスタンス等は一応の利用経験あり。

要するに「アンマネージドなホスティングとしてAWSを使ってるよ!後は触ったか触ってないかくらいかな。」程度でした。

試験要件

公式ホームページより。AWS 認定ソリューションアーキテクト – アソシエイト

  • 試験時間: 80 分間
  • 本試験受験料: 16,200円(日本語版/税込)
  • AWS における分散システムの可用性、コスト効率、高耐障害性およびスケーラビリティの設計に関する 1 年以上の実際の経験
  • 最低でも 1 つのハイレベルプログラム言語についての深い知識
  • AWS ベースのアプリケーションに関する要件の識別と定義についての能力
  • オンプレミスと AWS の構成要素を組み合わせた複合システムのデプロイの経験
  • AWS プラットフォームで安全性と信頼性の高いアプリケーションを構築するためのベストプラクティスを提供する能力

やはり情報処理技術者試験などと比べると高めですね。私は会社から取れと言われた訳でもないのも、自腹で受験しました。みみっちい話ですが、2万円弱を無駄にする訳にはいかない!というのは割りと大きな勉強のモチベーションとなりました。

試験対策

①「Architecting on AWS」の受講

手始めに会社の後輩からオススメされた以下の研修を受講しました。
aws.amazon.com

価格は$2100!それなりにしますね・・。ここは会社の研修制度で受講させてもらいました。
オススメかオススメでないかと言われると会社で受けさせてくれるならばオススメです

受講の効果としては、

  • SAA試験でかなり問われる「ベストプラクティス」を体系的に解説してくれる
  • 今までちゃんと触ったことのないサービスも「どのように使うか」を体系的に習得できる
  • 講師の方が試験で出るポイントを教えてくれる

など、やはりオフィシャルの研修だけあって、充実した内容です。。私の参加した会は30代〜40代の方が中心のようでした。

なお、この研修の難点を上げるとすると

  • Qwiklabsを使ったハンズオン演習があるが、受講期間中のみしか利用できない。
  • グループディスカッションと発表があるため、その類が嫌いな方には辛い。
  • 品川会場で受講した場合、食事処が周囲に無い。

と言ったところでしょうか。特にQwiklabsの演習は研修後にも復習したいと思っていたため、少々残念でした。それなりのお金を払ってはいるので、受講後も演習ができるように是非していただきたいですね・・。受講期間中であれば、自宅からでも演習をやり直す事ができますので、期間中にマスターすることをおすすめします。

難点も挙げましたが、講師の方は自分の業務での利用を踏まえた質問等にも応じてくださるので、内容自体は価格に見合ったものを提供してくれる研修という印象です。

②本を読みながら手を動かす勉強

「Architecting on AWS」では各プロダクトの細かいところまでハンズオンで学習することはありません。受講後、デプロイの仕方の概念等は理解していても実際の利用経験が不足しているサービスが割りとありましたので、以下の本を読みながら、AWSサービスを実際に使ってみる経験を積みました。

Amazon Web Services実践入門 (WEB+DB PRESS plus)

Amazon Web Services実践入門 (WEB+DB PRESS plus)

AWSのサービスは良く手が加えられますので情報が古いところもありますが、AWSコンソール(GUI)とコマンドラインツール(CLI)双方で使い方が載っていますので、非常に分かりやすくオススメです。
基本的には、自分のAWSアカウントで使ったことの無いサービスを中心に触っていったのですが、やはり個人のアカウントでお金をかけたくないので、Qwiklabsも活用しました。
qwiklabs.com

全部が無料では無いのですが、無料でAWSサービスを触れるセッションも用意されています。Qwiklabsはその物が学習用のセッションを提供しているのですが、重要なのは無料で学習対象のサービスを触れる環境を与えてくれるというところです。つまり、QwiklabsでAWSコンソールを立ち上げつつ、実際は本に従って学習していく、と言う形で極力自分のアカウントを使わない(=お金を使わない)ようにしていきました。

③模擬試験の受験とサンプル問題の確認

試験の公式ページに案内がありますが、2160円で模擬試験を受験することが可能です。
また、各試験のサンプル問題がPDF形式で無料配布されていますので、両方とも実施いたしました。
aws.amazon.com

今回の学習の中でこれが最も効果がありました。自分の到達度を知ることができるというのも大きいですが、公式に問題だけあって本番にかなり近いレベルだったと記憶しています。(問題をコピーすることは出来ないため、記憶頼りですが・・。)

サンプル問題は全て答えがついていますので、答えを隠しながら自分で解いてみるのが良いでしょう。また、SAA試験だけでなくデベロッパーとSysOpsのサンプル問題もやっておくと良いです。3試験のサンプル問題をすべてやったとしても1時間以内には終わるでしょう。(もちろん、間違えた問題は何が間違いかを考える事が効果的な学習につながる部分です。)

模擬試験は受験直前に実力試しに受けるというよりは、ある程度学習が進んだあたりで一度受けてしまうことをおススメします。個人的な意見ですが、実力を測るという事も大事ですが、実際に問題を解く、間違えたと思われる答えの正解を考え直すなどの作業が模擬試験の効果が発揮されたところだったと思います。模擬試験は自分のPCで受けられますが、最終的な正解は表示されません。問題と選択肢を覚えておいて、後で何の問題を間違えたか考え直す作業が本番につながります。私は「Architecting on AWS」の講習を受けた数日後に受験しましたが、正解率45%で不合格でした。正直、もっと簡単かと思っておりましたが、現実を目の当たりにしたのでより集中して学習するモチベーションにつながりました。

④まとめ

最終的にかかったお金と期間をまとめてみます。

項目 費用
Architecting on AWSの受講 0円(会社費用のため。実際は$2100。)
Amazon Web Services実践入門 0円(会社に転がっていたため。実際は2,786円。)
Qwiklabs 0円(無料部分のみ)
AWS使用料 500円
模擬試験 2160円
受験料 16,200円
学習方法 機関
①「Architecting on AWS」の受講 3日間
②本を読みながら手を動かす勉強 6日間
③模擬試験の受験とサンプル問題の確認 (②と並行)

という事で自腹で払った費用は18,860円、学習期間は2週間弱、といったところです。やはり受験費用がそれなりにしますので個人で受けるとそこそこの支出ですね。

なお、結果は正解率66%で合格でした。他の受験体験記などを拝見したところ、65%程度が合格ラインとの記載が多くみられましたので、かなりギリギリだったと思われます。AWS Summitに間に合わせるため、かなり短い期間で受験に臨みましたが、実際はもう少し勉強しておくべきだったと反省しております。

ギリギリで合格したからというわけではありませんが、試験内容は思ったより難しかった印象です。「アソシエイト」レベルのため、正直「AWSは長年使っているし、使ったことのないサービスも概要は知っているし、大丈夫だろう」と思っていましたが、かなり広範にわたって知識を問われたという感じでした。恐らく、模試で「不合格」の現実を突きつけられなければ、本番も不合格だったかと思います。他の合格者の方ともお話したのですが、割と同じような意見を仰っておりましたので、AWS利用経験のある方もしっかりと準備をして臨まれるとよろしいかと思います。

仮説推論エンジン"Phillip"を動かしてみた

昨今流行りのAIの影響か、推論エンジンを動かす機会があったので、構築メモ。

(※私はネットワークレイヤの人間なので推論エンジンって何?って聞かれても、あまり詳しくはわかりません。会社から依頼されたのですが、明らかに人選ミスな気がする。)

いくつかそれっぽいものがgithubに公開されているが、今回使ってみたのは「Phillip」という物。
github.com

githubのReadmeを見る限りでは、日本の方が作られた模様。WindowsOS Xでも動くそうなのだが、Linux環境で動かすことを求められたのでLinux
環境はみんな大好きAWSAmazon Linuxインスタンスを立てて試してみた。

1.ダウンロード

githubに書かれているインストール方法に従ってとにかくやってみる。
Getting Started · kazeto/phillip Wiki · GitHub

まずはサクッとgit clone。

$ git clone https://github.com/kazeto/phillip.git

次の手順は、

Move to the directory where Phillip is installed.

と書かれているが、とりあえずホームディレクトリで動けばいいのでこのままで。

2.Makefile生成

これも公式に従って実施するだけ。pythonは2.7指定だったのでyumでインストール済み。
聞かれるのは

  1. バイナリの配置場所
  2. LP-SOLVEを使うかどうか
  3. GUROBIを使うかどうか

の3つだけ。バイナリ配置場所はデフォルトで良しとし、ライブラリは二者択一で良いようなので、LP-SOLVEを使うこととする。
(GUROBIはダウンロードにアカウント作成などが必要で面倒くさかった。。。)

$ cd ./phillip
$ python tools/configure.py
*** Configuration of Phillip ***
--> BINARY TARGET [default=bin/phil]:
--> USE-LP-SOLVE [y/n]: y
--> USE-GUROBI [y/n]: n

3.ライブラリのインストールコンパイル

あとはライブラリをダウンロードしてコンパイルするだけらしい。LP-SOLVEの5.5系なら良いらしいので↓からダウンロード。
https://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.5/

何がなんだかわからんが、とりあえず”lp_solve_5.5.2.5_exe_ux64.tar.gz”がそれっぽいので落として展開。公式にパスを通せと書いてあるのでパスを通す。そんでmake.(exportコマンドを打っているように見えますが、実際は.bash_profileに記載してます。)

$ mkdir lp_solve 
$ mv lp_solve_5.5.2.5_exe_ux64.tar.gz ./lp_solve
$ tar xzvf ./lp_solve/lp_solve_5.5.2.5_exe_ux64.tar.gz
$ export CPLUS_INCLUDE_PATH=$HOME/phillip/lp_solve
$ make
〜省略〜
rc/././sol/ilp_solver.h:14:20: fatal error: lp_lib.h: No such file or directory
 #include <lp_lib.h>
                    ^

はい。lp_lib.hが足りないらしい。多分ソースファイルにおいてありそうなので、ダウンロードのサイトに戻って今度は"lp_solve_5.5.2.5_source.tar.gz"をダウンロードして展開。パスも通す。

$ mkdir lp_solve_src
$ mv lp_solve_5.5.2.5_source.tar.gz ./lp_solve_src
$ tar xzvf ./lp_solve_src/lp_solve_5.5.2.5_source.tar.gz
$ export CPLUS_INCLUDE_PATH=$HOME/phillip/lp_solve_src/lp_solve_5.5
$ make
〜省略〜
/usr/bin/ld: cannot find -llpsolve55
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

なるほどなるほど〜。こんどはlpsolve55というライブラリが足りないらしい。ライブラリだからdevかなという適当な推測の元、今度は"lp_solve_5.5.2.5_dev_ux64.tar.gz"をダウンロードして展開。ライブラリとしてパスを通す。

$ mkdir lp_solve_dev
$ mv lp_solve_5.5.2.5_dev_ux64.tar.gz ./lp_solve_src
$ tar ./lp_solve_dev/lp_solve_5.5.2.5_dev_ux64.tar.gz
$ export LIBRARY_PATH=$LIBRARY_PATH:$HOME/phillip/lp_solve_dev
$ make

無事に終わったらしい。

4.知識ベースのコンパイル

公式に従って、LISP形式のインプットを準備する。知識ベースが何かはわかってないよ。詳しい同僚はオントロジーがどうトリプルがどうとか親切に教えてくれた。(けど、基礎知識がなさすぎてあんまりよくわからんかった。あとで調べてみよう。)

  • kb.lisb
    (B (name kb01) (=> (steal-vb e1 x y) (criminal-jj e2 x)))
    (B (name kb02) (=> (criminal-jj e1 x) (arrest-vb e2 y x)))
    ; "Tom robbed jewels. Police arrested him."
    (O (name obs01) (^ (steal-vb E1 Tom Jewel) (arrest-vb E2 Police he)))

そして、この入力をつかって知識ベースをコンパイル

$ bin/phil -m compile -c dist=basic -c tab=null -k compiled -P 8 kb.lisp
# 04/05/2017 11:02:41] Phillip starts...
# 04/05/2017 11:02:41]   version: phil.3.19
〜省略

とりあえずできたっぽいね。

4.実行

これでいよいよ実行環境が整ったっぽい。

$ bin/phil -m infer -k compiled -c lhs=depth -c ilp=weighted -c sol=gurobi -P 8 -T 120 obs.lisp
〜省略
<phillip>
<configure>
<version>phil.3.19</version>
<time_stamp compiled="Apr  5 2017 10:57:03" executed="Apr  5 2017 11:15:15"></time_stamp>
<components lhs="DepthBasedEnumerator" ilp="weighted-converter" sol="gurobi-optimizer"></components>
<knowledge_base path="compiled" size="2" max_distance="-1"></knowledge_base>
<params timeout_lhs="-1" timeout_ilp="-1" timeout_sol="-1" timeout_all="120" verbose="1" gurobi_thread_num="8" kb_thread_num="8"></params>
</configure>
</phillip>

出力結果が何なのかは後でゆっくり見るとしてとりあえず動作しました。
大層なことをやったような書き方になってしまいましたが、公式のチュートリアルそのまんま走らせただけですね。。。

5.追記

どうも出力に結果が含まれていないと思ったら、オプションで指定しているプログラム指定がLP-SOLVEになっていなかった。

$ bin/phil -m infer -k compiled -c lhs=depth -c ilp=weighted -c sol=lpsolve -P 8 -T 120 obs.lisp
<phillip>
<configure>
<version>phil.3.19</version>
<time_stamp compiled="Apr  5 2017 10:57:03" executed="Apr  6 2017 03:39:53"></time_stamp>
<components lhs="DepthBasedEnumerator" ilp="weighted-converter" sol="LP-Solve"></components>
<knowledge_base path="compiled" size="2" max_distance="-1"></knowledge_base>
<params timeout_lhs="-1" timeout_ilp="-1" timeout_sol="-1" timeout_all="120" verbose="1" gurobi_thread_num="8" kb_thread_num="8"></params>
</configure>
<proofgraph name="obs.lisp::obs01" state="optimal" objective="10">
<time lhs="0" ilp="0" sol="0.001" all="0.001"></time>
<timeout lhs="no" ilp="no" sol="no" all="no"></timeout>
<literals num="4">
<literal id="0" type="observable" depth="0" active="yes" paid-cost="yes" cost="10.000000">(steal-vb E1 Tom Jewel):0</literal>
<literal id="1" type="observable" depth="0" active="yes" paid-cost="no" cost="10.000000">(arrest-vb E2 Police he):1</literal>
<literal id="2" type="hypothesis" depth="1" active="yes" paid-cost="no" cost="12.000000">(criminal-jj _u1 he):2</literal>
<literal id="3" type="hypothesis" depth="2" active="yes" paid-cost="no" cost="14.400000">(steal-vb _u2 he _u3):3</literal>
</literals>
<explanations num="2">
<explanation id="0" tail="0:{1}" head="1:{2}" active="yes" backward="yes" axiom="kb02" gap="">(arrest-vb E2 Police he):1 => BACKWARD(axiom=1) => (criminal-jj _u1 he):2</explanation>
<explanation id="1" tail="1:{2}" head="2:{3}" active="yes" backward="yes" axiom="kb01" gap="">(criminal-jj _u1 he):2 => BACKWARD(axiom=0) => (steal-vb _u2 he _u3):3</explanation>
</explanations>
<unifications num="1">
<unification l1="0" l2="3" unifier="E1=_u2, Tom=he, Jewel=_u3" active="yes" gap="">(steal-vb E1 Tom Jewel):0 ^ (steal-vb _u2 he _u3):3 => UNIFY => (= E1 _u2):4 ^ (= Tom he):5 ^ (= Jewel _u3):6</unification>
</unifications>
</proofgraph>
</phillip>

BitbucketのSSH接続エラー

みんな大好きBitbucketは自分も愛用しているのですが、
今までpushする際にはSSHではなくHTTPS経由でpushしていました。
SSH経由に変えようとしたところ、アホみたいなミスでpushエラーが起きまくったので記載。

発生したエラー

要するに「あなたの登録した鍵ではアクセスできませんよ!」というエラー。

$ git push -u origin --all
ermission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

状況(やったこと兼手順)

Macで以下の手順を実施。途中の鍵コピー以外はCentOSなどでも同じはず。

SSHキーを作成。
$ ssh-keygen -f ~/.ssh/bitbucket -t rsa -C hoge@hoge.com
Bitbucketに鍵を登録。

鍵をコピーする。(Mac以外の方は手動でコピーすれば良いです。)

$ cat ~/.ssh/bitbucket.pub | pbcopy

で、Bitbucketのアカウントの管理>SSHキーから公開鍵を登録。

SSHのconfigを設定

エディタでSSHのコンフィグにBitbucket宛の設定を記載する。
(注:ここが間違っています。正解を見たい方は一番下をご覧ください。)

Host bitbucket
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket
  User git
BitbucketにSSHでアクセス。

まずはSSHコマンドでアクセス。普通に成功する。

$ ssh -T git@bitbucket
logged in as hogehoge.

You can use git or hg to connect to Bitbucket. Shell access is disabled.
リポジトリディレクトリに異動し、push先を設定。
$ cd <リポジトリのディレクトリ>
$ git remote add origin git@bitbucket.org:<ユーザ名>/<リポジトリ名>.git
Bitbucketにgitリポジトリをpush。ここで失敗する。
$ git push -u origin --all
ermission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

原因

SSHのconfig設定におけるHostがgitコマンドにあっていなかった。

誤った設定

Host bitbucket
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket
  User git

正解

Host bitbucket.org
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket
  User git

SSHのみを使う時にはHostはわかりやすく、短い物を設定しますが、
gitコマンドで設定したremote先はbitbucket.orgを参照するため、
誤った設定では「そんなホストに対応した鍵はない」となってしまいます。

そのため、SSHでは成功していてもgitコマンドでは失敗、というわけでした。
SSH関連で手間取ることはないと慢心していたら、1時間ほど費やしてしまったのでメモ。

configureのコンパイラエラー対処

おなじみconfigure => make => make installの流れでつまづいた場合の解決策。
エラーが出次第、徐々に追記していきたい。

C++、g++のコンパイラが無いと言われる。

エラー表示
configure: error: C++ compiler g++ does not work or no compiler found
対処方法

gcc,gcc-c++yumで入れてやる

$ sudo yum install gcc gcc-c++

zlib.hが参照できないと言われる

エラー表示
configure: error: zlib.h is required
対処方法

zlib,zlib-develをインストールする

$ sudo yum install zlib zlib-devel

bzlib.hが参照できないと言われる

エラー表示
configure: error: bzlib.h is required
対処方法

bzip2,bzip2-develをインストールする

$ sudo yum install bzip2 bzip2-devel

Windows7にVagrant環境を作ってRuby on Railsを動かしてみる①

Ruby on Railsを学んでみようと思い、無料で公開されているチュートリアルをやってみています。

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

今まではAWS上に建てたサーバでコーディングしていましたが、ブラウザで作ったサイトを見るのにローカルの方が楽なので、PC上にVagrantをインストールして、CentOSを動かしたうえでRailsをやってみようと思います。

Vagrant環境の準備

Vagrantを使うためには

  1. Ruby
  2. VirtualBox
  3. Vagrant

のインストールが必要になります。
どれからインストールしてもそれほど問題はありませんでした。

Rubyのインストール

私のローカルPCにはRubyすら入っていなかったので、まずはRubyを入れます。

下記のサイトにWindowsインストーラ形式のバイナリがおいてあるのでダウンロードしてきます。私は最新版の2.2.1-p85(64ビット版)を落としてインストールしてきました。
RubyInstaller for Windows

インストーラ環境変数まで設定してくれる・・。便利!コマンドプロンプトで確認してみます。(Linuxのコマンドのように書いてありますが、"C:\"などと書くのが面倒なだけで、Windowsコマンドプロンプトを使っています。ここら辺のコマンドはどっちでも一緒だし。)

$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x64-mingw32]

無事にインストール完了。

VirtualBoxのインストール

同じく下記のサイトからダウンロードしてインストールするだけ。
Downloads – Oracle VM VirtualBox

適当にインストーラを進めて行けば無事にインストール完了。
ここで再起動を求められるかもしれません。

Vagrantのインストール

コレも簡単。下記のサイトからダウンロードしてインストール。
Vagrant

コマンドプロンプトからvagrantコマンドが使えるかを確認。

$ vagrant -v
Vagrant 1.7.2

ココも問題なく、インストール完了。これでvagrant環境を立ち上げる前の前準備は完了。

バーチャルマシンの起動

まずはVagrantにバーチャルマシンを登録する作業からです。下記に使えるイメージファイルがおいてあるため、好きな物を選択。
A list of base boxes for Vagrant - Vagrantbox.es

CentOSが使いたかったので、"CentOS 6.5 x86_64"を選択します。右に書いてあるURLをコピーして、コマンドプロンプトで下記のコマンドを打ちます。
(※ディレクトリは好きな場所に移動してください。)

vagrantはコマンド名、boxはイメージファイル全般を扱うオプション、addはboxのオプションでイメージを追加するオプション、centos_6_5はダウンロードするイメージのタグのようなもの(なんでもOK)、そして最後にダウンロードするイメージのURLです。

$ vagrant box add centos_6_5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

自動的にダウンロードが始まるので、完了するまでしばし待ちましょう。
ダウンロードが完了したら、下記のコマンドで環境の初期化を行います。

$ vagrant init centos_6_5

"Vagrantfile"がカレントディレクトリにできたよ!というメッセージが出てくると思います。
これはVagrantを起動する際に使う設定になりますが、とりあえず動かしてみるには触らなくとも大丈夫ですので、そのまま起動してみます。

$ vagrant up

ディスク容量が圧迫されていたり、Ruby環境変数がうまく通っていないなどが無い限り、うまくいくと思います。デフォルトでは127.0.0.1の2222ポートがsshでつなげるようになっているはずです。(その旨表示が出ます。)

ログイン

TeraTermputty等のコンソールを使って127.0.0.1:2222にアクセスします。アカウント名・パスワード共に"vagrant"でログインできるはずです。
f:id:pioneer_in_ocean:20150310224711p:plain
f:id:pioneer_in_ocean:20150310224827p:plain

無事にログイン。f:id:pioneer_in_ocean:20150310224923p:plain


とりあえず、本日はここまで。