OpalでJavaScriptの要らない開発

は、無理ですけど。
Best Casino Sites in UK - Play at Best Online Casinos in 2018!
このコードトランスレータによって、それに近いことは可能になります。
導入や実際の使い方はドキュメントや解説記事に任せるとして、1週間ほど使ってみて分かったことをいくつか。

ちょっとした非互換性

$ ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin10.8.0]
$ irb
irb(main):001:0> def foo
irb(main):002:1>   5.times do |i|
irb(main):003:2*     return 'foo' if i > 3
irb(main):004:2>   end
irb(main):005:1>   
irb(main):006:1*   return 'bar'
irb(main):007:1> end
=> nil
irb(main):008:0> puts foo
foo
=> nil
$ cat app/assets/javascripts/foo.js.rb 
def foo
  5.times do |i|
    return 'foo' if i > 3
  end
  
  return 'bar'
end
puts foo

JSコンソールの出力

bar

ブロック中でreturnした場合の結果が違う

ファイル分割

foo.js.rb

def foo
  puts 'foo'
end

bar.js.rb

puts foo

JSコンソール

foo

定義したモジュール、クラス、メソッド等は別のファイルに書いたコードからでも使える。
rubyコード中のrequireは意味がないようだ。

JSからRubyで書いた処理を使う

fooというメソッドをトップレベルで定義した場合、

Opal.top.foo()

でアクセス可能。

module Foo
  def self.bar
  end
end

とした場合は

Opal.Foo.bar()

で触れる。

リリースしました。

本日、読書びよりの新版"Hibarigaoka-hanayashiki"をリリースしました。
主な変更点はデザイン・画面の全面刷新です。
今回の改修ではメディアクエリを活用して、画面サイズに応じて最適な表示を行うようにしてあり、スマートフォンタブレットでも利用できるようになってます。

PC


画面幅に応じてカラム数が変動します。

スマートフォン

http://p.twimg.com/AX5suEoCQAA06N8.png
小型画面のためにいくつかの要素を表示しません。

限定公開機能を考える。

カケラの樹には限定公開機能が実装されており、非公開文書を特定のユーザのみに公開することが可能になってます。
概要としては、

  • 限定公開したい相手のOpenID URLを設定
  • 相手は自らのOpenIDにてカケラの樹にログインし、文書を開く

この機能はサービスの初期から実装されているものですが、以下のような設計上の問題を抱えています。

  • 相手のOpenID URLが必要
    • はてなライブドアのように外部サービスのユーザIDから簡単に作成できるならまだ良いが、GoogleのもののようにランダムなURLを使っている場合、URLを知ること自体が難しい
  • 閲覧時にログインが必要
    • 外部認証ではあるが、初回ログイン時の操作が必要となる。
  • 許可リストの視認性が悪い
    • ランダムなURLの場合に特に問題


置き換え候補としては、以下の二通りが考えられます。

登録ユーザから許可するユーザを選ぶ

メリットとしては、

  • 対象ユーザを検索などで探し出し、グラフィカルに追加可能で操作性がよい

デメリットとして、

  • ユーザ検索機能などを新規に構築する必要がある
  • 未登録のユーザに公開したい場合、あらかじめユーザ登録をしてもらった上で対象にする必要がある

ランダムなURLを使用する

メリット

  • 構造が非常に簡単
  • 使用方法も簡単
  • 閲覧の際にユーザ登録が不要

デメリット

  • セキュリティ的には弱い


後者への置き換えを軸に検討中です。

あと少しでリリース。

現在進行中の読書びよりの再構築プロジェクトですが、開発がほぼ完了しました。
残タスクは以下の通り。

  • 最終動作テスト
  • 脆弱性検査
  • 移行計画作成
  • ステージング環境での移行リハーサル
  • 本番環境移行メンテナンス

順調にいけば、遅くとも2月の半ばまでにはリリース出来る予定です。今回のプロジェクトは今後の保守運用を容易にするための再構築プロジェクトなのでユーザ側への変化は少ないですが、UIのブラッシュアップや作品詳細ページでの関連作品表示など、いくつかの新機能が投入されます。

Rails3系でセッション有効期限の設定。

3系の資料が見あたらなかったので。


config/initializers/session_store.rb

Kasuganomichi::Application.config.session_store :cookie_store, 
  :key => '_kasuganomichi_session',
  :expire_after => 2.weeks

これで、2週間有効のセッションになります。
2系だと、

ActionController::Base.session_options[:expire_after] = 2.weeks

と渡していた値をRails.application.config.session_storeに渡してやればOK。

参考

The session_store was configured in ActionController::Base.session, and that is now moved to Rails.application.config.session_store. Defaults are set up in config/initializers/session_store.rb.

Ruby on Rails 3.0 Release Notes — Ruby on Rails Guides

追記

requestに設定してもいいそうです。
Rails3で困っちゃった事リスト - すがブロ
これだと動的にセッション期限を変更できそうですね。

Kasuganomichiプロジェクトで得ようとするもの。

現在アクティブに進行中のプロジェクト、Kasuganomichiで行いたいことはこれ。

  • Rails 3による開発方法の習得
  • Twitter API利用方法の習得
  • 新共通デザインのWebアプリケーションへの適用実験
  • UIの品質向上

サービス提供、と言う目的の他に以上のような練習、実験を組み合わせて開発中です。