田舎の技術者が奮闘中

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

ローカルファイルを更新したら、SFTPを利用して自動でファイルをサーバーにアップする。

ローカルファイルを更新したら、SFTPを利用して自動でファイルをサーバーにアップするgemを作りました。

pikonori/auto_sftp · GitHub
rsyncとかが使えない時に利用できるのではないかと思います。

Auto SFTPの導入

まず、Gemをインストールします。

$ gem install autosftp

Auto SFTPの初期設定

Gemをインストールしたらヘルプを確認してみましょう。

$ autosftp -h
  autosftp delete [remote name]  # remove the configuration.
  autosftp help [COMMAND]        # Describe available commands or one specific command
  autosftp init                  # Creating the initial file. file called '.autosftp' is created
  autosftp list                  # setting list
  autosftp set [remote name]     # add information to the '.autosftp'. Please put the name of any [remote name]
  autosftp start [remote name]   # Automatic monitoring start

まず、設定ファイルを準備します。
この設定ファイルは何処に配置してもいいですが、プロジェクト毎にサーバーが変わると思いますので、プロジェクトのディレクトリまで移動して、設定ファイルを準備します。

$ cd ~/workspase/project
$ autosftp init

「autosftp init 」をコマンドで叩くとyaml形式で.autosftpというファイルが作成されます。
.autosftpはSSHの情報を登録するファイルになります。直接ファイルを操作しても問題ありません。

次に設定ファイルに接続先の情報を追加します。
接続先の情報はいくつでも登録可能です。

$ autosftp set [remote name]

[remote name]は自由な名称をつけて下さい。
対話型で入力を促されるので、それ通りに入力していきます。

$ autosftp set default
[username@host:port]
username@sample.com:22 #portが無しの場合は自動で22が入ります。
password:
# 表には表示されません
remote path:
/remote/path # リモート先にアップするディレクトリを指定します。
# この時に一度認証を行い、接続できるか確認します。
local path: --If you enter a blank, the current directory is set
/local/path # ローカルのディレクトリを指定します。からの場合はカレントディレクトリを登録します。

全てを入力すると、.autosftpにSSHの接続情報が書き込まれます。

---
default:
  :user: username
  :host: sample.com
  :port: 22
  :password: password
  :remote_path: /remote/path
  :local_path: /local/path

コレで準備が完了します。

Auto SFTPの使い方

自動監視をスタートします。

$ autosftp start [remote name]

設定したsftpを削除します。

$ autosftp delete [remote name]

Auto SFTPまとめ

作業効率化を目的として作成しました。
例えば、リモートサーバー上に開発環境があるが、エディタはローカルのを使用したい場合とか、バックアップを常にサーバーにアップしたいとか、そういった場合に利用できると思います。
rsyncでええやんって話ですが、AutoSFTPはmaclinuxだけではなくWindowsでも動作しますので、rubyさえインストールされていればどこでも動作します。

バグ等の報告がありましたら、こちらまでご連絡下さい。

phpunitをmacに入れる。

最近テストコードを書く癖が付いて、いいことだなぁと思っているこの頃です。
忘れないように、phpunitmacに入れる方法をメモっときます。
本当はpearで管理してバージョン上げたりしたほうが良いのでしょうが。。。

$ curl https://phar.phpunit.de/phpunit.phar -o phpunit.phar
$ chmod +x phpunit.phar
$ mv phpunit.phar /usr/local/bin/phpunit

以上です。

jqueryでのオブジェクト継承テンプレート

会社のJavascriptの神様から、Jqueryでのオブジェクト継承のテンプレートを教えてもらいました。
色々な所で活用できそうですので、メモ代わりに記事にしておきます。

最初の一行目と最後の行はおまじないみたいなものです><

親オブジェクト

(function($, window, document, undefined){

    $.parent = function (option){
        this.option = {}
        this._extends(option);
        this._init();
    };

    $.parent.prototype = {
        _extends:function(option){
            if(option === undefined) { return; }
            for(var param in option){
                this.option[param] = option[param];
            }
        },
        _init:function (){
        },
    };

})(jQuery, this, this.document);


