南極の図書館

ペンギンが寝ていた…。

Firefox5でVimperator3.2+LDRizeを動かす

プログラマのブラウザといえば、Vimperatorだろう。
などと本気で言うと、戦争が起きかねないので言わない。


でも、vim使いのブラウザといえばVimperatorだろう。
これくらいの意見は許されると思うので、言っておきたい。


本記事の主な対象は「Vimperatorを使ってるけど、Firefox5で動くのか不安だ」という人になる。
本当は「Vimperatorを使ってないVim使い」にも是非導入して欲しいのだが、本記事には「Vimperator初心者向け情報」は書いていない。
なぜなら「Vimperator初心者向け情報」というのは既にWeb上に十分な量があるし、本エントリの余白はそれを書くには狭すぎる。
他のサイトでVimperatorやLDRizeについての情報を確認し、その後に本手順で導入して欲しいと願う。

目次と前提

・Vimperatorを動かす
LDRizeを動かす
・その他自分用メモ
・参考サイト


さて、下準備としてFirefox5をダウンロード、インストールしよう。
ここからはFirefox5をクリーンインストールしたと過程して記載するが、Firefox4からバージョンアップをした場合も記載内容を反映させれば問題無い。
本記事はクリーンインストールと、バージョンアップと、両方で動作確認を行っている。(2011/7/13時点)

Vimperatorを動かす

「ツール」「アドオン」「アドオン入手」からVimperatorと検索して入手する。(現時点では3.2)
次に、Vimperatorのプラグインを入手し配置する。
プラグインは以下を参照のこと。内容の説明とファイルへのリンクがある。
Vimperator plugins on vimpr(※同日追記。記事の公開後に@anekosさんに教えていただきました。)



導入は、使用するjsファイルを~/.vimperator/plugin/の中に配置するのみ(Windowsなら~/vimperator/plugin/の中)。


今回は3種類のプラグインを使う(私は実際にこの3つのみ使っている)。


・feedSomeKeys_3.js
指定したキーイベントをvimperatorをスルーさせてwebページに送るプラグイン。
例えば、VimperatorではLDRのa,s,j,k,o,pなどがデフォルトで使えなくなるが.vimperatorrcに設定を書くことで使えるようになる(内容は後述)。


・_libly.js
feedSomeKeys_3などのプラグインを使うために必要。


ldrize_cooperation.js
私の設定では使っていないが、vimperator+LDRizeといえばこれを説明しないわけにはいかない。
デフォルトでj,k,o,pをLDRize側に送り、他にも様々な設定ができる。まずは入れておくべき。


上記3ファイルを配置し、feedSomeKeys_3の設定を.vimperatorrcに追記する(私は少ない方だと思うので、他のサイトを参考に必要な分だけ書くこと)。

"feedsomekeys_3
command! -nargs=+ lazy autocmd VimperatorEnter .* 
lazy fmaps -u='www\.google\.com/calendar/.*' a w m x c e <DEL>(※1) / + q s ? A W M X C E
lazy fmaps -u='mail\.google\.com/mail/.*' c / j,n k,p n,j p,k o u e x s r a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='www\.google\.co\.jp/.*' j k v p o : s ? + i
lazy fmaps -u='livedoor\.com/reader' j k s a p o v c z b < > Z   i q w G U u

(※1) 直前の「<」と「>」は半角が正しい。

これでVimperatorの導入は完了だ。

LDRizeを動かす

LDRizeは、Greasemonkeyで動くユーザースクリプトなので、Greasemonkeyから入れる。
「ツール」「アドオン」「アドオン入手」からGreasemonkeyと検索して入手する。(現時点では0.9.6)


今回は2種類のユーザースクリプトを使う(私が使っているのは全部で5つ。次項参照)。


・LDRize
「ツール」「アドオン」「ユーザースクリプト」から「スクリプトの入手」をクリックし、遷移先で右上の「Scripts」をクリックする。
Scripts - Userscripts.org
基本的にはGreasemonkeyスクリプトは同じ手順で入手する(後述のMinibufferは例外)。


私は、LDRizeは検索時のみ使いたいので「アドオン」「ユーザスクリプト」でLDRizeを右クリックし「編集」として下記のように修正する。

 -  // @include        http://*
 -  // @include        https://*
 -  // @include        file:///*
 +  // @include        http://www.google.co.jp/*


