うなすけとあれこれ

2015年07月20日

情報共有おじさんとサバゲーにいったら

武器とか

あらすじ

入社後すぐにサバゲ部に入部し、何もかもをレンタル&貸してもらって屋内フィールドでサバゲデビューをしたうなすけ。適度に物欲を刺激された直後、追い打ちを掛けるように予定される屋外サバゲ。その日程は、給料日の数日後であった。そして給料日当日、情報共有おじさんと共にサバゲショップに向かったうなすけの運命やいかに……

武器を買いました

散財だよ〜〜٩(ˊᗜˋ*)و pic.twitter.com/6z9eHMcuTm

— うなすけ(借金予定有) (@yu_suke1994) 2015, 7月 15

買ったのは、東京マルイ MP7A1(フルセット)と、東京マルイ コルト M1911A1ガバメント(エアーコッキングガン)、あとBB弾とか手袋とかです。

給料日ということでテンション上がりつつも、使い過ぎはヤバいと自分に言い聞かせた結果、出費は6万円強に収まりました。よかったですね。

サバゲ当日

いつの間にか参加人数が膨れ上がって(計5人)、レンタカーを借りることになったりしました。情報共有おじさんのお陰で、集合場所、遅刻勢のピックアップ、会場までの道のり案内がスムーズにfacebook messenger上で執り行われました。

実際の会場がこちらです。サバイバルゲームフィールド HEADSHOT(ヘッドショット)

写真など

会場パノラマ 会場パノラマその2 蜂の巣

蜂の巣とか蜘蛛の巣があって虫苦手な人は絶対無理だなって思いました。

tweetたち

うなすけ「なにいってんですか!みなごろしですよ!!」

— ゆーけー/赤松 祐希 (@ukstudio) 2015, 7月 19

ものを壊す若者とサバゲーにきたら、リードエンジニアの銃が壊れた

— ゆーけー/赤松 祐希 (@ukstudio) 2015, 7月 19

物を壊す伝説をつくってる新卒の隣に座ったばかりに僕のエアガンが壊れた… pic.twitter.com/peJCdEjxs0

— あそなす (@asonas) 2015, 7月 19

新卒の隣に座るのをやめたらめっちゃ調子良くなってきた…

— あそなす (@asonas) 2015, 7月 19

朝の7時に集まって乗り合いで会場に向かって、一日中スポーツして、夕方には温泉に入って汗を流すの、昔の人たちはゴルフというスポーツでこれをしていたらしいが、現代人はサバゲでこれをします。

— Atom(アトム) (@FromAtom) 2015, 7月 19

新卒、俺が後部座席で寝てたらいきなりゆびならしながら「You!You!」とか言って指差してくるし、「water」とか言ってくるしほんと治安わるい

— ゆーけー/赤松 祐希 (@ukstudio) 2015, 7月 19

うなすけくんに3000円貸してるから財布に金が少ない

— ゆーけー/赤松 祐希 (@ukstudio) 2015, 7月 20

感想

今回のイベントは、カウント戦(撃たれたら自陣に戻ってカウンターを押して復活)とかフラッグ戦(撃たれたら退場、敵陣のフラッグを取ったら勝ち)を何回もやっていく感じでした。初心者の僕はあまり立ち回りとかもわかってないので、撃たれたけど、どこからかがわからないということも多く、復活できるカウント戦のほうが好きです。(適度に退場しないと暑さでやられてしまうので、やり過ぎないよう注意)

それでも回数を重ねていくうち、1対1の打ち合いになったり、自分が見つかるより先に相手を見つけることもできるようになりました。

フィールド内ではマスクをつけるので、顔がだいぶ隠れます。そのおかげか?知らない人に話しかけられる(話しかける)ことのハードルがずいぶん下がる気がします。なんかフィールド内では男性より女性と多く話してました。何なんでしょうね。

あと、迷彩 + 武器 + 眼鏡 + ポニテとか最強だなって思いました。

夏場の屋外はとても暑く、熱中症対策もしっかりしていく必用があることを思い知らされました。水分はたくさんとってるはずなのに頭が痛くなったりするので、逸る気持ちを抑えて休憩をこまめに取っていきました。

