Rails 4

パーフェクトRuby on Rails片手に1つアプリを作った

まずは宣伝

作ったのは、Micloという1人用マイクロブログサービスです。
1人用ということで、SNS機能はありません。(が、投稿は全て公開されます。)

Heroku Buttonも付けたので、自分専用の環境をすぐ用意できます。

なぜ作ったか

僕はTwitterがわりと好きなんですが、つぶやく直前に「これ、Tweetするほどのことでもないよなぁ…。」と削除することがよくあります。
別に隠したいわけじゃないんだけど、わざわざ誰かのTLに投げ込みたいほどでもない。

また、tl;drという言葉がありますが、同じくToo long; Didn’t write.というのもやはりあると思います。
ブログにまとめるのは大変だけど、断片でもいいからつぶやいておけば、誰か(自分含む)の役に立つかもしれない。

というわけで、こそこそと気軽につぶやける用に作ってみました。

特徴

単なるマイクロブログだと芸がないので、ひとかたまりで発言できるようにしています。
つぶやく時に、「続き」を選択するとその前のつぶやきとおなじTopicになります。

あと、Markdownで書けます。

キーボードショートカットも一応あります。nで新規、cmd+enterで送信などです。

その他

デザインはほぼBootstrapそのままです。
オープンソースなので、気に入らない所とかあったら、プルリクエストしてもらえると喜びます!

パーフェクトRuby on Rails


パーフェクト Ruby on Rails

「パーフェクト〜」と言われると、ハードルが高いんじゃないかと思っちゃいますが、
実際は、「ステップアップ〜」や「レベルアップ〜」と言った感じで、(たぶん)中級者の僕にも大変わかりやすかったです。

むしろ初心者にこそオススメしたい一冊でした。
久々に、「Railsで何か作りたいなー」という気持ちにさせてくれました。ありがとうございます!

読みながら書いたメモなどはこちら。
http://miclo.bornneet.com/u/tnantoka/t/3

Vue.js

どうせ何か作るなら今まで触ったことのないものを使ってみようと、Vue.jsを使ってみました。

これまでBackboneとAngularを少し触ったことがある程度なので、偉そうなことは言えませんが、Vue.jsはとてもコンパクトで手軽に使えると感じました。とにかくBindingがしたいんだよ!という人は是非。

また、今回は、できるだけRailsの機能を使う方針で書きました。
例えば、「formをsubmitしてJSONを持ってきて…」みたいな処理を自分で書きたくなかったので、
「remote: true」でRailsにやってもらって「ajax:success」を受ける、みたいな形でやりました。「disable_with」も使いたかったし。
結局そのせいで汚くなった部分もあるので、素直に自分でsubmitすればよかったかな、とも思っています。(が、汚さの多くはVue.jsがアップデートしていくうちに解消できそうな気がするので、そちらに期待しています。)

あと、今更ながらSlimも使ってみましたが、快適でした。Vueは結構HTMLの属性を書かなきゃいけないので、HTML風にも書けるSlimと相性がよかったです。

サーバ

