このブログは2015年2月18日に更新を停止しました。すべての記事は https://chroju.github.io へ移行されています。

突然だけどVimperatorrcを晒してみる

非常に唐突ではあるけどvimperatorrcを晒してみようと思う。2014年の今日、あんまりvimperator関連の日本語記事って見かけない気がしていて、少しでもそのへん貢献できればなぁという思い。

vimperator自体は何年か前から使っていたのだが、カスタマイズはあまりせずにデフォルトの状態で使っていた。が、操作によってはマウス使った方が便利だったり、ちょっと中途半端な状態にあったので、一念発起してちょこちょこいじってみた。まだいじれる余地はありそうなんだけど。

" vim: set filetype=vim :

Vimで編集するとき、vimperatorrc用のハイライトがないので、似たところでfiletypeをvimとして認識させてます。

"============================
" General
"============================

" 入力欄に自動フォーカスしない
set focuscontent
" ビジュアルベルを表示しない
set visualbell
highlight Bell display:none
" :oなどでの補完候補をサーチエンジン、履歴に限定
set complete=sl
" Hintモードでアルファベット使用
set hintchars=jfnvurhgytbkdmcielsxoe
" ツールバーはアドオンとタブのみ表示
set gui=addons,nobookmarks,nomenu,nonavigation,tas
" commandモードでIMEオフ
style! -name=commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}

ここまでは基本、一般的な設定しかないかと。set complete=slは地味に効く。で、なぜか現状set hintcharsが動いてないれす。。。何がいけないのかわからん。

"============================
" Key mapping
"============================

" google検索を手早くする
noremap s :open<Space>google<Space>
noremap ,s :tabopen<Space>google<Space>

ここからキーマッピング。:openで検索もURL開くのも両方いけるのはいけるんだが、vimperatorでの自動判別がうまいこといかない(例えば「twitter おすすめ」とかで:openすると、Twitter検索で「おすすめ」を探した結果が表示されるとか)ときがあるので、明示的に:open googleを一発で開けるようにしてます。

" OS分岐
" dをブラウザ標準の「タブを閉じる」にマッピング
" vimperatorrcのリロード
js<<EOM
if(liberator.has("MacUnix")) {
  liberator.execute("map d <M-w>");
  liberator.execute("map ,r :source<Space>~/.vimperatorrc<CR>");
} else {
  liberator.execute("map d <C-w>");
  liberator.execute("map ,r :source<Space>~/_vimperatorrc<CR>");
}
EOM

dを打ったときに左隣のタブにフォーカスが移るのが気に入らないので、OSデフォルトの「タブを閉じる」ショートカットにdをリンクさせて、タブを閉じたときの挙動はTab Mix Plusで「直前のアクティブタブに移る」ように設定してる。このへん、vimperatorrcだけでなんとか設定できないものか。

あと、,rでvimperatorrcの再読み込みさせてます。この2つの設定はOSによって微妙に異なるので、分岐させますた。MacWindowsでしか使ってないのでかなり適当な分岐。

" 移動幅
noremap j 5j
noremap k 5k
" タブ移動
nnoremap h <C-p>
nnoremap l <C-n>
" タブの位置変更
map <C-l> :tabmove! +1<CR>
map <C-h> :tabmove! -1<CR>
" undo一覧から開く
nnoremap U :undo<Space>
let g:hint_tombloo_key = 'r'
" ブラウザ再起動
nnoremap <C-r> :restart<CR>

わりと良くある感じのキーマッピング

" VisualモードでC-gで選択しているテキストでGoogle検索
vmap <silent> <C-g> y<Esc><Esc>P

コメントの通り。Visualモードで文字列選択した状態でC-g押すと、選択文字列でGoogle検索します。URLの場合はそのまま開いてくれるはずだけど、やったことなし。