継承後のオブジェクト

(function($, window, document, undefined){

    $.child= function (option){
        this.option = {}
        this._extends(option);
        this.init();
    };

    //定数
    $.ModalConfirm.DEFINE = "";

    $.child.prototype = new $.parent();

    $.extend($.child.prototype,{
        init: function() {
            this._init();
        }
})(jQuery, this, this.document);

呼び出し方

instance = new $.child();

以上!

rails使いがtwitter bootstrap用のwysiwygを速攻で導入

f:id:pikonori:20131010092304p:plain
久々にwysiwygを導入することになって、色々探していたらgemで入れることが出来る、wysiwyg を発見しました。

bootstrap-wysihtml5

そこまで高機能では無いですが、必要最低限の機能が揃っています。
また、gemで導入することが可能ですので、数分で対応が完了します。
以下に全て当てはまる人が導入するものだと思います。

  1. railsを使っている人
  2. twitter bootstrapを使っている人
  3. 導入がめんどくさい人
  4. そこまで高機能を求めてない人

導入

Gemfileに追加

以下の内容を追加します。

gem 'bootstrap-wysihtml5-rails'

常に最新が欲しい場合は

gem 'bootstrap-wysihtml5-rails', :require => 'bootstrap-wysihtml5-rails',
                              :git => 'git://github.com/Nerian/bootstrap-wysihtml5-rails.git'

としましょう。

追加が完了したら、「bundle install」を行います。

js と cssを編集

bundle installが完了したら、必ずrailsを再起動して下さい。そうしないとjsとcssが上手く読み込まれません。

app/assets/stylesheets/application.cssを編集します。

*= require bootstrap-wysihtml5

app/assets/javascripts/application.jsを編集します。

//= require bootstrap-wysihtml5

wysihtml5を呼び出します。

  $(document).ready(function() {
    return $("#comment").wysihtml5();
  });

この時点である程度動作します。

日本語化

最後に日本語化です。

app/assets/javascripts/application.jsを編集します。

//= require bootstrap-wysihtml5
//= require bootstrap-wysihtml5/locales/ja-JP


wysihtml5を呼び出している箇所にオプションを渡します。

  $(document).ready(function() {
    return $("#comment").wysihtml5({
      locale: "ja-JP"
    });
  });


コレで完了です。

まとめ

導入まで約5分ほどで完了します。
気をつけることはrails再起動を必ずしましょう。

以上!

cakephp と ruby on railsの比較

仕事ではcakephpを使用し、プライベートではruby on railsを使用しています。
アプリも幾つか作りましたし、比較的なものを書こうと思います。

比較1 導入編

まず導入ですが、圧倒的にcakephpが楽です。
もともとPHP自体がApacheにアップすれば勝手に動くシロモノですので、
ファイルアップ=稼働という形になります。

railsunicornやthin等のhttpサーバー導入したり、色々しなければなりません。
また、プログラム反映も一度httpサーバーを再起動したりしなければなりません。
PHPに慣れすぎている人たちには、面倒くさいと思うでしょう。

比較2 開発編

開発は圧倒的にrailsだと思います。
最初のうちは戸惑うことも多いかもしれませんが、慣れてしまうとrailsの開発速度に敵うフレームワークは無いのではないか?と思ってしまいます。

1.コマンドからのプログラム自動生成が優秀
他のフレームワークにもありますが、railsがすごく優秀だと感じました。
2.migration機能が素晴らしい。
3.rails用のライブラリが優秀
ライブラリ等を使用したりするときに最低限のコードで動作することが可能です。
(ライブラリのコードを読むと黒魔術過ぎてわからない所が多いです。。。メタプログラミングが得意ですからねw)


cakephpが軽自動車だとしたらrailsは高級車って感じです。
高級車だけどブラックボックスが多いです。
結局のところクルマを運転する上で、中身なんぞ知らなくてもいいだろ?使う奴は運転する技術だけ習得してこいって考え方がrailsだと思います。オブジェクト指向の考え方に準拠しているって感じですね。

比較3 メタ言語haml、coffeescript、 sass等)

メタ言語の導入もrailsが優秀です。
cakephpでメタを導入するとなると、Gruntなどで変換しなければなりません。
railsの場合は、Gruntを導入しなくても変換してくれます。

結果

開発速度で行くのであればrailsが優秀ですが、結局のところ好きな言語はどっち?って話になります。適材適所で自分の好きなフレームワークを選ぶのがいいと思います。
自分だったら、好きなフレームワークで開発して下さいって言われた時に迷わずrailsって言います。

だって楽だからw

ファイルを編集したら自動で、リモートサーバーにファイルアップ

最近ブログの更新が滞っています。
新しいことをあまりやってないって事が原因でしょうが。。。

久々に新しいライブラリ?を作ったので紹介します。
pikonori/auto_sftp · GitHub
どのようなものかというと、ローカルのファイルを更新したら、自動でリモートサーバーにファイルをアップするライブラリです。

大抵の開発者はローカルで開発してローカルで動作確認を行うと思います。
しかし、うちの会社ではサーバーの設定が特殊なために、最終チェックはリモートサーバーにアップして確認します。
いつもはFTPクライアントで階層変えてアップして確認していたのですが、コレが非常に面倒くさい!
そこで、全て自動でファイルをアップできるようにしました。
(社内ではものすごく好評ですw)
FTPではなくSFTPにてアップします。
FTPの対応はしていません。

環境準備

ruby 1.9.3
(windowsでruby 2.0 を試したのですが動作しませんでした。macは調査していません。。)

動作OS

Windows
Mac
Linux
ruby 1.9.3が入っていれば動作します。)