・Minibuffer
LDRizeを使うために入れる。
for firefox4 via http://d.hatena.ne.jp/wlt/20110106/1294306315 — Gist
ダウンロードしたminibuffer.user.jsをブラウザにドラッグアンドドロップすると導入できる。
導入後の注意点として、スクリプトの実行順序は「LDRizeよりも先にMinibufferを実行する」こと。
「アドオン」「ユーザスクリプト」でMinibufferを右クリックし「最初に実行」とする。


次に.vimperatorrcに以下を追記する。

"プラグイン設定
" Greasemonkey 0.9.xでwindowを共通にする
javascript <

これでFirefoxを再起動すると、全て動作する。

その他自分用メモ

上記以外で使っているアドオンなど。


・アドオン
ツリー型タブ0.12.2011061701
HatenaBookmark2.1.4
はてなツールバー1.0.1
ReadItLater2.1.1
AutoPagerize0.8.6
Firebug関連


・ユーザスクリプト
LDR Dedupe Entries
LDR full feed
Utilities for livedoor Reader(modified)

参考サイト

参考にさせていただいたサイトです。ありがとうございました。
Firefox 4.0b10でGreasemonkey 0.9.1のユーザスクリプトのwindowを共通にする改造(開発者orVimper向け) - wltの日記
feedSomeKeys_3.js をリリース - Death to false Web browser! - vimperatorグループ


「しっかりVimp」もやらなければ、と思いつつ、jsの厚い壁に阻まれて全く目処が立ちません。
Vimperatorは2年くらい使っていますが、恥ずかしながらまだまだ「入門レベル」のままです。

そろそろしっかりvimを使う。quickrun,uniteの導入。

引き続き、vimRubyのコーディングをするためにプラグインを入れていく。今回が「しっかりvim」の最終エントリ。


前回(そろそろしっかりvimを使う。vimでRubyのコーディングをするために - holyppの日記)は、「補完」と「リファレンス」の環境を整えた。
これでコードを書くには問題が無くなったが、書いているうちにもう少し機能が欲しくなる。
次に欲しくなるのは「高速な実行環境」それに「高機能なファイラー」だ。
そこまで環境が整えば、コーディングの効率が見違えるように上がる。
今回はその2つを導入し、前回とあわせて「補完機能」「リファレンス呼び出し」「実行環境」「ファイラー」を揃える。
これ以降も特化したプラグイン、例えばRailsを書くときにrails.vimを入れる必要はあるが「基本セット」は揃ったと考える。


なお、本エントリは下記の続きなので、前提等で不明な点があれば参照して欲しい。
そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。 - holyppの日記
そろそろしっかりvimを使う。github+vundleを利用したWindowsとの同期。 - holyppの日記
そろそろしっかりvimを使う。vimでRubyのコーディングをするために - holyppの日記

目次

・環境
vim-quickrun
・unite.vim
・参考サイト
・「しっかりvim」終わりに

環境

MacOSXで、プラグインはVundleを使ってインストールした状態。
f:id:holypp:20110515155159j:image

vim-quickrun

vim-quickrunは、vimで編集中のファイルをすぐに実行することができるプラグイン。
これがあれば、実行結果を確認しながら修正を行うことが出来る。
他にもプログラミングの写経を行うときなど、いつでも結果を見ることが出来るので重宝する。
使い方はファイルを開いたまま 「r」、つまり 「\r」 とタイプするだけ。(は半角の\か¥)

f:id:holypp:20110706012147j:image

ウィンドウが分割され、上に結果が表示される。
なお、引数を渡したいときは 「:QuickRun -args hoge」 とする。
このプラグインも、Rubyだけでなく多くの言語に対応している。

unite.vim

unite.vimは「任意の情報源から、任意の動作を実行する」ことができるプラグイン。
多機能なプラグインなので、一気に理解しようとせず「習うより慣れろ」で導入することを勧める。
私は主に「ファイラー」として使っており、今回は下記2つの動作を紹介する。
「最近使用したファイルを開く」
「任意のディレクトリにあるファイルを開く」


なお、理解するにはDOCをしっかり読み込むのが一番の近道だと思う。
https://github.com/Shougo/unite.vim/blob/master/doc/unite.jax

コマンド拡張と.vimrc

