tag:blogger.com,1999:blog-26204052747517073192024-02-08T19:09:09.664+09:00ざくにく定食自分が色んなことをどうやったのか忘れないように書き留めておきます。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.comBlogger93125tag:blogger.com,1999:blog-2620405274751707319.post-86688658410770056222015-05-16T23:30:00.002+09:002015-05-16T23:30:40.866+09:00browserifyでvisionmedia/debugをクライアントサイドで使う<a href="https://github.com/visionmedia/debug">debugモジュール</a>をbrowserifyしたうえでブラウザから使おうとしたら若干ハマった。<br />
READMEには<br />
<blockquote><code>window.myDebug = require("debug");</code></blockquote>とかしてから、ブラウザのコンソールで<br />
<blockquote><code>myDebug.enable("*")</code></blockquote>みたいにすればいいよって書いてあるんだけど、実際やってみると myDebug.enable is not a function とか言われてエラーになる。<br />
<br />
一旦コンソールで<br />
<blockquote><code>localStorage.myDebug = '*'</code></blockquote>ってしてからリロードすればよい。<br />
<br />
参考: <a href="https://github.com/visionmedia/debug/issues/114">https://github.com/visionmedia/debug/issues/114</a><br />
<br />
ところでvisionmediaのdebugモジュールって何て呼べばいいんですか。名前ちょっと汎用的すぎやしませんか。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com1tag:blogger.com,1999:blog-2620405274751707319.post-63481820426916764872015-01-31T23:39:00.000+09:002015-01-31T23:39:26.682+09:00山に来てBoxenやめてAnsibleにしました<div>
<span style="font-family: 'Helvetica Neue Light', HelveticaNeue-Light, helvetica, arial, sans-serif;">気がついたら前回の退職エントリーから10ヶ月ぐらい何も書いてなかった。よくない。</span><br />
最近あんまりネットにいませんね、とか(元々そんなにいなかったのに)言われるようになってた。よくない。</div>
<div>
<br /></div>
<div>
初心に立ち返って、環境構築のこと書く。</div>
<div>
具体的には、boxenをやめてansibleにした話。</div>
<div>
<br /></div>
<div>
boxenを使ってきたけど、結論としては個人の環境構築に使うにはtoo much。使い始めた時点でうすうす感じてはいたことだった。</div>
<div>
なんか一個brew upgradeしたいだけなのにpuppet moduleに手を入れなきゃならないのはコストがかかりすぎだし、boxen自体をour-boxenからfetchしてmergeしてアップデートしていくのもダルいし、それを他のところ(チームとか)でも使うならまだしも、自分しか使わないのであれば、新しいパソコンに毎回環境構築するほうが楽だと思った。</div>
<div>
あとは、色んなものが/opt/boxen/の下に入るのがちょっと気持ち悪かった。brew installした時のインストール先とかわかりにくかった。</div>
<div>
<br /></div>
<div>
そんな感じでbrewfileにでも移行しようかと思っていたら、使ったことないうちにオワコンになってた。<br />
じゃあどうすっぺーかと思っていたところで、今をときめくansible(僕の中で)をlocalで実行するという手があるとわかったので、そうすることにした。<br />
<br />
<br />
boxenのhomebrew使ってた場合はboxen消すとhomebrewも消えるので、ansible導入後にまたbrew installするものはbrew listとかで洗い出しておくといい。<br />
<br />
boxen関連のものを完膚無きまでに削除<br />
<br />
<blockquote class="tr_bq">
$ /opt/boxen/repo/script/nuke --all --force</blockquote>
<br />
改めてHomebrewとAnsibleをインストールする<br />
<br />
<blockquote class="tr_bq">
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"<br />$ brew install ansible</blockquote>
<br />
ansibleをローカルに実行したい場合、playbookのhostsに127.0.0.1を指定してやって、実行時に--connection=localをつけるか、playbookにconnection:localと書いてやればssh経由でなく実行される。<br />
参考: <a href="http://docs.ansible.com/playbooks_delegation.html#local-playbooks">http://docs.ansible.com/playbooks_delegation.html#local-playbooks</a><br />
<br />
そういうわけであとはplaybookを作って育てていけばいい。大抵の場合はlocalhost.ymlが1ファイルあるだけで事足りるんじゃないだろうか。<br />
<br />
inventoryファイルに関しては普通に作ってやってもいいし、ansible-playbookするときに -i "localhost," とかつけてやると作らなくても済む。<br />
<br />
あとはlocalhost.ymlを育てていけばよい。<br />
<script src="https://gist.github.com/zakuni/b7a13bbbaf1a97f50ab7.js"></script><br />
<br />
適用するときには<br />
<blockquote class="tr_bq">
$ ansible-playbook localhost.yml -i "localhost," --ask-sudo-pass</blockquote>
のようにすればよし。<br />
<br />
たぶん、最初から入ってないと大幅に使い勝手が変わったり困ったりするものって僕の場合はそれほどないので、それ以外のものは必要に応じて手で入れるようにして、dotfileとかtmuxとか、インストールして設定するのがめんどいものを自動化しておくのがいいバランスなんだろうと思う。</div>
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-64321466576063760342014-04-13T15:01:00.001+09:002014-04-13T15:01:53.418+09:00僕も株式会社リコーを退職しました3月末でリコーを退職しました。<br />
退職エントリーって人生であまり書く機会なさそうなのでせっかくだから書いておこうと思うのだけど、自分がいた会社を悪く言うのもなんだし、どう書いても後ろ足で砂をかけることになりそうでなかなか難しい。<br />
念のためにお断りしておくと、ここに書くことは、あくまで大きな会社の元一社員としての僕が感じた事実であり、それ以上でもそれ以下でもありません。<br />
<br />
<br />
2011年の4月に学部の新卒で入社して、今年の3月末で退職したので、ちょうど丸三年勤め上げた。案外長くいたと思う。<br />
<br />
辞めた理由は色々あるけど、そもそも入社する前からあまり長くはいないだろうなってことはなんとなく思っていて、その気持ちを覆すようなテンションの上がることが最後まで起こらず、逆に、ああこれはもう辞めようと思わされるようなことはたくさんあって辞めるに至ったので、どちらかというと辞めない理由がなかったというほうが正しい気がする。<br />
<br />
少なくとも、あのまま居続けてもどうにもならないし、何者にもなれないどころか、なりたくもない何かになってしまいそうな感じがしていた。<br />
これは主観だけど、決して優秀ではない僕が、部署においては優秀な人の部類だったであろうことは全く嬉しいことじゃなかった。この人には一生かかっても追いつけない、と思える人が失礼ながら周りにはいなかった。会社全体でみればきっといたと思うけど、割合として少なすぎるのと、そういう人がきちんと評価されているようには見えなかったので、会社に残る理由にはならなかった。<br />
<br />
会社に対しては大小様々思うところはあって、抱えてる問題をどう解決すべきかとかも考えたし、多少実践もしたのだけど、そもそもそれを問題だとも思っていない人たちの中で解決しようとするのが本当にいいことなのかわからなかったし、僕から見れば明らかでしかないことを指摘したときに、それは気づかなかった、と感心されるような状況は、言ってしまえば面倒でしかなかった。長い目で見れば会社のためになる、という思いを持てるほどの愛社精神は持ち合わせていなかった。<br />
<br />
具体的な話は、会社を辞めた今ではもはや愚痴になってしまうので書かないけど、大企業病の症状みたいなものを挙げていけば大抵当てはまると思う。<br />
この前話題になってた下の動画みたいなことが、エンジニアとしてだけでなく、常にあらゆる場面で起こっていた(この動画に関しては、エキスパートの人にも多少問題があると思ったけど)。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/BKorP55Aqvg?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<br />
そうは言っても悪いことばかりじゃなかったでしょ?って聞かれたら、確かにそうなのだけど、そういう時に、じゃあよかったね、って全てをよしとしてしまう風潮があったのが、何よりも問題だったのかもしれない。<br />
<br />
<br />
そんなわけで、今は山でくもを眺めています。<br />
<br />
<br />
<br />
注<br />
先日こんな記事↓があったからタイトルに「僕も」と付けたけど、この人とは何の面識もありません<br />
<a href="http://ryonext.hatenablog.com/entry/2014/02/09/123601">株式会社リコーを退職しました - 月曜日までに考えておきます</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-69248893820685408462014-01-02T20:12:00.000+09:002014-01-02T20:12:47.861+09:00Boxenの導入<a href="http://zakuni.blogspot.jp/2014/01/boxen.html">準備が出来た</a>ので、Boxenを導入する。<br />
<br />
前提として、Xcode Command Line Toolsがインストールされていること。<br />
(Mavericksの場合はBoxenがいいようにしてくれるっぽいが、僕の場合は既にインストールしてあったので実際どうなるのかわからない)<br />
<br />
<a href="https://github.com/boxen/our-boxen#bootstrapping">https://github.com/boxen/our-boxen#bootstrapping</a> に書いてある通りにやっていく。<br />
<br />
あらかじめどこかに自分のboxen用のgitリポジトリを作っておいてから以下を実行。<br />
<blockquote><code>sudo mkdir -p /opt/boxen<br />
sudo chown ${USER}:staff /opt/boxen<br />
git clone https://github.com/boxen/our-boxen /opt/boxen/repo<br />
cd /opt/boxen/repo<br />
git remote rm origin<br />
git remote add origin <自分のリポジトリ><br />
git push -u origin master</code></blockquote><br />
用意されたモジュールだけで事足りる人はむしろ少数派だと思うので、必要に応じてPuppetfileの末尾に利用するモジュールを追加してやる。<br />
大抵のメジャーどころは<a href="https://github.com/boxen">https://github.com/boxen</a>にある。<br />
<br />
Puppetfileはダウンロード元等の定義に過ぎない。Puppetfileに続いてmanifestを編集する。<br />
globalな設定はmanifests/site.pp に、personalな設定はmodules/people/manifests/githubのユーザー名.pp に書く。この辺は仕様ではなく流儀。<br />
<br />
(んーしかしPuppefileの存在意義ってなんなんだろう。上みたいな形でグローバルな設定と個人の設定は切り分けられてるわけで、各種定義もそこでやればいいのでは……)<br />
<br />
これで<br />
<blockquote><code>cd /opt/boxen/repo<br />
./script/boxen</code></blockquote>すれば諸々インストールやら設定やらされる。<br />
<br />
尚、デフォルトだとFileVault使ってディスクを暗号化することを要求される。それが嫌な人は--no-fdeをつけてやればいい。<br />
<blockquote><code>./script/boxen --no-fde</code></blockquote><br />
.bashrcか.zshrcが既にある場合は、以下を追加する<br />
<blockquote><code>[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh</code></blockquote><br />
シェルを新しく開いて、boxen --envがちゃんと動けば正しくできてる。動かなければ頑張る。<br />
<br />
参考: <a href="http://threetreeslight.com/post/58009785849/boxen-mac">Boxenを利用したMacのセットアップ | iii ThreeTreesLight</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-70542053064514240052014-01-01T23:21:00.001+09:002014-01-02T13:32:08.348+09:00Boxenの導入(の準備)新年、明けましておめでとうございます。<br />
<br />
今年一年を良い年にすべく、<a href="http://boxen.github.com/">Boxen</a>を使ってみることにしました。<br />
<br />
<br />
<h3>準備</h3><br />
boxenと干渉する可能性があるものをアンインストールする。<br />
僕の環境ではrbenv, homebrew, nvm。なんとなく影響が小さそうなものから消していく。<br />
<br />
<h4>nvmのアンインストール</h4>公式にアンインストール方法が書いてなかった。<br />
<br />
とりあえず.nvm/を消す。<br />
<blockquote><code>% rm -rf ~/.nvm</code></blockquote>あとは.zshrcにも数行書いてあったのでそれも消した。<br />
<br />
<h4>rbenvのアンインストール</h4>rbenvはbrewでインストールしたので、homebrewごと消せばいいのかもしれないけど、一応ちゃんと消す。<br />
<br />
rbenv管理のrubyを消すには、~/.rbenv/versions/ の中にあるディレクトリを消すか、ruby-buildを使っているならrbenv uninstallで消せる。<br />
これもわざわざやらなくていいような気はしたけど、パッチレベルも低かったのでついでに消した。<br />
<br />
で、rbenvとruby-buildをアンインストール。<br />
<blockquote><code>% brew uninstall ruby-build<br />
% brew uninstall rbenv<br />
% rm -rf ~/.rbenv</code></blockquote>なんかよくわからないけど一回やっただけだとちゃんと消えず、何回か実行したら消えた。<br />
<br />
<h4>homebrewのアンインストール</h4><a href="https://github.com/Homebrew/homebrew/wiki/FAQ">https://github.com/Homebrew/homebrew/wiki/FAQ</a>に書いてあった、<a href="https://gist.github.com/mxcl/1173223">このスクリプト</a>を使った。<br />
<br />
実行したら何故かiTermのタブが閉じたりしてちゃんと消えたのかよくわからない。<br />
which brewとかしてcommand not found: brewとか出るようになったので消えたと信じる。<br />
<br />
これでようやく準備が整った。<br />
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-14965612463201260052013-10-17T01:02:00.000+09:002013-10-17T01:02:11.991+09:00capistranoでmiddleman buildするまで<a href="http://zakuni.blogspot.jp/2013/10/capistranobundle-install.html">前回</a>、bundle installするところまで出来たけど、その後middleman buildもして欲しかった。<br />
<br />
capistranoでやる以前に、そもそもUbuntuでmiddleman buildしようとすると、execjsがjavascriptのruntimeが見つからないと言って泣いていた。<br />
幾つかの依存ライブラリが足りないらしいので、Gemfileに以下を追加<br />
<blockquote>gem "rb-inotify"<br />
gem "therubyracer"</blockquote><br />
これでmiddleman build自体は出来るようになったので、今度はcapistranoでやるように、deploy.rbを編集。<br />
capistrano-bundlerのソースとか見よう見まねで、こんな風になった。<br />
<br />
<script src="https://gist.github.com/zakuni/7010140.js"></script><br />
withinとか要らなそうだったり、executeが2行に分かれてたりとか、若干気に入らないところはあるけども、ともあれこれでbundle installの直後にbundle exec middleman buildされるようになった。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-73527038818230428012013-08-11T19:22:00.001+09:002013-08-11T19:22:51.805+09:00Chefからufwを有効にするexecute resouceを使った。<br />
<br />
ufw enable と ufw allow sshしている。<br />
<script src="https://gist.github.com/zakuni/6204189.js"></script><br />
sshでufw enableしようとすると、sshのコネクションが切れるかもしれないけどいい?(y|n) みたいな確認をしてくるので、パイプでyesを渡してやっている。<br />
手元でvagrant使って試したらこれでいけたけど、allow sshが先に実行されるようにしたほうがいいのかもしれない。<br />
<br />
chefはknifeとかcookbookとかの用語とDSLで、学習コストを飛躍的に高めてしまっていると思う。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-70163616365900562122013-06-25T23:47:00.000+09:002013-06-25T23:47:16.720+09:00[Mac]VagrantのインストールVagrantの前に、VirtualBoxをインストールする。<br />
<a href="https://www.virtualbox.org/">https://www.virtualbox.org/</a> からインストーラーを落としてきてインストール。<br />
<br />
続いてVagrantのインストール。<br />
<a href="http://docs.vagrantup.com/v2/installation/">http://docs.vagrantup.com/v2/installation/</a> 曰く、バージョン1.0.xの時にあったRubyGemsを使ってのインストールはもう無いらしい。もしgemでインストールされてたら先にアンインストールしておいてね、とのこと。<br />
というわけでこちらもインストーラーを落としてきてインストール。<br />
<br />
インストールできたら以下のコマンドを実行するとUbuntu 12.04 LTS 32-bitのイメージがダウンロードされて、立ち上がる。<br />
<blockquote><code>$ vagrant init precise32 http://files.vagrantup.com/precise32.box<br />
$ vagrant up</code></blockquote><br />
立ち上がる……はずが立ち上がらない。<br />
VBoxManageのimportコマンドでエラーがどうこう言っている。これで貴重な日曜日の午後が失われた。<br />
<br />
そして昨日、月曜日。VitrualBoxのバージョンを一つ下げて4.2.10で試してみたらすんなりいけた。<br />
<br />
で、今日。このようなものを見つける。<br />
<a href="https://github.com/mitchellh/vagrant/issues/1847">https://github.com/mitchellh/vagrant/issues/1847</a><br />
<a href="https://www.virtualbox.org/ticket/11895">https://www.virtualbox.org/ticket/11895</a><br />
<br />
というわけで近いうちに直ると思われるが、それまでは4.2.10を使っておくのが吉。<br />
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-6693117126338199772013-06-16T21:13:00.000+09:002013-06-16T21:13:31.413+09:00JavaScriptのテスト環境を整える その3<a href="http://zakuni.blogspot.jp/2013/06/javascript.html">その1</a> <a href="http://zakuni.blogspot.jp/2013/06/javascript-2.html">その2</a><br />
<br />
モジュール単位でファイル分割する。<a href="http://requirejs.org/">RequireJS</a>使う。<br />
<br />
前々回からのbower.jsonを編集。dependenciesにrequirejsを追加する。<br />
<pre><blockquote><code>{
"name": "zakuni-js-template",
"version": "0.0.3",
"main": "main.js",
"ignore": [
"**/.*",
"node_modules",
"components"
],
"dependencies": {
"requirejs": "latest"
},
"devDependencies": {
"mocha": "latest",
"chai": "latest"
}
}</code></blockquote></pre><br />
色々と試行錯誤した結果、こうなった。<br />
<pre><code><blockquote>.
├── bower.json
├── camera.coffee
├── camera.js
├── components
│ ├── chai
│ ├── jquery
│ ├── mocha
│ └── requirejs
├── index.html
├── main.coffee
├── main.js
└── test
├── test.camera.coffee
├── test.camera.js
├── test.coffee
├── test.html
└── test.js
</blockquote></code></pre>index.html用のメインと、テスト用のmainは別のファイルにする(main.jsとtest.js)。<br />
あと、テストもモジュール単位で分ける(camera.jsのテストはtest.camera.jsを作るようにする)。<br />
mocha.setupとかmocha.runはtest.jsで行う。<br />
<br />
中身はこういう感じになっている。<br />
<script src="https://gist.github.com/zakuni/5791841.js"></script><br />
<br />
<a href="https://github.com/zakuni/js-template/tree/v0.0.3">https://github.com/zakuni/js-template/tree/v0.0.3</a><br />
RequireJS使おうとしたら時間かかってしまって最終的にちゃんと整理しきれなかった感があるので、そのうちまたまとめ直すかもしれない(しないかもしれない)。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-5362872568438842372013-06-10T22:21:00.000+09:002013-06-10T22:22:22.294+09:00JavaScriptのテスト環境を整える その2<a href="http://zakuni.blogspot.jp/2013/06/javascript.html">前回</a>の続き。<br />
<br />
あとやりたいことは、CoffeeScriptを使ってる時でも同じようにテストを書けるようにするのと、ファイル分割。<br />
どちらを先にやるかだけど、後でわざわざ書き直すめんどくささもさることながら、それで動かなくなって悩むのは嫌なので、Coffee化を先にやることにした。<br />
前回のmain.jsは<br />
<blockquote><code>var a = 1;</code></blockquote>だけだった。<br />
これをCoffeeScriptで書くと<br />
<blockquote><code>a = 1</code></blockquote>となるわけだが、これをコンパイルしたmain.jsを使うようにするだけで、前回書いたテストは通らなくなる。<br />
<br />
なぜかというと、CoffeeScriptから生成されるJavaScriptは、無名関数で囲われていて、グローバル汚染を防いでくれている。<br />
つまり、先ほどのmain.coffeeをjsにコンパイルすると<br />
<script src="https://gist.github.com/zakuni/5743646.js"></script><br />
こうなるので、変数aには外部からアクセスできず、ReferenceErrorになってしまう。<br />
<br />
尚、コマンドラインからmochaを使ってテストする分には<br />
<blockquote><code>% mocha --compilers coffee:main.coffee</code></blockquote>みたいにすると中でうまいことやってくれてcoffeeでもテストを通すことができる。<br />
(今回書いてるやつそのままでは通らない。-uオプションでtddを指定したり、chaiをrequireする必要がある)<br />
<br />
前回は素のJavaScriptの話だったのでブラウザで実行することを重視したけど、CoffeeScript書いてるならnpmも使ってることが多いだろうし、それなら素直にコンソールでmochaを使えばいいような気がする。<br />
<br />
そして気づいたけど、前回使ったbowerはインストールするのにnpm使ってるだろうから、ブラウザにこだわる必要はないような気もしてきた。<br />
ただ、mochaとかchaiをファイルでダウンロードしてきて使う人とかもいるだろうと思えば、意味はあるので一応続ける。<br />
<br />
無名関数の中で宣言されているのでアクセスできないことについては色んな解決方法があると思う。<br />
簡単な方法の一つは、windowオブジェクトのプロパティにしてしまうこと。<br />
<blockquote><code>window.a = 1</code></blockquote>テストコードは変えないままグリーンになる。<br />
<br />
というわけでこういう風に書ける<br />
<script src="https://gist.github.com/zakuni/5748578.js"></script><br />
ここではやってないけど、テストもcoffeeで書けばいいと思う。<br />
<br />
そしてひと区切り。あとはファイル分割する。<br />
<br />
ここまでまとめたやつ。<br />
<a href="https://github.com/zakuni/js-template/tree/v0.0.2">https://github.com/zakuni/js-template/tree/v0.0.2</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-3129728166872258012013-06-09T19:41:00.001+09:002013-06-09T19:45:00.149+09:00JavaScriptのテスト環境を整えるクライアントサイドJavaScriptでBackbone.jsとかのフレームワーク使いつつrequire.jsでファイル分割しつつ、更にそれらをCoffeeScriptで書いていた場合にテストを書こうと思ったら軽く発狂しそうになったので、一つずつ解決していくことにした。<br />
<br />
個人的な趣味等を鑑みて前提条件は以下のような感じになった。<br />
・CoffeeScriptでも同じような構成で使える<br />
・ファイル分割できる<br />
・テストがブラウザ上でも動作する<br />
<br />
自動化は今回の範疇にはない。<br />
<br />
後からテストが書きづらかったということに端を発するので、テスト駆動で開発する。<br />
<blockquote><code>% bower install mocha</code></blockquote><a href="http://visionmedia.github.io/mocha/">mocha</a>を選んだ理由は、expect.jsとかQUnitとかと組み合わせやすそうなことと、ブラウザとコンソール両方で動かせるのと、Nodeでも使えるから。<br />
npmじゃなくbowerでインストールしているのは、クライアントサイドのことはなるべくクライアントサイドで完結させたいので、なるべくNodeと切り離したいのがあるから。<br />
<br />
mochaのサンプルを見ながらテスト用ページのひな形を作る。mocha.setupをbddでなくtddにしたのは趣味の問題。<br />
<script src="https://gist.github.com/zakuni/5737730.js"></script><br />
これをブラウザを開いてみると、passes: 0 failures: 0 duration: 0s とか出てるはず。<br />
<br />
assertionのために別のライブラリを使う。色んな書き方に対応してる<a href="http://chaijs.com/">Chai</a>を使ってみることにした。<br />
あと、ここでbower.jsonを作った。<br />
<blockquote><code>% bower init</code></blockquote>ちょっと編集する。<br />
mochaもchaiもテストで使うものなのでdevDependenciesに入れた。<br />
<blockquote><code>{<br />
"name": "zakuni-js-template",<br />
"version": "0.0.1",<br />
"main": "main.js",<br />
"ignore": [<br />
"**/.*",<br />
"node_modules",<br />
"components"<br />
],<br />
"dependencies": {<br />
},<br />
"devDependencies": {<br />
"mocha": "latest",<br />
"chai": "latest"<br />
}<br />
}</code></blockquote><br />
HTMLを編集して、テストを書く。<br />
<script src="https://gist.github.com/zakuni/5742908.js"></script><br />
これでブラウザリロードして、グリーンになってればOK。<br />
<br />
namespace的なこととか考えないならたぶんこれで充分テストを書いていける。<br />
ひとまずここで一区切り。<br />
<br />
ここまでをまとめたのが以下のもの。<br />
<a href="https://github.com/zakuni/js-template/tree/v0.0.1">https://github.com/zakuni/js-template/tree/v0.0.1</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-89946534442343874072013-06-04T23:47:00.000+09:002013-06-04T23:47:16.887+09:00chef-solo使い始めるさくらのVPSで使ってるUbuntuをまた壊してしまって直らない。<br />
それならいっそ何度再インストールしようが痛くないようにchef使っておくことにした。<br />
<br />
knife-soloを入れる。<br />
<br />
<blockquote><code>% gem install knife-solo</code></blockquote>何故かやたら時間かかった。<br />
<br />
Chefレポジトリを作成する。<br />
<blockquote><code>% knife solo init chef-repo</code></blockquote><br />
作成はされたけどwarningが出てた。<br />
<blockquote><code>WARNING: No knife configuration file found</code></blockquote><br />
設定しておく。<br />
<blockquote><code>% knife configure</code></blockquote>色々聞かれたけどとりあえずreturnを連打してデフォルト設定にした。<br />
<br />
とりあえず練習を兼ねてnginx用のクックブックを作る。<br />
<blockquote><code>% cd chef-repo<br />
% knife cookbook create nginx -o site-cookbooks<br />
</code></blockquote>そうすると site-cookbooks以下にnginxフォルダとか出来る。<br />
<br />
site-cookbooks/nginx/recipes/default.rbを編集して、<br />
<blockquote><code>package "nginx" do<br />
action :install<br />
end</code></blockquote>とか書くと、サーバーにこのレシピを適用したときにOSの違いとか吸収してnginxをインストールしてくれるはず。<br />
<br />
クライアント側からサーバーにchefをインストールさせることができる。<br />
<blockquote><code>knife solo prepare user@host</code></blockquote>sshと同じように -i とか -pとか -Pを付けて実行できる。<br />
<br />
この時のユーザーはsudoできるユーザーじゃないといけない(たぶん)。<br />
<br />
上の例だとクライアント側のnodesフォルダ内にhost.jsonっていうJSONファイルが生成されているはず。<br />
こいつを編集してやって、どのレシピを使うかを指定する。<br />
<blockquote><code>{"run_list":[]}</code></blockquote>とかなってると思うので、こうする。<br />
<blockquote><code>{"run_list":["nginx"]}</code></blockquote><br />
そしてサーバーにレシピを適用する。<br />
<blockquote><code>% knife solo cook user@hoge</code></blockquote>prepareの時と同じで、ここでもsshで接続するときと同じようにオプションを指定する。<br />
<br />
ここまで正しくできてればnginxがインストールされる。<br />
同じように他のレシピも作っていく。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-52182093435420341992013-03-23T16:52:00.000+09:002013-03-23T16:52:37.778+09:00Play2.1でHTTPのGETするPlayにはplay.api.libs.ws.WS(Web Service、WebSocketではない)というライブラリがあってHTTP通信をすることができる。<br />
非同期にやってくれるので、レスポンスを同期的に使うには返り値をちょっとゴニョゴニョしないといけない。<br />
<br />
で、Play2.0系のときはPromise[ws.Response]で返ってたんだけど、2.1からはFuture[ws.Response]で返ってくる。<br />
ググって上の方に出てくるやつは大体2.0系の話なのでそのままでは動かない。<br />
<br />
なので2.0系で以下のように書いていたものは<br />
<script src="https://gist.github.com/zakuni/5226809.js"></script><br />
2.1系では以下のように書く必要がある。<br />
<script src="https://gist.github.com/zakuni/5226816.js"></script><br />
本来これでいいと思うのだけど、<br />
<a href="http://grokbase.com/t/gg/play-framework/131rzk6wcm/possible-ws-response-encoding-bug">http://grokbase.com/t/gg/play-framework/131rzk6wcm/possible-ws-response-encoding-bug</a> <br />
とかで言及されているように<meta charset="utf-8">とか書かれてるHTMLでもISOで返ってきちゃう。<br />
<br />
なので、文字コードを変換してやる<br />
<script src="https://gist.github.com/zakuni/5226886.js"></script><br />
ちゃんと探してないけど、もしかしたらWSのオプションとかでエンコードを指定してやったりできるのかもしれない。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-58005069510661505472013-02-27T11:30:00.003+09:002013-03-01T19:15:06.810+09:00認証付きProxy環境下でHomebrewのインストール<blockquote class="tr_bq"><code>export http_proxy=http://<i>USER</i>:<i>PASS</i>@<i>PROXY</i>:<i>PORT</i><br />
export ALL_PROXY=$http_proxy<br />
</code></blockquote>してから<br />
<blockquote class="tr_bq"><code>ruby -e “$(curl -fsSkL raw.github.com/mxcl/homebrew/go)”</code></blockquote>する。<br />
<br />
brew install等するときにも同様なので、上の2行をシェルの設定ファイルに書いておくのがよかろう。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-67856545654151695382013-02-16T12:17:00.000+09:002013-02-16T12:17:24.927+09:00MacRubyにおけるnilの扱い参考: <a href="https://github.com/MacRuby/MacRuby/wiki/Common-Issues">https://github.com/MacRuby/MacRuby/wiki/Common-Issues</a><br />
<br />
Rubyでは、nilに対して定義されてないメソッド呼び出しをするとNoMethodErrorになる。一方、Objective-Cではnilに対してメッセージを投げても実行時エラーになることはなく、nilが返ってくる。 <br />
<br />
さて、MacRubyではどうなっているかというと、(少なくとも現状は)Rubyに合わせた仕様になっているらしく、NoMethodErrorになる。<br />
<br />
ただ、既存のObjective-Cのコードを置き換えるとか、Cocoa的に書くとnilにメッセージを投げたい場合も出てくると思うので、そういうときは<br />
<br />
<blockquote class="tr_bq">
<code>framework 'Foundation'</code></blockquote>
<br />
しておけばいい。<br />
<br />
RubyMotionとかMobiRubyではこの辺どうなってるんだろう。 zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-68761539187568542482013-01-06T20:01:00.002+09:002013-01-06T20:01:57.984+09:00MacRubyでCocoaPodsのインストールができなかった<a href="http://cocoapods.org/">CocoaPods</a>をインストールする。<br />
<br />
普通のrubyでもいいらしいが、macrubyのほうが相性が良さそうな気がするのと、元々macrubyで使おうと思っているのでrbenvでmacrubyに切り替えてgem installする。<br />
尚、rbenvとかrvmじゃないときはmacgem installする。<br />
<blockquote class="tr_bq">
<code>% gem install cocoapods</code> </blockquote>
あとこれも必要<br />
<blockquote class="tr_bq">
<code>% pod setup</code></blockquote>
そしたらエラーが出た。<br />
<br />
<blockquote class="tr_bq">
<code>fork() function is unimplemented on this machine</code></blockquote>
とか出てる。ええー?<br />
<br />
よくわからんので一回普通のruby1.9.3でgem installとpod setupしたらすんなりいけた。ええー?zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-71247032535081615022012-12-31T23:07:00.000+09:002013-04-21T17:09:25.309+09:00rvmからrbenvに乗り換え年越し環境構築を。<br />
rvmからrbenvに乗り換えてみる。<br />
<br />
まずはrvmをアンインストール。 <br />
rvmをアンインストールするにはrvm implodeもしくはrvm seppukuコマンドを使う(切腹ってなんだよ)。 <br />
<blockquote class="tr_bq"><code>% rvm seppuku</code></blockquote>zshrcとかに書いてあるrvm関連の行も消す。<br />
<br />
続いてrbenvとruby-buildのインストール、Homebrewで。<br />
<br />
<blockquote class="tr_bq"><code>% brew install rbenv ruby-build</code></blockquote><br />
<code>eval "$(rbenv init -)"</code> をzshrcとかzshenvとかに書く(僕はzshenvに書いた)。<br />
<br />
<code>rbenv install</code>でrubyをインストールする<br />
<blockquote class="tr_bq"><code>% rbenv install 2.0.0-preview2</code></blockquote>自分でコンパイルして <code>~/.rbenv/versions/ </code>に置いてやるんでもいいらしい。<br />
<br />
追記:<br />
ruby2はMacデフォルトのopensslとは互換性がないとかなんとか。<br />
<a href="https://github.com/sstephenson/ruby-build/issues/197">https://github.com/sstephenson/ruby-build/issues/197</a><br />
<br />
なのでopensslもhomebrewでインストールして、rubyもオプション付けてインストールし直した。<br />
<blockquote class="tr_bq"><code>% brew install openssl<br />
% brew link openssl<br />
% RUBY_CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl` rbenv install 2.0.0-preview2</code></blockquote><br />
2013/04/21 追記<br />
readlineも指定してやらないとirbとかpryで日本語使えなかった<br />
<blockquote><code>% brew install readline<br />
% CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.0.0-p0</code></blockquote><br />
インストールしたら、rbenvでは以下のコマンドが必要になるそうな。<br />
<blockquote class="tr_bq"><code>% rbenv rehash</code></blockquote>rbenvではこれをよく使うらしく、新しくrubyをインストールしたときとか、実行可能なgemをインストールしたときにもrehashしてやらないといけないらしい。<br />
(<a href="https://github.com/ryansouza/rbenv-rehash">rbenv-rehash</a>っていうgemを各rubyに入れておいてやることで勝手にやってくれるようになるらしいが、まあなんとなく鬱陶しいな)<br />
<br />
デフォルトで使うrubyのバージョンはrbenv globalで指定する。<br />
<blockquote class="tr_bq"><code>% rbenv global 2.0.0-preview2</code></blockquote>β版的なものをデフォルトにするのは止めたほうがいいと思う。<br />
<br />
尚、MacRubyに関しては、<a href="https://github.com/brettg/rbenv-macruby">rbenv-macruby</a>というプラグインがあり、こいつを使えばMacRubyもrbenvで管理できる。<br />
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-80742797977873307712012-12-23T14:35:00.000+09:002013-08-18T20:25:38.435+09:00[Mac]Guardによる自動テスト久々に環境構築おじさん的なことを。<br />
<br />
これまでRSpecとautotest(zentest)を使ってたのだけど、最近はみんなminitestだな、とかなんとか聞いたのでminitestも使ってみる。<br />
で、自動実行するために<a href="https://github.com/guard/guard-minitest">Guard</a>を使う。Rails4とかで使われてるのかな?<br />
<br />
gemspecに書いて<code>bundle install</code><br />
<blockquote class="tr_bq"><code>gem.add_development_dependency "guard-minitest"</code> </blockquote>もちろん普通に<code>gem install</code>してもいいし、Gemfileに書いてもいい。 <br />
<br />
Guardfileという設定ファイルを生成するために<br />
<blockquote class="tr_bq"><code>% bundle exec guard init minitest</code></blockquote>Guardfileの基本的なところについては割愛。 <br />
<br />
ファイル保存のタイミングでテストするためにrb-fsevent使う(WindowsとかLinuxの場合はほかのものを使う)<br />
<blockquote class="tr_bq"><code>gem.add_development_dependency "rb-fsevent"</code></blockquote>テスト書いて、<br />
<blockquote class="tr_bq"><code>% guard</code></blockquote>すると、ファイル保存のたびにテストされる。<br />
<br />
<br />
以下、Growlで通知させる話。<br />
<br />
gem growlを使う。 <br />
<blockquote class="tr_bq"><code>gem.add_development_dependency "growl"</code></blockquote>を追加して、<code>bundle install</code>して<code>guard</code>し直す。 <br />
<br />
が、通知されない。<br />
<br />
Growl2.0になって、GrowlNotifyを入れてないせいだった。<br />
<a href="http://growl.info/downloads#generaldownloads">http://growl.info/downloads#generaldownloads</a> からダウンロードしてインストール。<br />
<br />
改めて<br />
<blockquote class="tr_bq"><code>% guard</code></blockquote>適当にファイルいじって保存してテストを走らせる。<br />
<br />
通知出た。<br />
が、何故か1回ファイル保存するごとに2回ずつ通知される。<br />
よくみたらテスト自体が2回ずつ実行されてる。<br />
<br />
Guardfileにguard 'minitest' do endが2個あった。<br />
<code>guard init minitest</code>をしたときに、Gemfileがあるならbundle execしたほうがいいんじゃない?って出力されたのでもう一回<code>bundle exec guard init minitest</code>したらGuardfileに追記されていたせいだった。<br />
<br />
もう一回<code>guard init</code>してみたら3個になって、<br />
<blockquote class="tr_bq"><code>There are 3 definitions in your Guardfile for 'minitest', you may want to clean up your Guardfile as this could cause issues.</code></blockquote>っていうのが出てた。2回目のときにも出ていたんだろう。<br />
必要ない分を消したらちゃんと1回だけ実行されて通知も1個になった。 zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-4056431504676617672012-11-28T22:12:00.000+09:002012-11-28T22:12:02.421+09:00Playでライブラリ使おうとしてどハマりした<div dir="ltr">
Playの中で、dispatchを使おうとしてハマったのでメモ。<br />
<br />
結論から述べると、Build.scalaに以下のように書いて、<br />
<blockquote class="tr_bq">
<code> val appDependencies = Seq(</code><br />
<code> // Add your project dependencies here,</code><br />
<code> "net.databinder.dispatch" %% "dispatch-core" % "0.9.4"</code><br />
<code> ) </code></blockquote>
<code>% play</code>して<code>reload</code>して<code>update</code>して<code>compile</code>して<code>run</code>したら動いた。<br />
<br />
<br />
以下、ダメだったこと。<br />
<blockquote class="tr_bq">
<code><code>libraryDependencies += </code>"net.databinder.dispatch" %% "dispatch-core" % "0.9.4"</code></blockquote>
<code>をPlugins.sbtに書いても</code>module not foundとかdispatchなんて定義されてないぜ、とか言ってくる。<br />
そんなはずあるかよく探せ、などと言ってみても見つかりませんの一点張り。<br />
<br />
ダメ元で、<br />
<blockquote class="tr_bq">
<code><span class="pun">addSbtPlugin(</span><span class="str">"net.databinder.dispatch"</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="str">"dispatch-core"</span><span class="pln"> </span><span class="pun">%</span><span class="pln"> </span><span class="str">"0.9.4"</span><span class="pun">)</span></code></blockquote>
とか書いてみてももちろんダメ。<br />
<br />
ついでにbuild.sbtを自分で作ってそこに書いてみてもダメだった。 </div>
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-46254864926808555032012-10-16T22:15:00.000+09:002012-12-23T00:26:33.081+09:00gemで実行ファイルがインストールされなくてハマった<a href="http://zakuni.blogspot.jp/2012/10/bundlergem.html" title="ざくにく定食: BundlerでGem作って公開、アップデートまで">ざくにく定食: BundlerでGem作って公開、アップデートまで</a><br />
で書いたような、Bundlerで生成したファイルの中から必要な分だけを既存のディレクトリに突っ込んで、rake build とrake installしてもbin以下にある実行ファイルがコマンドとしてインストールされなかった。<br />
<br />
散々悩んだが、gemspecを見ていて原因がわかった。<br />
<blockquote>
<code> gem.files = `git ls-files`.split($\)<br />
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }</code></blockquote>
git ls-filesの結果を使っているが、bin以下をまだgit addしていなかった。<br />
git addしてから改めてやってみたらいけた。zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-87636231426842012-09-17T20:10:00.000+09:002012-09-17T20:12:16.309+09:00MobiRubyでhello world<blockquote><code>% gem install xcodeproj<br />
% gem install nokogiri<br />
% git clone https://github.com/mobiruby/mobiruby-ios.git<br />
% cd mobiruby-ios<br />
% sh setup.sh<br />
% open mobiruby-ios.xcodeproj</code></blockquote><br />
で、XcodeでRunしてみるとビルドエラーが出た。<br />
<br />
RVMのgemでインストールしてたせいだった。<br />
<br />
<blockquote><code>% rvm system</code></blockquote>してからgemを入れ直す<br />
<blockquote><code>% sudo gem install xcodeproj<br />
% sudo gem install nokogiri</code></blockquote><br />
で、あらためてRun。動いた。<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://gyazo.com/b6fff96f842da96dfcb657f8792311b7.png" imageanchor="1" style="margin-left:1em; margin-right:1em"><img border="0" height="744" width="396" src="http://gyazo.com/b6fff96f842da96dfcb657f8792311b7.png" /></a></div><br />
<br />
後でREADME見なおしてみたら最初からこうなってた。この通りにやればよかった。<br />
<blockquote><code>% sudo /usr/bin/gem install xcodeproj<br />
% sudo /usr/bin/gem install nokogiri</code></blockquote><br />
参考: <a href='https://github.com/mobiruby/mobiruby-ios' title='mobiruby/mobiruby-ios'>mobiruby/mobiruby-ios</a><br />
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-22943258960959235312012-09-15T16:35:00.000+09:002013-02-27T09:54:54.069+09:00brew updateでコケた<blockquote><code>% brew update<br />
error: The following untracked working tree files would be overwritten by merge:<br />
Library/Formula/argp-standalone.rb<br />
Please move or remove them before you can merge.<br />
Aborting<br />
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master</code></blockquote><br />
以下で直った。<br />
<br />
<blockquote><code>% cd `brew --prefix`<br />
% git fetch origin<br />
% git reset --hard origin/master<br />
% brew update</code></blockquote><br />
参考: <a href='http://d.hatena.ne.jp/con_mame/20120301' title='homebrewのupdateが失敗した時 - まめ畑'>homebrewのupdateが失敗した時 - まめ畑</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-46247971316710836022012-09-09T18:49:00.001+09:002012-09-09T18:49:42.028+09:00ctags使おうとしたらハマったctagsを使ったことがなかったので、とりあえず使ってみようとしたらハマった。<br />
<blockquote><code>% ctags -R</code></blockquote>すると<br />
<blockquote><code>ctags: no input files specified.<br />
Try `ctags --help' for a complete list of options.</code></blockquote>って頑に言われる。<br />
<br />
ひとまず言われた通り <code>ctags --help</code> してみると<br />
-Rオプションのところに<br />
<blockquote><code>-R, --no-regex<br />
Don't create tags from regexps for the following files.</code></blockquote>とか書いてある。なんかおかしい。<br />
<br />
<code>ctags --version</code>してみると<br />
<blockquote><code>ctags (GNU Emacs 24.1)<br />
Copyright (C) 2012 Free Software Foundation, Inc.<br />
This program is distributed under the terms in ETAGS.README</code></blockquote><br />
なんか違う。<br />
前にhomebrewでemacs24入れたりしたときにおかしくなったのだろうか。<br />
<br />
ともあれ、コレジャナイので入れ直す。<br />
<blockquote><code>% brew install ctags</code></blockquote><br />
<blockquote><code>Error: The linking step did not complete successfully<br />
The formula built, but is not symlinked into /usr/local<br />
You can try again using `brew link ctags'<br />
</code></blockquote>とか言われたので、言われた通りにする。<br />
<blockquote><code>% brew link ctags</code></blockquote><br />
できたようなのであらためて<br />
<blockquote><code>% ctags -R</code></blockquote><br />
ちゃんとtagsファイル出来た。<br />
zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-16236034384902650092012-07-22T20:10:00.000+09:002012-07-22T20:14:07.073+09:00[Mac]Scalaで日本語使う日本語を出力しようとしたら文字化けした。<br />
<br />
<code>JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8'</code> をつけて実行すれば文字化けしない。<br />
<blockquote><code>% JAVA_TOOL_OPTIONS='-Dfile.encoding=UTF8' scala hoge.scala</code></blockquote><br />
.zshrcに以下を追加。<br />
<blockquote><code>export JAVA_OPTS="-Dfile.encoding=UTF-8"</code><br />
</blockquote>REPLでも日本語使えるようになるけど、書いて消すとズレたりするありがちな感じになる。<br />
<br />
参考: <a href="http://2012.8-p.info/english/2/16/scala">Scala, Mac and -Dfile.encoding=UTF-8 - Kato Kazuyoshi</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com0tag:blogger.com,1999:blog-2620405274751707319.post-56236837555111589342012-07-16T00:48:00.000+09:002012-07-16T10:06:16.809+09:00Sinatraの自動リロード2012/7/16 10:00 指摘によりsinatra-contribを使う旨を追記&修正<br />
<br />
未だにshotgun使ってた。<br />
<br />
参考:<br />
<a href="http://inmonochrome.blogspot.jp/2012/05/sinatra-2.html">モノクロームの中: sinatra (2) - オートリロード -</a><br />
<a href="http://www.sinatrarb.com/contrib/reloader">Sinatra::Reloader (part of Sinatra::Contrib)</a><br />
<br />
gemをインストール<br />
<blockquote><code>% gem install sinatra-contrib</code></blockquote><br />
Classicスタイル<br />
<blockquote><code>require "sinatra"<br />
require "sinatra/reloader" if development?</code></blockquote><br />
Modularスタイル<br />
<blockquote><code>require "sinatra/base"<br />
require "sinatra/reloader"<br />
<br />
class MyApp < Sinatra::Base <br />
configure :development do<br />
register Sinatra::Reloader<br />
end<br />
end</code></blockquote>developmentモードで起動したときに有効になる。(デフォルトでdevelopmentモード)<br />
<br />
ところでrackup -E で設定できるのってdevelopmentとtestとproductionだけで合ってるんだろうか。ハッキリとこれです!って言ってるのが見つけられなかった。<br />
<br />
<br />
あと、Bundler使うパターン<br />
<br />
Gemfileがこう<br />
<blockquote><code>source :rubygems<br />
<br />
gem 'sinatra', require: 'sinatra/base'<br />
<br />
group :development do<br />
gem 'sinatra-contrib', require: 'sinatra/reloader'<br />
end</code></blockquote>で、本体のほうがこう<br />
<blockquote><code>class App < Sinatra::Base <br />
configure :development do <br />
Bundler.require :development <br />
register Sinatra::Reloader <br />
end <br />
end</code></blockquote>bundle exec rackupで起動しよう。<br />
<br />
ファイル単位でもリロードの設定を変えられるようだ。<br />
http://www.sinatrarb.com/contrib/reloader<br />
<br />
<br />
今回の、shokaiさんはいつからやっていた?は2年と3ヶ月前でした。<br />
<a href="http://d.hatena.ne.jp/shokai/20100423/1272009141">sinatra開発時に自動リロードする - 橋本詳解</a>zakunihttp://www.blogger.com/profile/02551344342026543335noreply@blogger.com1