Rails勉強会@東京第32回に参加してきた.

今回はお盆休み中ということもあってか,20名弱と少ない参加人数でした.そう言う私は風邪気味で,ちょっとログを追えていない部分があります(;´Д`).

セッションネタ

  • yuguiさんの Redmine RESTful 化
    • REST の話も含める
  • Java を使って Ruby の Class を書く方法
  • git を maiha さんに教える

セッションの割り振りの時,どうせなら3つともやってしまおうと言うことになり,1時間15分 x 3という時間割になりました.

時間割

  • 13:15〜14:30
  • 14:40〜15:55
  • 16:05〜17:20

Redmine RESTful 化

  • Trac に対する利点は?
    • 複数のプロジェクトを管理できる
    • 親子関係を1階層だけだが作れる
    • 複雑な Role を作成することができる
    • プラグインがある
REST の話
  • Web サービスとは
    • RESTful
    • RPC(SOAP)
      • ある URI に Method を含む内容を POST する
    • hybrid(XML-RPC)
  • RESTfulとは(高橋さん)
  • Web は世界初の大規模分散アーキテクチャ
  • REST はアーキテクチャスタイル
  • HTTP Method で PUT/DELETE とか言ってるのは,原理主義者にとっては異端
  • 原論文を見ないといけない?
  • GET URL が重要
    • URL にリソースに関する全ての情報が入っている
      • cachable(キャッシュ可能)なリソース
    • 認証はクライアントサイドで毎回認証情報をサーバに送信する
      • RESTful だとサーバは stateless なのでセッション管理はクライアントでやるべき.
  • Webサービスでユーザ個別の Presentation なのは,「ようこそ**さん」とかユーザへのメッセージとか
    • この部分だけを更新するような Rich Client(Flash/Javascript)があれば,分離できる.
      • 共通部分は cachable
      • ユーザ個別の部分は認証込みのリクエストを出す.
  • 認証は SSL-Basic認証が最強?
    • DNS Poisoning 問題に波及
  • どの部分をスケールして欲しいかで,認証・キャッシュなどを使い分ける
  • 日本では確認画面が問題
    • 確認画面は RESTful ?
      • Lock 機構?
  • HTTP Status
    • 201 Created は新しく URI (リソース) が生成されたときに返す
    • Updated は 204 (no content)
  • Ruby Authentication
  • REST をお手軽にやるには
    • RESTful Web サービス 読書会
    • 原論文
    • 山本洋平さんのブログ
    • Ricoh Lab の HP

Java を使って Ruby の Class を書く方法

  • JRuby とは
    • JavaVM で動く Ruby 実装
    • JIT,事前にコンパイル可能
    • Java の機能,ライブラリが Ruby Class のように呼び出せる.
      • Java Integration による Bridge 機能
  • 開発者
    • Charles 0 Nutter
      • 日本文化に明るい
      • ささださんにメイド喫茶に連れて行かれた.
    • Thomas E Enebo
  • JRuby を拡張したい
    • 動かしたいパッケージが C
      • openssl, RMagick4J, etc..
    • 速くしたい
  • M な方におすすめ
    • 素直に Ruby で書けば数行ですむところを,無理矢理数十行書きたい人向け
  • 今日の話は超生もの
    • コアな部分なので,開発が早いと interface の後方互換性が保てないかもしれないので,明日はもうコンパイルできないかもしれません.とのこと.
  • 拡張の仕方
def foo(str)
  {str => :string, return => :integer}
  puts str
  return str.to_i
end
    • Java で書く
      • 速い
      • が,面倒
      • jar パッケージ化できる
  • JRuby には
  • Java クラスと Ruby クラス
    • クラス/メソッドの可視性
      • public/protected/private の扱い
    • オーバーロード
      • Ruby にはない
      • 引数の数で同名メソッドを複数定義できる.あと型とかでも.
    • オープンクラス
      • 既に定義したクラスにメソッドや変数などを追記するには
  • Java で書くときに必要なこと
    • Memory Allocation
      • JRubyRuby ランタイムにクラスやモジュールを登録する
      • Ruby で言う ObjectSpace.
    • Annotation
      • Java 5から導入
        • @〜 を使って,クラス/メソッドに情報を付加する
      • javadoc/Rdoc っぽい
      • メソッドやクラスに宣言的にメタ情報を記述
    • JRuby アノテーション
      • クラス
@JRubyClass(name = "Iconv")
class IconvClass {
...
}
      • メソッド
        • 引数の数/可変長引数(required)
        • インスタンスか,特異か(meta)
        • ブロックの有無
          • ブロックを受け取らないメソッドにできる.(frame)
@JRubyMethod(name = "open", required = 2, frame = true, meta = true)
public static IRubyObject open(...){
...
}
      • モジュール
    • ロードの JRuby 拡張
require 'hogehoge'       # .class/.jar も探索する
require 'hogehoge.class'
require 'hogehoge.jar'
    • .jar をロードする
      • jarredScript
      • jar に固めた class ファイルをロードする仕組み
    • jarredScript
      • 規約指向
      • クラス名と jar ファイル名を合わせる
      • LoadService
        • JRuby が jar 内から拡張クラスを探すきっかけになる
  • まとめ : JRuby を拡張しよう

git を maiha さんに教える

まず git とは
  • 読み方?
    • ギット?ジット?
      • Matz や RailsConf 2008 ではジット
      • 今日からジット
  • git
    • SCM/VCM
    • 分散
    • DVCM
  • Subversion と git の連携
全く知らない Subversion の人に git を説明
  • Local Repository と Remote Repository
    • Local Repository が Subversion の Working Copy に対応
    • オフラインでコミットできる
  • ディレクトリかツリーか
  • git clone
    • Remote Repository から Local Repository にリポジトリをコピーする
  • リビジョン番号がない
    • SHA1 でリビジョン番号のようなハッシュで管理している
遊びの人から仕事の人へ
% git svn clone [URL]
% git svn dcommit
  • Subversion リポジトリがメインの時で,PC1/PC2で作業したい
    • PC1 で更新
    • PC2 で PC1 から pull
    • PC2 で更新
    • PC1 で PC2 から pull
  • PC2 で更新して,PC1 に push しても,PC2 の .git 配下は更新されるが,ファイルが古いまま
  • git stash
    • HEADに戻すが,最終更新状態も記録している
  • branch の処理が楽?
  • git checkout /path/to
  • master 以外の branch で,git rebase master
    • master のコミットを全て適用した後に,その branch のコミットを適用する
  • git は奥が深い

話を追えないほど展開が速かったので,あとで思い出しながら実際にやってみようと思います.

まとめ

  • KPT はHPを参照

参加人数が少なかったので3セッションになりましたが,これはいいですね.いままで「あっちも聞きたかったなぁ」と言うのが多々あったので.次回は git で有名な人が来るかもしれないらしいので,ちょっと期待.