テンションが上って、サバゲ終わったあと温泉行こうとなったのは結果的にすごく良かったと思います。帰ってベッドにダイブ出来ましたから。

まとめ

サドンを糞ゲー糞ゲー言いながらやってる人、一度サバゲしたらいいと思う

— うなすけ(借金予定有) (@yu_suke1994) 2015, 7月 19
2015年07月20日
2015年07月12日

vimべんきょうにっき その2

vim logo

dotfilesの整理から

ukstudio先輩のdotfile(ukstudio/dotfiles)見てたら、stowを使ってdotfileへのsymlinkを貼っていてマジヤベエって気持ちになって、とりあえずstowを使えるようにしました。(Using stow instead of shell script:c97f1f8)

lightlineの設定を見直す

atomに代わってvimをメインのエディタにしていく決意をしたので、本格的に環境を整えていくことにします。これが今までのstatuslineです。 以前のstatusline

とりあえず作者さんの、作者が教える! lightline.vimの導入・設定方法! 〜 初級編 - インストールしよう - プログラムモグモグを参考にして、サクッとvimrcをコピペした結果がこちらになります。(Update lightline setting:c2461db) statusline変更後

こちらからは以上です。

あの……fugitive使って現在のbranchを表示させるのってどうやって……

2015年07月12日
2015年07月11日

6月辺りに買った漫画

本棚がない

漫画を買う量が一気に増えた

職場の先輩(HolyGrail先輩)がこんなエントリ(今買うべきおすすめのラブコメ漫画(追記あり))を書いたり、職場におすすめの漫画(1巻目だけ)を持ってきたりすすので、どうにも欲しい漫画が増えていきます。

オフィスで試し読み業が始まりました。1巻のみになるのでよさを感じたらみなさん買っていきましょう。

Kuniaki Horiさん(@holygrail)が投稿した写真 -

それに加え、社会人となったことで、学生時代に比べ自由にできるお金も増えたので、自制しないと際限なく漫画を買ってしまいそうになります。そんな僕が6月あたりに買った漫画を列挙します。

買った漫画

※画像は大抵amazonへのリンクです

恋と嘘

試し読み マンガボックス (MangaBox) / 人気マンガ家の新作連載が無料で読める!

政府通知届かないしなにをやっても駄目。禁じられた恋的な感じでもないけど、いけないことって感じがする。3人の関係がこれからどうなっていくのか……いや4人か?とりあえず買って読んでください。

不器用な匠ちゃん

試し読み 不器用な匠ちゃん - pixivコミックで漫画を無料試し読み

いいですね、趣味の話になるととたんに饒舌になる感じ。僕らそのものじゃないですか。それでいて、こう「私なんかが」みたいな意識が見える気がして、なんかすごく感情移入しやすい。とりあえず買って読んでください。

制服あばんちゅーる

試し読み 制服あばんちゅーる / さぬいゆう、伊丹澄一 / まんがライフWIN

は〜なんだこのハッキリ表には出さないけどお互いがお互いを好き合ってる感じ!!学生って感じがして読んでて「は~」ってなりました。とりあえず買って読んでください。

お前ら全員めんどくさい!

試し読み お前ら全員めんどくさい! | 日本最大級の無料Webコミック[COMICメテオ]

確かに登場人物全員めんどくさいし、読者から見れば國立先生も十分めんどくさい。めんどくさかわいい。webで試し読みもできますし、とりあえず買って読んでください。

つるつるとザラザラの間

試し読み つるつるとザラザラの間/月子 - モーニング・アフタヌーン・イブニング合同Webコミックサイト モアイ

虻川さん、本当に白瀬くんのこと好きなんだな……というのが1巻の終盤から2巻にかけての話とかでわかります。HolyGrail先輩も言ってますが、ヒロインの虻川さやちゃんがかわいいのでとりあえず買って読んでください。

第13保健室

試し読み 「第13保健室 1」 | ゲッサン少年サンデーコミックス | 小学館

マンモス校すぎて、保健室が12もある学校の話。個性的すぎる保健室の先生がまだ全員登場していないあたり恐ろしい。2巻が出てるようですが、まだ買ってないです。何かと2人の先生が絡み合うのでとりあえず買って読んでください。

