田舎の技術者が奮闘中

php ruby node.js javascript などのスクリプト言語とサーバー(Chef、Vagrant)に関して書きます。

LaravelのHomesteadにv8jsが使えるようにする。

Laravelは公式でHomesteadと呼ばれるVagrantが準備されています。
基本的なものはインストールされているのですが、それ以外のものをインストールしようとした時にハマった話です。。

Homesteadのインストール方法は Laravel Homestead - Laravel - The PHP Framework For Web Artisans を参考にして下さい。
ある程度準備が完了すると、~/.homesteadが出来ると思います。
今回は ~/.homestead/after.sh にv8jsインストール用のシェルスクリプトを記載します。

以下をコピペ

#!/bin/sh

sudo apt-get -y install g++

cd /tmp

if [ ! -e depot_tools ]; then
   git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
fi

export PATH=`pwd`/depot_tools:"$PATH"

if [ ! -e v8 ]; then
    fetch v8

    cd /tmp/v8
    git checkout 3.32.6

    gclient sync
    make native library=shared snapshot=off -j8

    sudo mkdir -p /usr/lib /usr/include
    sudo cp out/native/lib.target/lib*.so /usr/lib/
    sudo cp -R include/* /usr/include

    sudo ar -M <<SCRIPT
create /usr/lib/libv8_libplatform.a
addlib out/native/obj.target/tools/gyp/libv8_libplatform.a
save
end
SCRIPT
fi

if ! pecl list | grep -q v8js; then
    sudo pecl install v8js-1.0.0 << END_OF_INPUT
END_OF_INPUT
fi

if [ ! -e /etc/php/mods-available/v8js.ini ]; then
    echo "extension=v8js.so" > /etc/php/mods-available/v8js.ini
    sudo ln -s /etc/php/mods-available/v8js.ini /etc/php/7.0/cli/conf.d/20-v8js.ini
    sudo ln -s /etc/php/mods-available/v8js.ini /etc/php/7.0/fpm/conf.d/20-v8js.ini
fi

sudo service php7.0-fpm restart
sudo service nginx restart

詳細な説明は省きます。(ちょっとifの分岐がまだ完全じゃないです。)

VagrantとChefの導入

去年の末辺りからVagrantとChefにハマっているので、まとめの意味を込めて記事にしていきます。
ちなみにMACの前提で話をしますので、Windowsの方は脳内補完してください。

導入編

1. Vagrant導入

Download Vagrant - Vagrant
ここにインストーラーがあるのでコレで入れたほうが良いです。

2. Chef導入

Chef Development Kit | Chef Downloads | Chef
Chefもインストーラーがあるのでコレで入れたほうが良いです。
(Berkshelfを使うことになるから入れといたほうが良いです。)

導入はこれだけで完了です。
ターミナルを開いて

$ vagrant -v
Vagrant 1.7.1
$ chef -v
Chef Development Kit Version: 0.3.5

とか表示されていればOKです。
次回は、開発環境作成に入ります。

SQL整形サービスをバージョンアップ


2年ほど前に作成したWEBでSQLを整形するツールを作ったのですが、色々と要望がありましたのでバージョンアップしてみました。

SQL indent | web formatter

フロントはyeomanで作成し、Javascriptフレームワークはbackboneを採用しています。
サーバーサイドはsinatraです。


クエリの入力画面です。
f:id:pikonori:20141217120132p:plain

整形結果です。
クリップボードへのコピー機能付きです。
f:id:pikonori:20141217120124p:plain

履歴です。
最大10件まで遡れます。
f:id:pikonori:20141217120117p:plain

設定です。
f:id:pikonori:20141217120111p:plain


フィードバック等が有りましたら、ご連絡下さい。

phpcpdで重複コードを調査する。

最近、コピペで開発しているプログラマーの風上にも置けない人が社内に増えてきたので、phpcpdを入れて重複コードをチェックするようにしてみました。

phpcpdをcomposerでインストールして利用してみます。
(composerはインストールされているものとします。)

インストール

まずcomposerでインストールします。

$ composer global require 'sebastian/phpcpd=*'

コレで ~/.composer にインストールされたと思います。
もし、パスを通していない場合は、~/.bashrc などに

export PATH="$PATH:$HOME/.composer/vendor/bin"

と追記してパスを通しておきましょう。
gemとほとんど同じ使い方が出来るので、超便利です。

使い方

使い方は簡単で、

$ phpcpd ./project

とディレクトリを指定するだけで、重複コードを確認してくれます。

オプション

使いそうなやつだけ抜粋してみました。

 --names
カンマ区切りでファイル名を指定(デフォルトは*.php)

 --names-exclude
カンマ区切りで除外のファイル名を指定

 --exclude
ディレクトリで除外

 --log-pmd
結果をログに書き込む

 --min-lines
同一の行と判断する最小行数(デフォルトは5)

 --fuzzy               
曖昧でチェックするのかな?

 --progress
プログレスバーを表示する。

 --help (-h)
ヘルプを表示

 --verbose (-v|vv|vvv)
詳細に表示。(コードまで表示される)

 --version (-V)
バージョン表示

まとめ

jenkinsと連携して常にチェックするのが一番です。

wordpressのプラグインを作ってみて、クソだと思ったこと。

初めてwordpressプラグインを作ってみたのですが、ちょっといただけない所が多数あったので、愚痴代わりにメモっておきます。

グローバルな関数が多い。

これは、、関数とか被ったらどうするんですかね?
せめてクラスでラッピングして欲しいです。

管理画面のCSSが使いにくすぎる。

CSSのテンプレートみたいなのが無いので、デザインが統一されるか心配です。

プラグインのひな形が無い。

MVCでこのように作ればキレイに出来るよっ!!!」的な指針があると助かります。
そこらへんは自由にやって頂戴って感じなんでしょうけど、他のプラグインを修正となった時に、何処に何が有るかよくワカラナイです。
しかもそのプラグインもオブジェクト化されていないケースがあるので、overrideとか出来ずに直接プラグインを修正してしまいます。orz

Migration的な機能が無い。

コレは欲しいです。プラグインを作成する際は、独自のテーブルを準備するケースが多いと思いますが、いちいちcreate tableとかのクエリも自分で書かないといけないです。しんどいです。
Doctrineでも突っ込めば?って言われそうですが、Doctrineだとwordpressが標準で準備しているORM(ORMといえるシロモノかどうか疑問ですが、、、)を通らないので、もしwordpress自体に修正が入った場合は対応できなくなってしまいます。

まとめ

wordpress自体はブログの機能として配布されているので、それ以上の機能をプラグインに実装するとなると、あとは勝手にやってねってスタンスだと思います。まぁ当たり前でしょうけど、、、
いいプラグインの実装方法があったら教えて下さい!!!

wordpressをビルドインサーバーで動作させる。

wordpressをビルドインサーバーで動作させます。
メリットとしては、ナウい開発ができます。rails的な開発ですね。
デメリットとしては、あくまでも開発用のサーバーなので、本番とはかなり環境が違うということ、
開発自体はビルドインサーバーで良いですけれど、リリースする際は一度Apacheで動作確認してリリースしたほうが良いでしょう。

まず、ファイルを作成します。wordpressを解凍した直下に作成すれば良いです。

<?php
$root = $_SERVER['DOCUMENT_ROOT'];
chdir($root);
$path = '/'.ltrim(parse_url($_SERVER['REQUEST_URI'])['path'],'/');
set_include_path(get_include_path().':'.__DIR__);
if(file_exists($root.$path))
{
	if(is_dir($root.$path) && substr($path,strlen($path) - 1, 1) !== '/')
		$path = rtrim($path,'/').'/index.php';
	if(strpos($path,'.php') === false) return false;
	else {
		chdir(dirname($root.$path));
		require_once $root.$path;
	}
}else include_once 'index.php';

このファイルを作成した後に、コンソール画面で、

$ php -S localhost:3000 route.php

とコマンドを叩くと起動します。
簡単ですね。

AngularJSの勉強用リンク集

すぐできる AngularJS
http://8th713.github.io/LearnAngularJS/#/
AngularJS の MVC 解説
http://qiita.com/zoetro/items/a45dbc18bb2b22e944b2
ベストプラクティス
https://github.com/mgechev/angularjs-style-guide/blob/master/README-ja-jp.md (公式)
http://qiita.com/icoxfog417/items/2ac773c33a8b34288551

AngularJS Directive なんてこわくない(その1)
http://angularjsninja.com/blog/2013/11/20/angularjs-custom-directives/
AngularJS Directive なんてこわくない(その2)
http://angularjsninja.com/blog/2013/11/22/angularjs-custom-directives/
AngularJS Directive なんてこわくない(その3)
http://angularjsninja.com/blog/2013/11/27/angularjs-custom-directives/
AngularJS Directive なんてこわくない(その4)
http://angularjsninja.com/blog/2013/11/29/angularjs-custom-directives/
AngularJS のデータバインドを支える $watch
http://angularjsninja.com/blog/2013/12/13/angularjs-watch/
$watchと$watchの中間的な位置付けの$watchCollection
http://angularjsninja.com/blog/2013/12/17/angularjs-watchcollection/