" タブのピン止めを@でトグル
" http://qiita.com/t3kot3ko/items/1b032940dbb79e88323e
javascript <<EOM
liberator.modules.commands.addUserCommand(["togglepin"], "add pin to current tab",
function(){
    var currentTab = gBrowser.mCurrentTab
    if(currentTab.pinned){
        gBrowser.unpinTab(currentTab)
    }
    else{
        gBrowser.pinTab(currentTab)
    }
});
EOM
nnoremap @ :togglepin<CR>

地味にピン止め使うのでキーマッピングしました。Firefoxのこの全部Javascriptでなんとかなる感じ好きよ。大好き。ちなみに以下エントリーから丸コピーしてます。

Vimperator - タブのピン留めをトグルする - Qiita

"============================
" colorscheme
"============================
" デフォルトのヒント派手すぎ><
hi Hint font-family: Arial; font-size: 21px; font-weight: bold; text-shadow: -1px -1px 2px black, 1px -1px 2px black, -1px 1px 2px black, 1px 1px 2px black; color: #33cccc;
hi HintElem color: gray; background-color: #a1e4e6;
hi HintActive color: black; background-color: #ff8700;

" デフォルトのエラー赤くてこわい><
hi ErrorMsg color:white; background-color: #ec6aa1;

デフォルトのヒントモードが色彩的に大変ウザいので……。色はもうちょい改善の余地あるかなと思ってる。

スクリーンショット 2014-02-09 10.09.25

"============================
" qmarks
"============================
qmark m https://mail.google.com/
qmark b http://b.hatena.ne.jp/chroju
qmark t http://chroju.tumblr.com/
qmark f http://cloud.feedly.com/#latest
qmark p http://getpocket.com/a/queue
qmark B http://chroju.hatenablog.jp/

QuickMarks設定。これ入れておくと、例えばgomでアクティブタブにGmailが開きます。gnmで新規タブで開ける。あんまり使ってない。

"============================
" plugin
"============================

" plugin_loader
let g:plugin_loader_roots = "~\vimperator\vimperator-plugins\ ~/.vimperator/vimperator-plugins/"
let g:plugin_loader_plugins = "_libly,direct_bookmark,sbmcommentsviewer,caret-hint,appendAnchor,stella,feedSomeKeys_3,commandBookmarklet,copy"

ここからプラグインプラグイン管理はplugin_loaderを使うとアホみたいに便利です。

普通、プラグインって~/.vimperator/plugin/フォルダに入れて(あるいはシンボリックリンク貼って)読み込ませると思うのだが、このplugin_loaderを~/.vimperator/pluginフォルダに入れれば、以下設定が適用可能に。

つまりhttps://github.com/vimpr/vimperator-plugins.gitをどっかにgit cloneしておいて、そのフォルダに対してg:plugin_loader_rootsを指定しておけばどのプラギンもシンボリックリンクとか貼らずに好きに使えるってわけです。便利過ぎ。

" Evernote Clearly
nnoremap e :<C-u>js __readable_by_evernote.__readable_by_evernote__launch(false)<CR>
nnoremap E :<C-u>js __readable_by_evernote.__readable_by_evernote__launch(true)<CR>

プラグインじゃないけど。。。アドオンのEvernote Clearyの操作をeとEにマッピングさせてる。これもどっかで拾ったコードです。

" direct_bookmark
let g:direct_sbm_use_services_by_tag = "h"
let g:direct_sbm_use_services_by_post = "h"
source! $HOME/.vimperatorrc.local

direct_bookmarkの設定。コマンドからdeliciousとかはてブとかソシアルブックマアクに投稿できるヤツです。はてブしか使ってないので、はてブだけで使えるように。

" vのみではてブコメント表示
map v :viewSBMComments<Space>-t<Space>h<Space>-f<Space>id,comment<CR>

sbmcommentsviewerの設定。ソシアルブックマアクのコメントがコマンドで見られるようになるヤツ。これもはてブだけに設定。

