「Cloud Foundry 百日行」第83日目は、プレビュを見ながらHTML/JS/CSSを編集できるWebデザイン用エディタBracketsです。IDEほどの機能はありませんが、コードヒントが出たり構文エラー時にアラートが出たりと、シンプルですが使いやすいエディタだと思います。
Bracketsは、nodejs-buildpackを使ってCF上で動かすことも出来ますが、ソースへの修正が多少必要であることと、Brackets自体がHTML/JS/CSSで出来たアプリであるため、今回はシンプルにstaticfile-buildpackで起動してみました。
基本情報
-
公式サイト
http://brackets.io/
デプロイ準備から動作確認までの手順は以下の通りです。
- 1) ソースの取得
- 2) ビルド準備
- 3) アプリのビルド
- 4) デプロイ準備
- 5) デプロイ
- 6) 動作確認
1. ソースの取得
Bracketsのソースを、GitHubから取得します。
submoduleがあるので、--recursive
をつけてgit clone
して下さい。
$ git clone https://github.com/humphd/brackets.git --recursive
$ cd brackets/
brackets$ ls
CONTRIBUTING.md Gruntfile.js NOTICE README.md src test
env.dist LICENSE package.json samples tasks tools
2. ビルド準備
まずは作業環境にnpm
とgrunt
をインストールします。
先に、npm
コマンドをインストールします。
brackets$ sudo apt-get install nodejs
次に、npm
コマンドを使ってgrunt
コマンドをインストールします。
brackets$ sudo npm install -g grunt-cli
brackets$ grunt -v
grunt-cli: The grunt command line interface. (v0.1.13)
:
3. アプリのビルド
READMEに従って、npm
コマンドとgrunt
コマンドを使ってアプリをビルドします。
brackets$ npm install
:
Running "less:dist" (less) task
File src/styles/brackets.min.css created.
Done, without errors.
brackets$ grunt build-browser
Running "jshint:src" (jshint) task
>> 363 files lint free.
:
Done, without errors.
ビルドが完了し、作成されたdist
ディレクトリに以下のようなファイルが出来ていれば成功です。
brackets$ ls dist
bramble.js dependencies.js hosted.html index.html main.js styles xorigin.js
config.json extensions hosted.js LiveDevelopment nls thirdparty
4. デプロイ準備
アプリのビルドが完了したら、デプロイに必要な設定ファイルを作成していきます。
まずは、staticfile_buildpack
用の設定です。staticfile_buildpack
のREADMEを確認すると、アプリのルートフォルダを指定したい場合、Staticfile
ファイルで定義することができるようです。
本アプリは、ビルドで作成されたdist
がルートフォルダとなるため、以下のように指定します。
brackets$ vi Staticfile
root: dist
次に、デプロイ用のマニフェストを作成します。
brackets$ vi manifest.yml
applications:
- name: brackets
buildpack: staticfile_buildpack
マニフェストは、buildpack:
指定のみです。
今回は、CF環境に標準で含まれているAdmin Buildpackのstaticfile_buildpack
を使うので、URLではなくBuildpack名を指定します。
Buildpack名については、cf buildpacks
コマンドで確認することができます。
brackets$ cf buildpacks
Getting buildpacks...
buildpack position enabled locked filename
staticfile_buildpack 1 true false staticfile_buildpack-cached-v1.0.0.zip
java_buildpack 2 true false java-buildpack-v3.0.zip
ruby_buildpack 3 true false ruby_buildpack-cached-v1.4.2.zip
nodejs_buildpack 4 true false nodejs_buildpack-cached-v1.3.1.zip
go_buildpack 5 true false go_buildpack-cached-v1.3.1.zip
python_buildpack 6 true false python_buildpack-cached-v1.3.2.zip
php_buildpack 7 true false php_buildpack-cached-v3.2.1.zip
binary_buildpack 8 true false binary_buildpack-cached-v1.0.0.zip
上記までの設定で、ひとまずアプリのデプロイは成功します。しかし、Bracketsのトップページファイルはhosted.html
という名前であるため、払いだされたアプリのURLへアクセスすると以下のようなページが表示され、直接アクセスできません。
そのため、staticfile_buildpack
が起動するNginxの設定を変更することで、hosted.html
がトップページとして表示されるようにしていきます。
staticfile_buildpack
のREADMEを確認すると、ルートフォルダにnginx.conf
を置いておくと、そちらの設定が優先されるようです。
そこで、staticfile-buildpack
のリポジトリで管理しているnginx.confをGitHubから取得しdist
フォルダに置き、index
の設定にhosted.html
を追加します。
brackets$ vi dist/nginx.conf
worker_processes 1;
daemon off;
error_log <%= ENV["APP_ROOT"] %>/nginx/logs/error.log;
events { worker_connections 1024; }
http {
log_format cloudfoundry '$http_x_forwarded_for - $http_referer - [$time_local] "$request" $status $body_bytes_sent';
access_log <%= ENV["APP_ROOT"] %>/nginx/logs/access.log cloudfoundry;
default_type application/octet-stream;
include mime.types;
sendfile on;
gzip on;
tcp_nopush on;
keepalive_timeout 30;
port_in_redirect off; # Ensure that redirects don't include the internal container PORT - <%= ENV["PORT"] %>
server {
listen <%= ENV["PORT"] %>;
server_name localhost;
location / {
root <%= ENV["APP_ROOT"] %>/public;
index hosted.html index.html index.htm Default.htm; # ← ここに hosted.html を追加
<% if File.exists?(File.join(ENV["APP_ROOT"], "nginx/conf/.enable_directory_index")) %>
autoindex on;
<% end %>
<% if File.exists?(auth_file = File.join(ENV["APP_ROOT"], "nginx/conf/.htpasswd")) %>
auth_basic "Restricted"; #For Basic Auth
auth_basic_user_file <%= auth_file %>; #For Basic Auth
<% end %>
<% if ENV["FORCE_HTTPS"] %>
if ($http_x_forwarded_proto = http) {
return 301 https://$host$request_uri;
}
<% end %>
}
}
}
これで、デプロイ準備は完了です。
4. デプロイ
デプロイ準備が完了したら、cf push
します。
brackets$ cf push
:
1 of 1 instances running
App started
OK
App brackets was started using this command `sh boot.sh`
Showing health and status for app brackets in org horiu-jn / space horiu-jn as horiu-jn...
OK
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: brackets.10.244.0.34.xip.io
last uploaded: Mon Oct 19 08:21:23 UTC 2015
stack: cflinuxfs2
buildpack: staticfile_buildpack
state since cpu memory disk details
#0 running 2015-10-19 05:21:52 PM 0.0% 54.4M of 256M 0 of 1G
無事、デプロイは成功しました。
7. 動作確認
ブラウザから払いだされたアプリのURLへアクセスすると、無事トップページであるhosted.html
の画面が表示されました。
デフォルトでいくつかのファイルがすでに作成されています。
試しに、CSSファイルのstyle.css
を修正して、設定したスタイルをindex.html
へ反映してみましょう。
ここでは、font-size:
を追加し、color:
を変更してみます。
お使いになるとすぐに分かると思いますが、キーを入力するとコードヒントが即座にでます。またcolor:
の定義を変更してみると、色のサンプルも合わせて表示されます。
次に、index.html
に修正したCSSファイルを指定します。
href
属性にファイル名を指定の際、候補のファイル一覧が表示されるので便利です。
入力し終わると、画面右のサンプル表示部分の文字が、CSSで設定したスタイルに変更されたことが確認できます。
ここで、わざと誤った文法を入力してみると、警告の意味で行番号のバックが赤く表示されるのが分かります。
次に、index.html
にイメージを挿入してみましょう。
今回は百日行第78日目で紹介しましたEtherDrawで描かれた名作を挿入してみます。
イメージファイルのアップロードは、画面左に表示されるファイル一覧にドラック&ドロップするだけで完了です。
index.html
にimg
タグでアップロードしたイメージのファイル名を指定すると、画面右のサンプル表示部分に反映されます。
また、ファイルの作成・削除やディレクトリの作成などは、画面左のファイル一覧上で右クリックすることで行えます。
今回使用したソフトウェア
- cf-release(v211)
https://github.com/cloudfoundry/cf-release/tree/v211
(https://github.com/cloudfoundry/cf-release/tree/2121dc6405e0f036efa4dba963f7f49b07e76ffa) - bosh-lite
https://github.com/cloudfoundry/bosh-lite/tree/552dc6869600c5350eb7ffb4fb9c9c5e79e3889d - CF CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0 (https://github.com/cloudfoundry/cli/tree/8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48) - grunt-cli(v0.1.13)
https://github.com/gruntjs/grunt-cli/releases/tag/v0.1.13 - Brackets
https://github.com/humphd/brackets/tree/219db84480ee38f5c4d655128417f3251606dccb
投稿者:NTTソフトウェア株式会社 堀内 純