unite.vimではコマンドの拡張が行われるので、.vimrcでマッピングを行う。
コマンドは、主なものに「:Unite [{options}] {sources}」がある。
optionsではバッファ名の指定などを行う。(必須ではない。)
sourcesには「最近使ったファイル」や「今使っているファイルと同じディレクトリのファイル」など開く対象を指定する。
(※下記の.vimrcではoptionsとsourcesの順番が逆だが動作する。先にoptionsを書いたほうが良いかも。)


以下は私の.vimrcからunite.vim関連部分を抜粋。
私のマッピングは文字列「:xxx」が多いが、いろんな方の.vimrcを見ていると「Ctrl+何か」としているものをよく見る。

" 入力モードで開始
let g:unite_enable_start_insert=1

"mru,reg,buf
noremap :um :Unite file_mru -buffer-name=file_mru
noremap :ur :Unite register -buffer-name=register
noremap :ub :Unite buffer -buffer-name=buffer

"file current_dir
noremap :ufc :Unite file -buffer-name=file
noremap :ufcr :Unite file_rec -buffer-name=file_rec

"file file_current_dir
noremap :uff :UniteWithBufferDir file -buffer-name=file
noremap :uffr :UniteWithBufferDir file_rec -buffer-name=file_rec

" c-jはescとする
au FileType unite nnoremap    

" ESCキーを2回押すと終了する
au FileType unite nnoremap    :q
au FileType unite inoremap    :q
最近使用したファイルを開く

最近使用したファイルを開くにはsourcesをfire_mruとする。
コマンドは、:Unite [{options}] {sources}なので、上記.vimrcのこれが対応する。(前述の通り引数の順番が逆だが動作する。)

noremap :um :Unite file_mru -buffer-name=file_mru

要するに、私の環境ではvim上で 「:um」 と押下するとウィンドウが分割され、上がuniteのものになる。

f:id:holypp:20110706012145j:image

ここで「_vimperatorrc」が開きたいと思ったら、そのまま「vimp」などと入力することで絞り込みが行える。

f:id:holypp:20110706012146j:image

その後でファイルの上下移動を行い、Enterで開く。
このあたりの動作は全てカスタマイズが可能。

任意のディレクトリにあるファイルを開く

もう一つ例を。上記と同じ要領でsourcesを「今開いているファイルのディレクトリ」としたい場合はこちら。

noremap :uff :UniteWithBufferDir file -buffer-name=file

もちろん「:uff」でも「:UniteWithBufferDir file」でもunite.vimが開くものは同じ。

f:id:holypp:20110706012148j:image

ディレクトリを書き換えて目的のファイルを見つける。(上の状態から「txt/」を削ったところ。候補も反映されている。)

f:id:holypp:20110706012149j:image

このあたりは実際に使うとすぐに理解できる。
説明を続けると長くなる一方なので、後述の「参考サイト」を見たり、実際に使うとわかりやすい。

「しっかりvim」終わりに

あるとき、ふと「vimを使ってしばらくたつけど、何も学んでないな」と思った。
エディタはしっかり使い込むべきだと感じていたので「そろそろしっかりvimを使ってみるか」と、意識的に学ぶように心掛け、エントリも書くようにした。
その結果、vimは「導入」というレベルをようやく抜けて「学ぶ習慣を維持する」レベルになった。
このままのペースでvimを学び続けていけば、遠くない時期に中級者になれるんじゃないかと思っている。


最後に。
前回のエントリの話ですが、多くのブックマークをつけていただき、ありがとうございました。
vimをこれからも学んでいこう」という気持ちが強くなる良いイベントになりました。

そろそろしっかりvimを使う。vimでRubyのコーディングをするために

Rubyのコーディングに向いているIDEは何があるのだろうか。
JavaならばEclipseデファクトスタンダードになっているし、言語によってはVisualStudioが向いているものもある。
RubyだとNetBeansAptanaを勧められることが多かったのだが、使ってみると私にはどうもしっくり来なかった。
最終的にvimが一番良いという結論になり、最近は専らvimで書いている。


コーディングをするにあたり、まずは「補完機能」があり「リファレンスにすぐ飛べる」のであれば最低限の機能は満たしていると考える。
今回は、vimでそれを実現するプラグイン、neocomplcachevim-refの導入方法を書いていく。


なお、プラグイン自体はRubyに特化したものではなく、他の言語でも使うことができる。


本エントリは下記2エントリの続きになるので「その3」にあたる。
そろそろしっかりvimを使う。dotfilesのgithub管理とvundleの導入。 - holyppの日記
そろそろしっかりvimを使う。github+vundleを利用したWindowsとの同期。 - holyppの日記