" feedSomeKeys
command! -nargs=+ lazy autocmd VimperatorEnter .* <args>
lazy fmaps -u='mail\.google\.com/mail' c / j k n p o u e x s r <S-i>  a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='mail\.google\.com/mail/.*/[0-9a-f]+$' c / j,n k,p n,j p,k o u e x s r a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='feedly\.com' j k n p o v gm ga gg gl / r m x s t l f b
lazy fmaps -e=vkeydown -u='www\.tumblr\.com/' j k r t q p n L l<CR>
lazy fmaps -u='www\.pixiv\.net/member_illust\.php\?mode=manga&illust_id=[0-9]+' j k

feedSomeKeysの設定。特定URL下で特定キーを無効化するプラギン。:ignorekeysより細かく設定ができるから好き。ただ、いまいち設定方法が飲み込めてなかったりもする。現状はGmailfeedlyTumblr、pixivの漫画モード(?)で設定させてる。Gmailの設定が被ってるとこなんとかしたい。。

" copy.js
javascript <<EOM
(function () {
  liberator.globalVariables.copy_templates = [
    { label: 'titleAndURL',    value: '%TITLE%\n%URL%' },
    { label: 'markdown',       value: '[%TITLE%](%URL%)' },
    { label: 'title',          value: '%TITLE%' },
    { label: 'anchor',         value: '<a href="%URL%">%TITLE%</a>' },
    { label: 'selanchor',      value: '<a href="%URL%" title="%TITLE%">%SEL%</a>' },

    { label: 'amazon',   value: 'copy clean amazon url from current page',
      custom: function() {
        var m = content.document.location.pathname.match(/dp\/(\d+)/);
        return m ? ('http://amazon.jp/dp/' + m[1]) : null;
      }
    },
  ];
})();
EOM

" 特によく使う機能をキーマッピング
map ,y :copy<Space>titleAndURL<CR>
map ,my :copy<Space>markdown<CR>