VULTRで動いています。
キャンペーンで実質半額なので月2.5ドルです!安い!!(初回入金と同額を上乗せてくれる

これぐらいなら、なんとかAdSenseでやってけるんじゃないかと目論んでおります。
広告邪魔という人はオープンソースですので、自前で立てて消していただければと思います。(むしろ、そこまでして使ってくれたらありがたいです。)

今のところ大きな不満はないですが、やはりレイテンシが気になります。
※ Tokyoは転送量上限100GBで心許なかったのでLos Angelesにしましたが、pingすら200〜300msかかってて​悲しいです。

 

そんな感じで、よろしくお願いします。

Chromeでフォームにscriptタグ等を入力して送信すると”data:;”にリダイレクトされる

Rails 4.0.1、Chrome 31.0.1650.57 での開発中に遭遇した。

The XSS Auditor blocked access to ‘URL’ because the source code of a script was found within the request. The server sent an ‘X-XSS-Protection’ header requesting this behavior.

というエラーがコンソールに出て、画面は真っ白に。

エラーログにもある通り、理由はレスポンスヘッダに、

X-XSS-Protection: 1; mode=block

が含まれるようになったから。
参考:Ruby on Rails Security Guide — Ruby on Rails Guides

scriptタグだけじゃなく、iframeなどXSSを発生させそうな内容があるとChromeがはじく。
これらのタグの入力を許可したい場合は、

すればこの機能は無効になる。
CMSでHTML入力機能があるなどやむを得ない場合に。

そうじゃなければ、そもそもhtml_safeしなければいい。(エスケープされていればこの挙動にならないはず)

Rails 4使ってみたい。多言語ブログ書きたい。じゃ、いつ作るか、今でしょう

林先生、大人気ですね。他にも「マドンナ古文」とか、あのCMは面白くて好きです。

さて、Rails 4で何か作ろうと思い立ってから2週間、せっせと作ってきたブログエンジンがようやく形になりました。
(ちょっと時間かかりすぎなんですが、最近あんまりまとまった時間が取れてないので、自分を責めないようにしている感じです…。)

Konnyaku · Multilingual blog with Rails 4.0

Konnyaku Tips のような、オシャレ(※)な多言語ブログが作れます。素敵ですね!
有料のBootstrap用スキンを使ってるからですが^^

    • Rails 4.0を使ってみる
    • 多言語なブログを簡単に書きたい
    • ついでにPostgreSQLも触ってみたい

という最低限の目的は達成できたので、今後は、

    • ちゃんと保守する

をテーマに放置せずに頑張りたいと思います。
そのためにも、もっとちゃんとテストを書けるようにならないと…。
全然上達してる気がしないので、ソースを晒すことでテスト力をアップしようという目論見。

初Rails 4の感想

前評判通り、3.1へのアップデートほどハマるところはないと思います。
作業ログをブログ化しようとしてましたが、途中で断念しました、すみません。
気になる部分あればソースを見るか、メンションでも飛ばしてください。

全作業中、一番ハマったのは、TurbolinksでAdsenseが動かないところ(笑)
Adsense won’t load with turbolinks · Issue #151 · rails/turbolinks にグレーな解決策が提案されていましたが、これでアカウント無効化されたらシャレにならないので、開発者ブログでは一旦Turbolinksをオフにしています。

体感速度に結構寄与しそうな感じだったので是非使いたかったんですが…。
特定のDOMは差し替えないというオプションが欲しい今日このごろ。
サイトに広告貼れないと貧乏人には辛いぜ…?

あとPostgreSQLはいろいろとMySQLと違うところが多くて結構つまづきました。誰かが接続してたらDBを削除できなかったりとか。

やっぱり新しいものを弄るのは楽しいので、しばらくRails 4でいろいろ作ってみようかなと思っています。

参考書籍

 いつやるか? 今でしょ!

間違えた、こっち。(しつこい?)

 WEB+DB PRESS Vol.73

それでは。

Rails 4でRSpecとTwitter Bootstrap

あれ?いつの間にか日曜日だ。

昨日の続き。
作るものは多言語ブログに決まった。だいたいこんな感じ。

    • キラキラネームがいいらしいので、名前はKonnyakuにする。これなら将来gem化するようなことがあっても被らないだろう。(Konjacにしようと思ったら既にあってビビったけど)
    • デザインはTwitter Bootstrapベース
    • コメントとRSSぐらいは付けたい
    • あと画像アップロードも。
    • 日・英で書ける
      (他の言語はとりあえず考慮しない。ブログ書くぐらいネット使ってて英語読み書きできないのは日本語ネイティブぐらいだよね?)
    • markdownで書く
    • markdownのコンパイル、コードのシンタックスハイライトはクライアントサイドで。
      (RedcarpetとかPygmentsに依存すると他の人に気軽に使ってもらいにくくなるので)
      → 勘違いしてた。Redcarpetは簡単にインストールできるのでmarkdownのパースはサーバ側でやることにする。
    • Travis CI使いたい
    • PostgreSQLに慣れとかないとそろそろやばそうなので無理やり使う
      (tagsをarrayでやってみりゃいいのかな?)

前回はただrails newしてscaffoldしただけだったけど、今回はrspec入れたりとかいろいろやって、開発をスタートできるとこまで持っていく。
この作業はそれなりに面倒い予感がする。

プロジェクト作成

いつもの作業。データベースはpostgresql。

動作確認。

いけた。

RSpec

続いてRSpec。標準のままいきたいところだけど、まだRSpecも習得しきれていないので他に手を出すのはやめておく。

はじめてのテスト。

通った。

twitter-bootstrap-rails

デフォルトSCSSなのになんでわざわざLESS使うの?という突っ込みはもっともだと思います。
僕もデフォルト教の信者なのですが、このケースではRailsではなく、「Twitter Bootstrapのデフォルト」を優先したい気分なのでいつもlessを使ってます。

動作確認

いけてる。
テストも一応。

問題なさそうな気がする。

長くなってきたのでcapybaraとかsimple-cov(rails4対応してるのかな?)とかはまた後で入れる。
どうせ今入れてうまくいった気になってもDBがからんできたら、あれ?ってなるだろうし。

いろいろ端折ってるので中身をもっと知りたい場合は、
tnantoka/konnyaku · GitHub
からどうぞ。

WEB+DB PRESS Vol.73

Hello, Rails 4

そういえば、多言語ブログ(※)を書くニーズがあったので、それを作ってみることにする。
ブログはRailsにとってhello, worldの代表例だからちょうどいい。

Refinery CMS でできるっぽいけど、単にブログ書きたいという要件に対しては高機能すぎる…。野菜切りたいって言ってるのに日本刀渡された的な。

というわけでまずはScaffold動かすところまで試してみる。
(それなりに時間かかったので、近々試してみる予定の人は、なんかの作業の裏でインストールだけしておくと良いのではないかと思います。)

環境はOS X 10.7.5です。

Ruby 2.0 インストール

時代はrbenvと言われて久しいけど、特に困ってないので未だにrvm。

キーワード引数試してみる。

いけてる。

Rails 4 インストール

コマンド一発だけどとても時間かかる。
(何かエラーかと思って途中何回か止めちゃったよ…)

Scaffolding

プロジェクト作成。

Spring入れとく。

適当にmessagesを作る。

動いた。

さて、次から実際のブログ作りに取りかかろう。

WEB+DB PRESS Vol.73

1 2  Scroll to top