Upload
emasaka
View
5.135
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
ゲットーの斜め上をゆくゲットーの斜め上をゆく
WebWebアプリケーションアプリケーションフレームワークの開発フレームワークの開発
高橋“高橋“masaka” masaka” 正和正和
まずは自己紹介
● 本名:高橋正和
● 通称:masaka、emasaka
●仕事:文系サラリーマン–どっちかというと営業
去年のOSC Tokyo/Spring● まるごとシリーズとか会場販売してました
PHP、Java、Perl、JavaScript...
次はやっぱり...
まるごとbash● 略して「まるばつ」● (注:嘘です)
本題本題
Bash on RailsBash on Railsの開発の開発
日本日本bashbashユーザ会 ネタ担当ユーザ会 ネタ担当
高橋“高橋“masaka” masaka” 正和正和
Bash on Railsとは
● pure bashで書かれたWebアプリケーションフレームワーク
● 実用性を無視し、「いかにRuby on Railsの真似をするか」のみを追求したネタソフト
– ぶっちゃけ、Ruby on Railsのソースをめちゃめちゃ参考にしてます
目指すノリ
'80年代「Ah!SKI」誌で
公開された伝説のOS「UNI+」(ゆにっくろす)(注:40才以上限定ネタ)
pure bashってなに?
● Bash内蔵コマンドだけで シェルスクリプトとして実装
–現在1,600行ちょい
こうしたコマンドは使わない
● sed● grep● cat● tr● …などなど
もちろん使わない
●awk●Perl●Python●Ruby
使っちゃったもの
●Apache–これはしょうがないですよね
使っちゃったもの(続)
● RDBMSのコマンドラインフロントエンド
– SQLite3を利用
– ようするにテキストの表形式をパースしてる
– いちおうconnection_adapterとして抽象化
心ならずも使った外部コマンド
●mkdir● rm● ln●(正直くやしい)
そのほか使った外部コマンド
●make–Ruby on Railsでrakeを使うノリを重視したつもり
Ruby on Railsインスパイヤ(1)
メタプログラミングで
言語内DSLでDRY!
データベース定義# database configurationdevelopment: adapter: sqlite3 database: db/development.sqlite3 timeout: 5000
test: adapter: sqlite3 database: db/test.sqlite3 timeout: 5000
production: adapter: sqlite3 database: db/production.sqlite3 timeout: 5000
YAML?
いいえ、シェルスクリプトです
モデル定義
create_table members t t.column name string t.column mailaddress string t.column comment stringelbat_etaerc もちろんシェルスクリプトです
Routing定義
map.connect '/meibo/:controller/:action/:id'
やっぱりシェルスクリプトです
Ruby on Railsインスパイヤ(2)bashでオブジェクト指向
●名づけてbashOO●(ばしょー)
bashでオブジェクト指向(続)function Presen::instance.takahashi() { local self=$1 local msg=$2 echo "大きい文字:" $msg}
function Presen::instance.takesako() { local self=$1 local msg=$2 echo "会場で調整:" $msg}
Object.extend Presen
takahashiメソッド
takesakoメソッド
どう見てもシェルスクリプトです
Ruby on Railsインスパイヤ(3)O/Rマッパー
●Active Recordもどき
●名づけてSHar–(しゃー)–O/Rといいつつjoin未対応
Ruby on Railsインスパイヤ(4)テンプレートエンジンeBash<html>
<head><title>members</title></head><body>
<% for column in $members_columns; do %> <% var="current_item_${column}" %> <p> <b><%=column%>:</b> <% echo n "${!var}" %> </p><% done %>
<% link_to 'Edit' :action='edit' :id="$current_item_id" %><% link_to 'Back' :action='list' %>
</body></html>
eRuby風ですが
Ruby on Railsインスパイヤ(4)テンプレートエンジンeBash<html>
<head><title>members</title></head><body>
<% for column in $members_columns; do %> <% var="current_item_${column}" %> <p> <b><%=column%>:</b> <% echo n "${!var}" %> </p><% done %>
<% link_to 'Edit' :action='edit' :id="$current_item_id" %><% link_to 'Back' :action='list' %>
</body></html>
もちろん埋め込んでるのはシェルスクリプトです
その他やったことはいろいろ省略
やってないこと
● 安全性、安定性、実用性
– XSSとかSQL injectionとかばりばり
DEMO
残りの時間で
簡単なWebアプリを作ります