(※追記)「その4(最後)」はこちら。そろそろしっかりvimを使う。quickrun,uniteの導入。 - holyppの日記

目次

・環境
neocomplcache
vim-ref
・参考サイト

環境

前提として、MacOSXで(Vundleを使って)プラグインをインストールしていること。
私のディレクトリ構成。
f:id:holypp:20110515155159j:image


Vundleまわりの.vimrc(Windowsの場合は_vimrc、以下同様)。

set nocompatible
filetype off

if has("win32") || has("win64")
  set rtp+=~/vimfiles/vundle.git/ 
  call vundle#rc('~/vimfiles/bundle/')
else
  set rtp+=~/.vim/vundle.git/ 
  call vundle#rc()
endif

Bundle 'Shougo/neocomplcache'
Bundle 'Shougo/unite.vim'
Bundle 'thinca/vim-ref'
Bundle 'thinca/vim-quickrun'
filetype plugin indent on

この状態で:BundleInstall」を行っている。

neocomplecache

補完を行うプラグイン。
使いこなすのは大変だが、動かすだけならすぐにできる。
これ(または他の補完プラグイン)がないとvimでコーディングするのは辛いので、最初に入れておきたい。
インストール自体はVundleで行っている(上記の通り)ので、.vimrcに設定を書くことで動作するようになる。


まずは添付のドキュメントを開く(なお、.jaxが日本語のドキュメント)。

:e ~/.vim/bundle/neocomplcache/doc/neocomplcache.txt  

685行目に 「EXAMPLES *neocomplcache-examples*」 という記載がある。
これが見本になるので、
687行目 「" Disable AutoComplPop.」から、
759行目 「let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::' 」
まで.vimrcにコピペする。
これでvimを再起動すると、neocomplcacheが動作するようになる。
例えば、hoge.rbなどのファイルを作って、"in"と書くと"include"と"instance_eval"が候補に出るようになり、Tab,^U,^N,^Pなどで選択できる。

f:id:holypp:20110704005300p:image

vim-ref

vimからRubyのリファレンスを呼べるようにする(設定を行うことで英和辞書やphpのリファレンス等にも使えるようになる)。
インストール自体はVundleで行っているので、必要なのは下記の3点。
テキストブラウザw3m」のインストールとvimの$PATHの設定
Rubyのリファレンスの入手
・refeファイル(コマンド)の作成


テキストブラウザw3m」のインストールとvimの$PATHの設定
(インストール)
% sudo port install w3m
Password:

(ディレクトリの確認、後で$PATHを確認するため。)
% which w3m
/opt/local/bin/w3m

(動作確認。サイトが表示されたらインストールできているので、"q"を押下し"y"でw3mを終了する。)
% w3m http://d.hatena.ne.jp/holypp/

w3mvimの$PATHに入っているか確認する。
確認はvimで「:echo $PATH」とする。これはターミナルの$PATHとは別なので気をつける。
$PATHに入っていなければ.vimrcに追記を行う。

let $PATH = $PATH . ':/opt/local/bin' 
Rubyのリファレンスの入手

Rubyのリファレンスをダウンロードして任意のディレクトリに配置する。
るりま - Ruby reference manual (beta)
こちらの「Download Archives」から最新のもの(201106/ruby-refm-1.9.2-dynamic-20110629.tar.gzなど)をダウンロードする。

% cd ~/Documents/Reference
% wget http://doc.okkez.net/archives/201106/ruby-refm-1.9.2-dynamic-20110629.tar.gz
% tar zxvf ruby-refm-1.9.2-dynamic-20110629.tar.gz
% mv ruby-refm-1.9.2-dynamic-20110629 rubyrefm
% ls -l
total 12880
 -rw-r--r--   1 p  staff  6590681  6 29 22:59 ruby-refm-1.9.2-dynamic-20110629.tar.gz
 drwxr-xr-x  13 p  staff      442  6 29 22:35 rubyrefm
refeファイル(コマンド)の作成

vimの$PATHが通ったディレクトリへrefeファイルを作成し、パーミッションを設定する(今回は/opt/local/bin)。

% sudo vi /opt/local/bin/refe
(下記1,2,3は行番号なので書かない)
1 #!/bin/sh
2 exec ruby -Ke -I ~/Documents/Reference/rubyrefm/bitclust/lib (次の行も合わせて一行で書く。)
~/Documents/Reference/rubyrefm/bitclust/bin/refe.rb -d ~/Documents/Reference/rubyrefm/db-1_8_7 "$@"
3 

