これからも Volt 推しでいきます。 「Volt を試してみたいけど、例やチュートリアルが少ない」という意見をしばしば聞きます。確かに、公式ドキュメントのチュートリアルはホントに触りだけで、モデルすらほとんど出てこない内容です。 そこで、モデル側の実装やユーザー機構にも少し触れることができる「 Volt を使って10分でリアルタイムチャットアプリケーションを作る 」というチュートリアルを公開します。「10分」というのはとりあえず何かこういうフレーズがあった方がキャッチーかな、と思って適当に付けただけなので、本当に10分でできる保証はどこにもないですすいません。 それと、「公開します」って言っても、実はこのチュートリアルは以下のスクリーンキャストの内容をほぼそのまま作っていますので、英語で全然 OK ってことなら、そっちを見てもらった方が動画なのでわかりやすいかもしれません。 Build a Realtime Chat App with Ruby and Volt 事前準備 このチュートリアルでは、事前に Volt と MongoDB をインストールしておく必要があります。Volt…

READ MORE >>



Rails の scaffold やらで作ってくれるビューに「Destroy」リンクありますよね。あれ、削除の確認のために JavaScript で のモーダルダイアログまで出してくれてなかなか親切なヤツなんですけど、せっかくだから見映えももうちょっといい感じにしたい。 ついでに、Github でリポジトリを消すときとかのように、誤って削除することがないようにユーザーに対して入力も求めたい。 自分で書こうとしたんですが、その前に探したらいいのがありました。探してよかった。 Data-Confirm Modal という gem でございます。 Data-Confirm Modal Data-Confirm Modal は Rails の jquery-ujs をフックして、表示されるモーダルダイアログを Bootstrap のやつと差し替えてくれるライブラリです。 Bootstrap を使うのでそれが制限と言えば制限ですが、簡っ単にダイアログをいい感じにできます。もちろん、やりたかった GitHub…

READ MORE >>



作っている Rails エンジンの設定を外からやりたくて、どうやるのがいいのかな?と調べてみました。要は、エンジンの挙動をコントロールするための変数なりをエンジンに用意しておいて、マウントする側の親アプリケーションから値を設定したいということですね。 RailsGuides に書いてある方法 RailsGuides のエンジンチュートリアル で紹介されているのは、エンジンのモジュールに を設定しておいて、親アプリからそのアクセサを介してモジュール変数 (モジュールのクラス変数というべき?) にその値を設定するという方法です。 lib/myengine.rb (エンジン側) config/initializers/myengine.rb…

READ MORE >>



Mac のシスログを読もうとしたら gzip で圧縮されてて、その内容を読みたかったときの話です。 最近の Linux だったら とか とかでそのまま を余裕で読めちゃうし、そもそも Mac で圧縮されたログファイルを読みたかったことが今まで一度もなかったようで困ってしまいました。 結論 、 を使う。以上。 ほんとに知りませんでした。今まで偉そうにしててどうもすみません。 なるほどなるほどー コマンド兄弟には、他にもこういう人たちがいるようです。 そして、 については、元々は Linux でも、 で圧縮された ファイルを読むために使う で圧縮された ファイルを読むために使う というように分かれていたようなのですが、現在は で も読めるようになっているのだそうです。ncompress パッケージがなくなって、gzip が compress のバックエンドに使われるようになって変わったのかな…まあ便利に使えるってことで、経緯なんてぶっちゃけ何でもいいんですけどね!

READ MORE >>



Heroku の推奨する Ruby Web サーバーが Puma に変更になったとのアナウンスがありました。 Puma is Now the Recommended Ruby Webserver もともと、何となく「1 Dyno で動かすなら Unicorn より Puma の方がいいんじゃないのかな?」とか思って Puma を好んでいました (ただ、ぶっちゃけロクに調べておらず、この考えはたぶん間違ってたと思う)。 が、Rails アプリが 1 つあって、その Web サーバーが Unicorn だったのでこの機会に変えました。 一応ここにその手順を書いておきますが、 Deploying Rails Applications with the Puma Web Server を読んだ方がずっと良いでしょう… Migrate from Unicorn to Puma Heroku の推奨する構成にしたがって変更するだけならあっという間です。 Gemfile に Puma を追加する に Puma を追加します。同時に、不要になる Unicorn…

