月別アーカイブ: 2014年9月

WebIDE ICEcoderをセットアップしてみた

次の時代はクラウド開発環境が来るはず!

先の記事では Hack (Hacklang) の開発はFBIDEが本命だと書きました。しかし、まだリリースされていないので、当面vimかemacsを使わざるを得ません。せめて、Web IDEの雰囲気を味わってみたいので、そこそこ知名度のあるICEcoderをインストールしてみました。後の自分用にその手順を記載します。

導入手順

http://icecoder.netの説明に従ってgithubから最新のコードをダウンロード

$ git clone git@github.com:mattpass/ICEcoder
Cloning into 'ICEcoder'...
Warning: Permanently added the RSA host key for IP address '192.30.252.131' to the list of known hosts.
Enter passphrase for key '/home/susumuis/.ssh/id_rsa':
remote: Counting objects: 6950, done.
remote: Total 6950 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6950/6950), 3.78 MiB | 796 KiB/s, done.
Resolving deltas: 100% (4136/4136), done.

下記のようにダウンロードされた

$ cd ICEcoder/
$ ls
CodeMirror-4.2  LICENSE.md  README.md  backups  editor.php  farbtastic  favicon.png  files.php  images  index.php  jshint  lang  lib  plugins  processes  test  test.php  tmp
$ cd /etc/nginx/

nginxで公開する。

$ sudo vim sites-available/icecoder

下記のように編集した。今回は80番ポートは使用せず、httpsだけで配信する。とりあえずオレオレ証明書作っとく。

server {
        listen 443;
        server_name 公開するドメイン;
        root ICEcoderのディレクトリ;
        index index.php;

    include hhvm.conf;
        ssl on;
        ssl_certificate /etc/ssl/certs/icecoder.crt;
        ssl_certificate_key /etc/ssl/certs/icecoder.key;
        ssl_session_timeout 5m;
        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
        ssl_prefer_server_ciphers on;
        location / {
                #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php;
        }
}

オレオレ証明書の作り方は毎回忘れるので簡単にメモっとく。

$ cd
$ sudo openssl genrsa 2048 > icecoder.key
$ openssl req -new -key icecoder.key > icecoder.csr

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Tokyo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:組織名
Organizational Unit Name (eg, section) []:susumuis
Common Name (e.g. server FQDN or YOUR name) []:ドメイン名
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
$ openssl x509 -days 3650 -req -signkey icecoder.key < icecoder.csr > icecoder.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Tokyo/O=組織名/OU=susumuis/CN=ドメイン名
Getting Private key
$ rm icecoder.csr
$ sudo mv icecoder.* /etc/ssl/certs/
$ cd /etc/nginx/sites-enabled/
$ sudo ln -s //etc/nginx/sites-available/icecoder icecoder
$ sudo /etc/init.d/nginx reload
Reloading nginx configuration: nginx.

調べながらやったのでここまでで1時間くらいかかった。lnコマンドはどっちが先かとか毎回調べてしまうの何とかしたい。

この状態でWebでアクセスしたら

Couldn't create config-icecoder_*******.php. Maybe you need write permissions on the lib folder?

とか言われました。パーミッションが正しくないらしい。これはこれで、ちゃんとユーザと権限が適切になっている証拠なので、必要なディレクトリだけwww-dataユーザに権限を渡せば良い。

$ cd ICEcoder/
$ chown -R www-data .
$ chmod g+w backups/ lib/ plugins/ test/ tmp/

こうしてアクセスしてみると下記のようにパスワードを求められる。

初期画面

パスワードを入力するとログイン後の画面が表示された。

ログイン後

初期状態ではICEcoder自体のソースコードが表示されるようだ。これでは使いづらいので、プロジェクトルートのようなフォルダを作ってルートディレクトリをそのフォルダに指定するような設定が必要だろう。


今学ぶべきプログラミング言語:Hack (Hacklang)

Web開発ではどの言語を使ったらよいか

大規模Webサイトとか、業務システムを作るならつべこべ言わずJavaにしとけと個人的には思っているのですが(.NETは詳しくないので)、次のようなシチュエーションを良く聞きます。

  • さくっとWebアプリを開発したい(or PHPの資産を活用したい)
  • 型安全が欲しい
  • パフォーマンスも良い方がいい
  • Javaはめんどくさい
  • .NETはお金がかかるから避けたい

こんな時に、HHVM + Hacklangは良い検討対象だと思っています。理由としては、

  • PHPの資産が使える
  • 型安全である
  • HHVMは速い

僕のブログでも下記の記事で触れてきました。

しかし、Web上の記事をみてもあまり普及している感じがしないです。理由として考えられることは

  • PHPでいいじゃん(できることは変わらない)
  • 現時点でサポートする開発環境/エディタが充実していない
  • 情報が少ない
  • HHVMをホスティングできるレンタルサーバーがない

ということがあると思います。