% sudo chmod 755 /opt/local/bin/refe
% ls -l /opt/local/bin/refe     
 -rwxr-xr-x  1 root  admin  172  4 30 17:48 /opt/local/bin/refe

ここまで行うと、Rubyのリファレンスを引くことができる。
例えば、instance_evalでShift+kを押下するとこうなる(:Ref refe instance_evalでも同じ)。

f:id:holypp:20110704010414p:image

参考サイト

GitHubはこちらです。Shougoさん、thincaさん、ありがとうございました。(※同日追記)
Shougo/neocomplcache · GitHub
thinca/vim-ref · GitHub


以下は私が導入時に参考にさせていただいたサイトです。どうもありがとうございました。

neocomplcache
neocomplcacheをインストールしてみた - yuitowest的な


vim-ref
MacVim に vim-ref をちょっと難しかったけど入れる方法 | ウェブル
Vimでref.vimを使ってRubyのリファレンスをただちに検索する - アインシュタインの電話番号☎


.vimrcに記載があるquickrunとunite.vimについては、また次回に。
(※7/6追記)「次回」はこちら。そろそろしっかりvimを使う。quickrun,uniteの導入。 - holyppの日記

ビジネス書読んでる暇があったら上司と話せ

そういえば、そんなことを書いている「ビジネス書」もあった。
本日は久しぶりに上司とサシ呑み。
その場で教えていただいたことを箇条書きで。


・お前のしている思いやりは、一般的な思いやりとは違うから気をつけろ。
・今のお前は大企業の同年代のやつに勝てない。もっと謙虚に努力しろ。
・生き急ぎすぎ。お前は潰れやすいタイプだから、あせるな。
・課長になったらその期に黒字にできるか?課長ってのはマネジメントだけじゃない。稼げないなら課長にはできない。


自分では潰れるようなタイプじゃないと思ってるんだけど、気をつける。
上がっていくということをリアルに考えると、やはり足元が重要なんだなと再認識した。


親身になってアドバイスを貰えるという環境が、何より嬉しい。
ということで、すいませんが、生き急ぎますよ。

MacOSXにmysqlとRedmine1.2.0をインストールする

iMacにRedmine1.2.0を導入した。
mysqlも入れていなかったので、Macportsでインストールを行った。
以下、作業ログとメモ。

今回行ったこと

mysql5(-server)のインストールと確認。
mysql5の初期化と設定。
mysql5の起動と接続確認。
指定されたバージョンのgemを3つインストール(mysql,i18n,rack)
データベースの作成。
Redmineの最小限の設定。
Redmineの起動(WEBrick)。

作業ログ

ダウンロードはこちら。
RubyForge: Redmine: Project Filelist


環境の確認。
Redmine1.2.0はRails2.3.11が必要だが、上記サイトから落とすとRailsは中に含まれているので意識しなくてOK

% gem -v
1.3.7
% rails -v
Rails 2.3.5

mysql5(-server)のインストール。

% sudo port install mysql5
(略)
% sudo port install mysql5-server
      • > Computing dependencies for mysql5-server
      • > Fetching mysql5-server
      • > Verifying checksum(s) for mysql5-server
      • > Extracting mysql5-server
      • > Configuring mysql5-server
      • > Building mysql5-server
      • > Staging mysql5-server into destroot
      • > Creating launchd control script
########################################################### # A startup item has been generated that will aid in # starting mysql5-server with launchd. It is disabled # by default. Execute the following command to start it, # and to cause it to launch at startup: # # sudo port load mysql5-server ###########################################################
      • > Installing mysql5-server @5.1.57_0
 ******************************************************  * In order to setup the database, you might want to run  * sudo -u _mysql mysql_install_db5  * if this is a new install  ******************************************************
      • > Activating mysql5-server @5.1.57_0
      • > Cleaning mysql5-server

確認。

% port info mysql5              
mysql5 @5.1.57 (databases)
Variants:             universal

Description:          MySQL is an open-source, multi-threaded SQL database with a command syntax very similar to mSQL.
Homepage:             http://www.mysql.com/

Library Dependencies: zlib, openssl, readline
Conflicts with:       mysql5-devel, mysql4
Platforms:            darwin
License:              GPL-2
Maintainers:          ryandesign@macports.org

