Hatena::ブログ(Diary)

130単位

2013-12-31

Sitespecを使ってみた感想

Background

  • 住んでるシェアハウスWebサイトがなかった
  • プロモーションの拠点として必要性を感じた
  • 最初は割とよく耳にするMiddlemanで作ろうかと思った
  • 直近で読んだr7kamuraさんの記事 no title に影響を受けた
    • "Middlemanの嫌いなところは、何をするにもMiddlemanに従う必要があることだった"
  • 必要十分そうなSitespecというツールがそこにあったので使ってみることにした

Goal

  • とりあえず1ページでよい
  • 費用や入居までの流れなどがわかればよい
  • デザインはシンプルかつそれなりな見栄えであればよい
  • コンテンツはMarkdownで書きたい
  • Herokuくらい簡単に公開したい

Sitespec with Sinatra

r7kamuraさんのブログ(ソース)はPadrino使ってますが、全部引用するのは忍びないのでSinatra使ってみました。

helpers do
  def markdown markdown_text
    renderer = Redcarpet::Markdown.new(Redcarpet::Render::HTML, fenced_code_blocks: true)
    renderer.render(markdown_text)
  end
end
use Rack::Static, :urls => ['/images'] #Sitespecに渡すアプリにこう書く

Others

Result

ぼちぼちコンテンツ増やしていきたいと思っています(あと入居者募集中です!)。

Conclusion

上記の画像の件ですが、Sitespecとしては "まずは画像のパスをSpecに書け" というテストファースト的コンセプトなんだと思います。RSpec派生ツールなので当然といえば当然なんですが、そこを理解するとスムーズに開発できる気がします。ほぼ学習コスト無しでいけるため、さくっと静的サイトを作りたい場合にはMiddlemanよりおすすめです、たぶん!

Links


4774158798
パーフェクトRuby (PERFECT SERIES 6)

*1:IFTTTなどでTwitterに流しているとなおさら

2013-07-06

フィリピンでMinaの開発者と会いました

Mina

約1年前にデプロイツールCapistranoの対抗として登場したMina。自分も少しだけ使ったことがありました。ただ最近は開発がアクティブでなかったため、Capistranoでいいじゃんとツイートしたこともありました。そんなMinaフィリピン発なんですね。

で、自分が今フィリピンにきていて、Minaを現地エンジニアとの話のきっかけにしたりも何度かしました。そして開発者の GitHub followers が500超なのを見るに、Nadareiというチームはおそらくフィリピンで一番いけてるエンジニア集団なのではないかと勝手に想像してました。そんないけてる開発者と、あわよくば会えたりしたらいいなあと思っていました。

Manila.js meetup

Mina開発者が発起人でもあるManila.jsというコミュニティ。月イチでミートアップを開いていて*1、たまたま当日の開始1時間前に気づくことになったんですね。

Manila.js JavaScript meetup 016

チケットはSOLD OUTだったんですが、インターンの縁を利用して参加可能か確認して、勢いで参加してみました。バスとジプニーを計4台乗り継いでなんとか辿り着いたときには既にイベント終了間際でした。発起人 @rstacruzJSクイズを出してノベルティをプレゼントしてました(jQueryの最新バージョンは?とかEmber.jsの開発者は?とか)。

f:id:deeeki:20130705045610j:image

Recorded videos

Talking w/ authors

イベント終了後、これまたありがたいことにインターンエンジニア仲介してもらって、@rstacruz 、そしてチームメンバーでMinaメイン開発者である @mikong と話すことができました。

  • 忙しかっただけで開発意欲はあって、つい最近Issue処理を再開したこと
    • "please be patient" といわれた
  • submodule対応のpull reqを送ったことがあること
  • 本番環境で使っているか?と聞かれて、いや趣味でだと答えたこと*2
  • チームでは基本的にRailsアプリを開発していること
    • でも最近はアプリの8割くらいJSを扱ってたりすること
  • どうやってインターン先を見つけたのかということ

衝撃だったのは、"マイナ"だと思っていた読み方が実際は"ミーナ"だったことでした。

それにしても、先にプロダクトの利用、PRがあったのちに、こうしてリアルに海外のエンジニアと会って話せるというのは感慨深いものですね。もっとこういう体験をしてみたいと強く思いました。できればプロダクト提供側としても、というのと、技術的な深い話もできるよう英語力を上げていきたいですね。

JSConf.asia

今年の11/28-29にマニラで開催予定だそうです。興味のある方は行ってみるといいんではないでしょうか!(スピーカーも募集しているみたいです)

関連記事

*1:今月で4回目

*2:実際は既にCapistranoに置き換えたのだけど

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 )。良く言えば、まだまだこれから進化する余地のあるプロダクトといえます。

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

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

あわせて


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

2012-12-09

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

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

やったこと

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

感想

参加者の方の感想

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

反省点

  • Rails Girls イベントを開催するには
    • ここを事前にしっかり目を通しておくべきだった
  • 初めてで進捗が読めなかったので目標設定ができてなかった
  • 来場時間を募集時に聞いておくとよかった
    • ついでにプログラミング経験も
  • チュートリアルの次にやるといいことをうまく伝えられなかった

その他

