Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
ゲットーの斜め上をゆく
     Webアプリケーション
     Webアプリケーション
     フレームワークの開発




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




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




                
去年のOSC Tokyo/Spring
    ●   まるごとシリーズとか会場販売してました




                    
PHP、Java、Perl、JavaScript...




      次はやっぱり...

                  
まるごとbash
    ●   略して「まるばつ」
    ●   (注:嘘です)




                     
本題
    Bash on Railsの開発
    Bash on Railsの開発




    日本 bashユーザ会
    日本bashユーザ会 ネタ担当
      高橋“ 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 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 もちろんシェルスクリプトです



                      
Routing定義




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

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



                           
Ruby on Railsインスパイヤ(2)
          bashでオブジェクト指向
    ●
      名づけてbashOO
    ●
      (ばしょー)




                   
bashでオブジェクト指向(続)
    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
                                        
Ruby on Railsインスパイヤ(3)
               O/Rマッパー
    ●
        Active Recordもどき
    ●
        名づけてSHar
        –(しゃー)
        – O/Rといいつつjoin未対応


                   
Ruby on Railsインスパイヤ(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>
                                                      
Ruby on Railsインスパイヤ(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

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

  • 1. ゲットーの斜め上をゆく Webアプリケーション Webアプリケーション フレームワークの開発   高橋“ masaka” 正和 高橋“masaka” 正和  
  • 2. まずは自己紹介 ● 本名:高橋正和 ● 通称:masaka、emasaka    
  • 3. 仕事:文系サラリーマン – どっちかというと営業    
  • 4. 去年のOSC Tokyo/Spring ● まるごとシリーズとか会場販売してました    
  • 5. PHP、Java、Perl、JavaScript... 次はやっぱり...    
  • 6. まるごとbash ● 略して「まるばつ」 ● (注:嘘です)    
  • 7. 本題 Bash on Railsの開発 Bash on Railsの開発 日本 bashユーザ会 日本bashユーザ会 ネタ担当   高橋“ masaka” 正和 高橋“masaka” 正和  
  • 8. Bash on Railsとは ● pure bashで書かれたWebアプリケーションフ レームワーク ● 実用性を無視し、「いかにRuby on Railsの真似 をするか」のみを追求したネタソフト – ぶっちゃけ、Ruby on Railsのソースをめちゃめ ちゃ参考にしてます    
  • 9. 目指すノリ '80年代「Ah!SKI」誌で 公開された伝説のOS 「UNI+」(ゆにっくろす) (注:40才以上限定ネタ)    
  • 11. こうしたコマンドは使わない ● sed ● grep ● cat ● tr ● …などなど    
  • 12. もちろん使わない ● awk ● Perl ● Python ● Ruby    
  • 13. 使っちゃったもの ● Apache – これはしょうがないですよね    
  • 14. 使っちゃったもの(続) ● RDBMSのコマンドラインフロントエンド – SQLite3を利用 – ようするにテキストの表形式をパースしてる – いちおうconnection_adapterとして抽象化    
  • 15. 心ならずも使った外部コマンド ● mkdir ● rm ● ln ● (正直くやしい)    
  • 16. そのほか使った外部コマンド ● make – Ruby on Railsでrakeを使うノリを 重視したつもり    
  • 17. Ruby on Railsインスパイヤ(1) メタプログラミングで 言語内DSLで DRY!    
  • 18. データベース定義 # 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  
  • 19. モデル定義 create_table members t     t.column name string     t.column mailaddress string     t.column comment string elbat_etaerc もちろんシェルスクリプトです    
  • 20. Routing定義 map.connect '/meibo/:controller/:action/:id' やっぱりシェルスクリプトです    
  • 21. Ruby on Railsインスパイヤ(2) bashでオブジェクト指向 ● 名づけてbashOO ● (ばしょー)    
  • 22. bashでオブジェクト指向(続) 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    
  • 23. Ruby on Railsインスパイヤ(3) O/Rマッパー ● Active Recordもどき ● 名づけてSHar –(しゃー) – O/Rといいつつjoin未対応    
  • 24. Ruby on Railsインスパイヤ(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>    
  • 25. Ruby on Railsインスパイヤ(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>    
  • 26. その他やったことは いろいろ省略    
  • 27. やってないこと ● 安全性、安定性、実用性 – XSSとかSQL injectionとかばりばり    
  • 28. DEMO 残りの時間で 簡単なWebアプリを 作ります