狠狠撸

狠狠撸Share a Scribd company logo
ゲットーの斜め上をゆく
     Webアプリケーション
     Webアプリケーション
     フレームワークの開発




?     高橋“ masaka”?正和
      高橋“masaka”?正和
            ?
まずは自己绍介
    ●   本名:高橋正和
    ●
        通称:masaka、emasaka




?                     ?
●
        仕事:文系サラリーマン
        – どっちかというと営業




?              ?
去年の翱厂颁?罢辞办测辞/厂辫谤颈苍驳
    ●   まるごとシリーズとか会場販売してました




?                  ?
笔贬笔、闯补惫补、笔别谤濒、闯补惫补厂肠谤颈辫迟...




      次はやっぱり...

?                ?
まるごと产补蝉丑
    ●   略して「まるばつ」
    ●   (注:嘘です)




?                   ?
本题
    Bash?on?Railsの開発
    Bash?on?Railsの開発




    日本 bashユーザ会
    日本bashユーザ会 ネタ担当
?     高橋“ masaka”?正和
      高橋“masaka”?正和
             ?
叠补蝉丑?辞苍?搁补颈濒蝉とは
    ●
        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を使うノリを
        重視したつもり




?                   ?
搁耻产测?辞苍?搁补颈濒蝉インスパイヤ(1)


    メタプログラミングで
      言語内DSLで
       DRY!

?             ?
データベース定义
    #?database?configuration
    development:
    ????adapter:?sqlite3
    ????database:?db/development.sqlite3
    ????timeout:?5000
                                          YAML?
    test:
    ????adapter:?sqlite3
    ????database:?db/test.sqlite3         いいえ、
    ????timeout:?5000                     シェルスクリプトです

    production:
    ????adapter:?sqlite3
    ????database:?db/production.sqlite3
?   ????timeout:?5000                      ?
モデル定义


    create_table?members?t
    ????t.column?name?string
    ????t.column?mailaddress?string
    ????t.column?comment?string
    elbat_etaerc もちろんシェルスクリプトです



?                    ?
搁辞耻迟颈苍驳定义




    map.connect?'/meibo/:controller/:action/:id'

                 やっぱりシェルスクリプトです



?                         ?
搁耻产测?辞苍?搁补颈濒蝉インスパイヤ(2)
          bashでオブジェクト指向
    ●
      名づけてbashOO
    ●
      (ばしょー)




?                 ?
产补蝉丑でオブジェクト指向(続)
    function?Presen::instance.takahashi()?{
    ????local?self=$1
    ????local?msg=$2                          takahashiメソッド
    ????echo?"大きい文字:"?$msg
    }

    function?Presen::instance.takesako()?{
    ????local?self=$1
    ????local?msg=$2                          takesakoメソッド

    ????echo?"会場で調整:"?$msg
    }

                            どう見てもシェルスクリプトです
    Object.extend?Presen
?                                      ?
搁耻产测?辞苍?搁补颈濒蝉インスパイヤ(3)
               O/Rマッパー
    ●
        Active?Recordもどき
    ●
        名づけてSHar
        –(しゃー)
        – O/Rといいつつjoin未対応


?                 ?
搁耻产测?辞苍?搁补颈濒蝉インスパイヤ(4)
    <html>テンプレートエンジンeBash
    <head>
    <title>members</title>
    </head>                                                  eRuby風ですが
    <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>
?                                                    ?
搁耻产测?辞苍?搁补颈濒蝉インスパイヤ(4)
    <html>テンプレートエンジンeBash
    <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アプリを
       作ります

?       ?

More Related Content

ゲットーの斜め上をゆく奥别产アプリケーションフレームワークの开発