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 の後方互換性が保てないかもしれないので,明日はもうコンパイルできないかもしれません.とのこと.
  • 拡張の仕方
    • 普通に Ruby で書く
    • Java Class も呼べる
    • Duby で書く
    • 型修飾ができる Ruby
    • コンパイラ型
      • 手軽に書けて,バイトコードに変換できる.
      • 実行速度が速い
    • Hash リテラルっぽい書き方で型を指定できる.
    • JRuby の拡張機能を書く言語?
def foo(str)
  {str => :string, return => :integer}
  puts str
  return str.to_i
end
  • Java で書く
    • 速い
    • が,面倒
    • jar パッケージ化できる
  • JRuby には
    • JRuby ソースコード
    • Java SE 5.0
  • Java クラスと Ruby クラス
    • クラス/メソッドの可視性
    • public/protected/private の扱い
    • オーバーロード
    • Ruby にはない
    • 引数の数で同名メソッドを複数定義できる.あと型とかでも.
    • オープンクラス
    • 既に定義したクラスにメソッドや変数などを追記するには
  • Java で書くときに必要なこと
    • Memory Allocation
    • JRuby の Ruby ランタイムにクラスやモジュールを登録する
    • 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 を拡張しよう
    • メモリアロケーション
    • JRuby の Ruby ランタイムにオブジェクトを登録する感じ
    • アノテーション
    • 引数の数や特異メソッドなどの注釈をつける
    • jar に固める

##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 でリビジョン番号のようなハッシュで管理している

###遊びの人から仕事の人へ

  • Subversion から持ってくる
% 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
    • 特定のディレクトリだけ任意の brance に戻す・変える
  • master 以外の branch で,git rebase master
    • master のコミットを全て適用した後に,その branch のコミットを適用する
  • git は奥が深い

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

##まとめ

  • KPT はHPを参照

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

 
comments powered by Disqus