xyzzyプレゼン

プレゼンには、xyzzyエディタを使った。ソースを見せるのにエディタを開くなら、プレゼンも同じものを使ってる方が切り替えがシームレスで良いだろうと思って。
そして文字をなるべく大きく 36ポイント、手元の環境で最大。フォント、ASCII文字セットは CCRB。きれい系のものではないが、視認性識別性(下手すると似たような字形になる英字がそんなことなくちゃんと識別できる)が良かったので、ソースの表示には良いかなと思った。日本語文字セットは HGゴシックE。ゴシック系で CCRB と線の太さ(文字の重さ)が同じくらいのものというと選択肢はあまり無かった。ちょっと文字間が広めにみえたけど、遠くからでもまあまあ見えたでしょうか。
キーポイントだった、rails.bat 最終行がちょうど一杯に入る幅だったのは良かった。
そして、行間は 8Pixel。文字間が少し広めの印象があるので、行間にはちょっと迷った。
そんで、説明テキストとか、ソースとか全部開き、文書タブを順に配置、全部の文書でカーソルを所定の先頭位置に合わせると、ファイルメニューから「セッションの保存(W)」。あとは xyyzzyを起動してやはりファイルメニューからセッションを開けば全文書とカーソル位置がプレゼン用に準備された状態で再生する。(上記文字の設定は別だけど)

プレゼンに使ったテキストを全部繋げたものがこちら、内容的には冒頭に挙げた日記記事とおなじです、文末とか言葉使いを変えたくらい。

Rails勉強会@東京第28回
ライトニングトーク

railsコマンドの起動機序
と オプション (Windows)

志村(hs9587)


動機

railsコマンドで
Railsアプリケーションを作る
DBシステムを指定するには
コマンドラインオプション
--database=postgresql

しかし、
毎回書くのはは面倒臭い、
というか忘れる、
DRYじゃない。

なんとかならないか

環境変数なんかで
指定しておけないか
とか
探すんだけど出てこない。
ちょっと検索しても探せない。


というわけで
railsコマンドの
起動機序を追いかける


環境
WindowsXP SP2 Professional
ActiveScriptRuby 1.8.6
ASR同梱RubyGemsをupdate --system
Rails 2.0.2


コマンドラインで「rails
Windowsのコマンド検索
環境変数PATH
.COM →.EXE →.BAT (拡張子無し)
ということで、


C:\Program Files\
ruby-1.8\bin\
rails.bat

@ECHO OFF
IF NOT "%~f0" == "~f0" GOTO :WinNT
@"C:/Program Files/ruby-1.8/bin/ruby.exe" "C:/Program Files/ruby-1.8/bin/rails" %1 %2 %3 %4 %5 %6 %7 %8 %9
GOTO :EOF
:WinNT
"%~dp0ruby.exe" "%~dpn0" %*
"%~dp0ruby.exe" "%~dpn0" %*

%~dp0 とか
Cmd.exe バッチ パラメータ



%~dp0
%0(バッチファイル名)の
ドライブ文字パス名

%~dpn0
%0(バッチファイル名)の
ドライブ文字パス名ファイル名(拡張子無し)

%*
引数の全て

%~n0 は拡張子無しファイル名
コマンドライン
rails.batと呼ばれても
rails

ちなみに拡張子は %~x0


rails(拡張子無し)ファイルを
ruby.exe で起動する



ということで、

C:\Program Files\
 ruby-1.8\bin\
 rails
#!C:/Program Files/ruby-1.8/bin/ruby.exe
#
# This file was generated by RubyGems.
#
# The application 'rails' is installed as part of a gem, and
# this file is here to facilitate running it.
#

require 'rubygems'

version = ">= 0"

if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end

gem 'rails', version
load 'rails'
load 'rails'

ロードパスで railsを探す
まあ、gems の rails
ということで、

C:\Program Files\
 ruby-1.8\lib\ruby\
 gems\1.8\gems\
 rails-2.0.2\bin\
 rails 
require File.dirname(__FILE__) + '/../lib/ruby_version_check'
Signal.trap("INT") { puts; exit }

require File.dirname(__FILE__) + '/../lib/rails/version'
if %w(--version -v).include? ARGV.first
  puts "Rails #{Rails::VERSION::STRING}"
  exit(0)
end

freeze   = ARGV.any? { |option| %w(--freeze -f).include?(option) }
app_path = ARGV.first

require File.dirname(__FILE__) + '/../lib/rails_generator'

require 'rails_generator/scripts/generate'
Rails::Generator::Base.use_application_sources!
Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app')

Dir.chdir(app_path) { `rake rails:freeze:gems`; puts "froze" } if freeze
Rails::Generator::
 Scripts::
 Generate.new.
 run(ARGV, :generator => 'app')


ARGVをそのまま渡してる
環境変数見に行ったりとか
ぜんぜん無い


第一引数は特別扱いされてる
--version とか、-v とか、
app_path とか


ジェネレーターの中身
詳細までは検討してないけど、
引数になってる配列(とハッシュ)
を素直にみてるわけで、
環境変数見に行く様子はない。

Module
Rails::Generator
Module
Rails::Generator::
 Scripts
Class
Rails::Generator::
 Scripts::Base


というわけで、
起動機序のどこかに
データベースオプションを
紛れ込ませよう。


注意、第一引数は特別扱い
そのオプションが
邪魔をしないように


rails.bat

"%~dp0ruby.exe" "%~dpn0" %* \
 --database=postgresql


ご清聴
有難うございます