高速にWeb開発をするために便利ないくつかのTIPS

outputz でいまだに1位になれたことがない村瀬です。

社内で開発をスムーズにするための tips 集を紹介したので、まとめておきます。 記事ではデモができないので便利さが伝わらない物も多いですが参考になれば幸いです。

screenとかzshとか便利だよ!と言う話は社内ではさんざんしているのでありません。 また、OSX 限定の内容もあります。

でははじめましょう。

keychain

keychain と言っても OSX の KeyChain ではなく、コマンドラインのツールです。

これは ssh-agent をより便利にするためのラッパーです。これを使用すると ssh の秘密鍵のパスワードを一度入力するとあとはパスワードなしで ssh 接続できるようになります。

「同じこと二回も言わせんな!」といつも切れているような人は導入すると良いでしょう。

使い方は

$ keychain ~/.ssh/keys/sshkey_for_example.com
[ここでパスフレーズをきかれる]

$ ssh example.com
[パスワードなしで接続できる

という感じです。

sshの接続を共有する

~/.ssh/config に以下のような設定を書くと、ひとつのssh接続を複数のプロセスで共有できます。

Host *
 ControlPath ~/.ssh/master-%l-%r@%h:%p
 ControlMaster auto

どういうことかというと、

$ ssh example.com

した状態で同じホストに対しもうひとつ ssh 接続をしようとすると、前の接続を共有して接続することができます。こうすると二つ目以降の接続では認証フェーズをすっとばせるので一瞬でつながるようになります。またパスワードが聞かれるということもありません。

$ ssh -S none example.com

この挙動は -S none で無効にできますので、接続を共有したくない場合にも対応できます。人によっては

alias 'sshnew'='ssh -S none'

などと alias を作っている方もいるようですが、alias は普段よく使う物でないと名前を忘れてしまって意味がないので僕は設定していません。

encfs

ssh の話が続きましたがみなさんは ssh などで使用する秘密鍵をどのように管理しているでしょうか? 普通にディスクに保存しているだけではマシンが盗難にあったときに大変なことになってしまいます。

そこで登場するのが encfs などの暗号ファイルシステムです。

encfs では実際に暗号化したデータを保存するディレクトリと、複合化したデータにアクセスするディレクトリの二種類のディレクトリを作る必要があります。

僕は ssh の鍵を保存するために以下のようにディレクトリを作っています。

~/.ssh/.keys -- 暗号化したデータを保存するところ
~/.ssh/keys -- 複合化したデータがマウントされるマウントポイント

~/.ssh/keys は encfs のマウントポイントなので間違ってファイルを作らないよう chmod 000 しておくことをお薦めします。

そのあと

$ encfs ~/.ssh/.keys ~/.ssh/keys

とすると ~/.ssh/.keys のデータが複合化され ~/.ssh/keys にマウントされます。初回起動時はファイルシステムの初期化画面になりますので画面の指示に従ってください。

この後、~/.ssh/keys 以下にファイルを作成すると、~/.ssh/.keys に暗号化されたファイルが作成されるという寸法です。

QuickSilverのトリガー機能によく使うアプリを登録しておく

Web開発ではターミナル、エディタ、ブラウザなどの数個のファイルをしばしば行き来すると思います。 そのようなよく使うアプリケーションは QuickSilver のトリガー機能を使用してホットキーで起動(or アクティブ化)できるようにしておくと便利です。

僕は Emacs, iTerm, Firefox, xcode はワンキーでアクティブにできるようにして開発しています。

トリガーで OSX をロックする

keychainをつかったパスフレーズの入力の回避やencfsによるファイルの暗号化などについて説明しましたが、便利な方法には弱点もあります。

これらを使用している状態でPCへのアクセス権をうばわれるとパスフレーズ認証なしでsshされてしまったり、複合化された重要なデータにアクセスされてしまったりと言うようなことが起こりうるでしょう。

そのため、離席するときには必ずコンピューターをロックするようにしましょう。

しかしOSXではホットキーでコンピューターをロックすることができないのでいちいちロックするのがめんどくさいというのもわかります。

そこで前述のQuickSilverのトリガー機能を使用してキーボードのみでロックできるように設定しておくと便利です。

こちらの記事が参考になりますので参照ください。

OSX でスクリーンロックをキーボードショートカットでやる方法 - TokuLog 改めB日記

pit

このようなソースコードを公開したことはないでしょうか。

my $username = 'your username';
my $password = 'your password';

このようなコードは自分が使うときにこの部分を書き換える必要があります。 また、公開側は公開するときにこのようにコードを修正してから公開する必要があります。

これは大変めんどくさい。

そういうときに便利なのが cho45 氏が開発した pit というモジュールです。pitは Ruby/Perl/PHP/Elisp などの実装がありますがここでは Perl 版の使い方を説明します。

use Config::Pit;

my $conf = pit_get('twitter.com', require => {
    username => 'twitter username',
    password => 'twitter password'
});

このようにすると、~/.pit 以下から twitter.com の情報を探し $conf を埋めます。 また情報がない場合はスクリプトはいったん実行を停止し、エディタが立ち上げ必要な情報の入力を求めます。 そこで必要な情報(ここではusername & password)を入力するとその情報が保存され、スクリプトの実行を再開します。

このようにソースコードにパスワードなどを書くことなく快適にスクリプトを書き、そのまま気軽に公開することができます。

また、pitが保存する情報はプレインテキストで保存されますので ~/.pit 以下も前述の encfs などで暗号化しておくことをおすすめします。

emacsclient をより便利につかう

CarbonEmacs 限定の話です。

(add-hook 'server-done-hook
         (lambda ()
            (do-applescript "tell application \"iTerm\"
                                activate
                             end")))

このような設定を追加しておくと emacsclient でファイル編集したとき編集後ターミナルに戻ることが可能です。iTerm の部分はご使用のアプリケーション名に置き換えてください。

screen + emacs-nw でも同様の自動ウィンドウ切り替え tips があるのですがちょっと複雑で説明がめんどうなのと、こういう人は emacs23 の multi-tty に移行してしまっていると思われるので説明しなくてもいいでしょう。

outputzに自分の書いたコード量を投稿する

outputz と言うアウトプット量を計測するサービスがあります。 このサービスは API を公開していることからさまざまはエディタ用のプラグインが開発されています。「エディタ名 outputz」などで検索するとほとんどのエディタからこのサービスが利用できることがわかるでしょう。

僕は Emacs を使っているので typing-outputz.el を利用しています。

これをつかうとこのように書いたコード量を視覚化することができます。

outputz sample

午前中はほとんどコードを書いていない、とか昨日は飲みに行ったので18時すぎからコード書いてない、とか言うことが見て取れますね。

このように自分がさぼっているとあとから振り返ることができるという点で導入すると良いんじゃないかと思います。

またoutputzのランキングをgrowl通知するスクリプト などを導入し、これを定期的に実行するようにしておくと、その日の順位がポップアップしてくるのでコード書くモチベーション向上にもなるでしょう。

まとめ

まだあったと思いますが思い出せないのでこの辺で。思い出すことがあったらまたエントリーを書きます。

イライラすること(たとえば同じパスワードパスワードを何回も聞かれたり)というのは、そこを最適化したほうが良いというサインです。普段からイライラする気持ちを大切にし、見逃さないようにするのが快適な開発生活への一歩です。

カヤックではそのようにイライラを解消できる技術者を募集しています。