インストール時の指示(上記参照)にしたがって初期化。

% sudo port load mysql5-server   
% sudo -u _mysql mysql_install_db5
Installing MySQL system tables...
OK
Filling help tables...
OK
(略)
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/opt/local/lib/mysql5/bin/mysqladmin -u root password 'new-password'
/opt/local/lib/mysql5/bin/mysqladmin -u root -h .local password 'new-password'
(略)

mysql5の設定。

% sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /opt/local/etc/mysql5/my.cnf
Password:

下記を追加する。
% sudo vim /opt/local/etc/mysql5/my.cnf
[mysqld]
default-character-set=utf8
skip-character-set-client-handshake

[mysql]
default-character-set=utf8

起動と接続確認。

% sudo /opt/local/share/mysql5/mysql/mysql.server start
Password:
Starting MySQL
.. SUCCESS! 

% mysql5 -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.57 Source distribution
(略)
mysql> exit
Bye

% /opt/local/lib/mysql5/bin/mysqladmin -u root password '任意のパスワード'
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist
Password:
org.macports.mysql5: Already loaded

gemのインストールと確認。
↓ちなみに、下記ではriとRDocで注意が出ているが問題が無いようで、コマンドもgem install mysql --no-rdoc --no-riで良いということ。

%sudo gem install mysql
Building native extensions.  This could take a while...
Successfully installed mysql-2.8.1
1 gem installed
Installing ri documentation for mysql-2.8.1...

No definition for next_result
No definition for field_name
...

% gem list mysql       
 *** LOCAL GEMS ***
mysql (2.8.1)

ここからはこちらを参考にした。ありがとうございます。
Redmine 1.1をCentOS5.5にインストールする手順 | Redmine.JP Blog


i18nとrack(指定のバージョン)をインストール。

% sudo gem install i18n -v=0.4.2
% sudo gem install rack -v=1.1.0

設定の確認。

% mysql5 -u root@
mysql> show variables like 'character_set%';
 +--------------------------+-----------------------------------------+
 | Variable_name            | Value                                   |
 +--------------------------+-----------------------------------------+
 | character_set_client     | utf8                                    |
 | character_set_connection | utf8                                    |
 | character_set_database   | utf8                                    |
 | character_set_filesystem | binary                                  |
 | character_set_results    | utf8                                    |
 | character_set_server     | utf8                                    |
 | character_set_system     | utf8                                    |
 | character_sets_dir       | /opt/local/share/mysql5/mysql/charsets/ |
 +--------------------------+-----------------------------------------+

データベースの作成。

% pwd
/Users/xxxxxxxx/dev/redmine-1.2.0

% mysql5 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.1.57 Source distribution
(略)

mysql> create database db_redmine default character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on db_redmine.* to user_redmine identified by '任意のパスワード';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mysql> exit;
Bye

もし、ここでうまくいかない場合は一回消して、障害を解消してからやりなおす。(上手くいったら不要)

mysql> drop database db_redmine ;
Query OK, 0 rows affected (0.01 sec)

redmineの設定。
host.example.jpの部分は、Redmineを実行するサーバのFQDNを設定する。

% vim config/email.yml               

  1 production:$
  2   delivery_method: :smtp$
  3   smtp_settings:$
  4     address: localhost$
  5     port: 25$
  6     domain: host.example.jp$
  7 $

% rake config/initializers/session_store.rb
% rake db:migrate RAILS_ENV=production     

後でpassengerにする予定だが、ひとまずWEBrickで起動確認する。

% script/server -d -e production
=> Booting WEBrick
=> Rails 2.3.11 application starting on http://0.0.0.0:3000


下記URLで起動の確認をする。
http://localhost:3000/
お疲れ様でした。

資料作成で意識すべき3つの要素

仕事のお話。


私は6月に入ってから、何故かいろいろな資料を作っている。
その過程として、いろいろな材料を頭の中でぐるぐる回すことになるわけだが、帰宅してからもぐるぐるぐるぐる回している。
そんな感じで日記もろくにかけていなかったので、このタイミングで、えいやと一つ書いてみる。


資料作成とは、例えばWord文書、Excelワークシート、pptスライド。
こういうものを書くにあたり、何も武器を持っていなかった頃と比べると、今はいくつかの約束事を意識しているな、と思う。
今回はその中から2つの見出しで、要素としては3つについて書く。

MECE×粒度」を意識する

