2015-07-14

Editr を Cloud Foundry で動かす

本日の第29回「Cloud Foundry 百日行」は Editr です。
これは、Web のデモページをブラウザ上で作りながらリアルタイムで確認できるアプリになっています。

基本情報

ソースコードの取得と確認

$ git clone https://github.com/Idered/Editr.js.git
$ cd Editr.js/
$ ls
editr  README.md  test

README のインストール手順の最初に、”Copy editr folder to root of your website.” とありますが、今回は Cloud Foundry へデプロイするので、 editr/ フォルダ自体に入ってそこで確認したい html を作成し、そこからアプリを push します。

$ cd editr/
$ ls
editr.css  editr.js  items  libs  parsers

index.html の作成

アプリと一緒に配布されているサンプルファイルを使い、 README を参考に、 index.html を作成します。

まずはサンプルファイルの test/projects/index.htmleditr/ にコピーして持ってきます。

$ pwd
/home/ueno/Editr.js/editr
$ cp -p ../test/projects/index.html .
$ cp -p index.html index.html.org
$ cat index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <title></title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body></body>
</html>

この index.html を編集します。

$ vi index.html
$ cat index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Editr</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
 
    <link rel="stylesheet" href="editr.css">
</head>
<body>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ace.js"></script>
    <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ext-emmet.js"></script>
    <script src="libs/ext.emmet.js"></script>
    <script src="editr.js"></script>
    <script src="libs/parser.coffeescript.js"></script>
    <script src="libs/parser.less.js"></script>
 
    <div class="editr"></div>
 
    <script>
    $('.editr').each(function() {
        new Editr({
            el: this,
        });
    });
    </script>
</body>
</html>
$ diff index.html.org index.html
4c4
<     <title></title>
---
>     <title>Editr</title>
6a7,8
> 
>     <link rel="stylesheet" href="editr.css">
8c10,28
< <body></body>
---
> <body>
>     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
>     <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ace.js"></script>
>     <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ext-emmet.js"></script>
>     <script src="libs/ext.emmet.js"></script>
>     <script src="editr.js"></script>
>     <script src="libs/parser.coffeescript.js"></script>
>     <script src="libs/parser.less.js"></script>
> 
>     <div class="editr"></div>
> 
>     <script>
>     $('.editr').each(function() {
>         new Editr({
>             el: this,
>         });
>     });
>     </script>
> </body>

アプリの push

今回のアプリは HTML, JavaScript を主として構成されていますが、一部、PHP のファイルも存在しています。
それに対し、今回使用している bosh-lite 環境には、php-buildpack が入っていますので、特定の buildpack の指定はせずにそのまま push します。

$ cf push editr
Creating app editr in org ueno / space test1 as ueno...

:

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: editr.10.244.0.34.xip.io
last uploaded: Thu Jul 9 10:15:49 UTC 2015
stack: cflinuxfs2
buildpack: PHP
 
     state     since                    cpu    memory          disk      details   
#0   running   2015-07-09 07:16:07 PM   0.0%   27.9M of 256M   0 of 1G  

デプロイ成功し、アプリが起動しました。
buildpack: PHP から、php-buildpack が使用されたことがわかりますね。

動作確認

http://editr.10.244.0.34.xip.io にアクセス。

HTML のサンプルとして、アプリについているサンプルファイルを使ってみましょう。
test/projects/flat-ui/switch.html の中身を HTML の画面にコピペします。

続いて、 test/projects/flat-ui/switch.css の中身も CSS の画面にコピペ。

そして、Result 画面を出すと、

switch.htmlswitch.css が解釈されて、画面表示されました。

push 時にファイルを読み込む方法の確認

このアプリは複数のファイルをあらかじめ読み込ませ、その中から選択表示できるので、今度はそれを確認していきます。

まずはサンプルファイルが入ったフォルダ test/projects/flat-ui を持ってきます。

$ pwd
/home/ueno/Editr.js/editr
$ cp -pr ../test/projects/flat-ui .
$ ls flat-ui
main.less  normalize.css  radio.css  radio.html  script.coffee  switch.css  switch.html

この中から、先ほど使った、 switch.html , switch.css と共に、 radio.htmlradio.css の計4つのファイルを読み込ませるため、サンプルファイル test/index.html を参考に、上記で作った index.html を編集します。

$ pwd
/home/ueno/Editr.js/editr
$ cp -p index.html index.html.1
$ vi index.html 
$ cat index.html 
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Editr</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
 
    <link rel="stylesheet" href="editr.css">
</head>
<body>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ace.js"></script>
    <script src="//cdn.jsdelivr.net/ace/1.1.01/min/ext-emmet.js"></script>
    <script src="libs/ext.emmet.js"></script>
    <script src="editr.js"></script>
    <script src="libs/parser.coffeescript.js"></script>
    <script src="libs/parser.less.js"></script>
 
    <div class="editr" data-files-html="switch.html;radio.html" data-files-css="main.less;switch.css;radio.css"></div>
 
    <script>
    $('.editr').each(function() {
        new Editr({
            el: this,
            path: 'flat-ui',
            view: 'vertical',
            gistProxyURL: 'libs/proxy.gist.php',
            callback: function(editr) {}
        });
    });
    </script>
</body>
</html>
$ diff index.html.1 index.html
19c19
<     <div class="editr"></div>
---
>     <div class="editr" data-files-html="switch.html;radio.html" data-files-css="main.less;switch.css;radio.css"></div>
24a25,28
>             path: 'flat-ui',
>             view: 'vertical',
>             gistProxyURL: 'libs/proxy.gist.php',
>             callback: function(editr) {}

ファイルの編集が終わったので、アプリを push します。

$ cf push editr2
Creating app editr2 in org ueno / space test1 as ueno...

:

requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: editr2.10.244.0.34.xip.io
last uploaded: Thu Jul 9 10:31:35 UTC 2015
stack: cflinuxfs2
buildpack: PHP
 
     state     since                    cpu    memory          disk      details   
#0   running   2015-07-09 07:31:50 PM   1.7%   23.6M of 256M   0 of 1G    

デプロイ成功してアプリが起動したので、アクセスします。

switch.htmlswitch.css が解釈されて、画面出力されています。

Result, HTML, CSS の各タグをクリックすると、読み込んだファイルが選択できるようになっています。

Result のタグから、 radio.html に切り替えてみると、その内容に画面が切り替わりました。

まとめ

今回は、デプロイ自体は簡単に出来た割には、そのアプリは、ブラウザ上で、HTML/JavaScript/CSSを作成、編集、組み合わせて、そのまま実行可能、という便利なものでした。
Webサーバ上のコンテンツを直接編集、なんて使い方もできるかもしれません。もちろんセキュリティと認証の課題をクリアする必要はありますが。

今回使用したソフトウェア