ダンジョン飯

独特の世界観というか、説得力というか、食べてみたくなるというか。「ヤダーーーーッ!!」ってなる気持ちもわかりますが、ちょっと好奇心のほうが勝っちゃいそう。とりあえず買って読んでください。

くまみこ

試し読み くまみこ - 無料コミック ComicWalker

これは前々から欲しかったけど、amazonで品薄で、店頭で見つけてアッアッとなって一気に買いました。4巻以降、一体どうなるんだ…… まちがかわいいのでとりあえず買って読んでください。

とりきっさ

試し読み とりきっさ!|月刊COMICリュウ

これは友人のふゆたくんにおすすめされて買った漫画。ラブコメばっか読んでるせいか、「ここからどういう恋に発展するんだ?」と考えてしまいますがほのぼの系漫画だと思うのでずっとこのまま……なのかな?数日後に2巻が出るので、とりあえず買って読んでください。

あせびと空世界の冒険者

試し読み あせびと空世界の冒険者|月刊COMICリュウ

これは上の本を見てた時に同じ出版社のページで紹介されてて気になって買ってしまった漫画。異世界ファンタジー系で、絵が綺麗です。あと、あせびさんが変形してカッコイイです。とりあえず買って読んでください。

まとめ

これ以外にも「とんかつDJアゲ太郎」とか「ジョジョ」とか買わないといけないので財布がマッハ。とりあえず買って読んでください。この記事書くためにamazonアソシエイトに参加しました。

2015年07月11日
2015年07月10日

atom plugin "do-not-use-atom"を作った

do-not-use-atom

結局vimを使おうという目標

結局、hackableなeditorとは言ってもかゆいところに手が届かない、という事態がありました。具体的には、「拡張子のない、とあるファイルをrubyとみなしてsyntax highlightしてほしい」という願いです。vimであれば、filetypedetectなどで設定できますが、atomだと……その手のプラグインを入れてみましたが、バグかなにかで期待通りの動作をしてくれませんでした。

vim(emacs)での設定法は後ろの席の人に聞けばすぐわかるのですが、atomだとどこを設定すればいいのかわからず、stackoverflowを見てもなにやらよくわからないディレクトリに潜って設定しなければいけないような解説がいくつも出てきて、結局わかりません。

やはり……vimか……

atomを起動すると警告が出るatom package

そこで、「atomを起動すると警告が出るatom package」を作りました。と言いたいのですが、まだそこまではできていません。プラグインを起動するとアラートが出て、atomが閉じるプラグインを作りました。

do-not-use-atom

do-not-use-atom page

こんな感じで動作します。

do-not-use-atom 動作

ctrl + alt + o でアラートが出ます。閉じているのはatomのウィンドウのみで、プロセスは死んでいません。

まとめ

機能増やすためにはatom使わなくちゃいけないしなんのために作ったか全くわからないのにもうstarが付いている。

2015年07月10日
2015年06月15日

esaの日報から勤務時間を計算するRubyスクリプトをつくった

esaとは