個人的には、全ての前提として意識していること。


資料に求められるものは、まずMECEであることで、それも正しい切り口でなければ、どんな情報も意味を成さない。
次に、それがどれくらいの詳細さ(資料の各項目の粒度)であるかで資料の価値が決まる。
大きくまとめて抽象的に書いて良いのか、それとも詳細を書くべきなのか、書くならばどこまで書くべきなのか。


詳細さについては、大きく2パターン、つまり粒度からか時間からか、実際は二択となる。
時間は最も重要な資源であり、この資源の量を増減できる立場なのか、そうでないのかでスタンスは自ずと決まる。


自分が案件(正確にはスケジュール)を握っていない場合は「時間主導」とせざるをえない。
つまり3時間と言われたら3時間なりの、10時間と言われたら10時間なりの詳細さで書く。
ここで 「10時間与えられても、抽象的に書いたほうが良い場面はないのか?」 という質問がある。
これは「無いわけではない」くらいの頻度で、具体的には10回に1回も無いので意識しなくて良い。
「使われる人間」に与えられる時間は少なく見積もられるので、与えられた時間でどれだけ詳細に書いても「荒い」場合が多い。
(その場合は、納期は納期なので荒いまま出していいと私は思う。「時間は無いが詳細な資料を出せ」は無理な相談だ。)


一方、自分がイニシアチブを取れるものであれば「あるべき粒度」を元に時間を書き換える。
「あるべき粒度」とは、その資料を見る人が最も喜ぶ粒度であり、これはこれでなかなか難しい。


さて、MECEと粒度のどちらを強く意識するのか、というとMECEとなる。
粒度は上記の通り、外的要因が関わるというのもあるが、そもそも資料に必要な項目が漏れていると話にならないからだ。
ただ、一口にMECEと言っても切る方向というのがあり、正しい切り口でなければ方向性の間違った資料となってしまう。

自分のスタイル

ここまで、資料作成中にぼんやり考えていたことを書いてみた。
上記が原則として考えていることだとすると、ここから書くことは無意識にしていることになる。


つまりスタイルの話。
人の作るものには、なんであれスタイルが出る。
考えてみると、私の資料は「思い切って荒く」するところに特徴があるような気がする。
私が大事だと思うのは「相手が知りたくないことは書かない」ということだ。
……と書いてみたら、少しニュアンスが違う。
正確には「書くべきではないことは、思い切って書かない」ただし「相手が求めそうなことは添付資料として用意する」かな。
(具体例を書こうと思ったけど、時間も時間なのでこのへんで割愛させていただきます。)
それで成功したことも、大失敗したことも、もちろんある。

まとめ

まとめると「MECE」「粒度」そして「自分のスタイル」を意識することで、資料作成能力は洗練されていくよ。ということ。

大局観(羽生善治)

書店をうろうろしていたら目に入ったので。
2011年2月10日初版、4月20日に四版なので結構売れていると思う。

はじめに

いったん本書の感想を書いたところ、格言集のようになってしまった。
「折り目」を付けたページを読み直し、それを順番に書いていったからだと思う。
文字通り「大局観」が無いとはこのことか、と反省して書きなおしてみた。


今度はテーマは何か、それを具体的、または抽象的に書いているところはどこか。
それを補足する(できればインパクトのある)エピソードはあるか、などを意識してみた。
読みなおしてみると、功を奏したとまでは言えないが、いくらかマシになった。

大局観

本書のテーマはそのまま「大局観」。
特徴としては、やはり将棋についての言及が多い。
将棋の格言であったり、自分の経験であったり。
まずは、言葉の定義から始まる。

P7
「大局観」とは一般には馴染みがない言葉だが、「大局を見て考える」などの表現ではよく使われる。「木を見て森を見ず」という格言があるが、これは「部分だけしか見ず、全体を見ていない」という意味でその反対の意味が「大局観」である。

P23
体力や手を読む力は、年齢が若い棋士の方が上だが、「大局観」を使うと「いかに読まないか」の心境になる。
将棋ではこの「大局観」が年齢を重ねるごとに強くなり進歩する。

自分の若い時代、「二十歳の自分」と闘っても負けない――
この「大局観」を身につけ全体を検証するのである。

つまり大局観とは、全体を俯瞰し、抽象的に現在の状態とその方針を感じる力だろう。
そして、おおよその方針を決めることで、具体的な行動を考える際に、無駄な選択肢が排除される。


