オレポータビリティ 日本Rubyの会 青木 峰郎
自己紹介
自己紹介 1/3 文系の大学生 専門は……哲学?
開発と言えば自宅
自己紹介 2/3 Ruby関係者 標準添付ライブラリ メンテナ 著書いろいろ
自己紹介 3/3 著書 『ふつうのHaskellプログラミング』 『ふつうのLinuxプログラミング』 『Javaを独習する前に読む本』 『Rubyソースコード完全解説』 『Rubyレシピブック』 『Rubyを256倍使うための本 無道編』
言語は ほぼ確実に RubyかC
./lib/bitchannel/syntax.rb:398: [BUG] Segmentation fault ruby 1.9.0 (2005-10-22) [x86_64-linux]
「開発環境」 って何?
部屋
ハードウェア
ソフトウェア
部屋の様子
自室
自室(本棚)
自室(デスクトップ)
自室(キーボード)
ハードウェア
部屋の様子(マシン)
5つのアーキテクチャ x86 AMD64 Alpha SPARC POWER
7つのOS Linux FreeBSD NetBSD Tru64UNIX Solaris AIX Windows
9つのプラットフォーム Linux/x86 Linux/Alpha Linux/AMD64 FreeBSD/Alpha NetBSD/Alpha Tru64UNIX/Alpha Solaris/SPARC AIX/POWER Windows/x86
「こんなに たくさんあって どうすんの?」
愛でるため
紺筐体 萌え~
ついでに Ruby のテストも している
テーマ解説
前提: マシン台数も プラットフォームも 多すぎる
オレポータビリティ
俺(の)portability
どんな環境でも 同じように開発できる → オレポータビリティ が高い!
オレポータビリティを 高める戦略
戦略(1) 必須ソフトウェアを 限界まで削る
どこでも使える ソフトウェアが そもそも少ない
たくさんソフトウェアを使うとインストールがめんどくさい!
必ず使うソフトウェア Ruby Cコンパイラなど zsh vi バージョン管理システム 独自の開発ツール
使うもの(1) Ruby 開発版 + 安定版ぜんぶ
システムに存在する 全バージョンの ruby に 同じオプションを与えて実行 forall-ruby コマンド システムに存在する 全バージョンの ruby に 同じオプションを与えて実行
gcc, bison, flex, autoconf, make, …
使うもの(3) zsh
使うもの(4) vi
複数ファイルを 編集するときは ジョブ制御でがんばる Ctrl-Z でサスペンド fg コマンドで復帰
使うもの(5) バージョン管理システム CVSかSubversion
使うもの(6) 独自の開発ツール ReFe rdefs
Rubyのリファレンスマニュアルを 検索するツール ReFe Rubyのリファレンスマニュアルを 検索するツール
ファイルに定義されている クラスやメソッドを 抜き出して表示する rdefs コマンド ファイルに定義されている クラスやメソッドを 抜き出して表示する
独自ツールのポイント Ruby だけで書く インストーラを付ける
戦略(2) カスタマイズしない
いちいち カスタマイズ してられるか!
カスタマイズしなくても 使う気になる ソフトウェアだけ使う!
No configuration is Good configuration.
ノウハウを 作らないことが ノウハウ
戦略(3) ホームディレクトリの 構造は全マシンで 共通化する
各種設定を 減らすためにも 共通化が重要
Convention over configuration.
慣習じゅーよー
bin, etc, lib, share, src, var UNIXの/usrを真似る bin, etc, lib, share, src, var
自分で 作ったものは ~/c に置く
戦略(4) 徹底的に バージョン管理
共有するため
~/c 以下は 例外なく バージョン管理システム で管理する
ソースコード
開発ツール
大学のレポート
戦略のまとめ
戦略(1) 必須ソフトウェアを 限界まで削る
戦略(2) カスタマイズしない
戦略(3) ホームディレクトリの 構造は全マシンで 共通化する
戦略(4) 徹底的に バージョン管理
結論: あたりまえのことを 徹底的にやるのが ポイント
ご静聴 ありがとうございました