log

最近興味があること

主に技術方面で、最近興味があることを列挙してみる。 手を付けたいけど付けられてないのが多すぎる……。

  • Environment
    • vagrant
  • CI
  • TDD
  • WAF
  • etc
    • LESS
    • haml
    • CoffeeScript

やってみたいのが、TDD やら何やら総動員した開発プロセスの最適化。 しかし作りたいプロダクトが無いっつーかネタがないっつーか。 深刻なネタ不足。

tiarraMetro を導入した

tiarra のログを Web から閲覧できるようになるフロントエンド tiarraMetro を導入した。

tiarraMetro 用のテーブル定義と現状運用していた DB のテーブル定義が少し違ってそのままでは導入できなかったので、そこらへんの作業録を残しておく。

channel テーブル

カラムを追加する。

alter table channel add column readed_on DATETIME;                                                                                 
alter table channel add column view tinyint(1) NOT NULL DEFAULT '1';

log テーブル

カラムと index を追加する。

alter table log add column is_notice tinyint(4) DEFAULT NULL;                                                                      
create index channel_id_and_created_on on log (channel_id, created_on);

priv テーブル

新たにテーブル作成する。

CREATE TABLE priv (                                                                                                                
id INTEGER NOT NULL AUTO_INCREMENT,
nick_id INTEGER DEFAULT NULL,
msg text,
is_notice tinyint(4) DEFAULT NULL,
is_me tinyint(4) DEFAULT NULL,
created_on datetime DEFAULT NULL,
updated_on datetime DEFAULT NULL,
PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

まとめ

テーブル定義の変更はこれだけ。今のところは問題なく動いてる。 あとはリンク先にある導入手順通りに進めればおk。のはず。

日常使うソフトウェア/サービスについてまとめてみる

自分自身の頭の中の整理のために、普段使ってるソフトウェアとWebサービスをまとめてみる。

Web ブラウザ

Firefox の最新版を使っている。

Firefox の何がいいかというと、アドオンによる拡張性。これに尽きる。素の Firefox とか使う気が起きない。vimEmacs と同じで、自分以外の他人が設定した Firefox も使う気になれない。

プライベートで Mac, 仕事で Linux/Windows 環境を使ってるのでマルチプラットフォームに対応してる FirefoxChrome くらいしかブラウザの選択肢が無い。Chrome も悪くないけど拡張性が低いと感じるので現状は Firefox 使ってる。

普段使ってるアドオンは以下。

Delicious Bookmarks

SBM として Delicious を使ってるので、これは欠かせない。

Firebug

普段は無効化していて、Web系の開発をしたり、あるページをスクレイピングしたくてDOMの中身を探るときに使う。無いと死ぬ。

Greasemonkey

主に AutoPagerize と Tumblr 環境のために入れている。Firefox9 の Tumblr 環境は構築するのに一手間必要で、手順は @rarihoma さんから教えてもらった(http://twilog.org/tweets.cgi?id=rarihoma&word=%40mEGGrim¶m=asc)。

ちなみに入れてる UserScript は以下。

Tombloo

同じく Tumblr 環境のために入れている。

Vertical Tabs

タブを縦表示に切り替えるアドオン。他にもツリー型タブとかいろいろあるけど、これが軽くて使いやすい。他は重かったり Firefox の最新版に対応してなかったりする。

Vimperator

同じく無いと死ぬアドオン。Firefox の操作を vim 風にしてくれる。 入れてるプラグインは以下。

  • delicious_search.js
    • o/t を押したときに Delicious に POST した URL からも検索する。
  • feedSomeKeys_3.js
  • instapaper.js
    • Instapaper への POST をコマンドから実行。
  • slideshare.js

テキストリンク

URLをダブルクリックすると、リンクでなくてもそのURLを開いてくれる。地味に便利。

Twitter

tiarra + TweetIrcGateway を VPS で稼働させている。Mac/Windows/Linux では LimeChat を使い、モバイル端末(Android)では AiCiA を使ってる。これだとどの端末でも同じような環境になってかなり便利。端末ごとにタブ分けの設定とかしなくていいし。

LimeChat 最強説を唱えてたけど AiCiA は TIG を前提とした機能が付いててむしろこっちの方が使いやすいと思う。

ソーシャルブックマーク

Delicious を愛用してる。最近はデザインが劣化しまくってて大変悲しい。

あと、最近は Instapaper も使ってる。

フローとしては、Instapaper に一旦保存 → 再度見ると思われるものは Delicious へ、そうでないものは消す、って感じ。

このフローでめんどくさいのが Instapaper から Delicious へ移す部分なんだけど、いまだ最適化できていない。いつかこれを楽にするためのプログラムを書く予定。

メモ帳/備忘録/その他作業記録

Emacs で Org-mode + howm を使ってそこですべて記録している。ブログの下書きもそこで記録してる。Evernote でも何でもいいけど一元管理して検索できる状態にしておくってのといつでも他の環境に移行できる状態にしておくのがいいと思っている。

プログラミング用エディタ

vim を使っている。NeoBundle 入れたおかげでいろんなプラグインを試しては消し試しては消しを手軽にできるようになって便利。

TODO管理

Emacs の Org-mode で、一枚のファイルを作ってそこで管理してる。howm でファイル分けると一覧性が下がるのでとにかく一枚にまとめて、終わったのは archive に突っ込んでる。 以前は時間の計測もしてたけどそれは早々にやめてしまった。無理。

ブログ

ブログは全然落ち着かずにあちこちふらふらしてる。

最近 WordPress に落ち着いたかと思ったら今度は jekyll が気になってきた。Markdown で書けるのは素晴らしいと思う。

考えてみると、定期的にブログ書きたい病が発病してそのたびにプラットフォームを変えてる気がする。

ブログも上記の備忘録の一部なので、可能であればローカルにもテキスト形式で保存しておいて検索可能にしておきたい。

jekyll だと Markdown 形式のファイルが残るし、WordPress だと org2blog を使っていれば手元にテキストファイルが残る。あとはブログ自体のデザインとか機能のカスタマイズ性だったり、ホスティングにするかサービス借りるかとかそういうアレ。jekyll だと github の Web 使えるから楽といえば楽。

むやみに変えまくってもいいことないのでしばらくは WordPress で行く所存。

ShowOff と Shower を組み合わせた ShowOffer(仮称)を作った

ShowOffShower も HTML でプレゼンテーション用のスライドを作るためのツール。

ShowOff は markdwon ファイルを動的にHTMLファイルへと変換する簡易Webサーバで、Sinatra を使って作られてる。

Shower は CSSJavaScript のセットを提供してて、指定された形式で HTML を書くとスライドを作ることができる。HTML5 に対応してるし見た目も綺麗。

ShowOff の方が便利だと思うけど(HTML 直接書くのは辛いし)、Shower の見た目も捨てがたいよねってことで両方を組み合わせたツールを作ってみた。ベースは ShowOff で Shower のガワをかぶせた感じ。

https://github.com/yono/showoff

とりあえず、以下の機能は動いた。

  • コマンドで雛形作成
  • サーバ起動

以下の機能はまだ動いてない(試してないものも含め)。

  • ShowOff由来
    • Presentar画面
    • PDF生成
    • herokuへデプロイ
    • githubへデプロイ
    • シンタックスハイライト
  • Shower由来

ShowOff と Shower を無理やりつなげるために書いた部分が汚くなってしまって直したい。

Redmine 1.3.0 で Wiki を PDF 出力する

ついに Wiki も PDF 出力が!ってことで喜び勇んで試してみたらそのままじゃ動かなかったのでメモ。

環境は以下の通り。

gem のインストールやらほげほげは省略(たぶん後で別途まとめる)。

PDF 出力自体は(rmagick install 済みという条件付きで)可能。

ただし、そのままだと日本語のフォントが汚い。かつ、漢字が出力されない。

解決策としては、config/locales/ja.yml の 169 行目辺りを変更する。

general_pdf_encoding: SJIS # コメントアウトされてるのでコメントを外す
# general_pdf_encoding: CP932 # 元々はこっちが使われているが、コメントアウトする

つまり、general_pdf_encoding の値を CP932 から SJIS へ変更する。

これで日本語フォントが修正されて漢字もちゃんと出力されるようになる。

死ぬほど眠いから今日はここまで。

Jenkins で Rails3 プロジェクトのカバレッジを計測する

話にはよく聞くけど実際 Jenkins 使ったことないなーってことで、ちょうど手元で試してた rails3 のプロジェクトを対象に構築してみることにした。

rails3 でカバレッジ計測

以前は rcov 使ったと思うんだけど、rcov は 1.9.* には対応してないらしい。 最近の流行りは simplecov らしいってことで simplecov を入れる。

参考: Ruby 1.9.2 + Rails3でテストカバレッジを取るにはSimpleCovが良さそう | FIRN.JP

ちなみに rspec までは導入済みという前提。

必要なのは simplecov と simplecov-rcov。前者がカバレッジ計測で後者は出力フォーマットを rcov 互換にする。

まずは Gemfile に simplecov と simplecov-rcov を追加。

group :test do
gem 'simplecov', :require => false
gem 'simplecov-rcov', :require => false
end

追加したら bundle install を実行。

$ bundle install

spec/spec_helper.rb に以下の記述を追加。 require 'rspec/rails' よりも前じゃないと正常に動作しないっぽい。

require 'simplecov'
require 'simplecov-rcov'
SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
SimpleCov.start 'rails'

準備ができたら rake spec を実行する。結果は coverage/rcov 以下に出力される。

$ rake spec

simplecov の設定はひとまず完了。

Jenkins インストール

公式の Wiki に Ubuntu の場合のインストール手順が載ってたのでそのまま実行。

ちなみに、rails 開発環境とは別マシンを作ってそっちにインストールした。実際に運用するときを想定して。

Installing Jenkins on Ubuntu - Jenkins - Jenkins Wiki

Jenkins サーバに rvm をインストールする

手順は 以前エントリにまとめた のでそれをそのまま使う。

開発マシンから git clone するために ssh 公開鍵の設定

考えてみたら、複数人開発で git 使うときって何が主流なんだろう。公開できないようなレポジトリの場合。github のプライベートレポジトリ? gitosis? gitlab? まあいいや。

とりあえず、ssh アクセス用に開発マシンに jenkins アカウントを作っておく。

% sudo adduser jenkins

続いて、jenkins サーバで公開鍵を作る。パスフレーズは空のままにしておくこと。

$ sudo su - jenkins
$ ssh-keygen

一度開発マシンに ssh ログインする。

$ ssh jenkins@rails-dev

gitconfig の設定

これを済ませておかないと clone でこける。

参考: Ubuntu ServerにJenkinsをセットアップしてGitレポジトリと連動するまでのまとめ - jiska

sudo -u jenkins -H git config --global user.email "jenkins@jenkins-server"
sudo -u jenkins -H git config --global user.name "jenkins"

必要なプラグインをインストールする

今回の用途だと以下の三つを入れておくといいらしい。

  • Jenkins ruby metrics plugin
  • Jenkins GIT plugin
  • Jenkins Rake plugin

インストールは http://jenkins-server:8080/pluginManager から GUI で実行可能。便利。

rails プロジェクト用ジョブ作成

設定を以下にまとめる。

#!/var/lib/jenkins/.rvm/bin/rvm-shell ruby-1.9.2-p290@rails3
bundle install --without=production
rake db:migrate
rake spec
  • ビルド後の処理

これでひと通り設定完了。のはず。うまくいかない場合はコンソール出力を確認すること。