Ruby

パーフェクト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かかってて​悲しいです。

 

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

GemfileからSpecial Thanksページを生成するgem「arigato」と、それをRailsに簡単に組み込むengine「arigato_rails」を作った

前々からいつかやりたいと思っていた、gem作りに挑戦してみました。
試行錯誤のうえ、できたのがこちら。

Arigato, Arigato_Rails

Railsならbundleするだけで以下のようなページが生成されます。
Special Thanks

先日公開したKonnyakuにも組み込む予定。

なぜ作ったか

お世話になってるオープンソースプロダクトへのせめてのもの感謝として、積極的にAttributionするように心がけています。

いつもは、Footerに並べることが多いんですが、それだとどうしてもスペースや保守の限界があって、主要なものだけになってしまいます。

そこで目を付けたのがGemfile。Rubyならまさにこれがお世話になったリストだから、この情報を使ってスペシャルサンクスページを自動生成しちゃえばいいじゃん、と考えました。

 

はじめてのGem

の2つが参考になりました。

あとはOreThorのコードやSpecも勉強になりました。
また、Gemfileのパースについては、Bundler内のDSLというクラスを使わせてもらいました。

 

はじめてのEngine (Plugin)

あたりが勉強になりました。

また、同じ種類(bundleしたら画面が増える系)のgemということで、
schneems/sextant · GitHub
のコードを参考にさせてもらいました。

 

まとめ

今まで敷居が高いと思い込んでいましたが、単純なコマンドやプラグインなら思ったより簡単に出来るということがわかりました。これから、Gem化できそうなものがあれば積極的に作っていこうと思います。
とりあえず、arigato_podsは作りたい。

あとちゃんと出したものを保守する。テストも書く。

それでは、良い週末を。

oreでgemを作る

ちょっとgemを作ってみたいので調べたメモ。
最近は、

で作るのがモダンらしいことはわかった。

けど、なんか日本語情報が多すぎてわーってなっちゃった。

bundle gemでも十分便利なんだけど、oreってやつ使えばもっと便利にwrapしてくれてるらしい。
これは日本語情報が 今gemを作るなら bundle gem より ore gem – Hatena::Blog::toshiwo ぐらいしか見つからなくて混乱しなかったので、これを使ってみることにする。(どんな理由…)

まずはore(mineコマンド)を入れる。

helloコマンドでhelloと表示するgemを作ってみる。

gemをbuildして(ローカルで)インストールしてみる。

rake releaseとかすればrubygems.orgにも登録できるんだとか。超簡単ですね。

Ruby で作る、簡単 CLI ツールのススメ #Ruby #開発環境 #AdventCalendar – Qiita によるとThorってやつ使うとコマンドを楽に作れるらしいので、試しになんか作って公開するつもり。

メモ終わり。

ruby-gmailでRails3からサクッとgmail受信

ruby-gmailなんて便利なgemがあるんですね、全然知らなかった。
いままでnet/imapで頑張ってた時間よカムバック…orz

ruby-gmailを使ってRubyからGmailのメールを受信して本文を取得 – Shoken OpenSource Society
で知りました。参考になる情報ありがとうございます!

こちらの記事は生Rubyの話ですが、当然Railsでも使えます。
そして僕らにはBundlerがあるのでもっと楽できるのです。

というわけで試してみました。

上の記事を参考に以下の様なバッチスクリプトを書きます。

あとは、runnerで実行するだけです。

これだけで、log/development.logに

みたいな出力が並びます。
超お手軽ですね!

今度メール受信する要件があったら本格的に使ってみようと思います。

それでは。

RubyのObject#tapを知らなかった…。

RubyMotionのサンプルコード呼んでて、

みたいなコードがあったんだけど意味がわからなかった。
いや、意味は予想つくんだけど、 tapってなんやねんって。

iOSのAPIにはそんなメソッドないし、てっきりRubyMotionの便利機能なのかなーとか思ってたら、
なんとRuby(Object)のメソッドだった。

全然知らなかった…。

tapかわいいよtap – (rubikitch loves (Emacs Ruby CUI Books))

結局何なのかというと、「そのオブジェクト自身をブロックに渡して実行して、その後自分自身を返す」メソッドらしい。
単純な例だとこんな感じ。

その他の利用例がtap #Ruby – Qiitaにまとまってた。

ふむふむ、これは便利ねー。
RubyMotionのコードではinitで返って来たオブジェクトのtapを呼んで、
ブロック内で初期化して、その結果を変数に代入してたわけね。

納得。

 Scroll to top