この「いかに読まないか」というのは、私たちの(おそらく一般的な)仕事にも通じるところがある。
どんな仕事でも新人のうちは、本筋とは違うところに拘って余計な時間を使ってしまうものだ。
先輩に相談したときに「ああ、そこは掘り下げて考えなくて良いよ。こっちに関して3パターン考えてみて」と言われたりする。
それが、どんな新人でも3年ほど経つと「勘どころ」がわかってきて、どこが重要なのか判断できるようになる。
それに近いのではないか。


「大局観」について本書で最もわかりやすく書かれている箇所を以下に引用する。
今流行のコンピュータ将棋への言及でもある。

P200
コンピュータ将棋といいうのは、基本的に、可能性のあるあらゆる手をすべて読んで、最善手を探していく。つまり、計算をたくさんしていくことによって、より正確さを挙げていくわけだ。

プロ棋士の場合なら、局面を見た瞬間に、三手くらいに絞り込むことができる。あとの何百、何千という手は捨てるわけだ。
そして、最初に絞り込んだ三手ではどうしてもダメだという時になって、いったん捨てた手のなかから最善手を拾って検討する。

私は、コンピュータの指し手に対して、大きな違和感を持っている。
つまり、対局者が誰だかわからない状態で棋譜を見せられれば、これは人間が指したのか、コンピュータが指したのか、一目瞭然でわかるということだ。

この「プロ棋士の場合」に使われているのが「大局観」なのだろう。
後半の「一目瞭然」には少し驚いたが、「大局観」という観点で見ると、コンピュータ将棋は「一貫していない」ということだろう。
逆に考えると、コンピュータ将棋は「大局観」が無いのに、プロ棋士に近付いているということでもある。
これで「大局観」がどんなものか理解できたと思う。

大局観を補足する

本書は全体を通して「大局観とはなんぞや」を書いているわけではない。
集中力、ツキ、負け方、リスク、感情、記憶、知識、直感、確率など、内容は多岐に渡る。
全体としては「大局観」を補強する意味で書かれているが、「棋士の書いたビジネス書」のような雰囲気もある。
とはいえ「棋士生活二十五年の節目で書いた」とあるとおり、その視点はサラリーマンのものとはかけ離れていて、面白い。


例えば、以下にいくつか(勝手に)要約したものを紹介する。

「着手をする前に四つの香車を確認しなさい」
盤上の四隅、つまり晩の全体を見ることで見落としなどのうっかりミスが少なくなる。

「三ヶ月間毎日、一日も休まずに将棋の練習をするとアマチュア初段から四段になることを保証できる。」
将棋の場合、いい手が閃くとかたくさん読めるというのも才能だが、根源的な最も素晴らしい才能は「地道に、確実に、一歩一歩進み続けることができる」こと。

「もう少しゆっくり」
羽生さんが師匠に貰ったアドバイス。
将棋の世界では師匠が弟子に手取り足取り教えることはなく、自分で考える習慣をつけさせる。

「世の中の99.9%は金で決まる。しかし、残りの0.1%はそうはいかない。私は、この仕事を通じてそれを学びました。」
これは「ハゲタカ」から。羽生さんは、確率というのもそれと同じではないか、と言う。

「どんなジャンルでも一流の作品にたくさん触れなさい」
手塚治虫が「どうしたら上手に漫画が描けますか?」と訊かれたときに答えて。

運について

羽生さん自身は「ゲン」は今はまったく担いでいないらしい。
棋士の中には、将棋会館へ行くルート、着る物(下着も)、扇子、髭など、ゲンを担ぐ人はいるようだ。
そんな中で、ゲンとは少し違うのだが、この二つは感じるところがあった。

「きみは自分にツキがあると思うか?」
松下幸之助はよく訊いていたそうだ。相手が「はい」と答えると付き合いが続いていく。

「東京へ行く汽車に乗る時、上手くキセルをする方法は知っていたが、そんなことをすれば大きなツキを失うに違いないのでやらなかった」
米長先生の「人間における勝負の研究」にある一文。

終わりに

後半はそれこそ格言集のようになったが、自分で読み直しその度にストーリーを思い起こすために書いてみた。
羽生さんの著書は他に「決断力」を、将棋つながりでは「ボナンザvs勝負脳」も読んだが、どれも面白い。
ちなみに将棋は全く出来ません。


はてな年間100冊読書クラブ、9冊目。)