弊社では、業務日報はesa(https://esa.io)で管理しています。

さてそのesaですが、先日APIがpublic β公開されました(release_note/2015/05/27/esa API v1をβ公開しました)。同時にAPI docsとRuby Gem(esaio/esa-ruby)も公開されました。

ということで、勤務時間を計算するRubyスクリプトを作れそうだったので、作ることにしました。

スクリプト作成までの道のり

access token取得

まず、今回は読めればいいだけなのでread onlyでaccess tokenを取得します。右上にある自分のアイコンを押して飛ぶ画面でaccess tokenを発行します。 access token

とりあえずサンプルコードを実行

access tokenが取得できたら、githubのREADMEに記載されているusageに記載されているコードを試してみます。

require 'esa'

client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
puts client.posts

このコマンドで、esaに投稿されている記事がガッと取得出来ました。多すぎますね。

検索クエリで絞り込む

欲しい記事のカテゴリ、投稿者はわかっている(日報なので)ので、検索クエリを用いて特定の記事を取得します。usageを読むと、postsに引数としてクエリを渡してやると良さそうです。

require 'esa'

client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
puts client.posts(q: "user:unasuke category:日報/2016/06")

これで、投稿者が"unasuke"で、カテゴリが"日報/2015/06"の記事(今月の日報)が取得できます。15分毎にAPIリミットがリセットされるとはいえ、あんまり何回もGETするのもアレなので応答を何かに格納しておきましょう。

require 'esa'

client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")

記事の本文を取得する

取得ができたので、本文の解析に移ります。まず本文はどこに入っているかというと、こうなっています。

{"posts"=>
    [{"number"=>3949,
      "name"=>"unasuke",
      "full_name"=>"日報/2015/06/15/unasuke",
      "wip"=>true,
      "body_md"=>"markdown文字列",
      "body_html"=>"html文字列",
      "created_at"=>"2015-06-15T20:05:50+09:00",
      "message"=>"Update post.",
      "url"=>"https://hoge.esa.io/posts/3949",
      "updated_at"=>"2015-06-15T20:34:16+09:00",
      "tags"=>[],
      "category"=>"日報/2015/06/15",
      "revision_number"=>2,
      "created_by"=>
...

解析するのに便利なのはmarkdownなので、markdownでの記事内容を取得します。このようにします。

require 'esa'

client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")

for i in 1...response.body["posts"].size do
  puts response.body["posts"][i]["body_md"]
end

日報の中から時間が書いてある部分を抜き出す

日報の中から合計勤務時間が書いてある部分を抜き出します。僕は日報の勤務時間を

# 勤務時間

| 場所 | 時間 | 小計 |
| --- | --- | --- |
| オフィス | 10:50 - 13:00 | 2:10 |
| オフィス | 14:00 - 20:30 | 6:30 |
| 合計 |  | 8:40 |

このように書いているので、「合計」が含まれる行を持ってくれば良さそうです。また、その中でも、コロンで区切られている数字のみを持ってくればいいので、以下の様に正規表現オブジェクトを作成して抜き出しました。

require 'esa'

client = Esa::Client.new(access_token: "xxxxxxxxxxxxxxxxxxxxxxxx", current_team: "xxxxxx")
response = client.posts(q: "user:unasuke category:日報/2015/06")

for i in 1...response.body["posts"].size do
  puts response.body["posts"][i]["body_md"].scan(/^.*合計.*$/)[0].scan(/\d+:\d+/)
end

これで、以下の様な配列が得られました。

["8:00", "9:10", "8:00", "10:00", "7:30", "7:50", "7:30", "7:30", "8:30", "8:00"]

時間の計算をする

あとは簡単で、時間の計算をしてやれば合計勤務時間が求まります。最終的なコードはこのようになりました。

まとめ

esaがどんどん便利になっていきます。(scriptの名前はアイドルマスターシンデレラガールズの三好紗南から取りました)

2015-06-21 追記

sana.rbの動作を修正しました。

2015年06月15日
2015年06月14日

vimべんきょうにっき その1

vim logo

きっかけ

あこがれの先輩とペアでvimの練習とかしてた

— うなすけ(偏差値5) (@yu_suke1994) 2015, 6月 12

べんきょう

Vim plugin

新しくNERDTree(scrooloose/nerdtree)と、vim-slim(slim-template/vim-slim)と、vimshell.vim(Shougo/vimshell.vim)をインストールした。

NERDTreeの設定も先輩のからもってきて、space+eで開閉できるようにした。

nmap <silent> <Space>e :NERDTreeToggle<CR>

autocmd vimenter * if !argc() | NERDTree | endif
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif

let g:NERDTreeShowHidden=1

また、インストールしたきり設定が書いてないneocompleteの設定も行った。

他にも、ウィンドウ分割の方法など教えて頂いた。

まとめ

ペアvim前 .vimrc

"neobundle.vimの設定
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'

"install plugins
NeoBundle 'Shougo/vimproc.vim', {
    \ 'build' : {
    \   'windows' : 'make -f make_mingw32.mak',
    \   'cygwin' : 'make -f make_cygwin.mak',
    \   'mac' : 'make -f make_mac.mak',
    \   'unix' : 'make -f make_unix.mak',
    \   },
    \}

NeoBundle 'Shougo/unite.vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'vim-jp/vimdoc-ja'
NeoBundle 'vim-ruby/vim-ruby'
NeoBundle 'wakatime/vim-wakatime'

call neobundle#end()
NeoBundleCheck

"help language use Japanese
set helplang=ja,en

"vimを使ってくれてありがとう!!!!!!!!!!
set notitle

"Ricty
set guifont=Ricty\ 11

"use UTF-8
set encoding=UTF-8

"syntax
syntax on

"line number
set number

"indent setting
set autoindent
set smartindent
filetype plugin indent on

"no more swapfile
set noswapfile
set nobackup

"status line setting
set laststatus=2
let g:lightline = {
    \ 'colorscheme' : 'solarized' ,
    \}

"colorscheme setting
set t_Co=256
set background=dark
colorscheme solarized

"convert file encode
function SetUU()
    set ff=unix
    set fenc=utf8
endfunction
command -nargs=0 SetUU call SetUU()

"use backspace
set backspace=indent,eol,start

ペアvim後 .vimrc

"neobundle.vimの設定
if has('vim_starting')
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle/'))

NeoBundleFetch 'Shougo/neobundle.vim'

"install plugins
NeoBundle 'Shougo/vimproc.vim', {
    \ 'build' : {
    \   'windows' : 'make -f make_mingw32.mak',
    \   'cygwin' : 'make -f make_cygwin.mak',
    \   'mac' : 'make -f make_mac.mak',
    \   'unix' : 'make -f make_unix.mak',
    \   },
    \}

NeoBundle 'Shougo/unite.vim'
NeoBundle 'thinca/vim-quickrun'
NeoBundle 'altercation/vim-colors-solarized'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 'vim-jp/vimdoc-ja'
NeoBundle 'vim-ruby/vim-ruby'
NeoBundle 'wakatime/vim-wakatime'
NeoBundle 'slim-template/vim-slim'
NeoBundle 'scrooloose/nerdtree'
NeoBundle 'Shougo/vimshell.vim'

call neobundle#end()
NeoBundleCheck

"help language use Japanese
set helplang=ja,en

"vimを使ってくれてありがとう!!!!!!!!!!
set notitle

"Ricty(only gvim?)
set guifont=Ricty:h16

"use UTF-8
set encoding=UTF-8

"syntax
syntax on

"line number
set number

"indent setting
set autoindent
set smartindent
filetype plugin indent on
set expandtab
set shiftwidth=2
set softtabstop=2

"no more swapfile
set noswapfile
set nobackup

"status line setting
set laststatus=2
let g:lightline = {
    \ 'colorscheme' : 'solarized' ,
    \}

"colorscheme setting
set t_Co=256
set background=dark
colorscheme solarized

"convert file encode
function SetUU()
  set ff=unix
  set fenc=utf8
endfunction
command -nargs=0 SetUU call SetUU()

"use backspace
set backspace=indent,eol,start

"Neocomplete
source ~/.neocomplete.vim

"NerdTree
source ~/.nerdtree.vim

当該コミット github.com/unasuke/dotfiles pair vim lesson

2015年06月14日
2015年06月10日

複数アプリケーションから参照されるDBをridgepoleで管理する

ridgepole

忙しい人のためのまとめ

tmixの現状

最近の大規模なwebサービスが、1つのアプリケーションとして動いているというのは珍しいだろう。cookpad社がそうであるように、tmixも裏ではいくつかのRails Applicationが同時に動作している。 そしてそれらのRailsが見に行くデータベースはもちろん共通の1つである。

Railsは、そのアプリケーション内でschema.rbを用いてデータベースの定義を行っている。そしてRailsアプリケーションの数だけschema.rbが存在し、各アプリケーションの開発者が各々でschema.rbを好きに編集すると、conflictは避けられない。実際、tmixでもschema.rbを別リポジトリからコピーしてくるなんて作業はしょっちゅう行われていた。

この状況が好ましくないことは誰の目にも明らかであり、解決策としてのridgepoleの導入が必要だった。(参考 クックパッドにおける最近のActiveRecord運用事情)

ridgepoleの導入

現状の把握

ridgepoleを導入する前に、まずは現状を正しく把握する必要がある。

tmixは、メイン、画像生成、発注管理で3つのRails Applicationが動作している。それぞれはCircle CIによってGitHub Pushのタイミングでテストされ、production deploy時にはCircle CIからcapistranoを用いて本番環境にdeployされるようになっている。 環境は、development、staging、production、testの4つあり、それぞれにデータベースが存在する。

各リポジトリからschemaを適用させる(没案)

まず僕は、schemaを管理するためのリポジトリを作成し、それぞれのリポジトリがdeploy taskのなかでgit cloneを行い、ridgepole applyをさせれば良いと考えた。ridgepoleでは冪等性が保証されているので、schemafileの適用は何度走ってもよい。各アプリケーションがdeployされるたびに、データベースは更新される。

そのために、次のようなシェルスクリプトを作成し、circle.ymlで実行させるようにした。

cd ../
git clone git@github.com:spice-life/tmix-schema.git
cd tmix-schema
bundle install
bundle exec ridgepole -c ../tmix/config/database.yml --apply

当然のように、これはうまく動作しない。なぜなら、Circle CIでテストを行う環境は、その環境と結びついたリポジトリにしかアクセスできず、他のリポジトリをcloneする権限は持っていないからだ。(もちろんこの記事で出てくるリポジトリは大半がprivate)

そこで、いい方法はないものかとCircle CIのchatで聞いてみたところ、user keyを追加しろとの返答があった。しかし、それでは僕がアクセスできる全リポジトリへの権限が渡ってしまう。それに、サービスの運用が属人性の高いものになってしまう。これは良くない。 そのような返答をすると、今度はkey pairをCircle CIとGitHubに登録しろと言われた。これなら、権限が最小に抑えられて望ましい。 circle ciでのchatの様子

さて、SSH keyを登録するにしても、hostnameがgithub.comではいろいろと都合が悪い。そこで、hostanemeを"ridgepole"として登録し、git cloneするときには明示的にその鍵を使うようにした。具体的には以下のようにした。

cd ../
GIT_SSH=tmix-web/bin/git-ssh.sh git clone git@github.com:spice-life/tmix-schema.git
cd tmix-schema
bundle install
bundle exec ridgepole -c ../tmix/config/database.yml --apply
#!/bin/sh
exec ssh -oIdentityFile=~/.ssh/id_ridgepole "$@"

Circle CIで追加した鍵は、内部ではid_をhostnameの前に付与して保存されるのでこのようにしている。

このようにしたことで、git cloneができるようになり、めでたしめでたし……と思っていると、おかしなことが起こり始めた。cap deploy時に次のようなエラーメッセージが表示されるようになったのである。

ERROR: Repository not found. fatal: Could not read from remote repository.

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

もちろん追加した鍵のhostnameはridgepoleなので使われるはずはないのだが、鍵を削除するとdeployができるようになったので、仕方なく鍵を削除した。どうすれば良かったのだろう……

結局、user keyを追加するしか無い。そこで、chat deployを行うbotのuser keyを追加した。これで、git cloneができるようになり、ridgepole applyもできるようになった。

だが、この方針では、本番サーバーそれぞれがschemaリポジトリを保持することになり無駄であること、データベースの変更を単体で行えないなど問題点も多い。

ridgepoleをcapistrano deployさせる

なので、schemaが存在するリポジトリをcap deployできるようにした。ただ、このためにサーバーを持つのも無駄なので、deploy先は既存アプリケーションのサーバーを間借りする形にした。

具体的には、以下の記述をdeploy.rbに追記した。

namespace :deploy do
  after :published, :ridgepole do
    on roles(:db) do
      execute "cd #{fetch(:release_path)}; bundle exec ridgepole -E #{fetch(:stage)} -c database.yml --apply"
    end
  end
end

これでbundle exec cap hoge deployするとその環境のデータベースにridgepole applyができるようになった。

テストについて

ridgepoleで読み込むschemafileについてsyatax errorがないか確認する簡単なテストを書いた。

require "spec_helper"

describe "Schemafile" do
  it "should correct syntax" do
    `bundle exec ridgepole -c database.yml -E test --apply --dry-run`
    expect($?).to eq(0)
  end
end

schemafileについてはこれくらいでいいとして、問題は各アプリケーションのテストである。テスト時に、schema.rbを読み込んであれこれする動作をする場合、やめさせなければならない。Rspecを使用している場合、spec/rails_hepler.rbの

ActiveRecord::Migration.maintain_test_schema!

この記述を削除する必要がある。

業務フローがどうなったか

ridgepoleの導入によって、業務の流れは次のようになった。

例えば共用の開発用データベースが存在する場合は、それに対しては手動でridgepole applyする必要がある。

2015年06月10日
2015年06月07日

といくんのおうちで家二郎

二郎

経緯

なんかLINEが飛んできてやることになった。

様子

ここから先、生肉とキッチンの画像が多くなります。

僕、とい、りゅうのすけの3人で、とりあえず肉のハナマサやスーパーなどに行って、以下の食材を購入しました。

これを何とかしていきました。以下、写真と雑な説明が続きます。

下準備

肉たちです。 とんこつ 豚バラ そもそもこの豚バラが、とい家に届いたことが会の発端だそうです。

豚骨をゴロっとしました。 とんこつゴロリ ここでりゅうのすけに一旦何もかも任せてといくんと僕で鍋や食器や麺を買いに行きました。

開化楼という有名な製麺所に行って太麺を10玉買いました。これは3人の会だったのですが、まあ10玉は買いすぎました。5玉で良かったです。というか有名な製麺所ってのをこの日に知りました。 開化楼 麺を入れる木箱が大量にあってただただすごい。

帰ってくるとこうなっていました。一回目の茹ではアクとか臭みとかなので捨てます。肉片もこそぎ取ります。骨を割りたかったのですが、トンカチがありませんでした。買うのもアレだし。 煮込み1回目

豚バラをいい感じの大きさにしてタコ糸で巻いていきます。タコ糸が足りなくなったりもしましたが、それはそれ、これはこれ。 チャーシュー仕込み

昼ごはんとして振る舞われた豚バラの炒めた何か(調理中)です。唐辛子の効いたからい何かで、美味しかったです。 からくておいしいなにか

煮込み

チャーシュー、背脂を入れて煮込みます。ひたすら。 煮込みを始めた

豚バラの何かでは物足りなく、また肉も潤沢なので、薄く切って生姜焼きを作り始めた様子です。脂ですごくすべる。 薄く切って 生姜焼き

調理はほとんどりゅうのすけがやっています。この辺りからといくんが寝始め、僕はHuluで仮面ライダーやら俺物語やらを観つつたまに調理を手伝ったりしました。

太麺です。 太麺

ぐつぐつと煮えています。水がどんどん減っていくのでどんどん足していきます。 沸いた

頃合いを見て、香味野菜を入れてさらにさらに煮込みます。排水口用のネットに入っていますが、後で取り出しやすくするためです。(参考: 第五回家二郎報告会 - おともだちティータイム) 煮込んでいます 煮込んでいますよ 香味野菜を入れて煮込みます

野菜を切って茹でます。どう考えても、もやし2kgは買いすぎた。 茹で野菜

チャーシューをカエシに漬け込みます。これは一旦取り出したもの。 チャーシューカエシ

提供

いよいよ麺を茹でていきます。ちなみにとんこつを煮込み始めたのが12時頃で、この写真は16時半頃だったので、ざっと4時間はいろいろやっていたことになります。ガス代すごそう。 麺を茹でる

どんぶりにカエシ、味の素を入れておきます。雰囲気が出てきました。 カエシと味の素

茹で上がった麺をよそっています。 メンヨソイ

完成

野菜、煮玉子、コールを聞いて完成!!突然出てきた煮玉子は僕が木曜から仕込んでいたものです。 二郎

僕は「二郎」と名のつくラーメン店には行ったことがないので比較はできませんが、おいしい、おいしいがこれ量が、という感想です。麺は半分余ったし、もやしが冷蔵庫を占領しました。

感想

よかった。けれど次があるならもっと上手くやれるだろう。僕らは人間で、学び、成長することができる。次に活かそう。

まず、材料のみきわめ。あと、チャーシューはすこし固かったかな。これは各人で納得のいくものをつくって持ち寄る方式にしてもいいかもしれない。地味に大事なのが、いい写真を撮る能力。

あと、PCDJコントローラーが欲しくなった。

2015年06月07日
2015年05月04日

#kosen10s LT 01に参加した

kosen10s

kosen10’s LTとは

高専をついこの間卒業したイケてる人たちでLT会! 本イベントは2010年に高専に入学され、「順調であれば」つい先日本科を卒業された高専出身者で集まってLT会をするものです

というイベントです。当日はこのTシャツを着て参加しました。 うなすけTシャツ

参加した感想

割りと軽いノリで参加したつもりが、あれよあれよとすごい人たち(でも同い年)が参加し始めて、提案者が7人位の参加者になると思っていたところを結局16人も集まり、「わあなんだこのメンバー」となりました。 ルーターをいじって遊ぶやら、大規模ネットワーク構築するやら、Sony社員やら、噴水が溢れるやら、IMAGINE THE FUTUREやら、アイカツやらで、ただ濃いだけにとどまらず技術的にも高度な人たちが集まりました。 ただ、萎縮するなんてことはなく、そもそも同級生ですから、いつの間にか敬語が外れていき、最後はなんかワイワイという感じになっていました。

自己紹介LTは軽め、自由LTでネタをぶち込んでいこうと思って準備してきたのですが、自己紹介LTからとんでもないものを仕込んでくる人が多く、こりゃやべえなとなりましたが、Tシャツなどのおかげか一応はウケて良かったです。 ネタをぶち込んだ自由LTは反応が良かったですが、次のルーター芸人の発表に完全に持って行かれた感じはあります。発表スライドは後ほど追記します。

自分が今まで関わって来なかった高専ベンチャーのこともそうですが、こういった集まりに参加すると、自分の知らなかった世界、逆に自分は知っているけどみんなは知らない世界というものがわかります。 「人脈を広げる」というわけではないですが、いろんな人と会ってみるのはとても良いことです。同じプログラミングが好き同士と思っていたつもりが全く違う方向を見ていたり、初対面の人との意外な共通点で盛り上がれたりと、得るものは名刺だけではありません。 確かに、交通費や参加費、様々な障壁はあります。心理的な壁もあることでしょう。ですが、障壁の向こうで得るものは大きいです。自分に乗り越えられそうな壁から壊していくのがいいと思います。

地理的な障壁で言えば、福井では「福井技術者の集い」が、定期的に開催されつつあります。是非参加してみてください。

発表スライド

自己紹介 つくったもの

発表者シャッフルについて

あらや君と見せ合ったのですが、eachせずともそのままputsしてしまえばよかったな、と思いました。

2015年05月04日
2015年04月26日

M3-2015春に行ってきた

買ったCD

行くのを決めたのは2日前

M3、存在は知っていたけど、僕の中ではコミケほどの存在感はなかった。けれども行ってみたいイベントの一つではあった。しかし、コミケと違って、僕はM3の開催時期を知らなかったのだ。

超ボマスとリリパとM3なんでスケジュール被ってしまったんや………

— HolyGrail (@HolyGrail) 2015, 4月 23

このツイートを見て、「あ、M3ってもうすぐなんだ。行かなきゃ」となった。しかし給料もまだだし、机や断線したイヤホンなど買わなければいけないものがいっぱいあるので迷っている、と先輩に言ったところ「そういうのは行って後悔した方がいい」とのことなので、行くことにした。カタログの事前販売はもう無くて、当日買うしかなかった。

買ったもの

Hybrid Monster

Hybrid Monster これはプチョヘンザ案件ですよ。

ABSOLUTE

ABSOLUTE 絶対硬核電踊楽

GAT04

GAT04

元気くんバンドEP

元気くんバンドEP

Candy Star

Candy Star

IRREGULAR NATION

IRREGULAR NATION 禁忌に触れる快感

dreamless wanderer

dreamless wanderer

paroxysm

paroxysm

sudden shower

sudden shower

SYNERGY-STYLE VOL.4

SYNERGY-STYLE VOL.4

趣味がわかる。事前チェックとか何もせずに行って、よくわからぬまま買ってしまって良くないと思った。次行くときは入念にチェックしてから行こう。

2015年04月26日
新しい投稿
古い投稿