今後へ向けて

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

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

参考リンク集

4797363827
Rails3レシピブック 190の技

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

*1:migration失敗する

2012-11-24

Rails4 beta さわってみたメモ #railshackathon

Rails4、先取りセミナーなんかもあったりして少しずつ浸透してきてる感がありますね。そんな中 no title に参加してて、Rails4でアプリを作ってみたりしたので、その感想とか書いてみます。不具合などはあくまで11/24時点の情報になります。

StrongParameters

  • Modelでattr_accessibleは使わない
  • ScaffoldでController に {modelname}_params というメソッドができるのでそれに倣うのがいいかも
  private
  def user_params
    params.require(:user).permit(:name, :password, :password_confirmation)
  end
  • ここで上書き許可するカラムを設定して、User.new(user_params) などとする

テスト

  • Ruby1.9本体にも入ってるminitestがデフォルトになっている
  • MiniTest::Specというクラスがあり、RSpec的記述に対応してる
    • no title
    • should が must に変わった感じ
    • context はないので使いたければaliasする必要がある
  • 個人的にデフォルト変えたくない派だったりするので、今後はRSpecでなくminitestを採用しようかと
  • ジェネレーターで生成される test/**/*_test.rb のまま書くとrails.vimのシンタックスハイライトが効かない
    • spec/**/*_spec.rb にリネーム or 生成されるようにする
    • あるいは vim の設定をいじる
  • minitest/pride を requireすることで実行結果が少しカラフルになる
  • FabricationはRails4未対応
    • activerecord4 ブランチを使う

I just pushed up a new branch called activerecord4 which should work if you are using edge rails. Point your Gemfile to that and you should be all set.

no title
  • テスト実行時fixturesを読み込ませないためには test_helper.rb の fixtures :all をコメントアウトする
  • database_cleaner gemを入れなくてもデータがクリアされてるっぽい
  • 本家database_cleanerはRails4未対応なのでforkされたものを使う
  • Guardによる自動実行
    • no title
    • guard init minitest でできるGuardfileは微妙なので書き換えるたほうが良さ気
    watch('test/test_helper.rb')  { "test" }
    watch(%r|^test/(.*)_test\.rb|)
    watch(%r{^app/(.+)\.rb$}) { |m| "test/#{m[1]}_test.rb" }
  • Guardのwarning回避のため gem 'rb-fsevent', :require => false をGemfileに追加
  • テスト全実行すると'ruby-prof'がないといわれるため、gem 'ruby-prof' をGemfileに
    • performance_testで使われてるっぽい
    • [追記]上記はGuardで実行した場合のみ

RubyGems

問題なし
問題あり
  • Html2Haml/RubyParser
    • no title
    • 警告でるが変換できた
  • Event-calender
    • no title
    • かなり古いgem
    • generateされるルーティングさえ直せば動く
  • Socery
    • no title
    • attr_protected 関係でうまくいかない
  • Erd
    • no title
    • JS/CSSが読み込まれないのでER図見られない
    • Engineのassets周りで、Sprocketsの問題かも
  • Haml-Rails
  • Compass
    • no title
    • パスが通ってない
    • 下記をinitializersに記述して対応
Rails.configuration.assets.paths << Compass::Frameworks['compass'].stylesheets_directory

Ruby2.0

  • ruby-build をupgradeしてrbenvで2.0.0-preview1と2.0.0-devが利用可能
    • no title
    • Mac ではHomebrewでOpenSSLを入れてからインストールするのが推奨されている
brew install openssl
CONFIGURE_OPTS=--with-openssl-dir=`brew --prefix openssl` rbenv install 2.0.0-preview1
  • 起動時間など体感的に速い
  • Herokuで2.0.0.preview-1が利用可能だがデプロイでこける
    • Herokuが使ってるBundler1.2.1との相性が悪いらしい

その他

  • http://localhost:3000/rails/info/routes でルーティング確認できる
    • Routing Errorの画面も下部にルーティングが表示される
  • TurboLinks、JSなしのlink_toだけで勝手にAjaxになる
  • Timezoneがなんかおかしくて、JSTにならない
    • config/application.rb に config.time_zone = 'Tokyo'
  • Heroku assets
    • config/environments/production.rb に config.assets.compile = true
    • Compass, Bootstrap-Sass, Haml-Railsは:assetsグループに入れずにグローバルに定義

感想

約2年前のRails3がリリースされた頃、当時はRuby/Rails未経験でその上ググって出てくる英語の記事にも慣れてなくて、相当苦労した気がします。それに比べれば、Rails3.2をある程度触っていればRails4は割とスムーズに扱えるのではないかと思います。Rails本体よりも周辺Gemのほうが、まだ未対応だったりして動かないことがよくあります。遭遇したエラーが翌日には直っていたなんてこともあります。とはいえRails4対応という避けては通れないであろうミッションに、ソーシャルコーディングで参加できるチャンスがたくさんあるともいえます。実際にPull Requestしてみて、良いフィードバックが得られたりもしました。

時間に余裕のある人や新しもの好きな人は、Rails4ぜひ触ってみるといいと思います!

あわせて

※近々ギークハウス元住吉でRails4テーマに勉強会やろうかと思ってます