Hatena::ブログ(Diary)

130単位

2012-12-24

デプロイ用gem CapistranoとMinaの比較

Capistrano

  • 多機能
  • capify -> cap setup -> cap deploy
  • Capfile, config/deploy.rb
  • バージョン管理しない共通ファイル/ディレクトリの管理に一工夫いる
    • symlinkを張るタスクを定義する必要あり
  • バージョン管理しない共通ファイル/ディレクトリは :shared_children 変数で管理できる
  • git以外のSCMにも対応
  • remote-cache strategyは--recursiveなnon-bareリポジトリを保持
    • submodulesがあっても早い
    • scpによるstrategyもある
  • リリースパスにコピーしたあと.gitは消さない
  • リリースのバージョンはタイムスタンプ
  • capistrano-ext gem でマルチステージ対応
  • GitHubのヘルプにあるくらいデファクトともいえる

Mina

  • シンプル
  • mina init -> mina setup -> mina deploy
  • config/deploy.rb のみ
  • バージョン管理しない共通ファイル/ディレクトリの管理が楽
    • shared_paths にパスを配列で指定すれば良い
  • gitのみ対応
  • bareリポジトリを保持
    • submodulesがある場合時間がかかる
  • リリースパスにcloneしてから.gitを消す
  • リリースのバージョンは連番
  • マルチステージ非対応
  • フィリピン マニラ発プロダクト

Mina雑感

導入に関しては特に問題ありませんでした。Capistranoの経験があれば、デフォルトテンプレートを読めばほぼ理解できました。ただでかいsubmodule(WordPress)を含むリポジトリで試してみたのですが、デプロイの度にsubmoduleをcloneするので毎回時間がかかるのがいけてないところです(せっかくなのでPull Request送ってみました *1 )。良く言えば、まだまだこれから進化する余地のあるプロダクトといえます。

  • SCMgitでsubmoduleなし
  • プロジェクトが小規模でデプロイが本番のみ
  • 新しもの好き、Minaパッチを送って使いやすくしたい

このような条件/環境であれば、Minaを使ってみるのもいいかもしれません。そうでなければ、プロジェクト間の統一性の観点から、現状ではCapistranoを使っておいたほうが無難かと思います。

あわせて


4873114934
ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)

2012-12-09

初心者向けRails勉強会振り返り #mtsmhack

シェア住人からニーズがあったため、今回はこんなテーマでやってみました。

やったこと

Rails Girls の手引きを利用してみたのは、講師役がいる前提で、手順がシンプルに書かれているからです(質問に応じて講師役が適宜説明すれば良くて、逆にドットインストールなどは一人でもできる)。

感想

参加者の方の感想

  • 数年前(Rails以前)のWebアプリ開発に比べてはるかに便利
  • Rails周りはやはり説明範囲が多く、プログラミング自体初心者だったら厳しい面もあるかも
    • 『たのしいRuby』などでまずRubyからやるといいのでは
  • 独学でやるより複数人だと質問したりできて捗ったし、刺激を受けた
  • 割とゆるい感じでよかった

反省点

その他

今後へ向けて

参加者の方が自発的に環境構築を進めてくれたりしたおかげもあり、思った以上にスムーズに進めることができました。また経験者の方にも自然に講師役をやっていただけて、とても助かりました。ありがとうございました!

この先は、やはり自身でつくりたいアイデアをRailsで実現するのが習得への近道のような気がします。つくりたいものをつくる過程で、何度かつまづきつつ、その都度対処法やコツを覚えることで徐々に上達していけるのかなと。それにあたって、復習+ステップアップの回を設けるなどしてできる範囲でサポートしていけたらと思います(機会があれば、あらためてしっかり準備した未経験者向けチュートリアルも)。

参考リンク集

4797363827
Rails3レシピブック 190の技

4274068668
RailsによるアジャイルWebアプリケーション開発 第4版

*1:migration失敗する

2012-12-02

Rails4 Turbolinksのメモ #mtsmhack

こちらでTurbolinksについて軽く発表してみたんですけど、うまく伝えられなかった気がするのであらためてまとめてみます。※12/3時点での情報です

概要

  • Rails4の新機能
  • pushStateというブラウザ履歴操作のためのHTML5の機能を利用
  • リンククリックイベントをハンドリング
    • 現在のページをキャッシュ
    • XMLHttpRequestでリンク先のbodyを読んで差し替える
    • pushStateで履歴に追加、現在のURL/titleも差し替え
  • 戻るボタンにもpopstateイベントとキャッシュで対応
  • assets(JS/CSS)がそのまま利用されるので高速
    • Asset Pipelineで1ファイルにまとめるRailsだからこそより効果的といえる
    • 体感速度も明らかに速い
  • ページ遷移時にはonloadイベントが発動しない
    • 代わりに Turbolinksの page:load イベントを利用する
    • jQueryのreadyイベントは jquery.turbolinks を使えば変更なしでいける
    • no title
  • 元のコードはCoffeeScript1ファイルで200行程度

課題

  • 外部のJSを読み込ませるライブラリと相性悪い
    • グローバル空間にクラス/オブジェクトを定義してる場合とか(重複する)
    • YouTube iframe API は回避可能
    • LiveFyre は回避不可っぽい
  • page:load イベントが2回呼ばれている?
    • Issue でFix予定とされている
  • JSの位置や設定により挙動が変わったりする
    • javascript_include_tag "application" の位置
    • application.js の //= require turbolinks の位置
      • Issue で現バージョンでは最下部が推奨されている
    • config.assets.debug の値
  • URLに . を含むと通常遷移する(仕様とのこと)

本体にマージされたPull Request

  • ニコ動の外部プレイヤーが動かなかったのがきっかけ
  • HTML直書きJSの扱いの修正
    • script要素のsrc属性の判定
      • src属性書かれてなくても script.src で空文字が返るため条件追加
    • グローバル空間でのeval()
追記

12/7現在はより良いコードに変わっています。Issue読むと勉強になります。ソーシャルコーディングの開発速度すごい!

その他

  • リポジトリを watch するとIssueやらが1日に3-5メールくる
    • 割とチェック可能な量で思想/仕様も理解できるため興味ある方にはおすすめかも

あわせて