log

rails アプリを作り始める時の手順

普通に gem install rails して rails new newapp だと gem 環境が汚れるので、bundler を活用して極力少ない手数で開発を始める方法を調べた。

前提条件

  • ruby 1.9.3
  • bundler

がインストール済み。

手順

新規プロジェクトを作るディレクトリを作成。

% mkdir newapp
% cd newapp

bundle init して Gemfile を作成する。

% bundle init
Writing new Gemfile to /path/to/current/dir/newapp/Gemfile

Gemfile を編集して gem "rails" の行のコメントを外す。

% vi Gemfile
# A sample Gemfile
source "https//rubygems.org"

gem "rails" # edit

bundle install して rails をインストールする。path を指定して gem を特定ディレクトリ以下にインストールする。

% bundle install --path vendor/bundle

rails new コマンドでアプリ初期化。ただし、Gemfile を後で修正するのでこの時点では bundle 実行しないようにする。

途中で「Gemfile を上書きしますか?」というメッセージが出るので yes を選択。

% bundle exec rails new . --skip-bundle
...
    conflict  Gemfile
Overwrite /Users/yono/Desktop/newapp/Gemfile? (enter "h" for help) [Ynaqdh] Y
...

Gemfile を編集する。最低限必要なのは therubyracer のコメントを外すこと。

% vi Gemfile
...
group assets do
  gem 'sass-rails',   '~> 3.2.1'
  gem 'coffee-rails', '~> 3.2.1'
  
  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  gem 'therubyracer', :platforms => :ruby # edit

  gem 'uglifier', '>= 1.0.3'
end
...

bundle で必要な gem をインストールする。

% bundle install

これでシステムの gem 環境を汚さず rails アプリの開発を始められる。

git でバージョン管理する場合の注意

rails new で入る .gitignore に gem をインストールしたディレクトリ(今回の場合は vendor/bundle)を追記しておくこと。

参考ページ

tiarraMetro の高速化

tiarraMetro を使ってると、どうしても初回読み込みが遅いのでしばらく使っていなかった。

が、IRC クライアントをずっと立ち上げてるとスマフォの電池を食いまくるので、tiarraMetro の高速化を図ることにした。

とりあえず MySQL に slow_query_log を仕込んでみたところ、未読数取得のSQLが重いらしいことがわかる。
INDEX 貼ろうかと思ったが既に貼ってるし、コードに手を入れるのはいやだし。

よくよく考えると log テーブルは追記のみなので、過去の log は定期的に別テーブルに移せばいいんじゃね?ということで以下の作業を実施した。

まずは tiarra を止める。

  # service tiarra stop

既存のテーブルを rename する。
# mysql -u tiarra -p tiarra
mysql > rename table log to log_20120917;

新規テーブルを log と同じ構成で作成する。
mysql> create table log like log_20120917;
mysql> exit;

tiarra を起動する。
# service tiarra start

これで初回読み込み時の待ち時間が10数秒から数秒に高速化された。
できれば待ち時間無しが望ましいけど……。

で、あとはこれを cron に仕込んで定期的に実行すればいいんじゃないだろか。
table 名はその日の日付にしといて。

最近興味があること

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

  • 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 を無理やりつなげるために書いた部分が汚くなってしまって直したい。