READ MORE >>



ブログのようなアプリケーションを作ろうとしていて、フォームのテキストエリアをリッチテキストエディタ化するために tinymce-rails を使おうとしています。当然そこで入力した内容は HTML になるので、表示するときには などでエスケープされないようにしないといけません。 が、やっぱり raw html をそのまま出すのは怖いので の メソッド を使ってみることにしました。 メソッドはホワイトリスト方式で動作し、許可されているタグの要素や属性以外を削除します。デフォルトでも とかを掃除してくれたので、そのまま使ってもいいかと思ったんですが、許可するタグと要素を明示的に設定しました。 ヘルパーを呼び出すときに指定する ヘルパーを呼び出すときにはこんな感じで指定します。 アプリケーションのデフォルト設定として指定する にこんな感じで。 カスタム Scrubber なんかも定義できるみたいですが、とりあえず今は不要なのと、眠すぎるのでこれだけ。

READ MORE >>



Ruby 2.2 の新機能にシンボル GC というものがあります。 正直、「え、シンボルって GC されないから速いんじゃないの?なのにシンボル GC で Rails が速くなるとか話聞くけど、いったいどういうことなの?」という感じでサッパリ理解できてなかったのですが、その辺りの疑問に対してまとめられている記事がありました。 Symbol GC in Ruby 2.2 とても分かりやすく素晴らしい記事だと感じたので、許可をもらって以下に日本語訳を公開します。 Symbol GC in Ruby 2.2 シンボル GC ってなに?それって気にしなくちゃいけないことなの? リリースされたばかりの Ruby 2.2 の大きな新機能として「インクリメンタル GC」が挙げられますが、もう1つの注目すべき新機能が、この「 シンボル GC 」 です。 もしあなたがこれまで Ruby の世界で過ごしてきたのならば、きっと「シンボル DoS」という言葉を聞いたことがあるのではないでしょうか。「シンボル DoS…

READ MORE >>



Rails 4.2 を PostgreSQL を使って Elastic Beanstalk にセットアップする (1) の続きです。 今回は DB の設定をしていきます。が、その前に 環境変数をセットします。 SECRET KEY BASE Rails はデフォルトでセッションの情報を「すべて」クライアントの Cookie に格納するため、それを暗号化するための秘密鍵が必要です。当然これは秘密にする必要があるため、Rails 4.1 からは、production 環境ではそれを環境変数 に設定して、 で読み込むようになっています。(確か、Rails 4.0 のチュートリアルでは、 が無かったので、initializer で動的に生成していました。) したがって、環境変数 を設定しておかないとエラーになります。 Elastic Beanstalk での環境変数の設定は Web の管理コンソールから行います。 Configuration -> Software Configuration -> Environment Properties…

READ MORE >>



これまで Rails アプリケーションの公開は Heroku への楽ちんデプロイしかしたことがなかったので、AWS を使ってみることにしました。でもやっぱりサービスを自分で組み合わせて構築するのは大変そうだったので、結局、PaaS として使える Elastic Beanstalk を利用することにしました。 最終的には、ELB のロードバランシングと RDS のレプリケーションによる冗長化と、セッションストアに ElastiCache や DynamoDB を使った動作確認までしたいと思ってますが、とりあえずは普通に動かすとこまで。長いので何回かに分けて書きます。ちなみに Ruby のバージョンは 2.1.5 にしました。 Elastic Beanstalk CLI のインストール Elastic Beanstalk は Web の管理コンソールから管理しますが、CLI も用意されています。しかし、AWS のドキュメントでも古いのから新しいのまで色々な情報が書いてあって、正直、いきなりここで何を使えばいいのかがわからず苦戦しました。結局、Homebrew…

READ MORE >>



Objective-C の Category にあたる機能は Swift では Extension として提供されています。 Objective-C の Category には、 のように、 とつけるのが一般的でした。では、Swift の Extension の場合はどんなファイル名にするのがいいんだろう? 結論 公式なガイドラインはないようですが、Objective-C の Category と同じ。つまり、 のようにするのが良いようです。 Most examples I have seen mimic the Objective-C approach. The example extension above would be: The advantages are that the naming convention makes it easy to understand that it is an extension, and which Class is being extended. What's the best practice for naming Swift…

READ MORE >>