導入手順

1. 兎にも角にもbundler を入れます。

$ gem install bundler

2. pikonori/auto_sftp · GitHub からcloneしてきます。

DLでも大丈夫ですが、頻繁に更新する予定ですので、cloneしておいたほうが良いです。
落とす先は好きなところでOKです。

$ git clone https://github.com/pikonori/auto_sftp.git

3. sftp.yaml.defaultを編集します。

まずsftp.yaml.defaultをsftp.yamlにリネームします。
sftp.yamlの中身を確認すると、

sample:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/

となっていますので、リモートサーバーの設定等を行います。
以下が内容となります。

名称 内容
sample 任意の名称です。コマンドを叩く際に指定します。
ip リモート先のIPです。ドメインでも構いません。
port ポートです。デフォルトは22になっています。
user リモートサーバーのユーザー名です。
password リモートサーバーのパスワードです。
local_path 監視するローカルディレクトリです。ディレクトリ階層以下全てを監視します。
remote_path リモートサーバーのパスです。

※ローカルパス以下のファイルが多すぎるとCPUを食いまくるので、ファイルが多い場合はディレクトリを絞って下さい。

複数設定する場合は、

sample:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/
sample2:
  ip:     localhost
  port:     22
  user:     admin
  password:   password
  local_path: ~/
  remote_path: /var/www/html/

のように追加していきます。

4. 動作させます。

sftp.rb があるディレクトリに移動します。
移動後に以下のコマンドを叩きます

$ ruby sftp.rb -f sample
C: create  U: update  D: delete E: error

Name      sample
Host      HostName
Accepted  2013-10-09 09:49:17 +0900

上記のような文字列が出たら監視開始になります。
コレでファイルを修正するたびにファイルがアップされるようになります。

5. aliasを設定する。

ここからはMacやLinux専用になります。
(Windowsの方はbatとかを作成しておくと便利です。)

~/.bashrcを開きます。そこに

alias auto_sftp='ruby ~/sftp/sftp.rb'

の用な感じでaliasを設定しましょう。
これで

$ auto_sftp -f sample

で起動できるようになります。

まとめ

他にも機能がありますので、

$ auto_sftp -h

で確認してみて下さい。

将来的にgem installなどで簡単に導入できるように修正します。
(あと、テストケースも書かないとw
コードも汚いです。/(^o^)\)

導入できなかったり、動作不備がありましたら、気軽にコメントして下さい。