copy.jsの設定。いろいろと好きな形式でコピーが出来るようになる。{ label〜のとこの設定がそれに当たりまして、例えば:copy markdownコマンドでマークダウン記法用にタイトルとURLがコピーできる。ブログ書いてるとこれホント便利。

基本的には%TITLE%や%URL%といった変数を使って設定するんだけど、javascriptも欠けます。label: amazonではAmazonのURLを短い(アフィ用のパラメータとか除外した)状態でコピれるようjavascriptで書かれてる。詳しくは以下エントリー。

JavaScript - vimperatorプラグインcopy.jsで、いま開いてるamazonの本のページの短いURLをクリップボードにコピる。あと正規表現で好きなとこコピる - Qiita

"============================
" about:config
"============================

set! network.dns.disableIPv6=true
set! network.http.pipelining=true
set! network.http.proxy.pipelining=true
set! network.http.pipelining.maxrequests=8
set! network.http.max-connections-per-server=32
set! security.dialog_enable_delay=0
set! browser.tabs.closeWindowWithLastTab=false
set! browser.cache.memory.capacity=16384
set! browser.sessionstore.interval=500000
set! dom.popup_maximum=50
set! browser.cache.disk.enable=false
set! browser.cache.memory.capacity=-1
set! layout.spellcheckDefault=0
set! javascript.options.mem.high_water_mark=32

Vimperatorはset!でabout:configの設定ができます! 便利! これでabout:configの内容も共有できるよ! 設定内容はウン年前にやったままなので、具体的に何やってんのか覚えてないれす。メモリ周りの設定が主だったと思うので、最近の比較的軽くなったFxなら要らない設定もあるかも。

"読み込み完了メッセージ
echo "vimperatorrc loaded."

" [EOF]

最後に、vimperatorrcが読み込まれたとき用のechoを入れる。これがないと,r押しても読み込まれたのかわかんないので。

vimperator、Vimmerじゃなくても便利なのでじゃんじゃん使いましょう晒しましょう。

$ vagrant sshで仮想マシンに入れなくなった場合の対処法

やらかしました。Rails環境構築シリーズ、次回でセキュリティ周りの設定をまとめようと思い、普段の要領でiptablesをいじったりsshのポート番号変えたりしてたんだけど、なんか設定しくじったっぽくてvagrant sshできなくなった。やべえ、仮想マシンだしこれもう詰んだんじゃねと思ったんだけど、なんとか元に戻せたので対処法まとめとく。

といっても簡単な話です。

  1. Virtual BoxをGUIで開く
  2. 該当仮想マシンがリストに入ってるので強制終了し、Virtual Box上で起動し直す
  3. rootでログイン(パスワードはデフォルトでvagrant
  4. おかしい箇所を直す

コマンド叩いて操作してるので忘れがちだけど、vagrantはVirtual Box上(有料版ならVMware上も有り得るが)に仮想マシンを立ててるので、普通にGUIから入ればいい話です。rootで入ってぐいぐいヤバそうなとこ直して、直したらターミナルからssh試してみてってのを交互に繰り返して直しませう。

rootで入り直す前に一度VM落とす手順を入れましたが、こうしないとGUIから入れないみたいです。僕の場合だとターミナルでiptablesとかいじって、よしじゃあsshログインできるか試してみようってことで一旦ログアウトしたら入れなくなった(アホだ)のでVMが立ち上がりっぱなしになっちゃったわけなんだけど、この状態で取りあえずVirtual Box開いてみたらコンソールを表示するボタンがグレーアウトされてました。なので一旦強制終了するしかないです。

余談

ちなみに今回何をやらかしたのかだけど、ポイントとしてはsshのポート番号を変えた(/.ssh/configをいじった)のと、iptablesをいじったのの二点。これを普通のVMの感覚でやっちゃったのがマズかったみたい。

まず、vagrant sshで使われているポート番号はデフォルトで22ではなく、2222なのです。これはホスト側で$ vagrant ssh-configコマンドを打ってみるとわかる。

Host default
  Hostname 127.0.0.1
  User vagrant
  Port 2222

一方、ssh以外の各vagrantコマンドについても、いずれもsshを使っている模様。vagrant upもvagrant haltもssh経由で命令しているみたいです。ただ、こちらは通常通りPort 22を使っているのでややこしい。このあたりの事情を踏まえた上でポート番号あれこれしないと、必要なはずのポート塞いじゃってうああああああってなっちゃうっぽい。

まぁvagrantで作ったサーバーを表に公開することはあんまりないと思うんで、このへん触らないのが吉かも。練習でやりたいのであれば、vagrant以外でサーバー用意してやった方が良さそうな気がします。

参考

Rails環境構築(4)nginx導入

nginxの導入はyumを使ってサクッと。まずリポジトリを登録して、その後yumを使ってインストール。

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

リポジトリが正しく登録されているか確認。

$ yum list nginx --disablerepo=* --enablerepo=nginx
(中略)
Installed Packages
nginx.x86_64                1.4.4-1.e16.ngx           @nginx

yum install

$ sudo yum install nginx

インストールは以上。EPEL様々ですね。あとは仮想ホスト設定用にディレクトリを作っておくという作業を入れる。

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
$ sudo rm -f conf.d/*.conf

nginx.confを開いて、sites-enabledを読み込ませるための設定を追加する。具体的には以下の1行。

include /etc/nginx/sites-enabled/*;

以上、終わり。最後にサービスを立ち上げて、自動起動を設定。

$ sudo service nginx start
$ sudo chkconfig nginx on

Rails環境構築(3)PostgreSQLインストール

ポスグレのインストール。yumで入るようなんだけど、聞くところによるとバージョンが古いらしい。念のため確認してみる。

$ yum list | grep postgresql
(中略)
postgresql.i686                           8.4.18-1.el6_4                base
postgresql.x86_64                         8.4.18-1.el6_4                base
postgresql-contrib.x86_64                 8.4.18-1.el6_4                base
postgresql-devel.i686                     8.4.18-1.el6_4                base
postgresql-devel.x86_64                   8.4.18-1.el6_4                base
postgresql-docs.x86_64                    8.4.18-1.el6_4                base
postgresql-ip4r.x86_64                    1.05-1.el6                    epel

うん、確かに古い。この記事を書いている時点では9.3.2とか出てるけど、yumで用意されてるのは8.4である。最新を入れればいいというわけでもないが、さすがにちょっと古いような気が。(ところでyumに入ってるパッケージの調べ方、これであってんのかな?)

てわけで新しいバージョンをWebから持ってくる。PostgreSQL RPM Repository (with Yum)にいろいろあるので適切なリンクURLをコピー。1コ前のバージョンでPostgresql 9.2にしときましょか。自分のOSがなんだかわかんなくなったらunameコマンドで確認。

$ uname -a
Linux xxx 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

CentOS 6 x86_64であることがわかったので、wgetでダウンロード。

$ wget -P /tmp http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm

続いてRPMにインストール。

$ sudo rpm -ih /tmp/pgdg-centos92-9.2-6.noarch.rpm
warning: /temp/pgdg-centos92-9.2-6.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID 442df0f8: NOKEY
########################################### [100%]
########################################### [100%]

rpmコマンドのオプションとして-iを付けるとパッケージのインストールが出来る。さらにhを付けると####で進捗が表示されるそうだ。必須オプションではないので、hについてはお好みで。

いよいよyumでインストール。

$ yum -y install postgresql92-server.x86_64

……yum installって補完はできないんですかね入れたら初期化して起動て自動起動設定します。

$ sudo service postgresql-9.2 initdb
$ sudo service postgresql-9.2 start
$ sudo chkconfig postgresql-9.2 on

ここまでで一旦インストールとしては終了。あとは基本的な設定をいくつか入れておく。

まずpg_hba.confを触る。これはDBに対するクライアントからのアクセスを制御するファイルで、さきほどinitdbしたときに作成されている。管理している内容としてはどのDBに対するどのユーザーのどこ(IP)からのアクセスを、どの認証方式で認証するか。必要に応じて書き入れてやる必要があるが、ひとまず参考書通りの設定をしておく。

$ sudo vim /var/lib/pgsql/9.2/data
# TYPE  DATABASE     USER           ADDRESS                     METHOD

local  all           postgres                                   peer
local  all           all                                        md5
host   all           all            127.0.0.1/32                md5
host   all           all            ::1/128                     md5

終わったらPostgreSQLをリロード。

$ sudo service postgresql-9.2 reload

今回はここまで。

参考

Rails環境構築(2)Rubyのインストール + α

環境構築エントリーその2。まっさらなOSにRubyを入れていきます。

まずはいろいろパッケージのインストール。ぶっちゃけ参考書通りにやってるだけなので、どこまで必要なのかはよくわかってない。wgetとgitが必須であるのは言わずもがなだし、openssl-devel、make、postgresqlなんかもまぁ必要だろう。gccとかは要る……のか?

$ sudo yum -y install gcc gcc-c++ make autoconf openssl-devel readline-devel libyaml-devel postgresql9.1-devel wget git

続いて意気揚々とRubyを入れたいとこだが、その前にrbenvを入れる。以前にエントリーで書いたこともあったけど、rbenvを使ってRubyをインストールすると、複数のバージョンのRubyを切り替えて使えるようになるので大変便利。インストールもwgetでダウンロードしてビルドしてなんてやり方をせず、rbenv installコマンドで簡単にできるようになる。

$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv自体のインストールもgithubからのクローンで済むのでスマートですね。ついでにもう1個git cloneしているのはruby-buildって奴で、これがないとrbenv install(rbenv使ってRubyをインストールするためのコマンド)が使えないらしい。で、入れたらPATHを通します。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

PATHを通したらbash_profileを再読み込みして、それからtype rbenvコマンドを打ってインストールの正常完了を確認する。ちなみに自分は最初、bash_profileの再読み込み忘れて慌てました。

$ source ~/.bash_profile
$ type rbenv # rbenv is a functionと表示されればOK

ここまでの手順はGitHubでrbenvのREADMEにも書かれてるから一読を推奨。

rbenvが入ったので、早速Rubyをインストール。

$ rbenv install --list #インストール可能なバージョンが一覧表示される
$ rbenv install 1.9.3-p484 #入れるバージョンは任意で

もちろん複数バージョン入れてもOK。Rubyのインストールが完了したら、どのバージョンを使うか確定させる。使うコマンドはrbenv global。安易に想像できる話ではあるが、rbenv localもある。前者が文字通りシステム全体、どのシェルでも使われるバージョンであるのに対し、後者はローカル環境、すなわち今後入れるRailsのアプリケーションディレクトリとか、そういう環境でのRubyバージョンを指定するもの。今はローカル環境がないので、rbenv globalだけ指定すればいい。

$ rbenv global 1.9.3-p484
$ ruby -v #確認

以上でRubyは入ったわけだけど、ついでに今後使うのでBundlerも入れておく。BundlerはRubyGemsを管理するためのツールであり、RubyGemsとはRubyのパッケージ管理システムのことである。GemはRailsでもめちゃめちゃ使うし、そもそものRailsもGemで入れることになるので、ここでBundlerを入れておく。

ちなみにGem自体はRubyと一緒にすでに入っている。が、バージョンが古い場合があるので更新してあげる必要がある。GemだけでももちろんRailsをインストールしたりはできるんだけど、その後の落とした各Gemの管理がマンドクセーってなるので、Bundlerが必要になる。まぁ詳しくは次回あたりで。

$ gem update --system
$ gem -v #最新のバージョンになったことを確認

じゃあ喜び勇んでGemを使ってBundler入れましょう!と行きたいところだが、まだやることがある。デフォルトだとGemで何かをインストールしたとき、ずらずらーっとメッセージが出てくるのだが、それを消すためのおまじない。これで体感2倍ぐらいインストールが速くなるらしい。方法は簡単で、~/.gemrcファイルを新規で作成して、以下の内容を書き入れる。

gem: --no-ri --no-rdoc

書き入れるって簡単にいうけどエディタは何使えばいいんだよ?って人はviあたり使っとけばいいと思う。もっといえば$ sudo yum install vimすればいいと思うんだが、そのあたりの話はまたおいおい。

はい、やっとこれで準備完了。Bundler入れます。

$ rbenv exec gem install bundler
$ bundle -v

これで作業完了!のはずなんだが、なぜか自分はbundleにPATHが通ってなかったらしく、$ bundle -vできませんでした。なんでだろ? 仕方ないのでココのやり方に従ってなんとかPATHは通ったんだけど、リンク先が何をやっていたのかはっきり言ってわかっておらず、不安。EXECUTABLE DIRECTORYってなんスか?

まーとりあえずRubyとBundlerは入ったので、次回はRailsのインストールといきますかね。

参考

Rails環境構築(1) Vagrantで仮想マシン構築

Vagrantで仮想サーバー構築してみたのでメモ。構築するだけなら、楽。大してコマンドも要らない。

インストール

まずはGemでインストールしてみたけど、バージョン古いっぽくてダメだった。なので、ふつうにウェブからダウンロードしてインストールします。URLは以下。ついでに「GET STARTED」からいろいろ読んどくといいと思う。公式のRead meに勝るものはないです。

http://www.vagrantup.com/

インストールしたらバージョン確認。

$ vagrant -v

boxの追加

まずはboxと呼ばれる仮想マシンイメージをvagrantに追加する。

$ vagrant box add hoge url

hogeは適当なイメージ名、urlはウェブで公開されているboxのurl。イメージはココに大量にあるので、任意のサーバーのURLをコピってくればOK。ほとんどがLinux、ちょこっとだけBSD

vagrantの初期化

$ mkdir vagrant
$ cd vagrant
$ vagrant init hoge

vagrant initでカレントディレクトリをvagrant用に初期化する。なのでmkdirは好きなとこに好きなフォルダ作ればよい。そこに仮想マシンの設定ファイルが作られるので。vagrant initの引数にはさっきvagrant box addで追加した仮想マシンイメージの名前を渡してやる。渡さないとデフォルト値で設定ファイルが作られてしまう。これで最初ハマった。ちなみにどうハマるかというと、vagrant upしたときにこんなエラーが出る。

There are errors in the configuration of this machine. Please fix
the following errors and try again:

vm:
* The box 'base' could not be found.

「base」という名前のboxがないというエラー。どうもデフォルトでbaseという名前が使われるらしいのだが、さっきbox addした名前と異なるので、そんなboxはないから立ち上げられませんよということ。もしこの状態になってしまった場合の対処としては、vagrantfileのconfig.vm.boxの値を該当の仮想マシンイメージ名に替えてやれば上がるようになる。

話が飛んでしまったが、Vagrantfileはvagrant initしたディレクトリの中に出力されている。で、仮想マシンを上げる前にちょっとコイツの編集が必要。

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network :private_network, ip: "192.168.xx.xx"

上のconfig〜行のコメントアウトを外してやって、IPを適当に設定する。が、自分の環境だとこれだけでは仮想マシンを起動した時にエラーが出てしまって、さらにprivate_networkをpublic_networkに替えてやらなくてはならなかった。ググってるとこの手順やってる人ほとんどいないんだけど、何が原因だろう。

仮想マシンの起動

で、ここまでやっていよいよVM起動。

$ vagrant up

てっきりVirtual boxがGUIでも上がってくるのかと思ったが、仮想マシン上がりましたよ―というメッセージが表示されるだけでGUI上は何の変化もない。なのでOSが上がってるのかわかりにくいんだけど、SSHで入ると実際入れるのでどうも上がっているらしい(ちなみにGUIでVirtual box上げてももちろん起動状態はわかる。あとvagrant statusコマンドでもわかる)。

$ vagrant ssh

bashsshコマンド発行しなくても、vagrantの独自コマンドで入れる。楽。ちなみに入るときのユーザーは勝手にvagrantというユーザーが作られているんだとか。あとはもう好きにやっちゃってーというところ。他に使いそうなコマンドは以下の表あたりか。

コマンド 意味
vagrant halt 仮想マシンの停止
vagrant destroy 仮想マシンの削除
vagrant box list 仮想マシンイメージリストの表示
vagrant status 仮想マシンの状態確認

vagrantが真価を発揮するのって多分chef-soloと組み合わせたときなので、今の段階だと「わざわざマウス使わずともターミナル上で仮想マシン上げられて便利〜」ぐらいの感想しか正直ないです。もっと勉強しよ。

参考

Vagrantで仮想サーバ構築 | HAPPY*TRAP

vagrant + virtualbox 仮想サーバ構築 - Qiita [キータ]

Ruby on Rails環境構築はじめます

Ruby on Railsのアプリ構築の勉強もそこそこに進んできたので、そろそろ環境構築始めてみようかと。(あんまりブログで書けてないけど……)。てわけで、この本買いました。

Ruby on Rails環境構築ガイド
黒田 努
インプレスジャパン
売り上げランキング: 106,991

これまで環境としてはMax OS X 10.8にVMware FusionCentOS浮かべて、その上でコード書いてWEBlick立ち上げてってやってたんだけど、考えてみればWEBlickでやるなら手元のMacで良かったわけで。いちいちコード書くのにSSHつなぐとかまぁ無駄なわけで。ということで、環境は次のように変えていく。

Apacheは仕事でも使ったことがあるんで、流行りに乗ってnginx + unicornでやってみます。んでさらに流行りに乗ってvagrantとchef solo使おうかと。vagrantはちなみにもう試してみたけど、さっくり仮想マシンが立ってしまってビビる。あとでブログにまとめる予定。ただしchefはちょっとしっかりやんないと使えなさそう。

もともと自分はインフラをメインで飯食ってるんで、こころへんはあまり迷わずにいきたいところ。