もともとPHPの危ないポイントを回避しながら使いこなすことができる生粋のPHP職人の方々は素直にPHP書けば良いでしょう。しかし、PHPは罠だらけの言語です。できれば触れたくないと思っている人も多いです。一方で、技術の完成度というのは、いかにそれが使われるかにかかってきます。例えばJavaScriptはパフォーマンスという点では不利な言語でしたが、複数のWebブラウザによるのスピード競争の結果、最も速く、最も開発環境が充実したプログラミング言語になりました。そして、サーバーサイドのそれはPHPやJavaです。

ざっくり言って、PHP+型は夢の組み合わせです。Hackは無理なことをせず、それをうまく実現しています。静的型付け言語としてはScalaやGoもありますが、HackはPHPと同じくWebを前提としている言語として価値があると思います。

どのように学べばよいか

日本語の情報なら、下記の電子書籍があります。

現時点では英語が読めないとHackを学ぶのは厳しいですし、英語が読めるならこの本の内容は公式ドキュメントでカバーできるのですが、はじめの取っ掛かりには良いと思います。

技術評論社よりePub版も販売されていますが、僕はAndroidとWindowsではソースコードを綺麗に表示できるアプリを見つけることができなかったため、読み切りだと割りきってKindle版を買うことをおすすめします。

そこから先は、公式サイトのチュートリアル、公式ドキュメントこれに尽きると思います。

http://hacklang.org/tutorial

FBIDEがリリースされたら熱そう!

上記チュートリアル、使ってみるとあれって思いませんか?リアルタイムの文法チェックやコード補完がサポートされています。どこにそんな高級エディタがあるのでしょう。現状vimとemacsしか選択肢がない言語です。ではこの高機能なエディタは、チュートリアル用に作られた専用プログラムなのでしょうか?

これは、FBIDEのサブセットではないかと思います。下記ビデオで紹介されています。

Introduction to FBIDE - Hack Dev Day

シンプルでクールなWebベースのIDEのようです。リリースされたらものすごいワクワクします。

Hackは新しい言語なので、型推論など便利な仕組みを持っています。そして優れたIDEがリリースされれば鬼に金棒ではないでしょうか?

そういえば、Hackの文法チェックコマンドは hh_client とタイプします。これも、IDEのバックエンドで使われるための布石のような雰囲気がします。FBIDEにかぎらずHackの開発環境をこれで作ることは可能のような気がします。例えばHackのEclipseプラグインなどを作ることもできるのではないでしょうか。

FBIDEがリリースされたら本気出す?

いつ来るかわからないFBIDEを待っていてHackの勉強を怠るというのは、技術者の姿勢としてはよろしくないです。現にいま使うことができる言語です。このブログでもWordPressのプラグインが作れることを紹介しました。なんといっても、PHPのエコシステムに乗れば、すでにほとんどのことができます。2014年も残り3ヶ月あまりですが、今年中に勉強する言語としては、最有力であると思います。


GCEが再起動しててブログが落ちてた

突然のアラートメール

Monitor is DOWN: susumuis.info (http://www.susumuis.info/)

このブログは、GCEを使って動かしていますが、Uptime Robot というサービスを使って死活監視をしています。いいよ!このサービス無料で死活監視できます!(・∀・)イイネ!!

先日のエントリで書いたとおり、nginx + hhvmでWordPressホストしているのだけど、僕の設定が悪いのか、hhvmがまだ枯れていないのか、単にメモリが足りないのか、月に一回くらいダウンしちゃうので、いつもはこのコマンドで一瞬で復旧しています。

$ sudo /etc/init.d/hhvm restart

またいつものかーwと思って、上記コマンドを打っても、サイトにアクセスすると

404 File Not Found

となるだけです。んーnginxが落ちちゃったのかなあ?と思って見たら

$ sudo /etc/init.d/nginx restart

どうも、そうでもない。ん、どうしてだろうと思ってみると、どうも、GCEの永続ディスクのマウントポイントにファイルがない。

Diskが消えてしまったΣ(・∀・;)

と、焦りましたが、Developer Consoleを見てみるとちゃんとディスクがありますし、Compute EngineにAttachされています。

どうも単にアンマウントされているようです。まだ何があったかわかりませんが、インスタンスが再起動された形跡を見つけました。落とすつもりなかったんで、ブート時にマウントする設定をしていなかったんですね。>< アリエネ

ずっと問題なく動いていたのでマウントのやり方忘れてたので、とりあえず、自分のために打ったコマンド履歴残しときます。

susumuis@instance-4:~$ sudo mount /dev/disk/by-id/scsi-0Google_PersistentDisk_disk-1 /mnt/pd0

あと、mysqlデーモンもディスクがなくて落ちてたので、再起動しときます。

susumuis@instance-4:~$ sudo /etc/init.d/mysql restart

これで復旧。ε-(´∀`*)ホッ
(ずさんな管理状況が露呈してしまったので、なんとかしときます。)