RegionalRubyKaigi レポート (40) 岡山 Ruby 会議 02

RegionalRubyKaigi レポート岡山 Ruby 会議 02

開催概要

: title.jpg

開催日
2013 年 07 月 06 日 (土) 10:00 〜 17:30
開催場所
岡山県立大学 学部共通棟(東) 8901 室
主催
岡山 Ruby 会議 02 実行委員会
後援
日本 Ruby の会, 岡山 Ruby / Ruby on Rails 勉強会
公式ページ
http://regional.rubykaigi.org/okayama02
公式ハッシュタグ
#okark02

はじめに

今年も無事開催することが出来ました。昨年は午後だけのイベントでしたが今年は午前からの開始でボリュームアップしての開催です。 今回のテーマは「日常」。普段から Ruby をどう使っているのか、どんな工夫をしているのかを感じていただければと思います。

一般講演

私と Ruby の付き合い方

小西雅也 (@ore_public)

: IMGP4902.JPG

岡山 Ruby 会議の最初のセッションは Okayama.rb を主催し、るびま編集者としても活躍されている小西雅也さんです。「私と Ruby の付き合い方」というタイトルで、普段どのようなツールや開発環境を使って Ruby を楽しんでいるかを語っていただきました。

パソコン
普段は MacBookAir を使っているそうです。Cocoa アプリケーションが Emacs 風キーバインドになっているので使いやすいそうです。また、サウンドやカメラの設定上のトラブルが少なくハードウェアに悩まないこともポイントが高いそうです。
ターミナルとシェル
ターミナルは iTerm2 上で tmux を動かしているそうです。tmux は複数の画面を切り替えて使うことができる仮想ターミナルソフトですが iTerm2 で使用するとマウスでのスクロールやタブの切替に対応しており、標準のターミナルより便利に使用できます。コマンド履歴検索機能が強力なのでシェルは zsh を利用しているとのことです。行の右側に ruby のバージョンと git のブランチ名が出るように設定していました。
RVM
Ruby のバージョン切り替えツールは、コンパイルに必要なパッケージも引っ張ってきてくれる RVM が気に入っているそうです。流行りの rbenv はソースから自分でコンパイルした Ruby を切り替えたりする用途に使っているとのことです。用途ごとにツールを使い分ける良い例だと思いました。
エディタ
色々設定すれば vim や emacs は便利に使えますが、Sublime Text はデフォルトでの配色や設定がかなり良くすぐに使えるとのことです。また IDE では RubyMine のコード補完やジャンプが充実していて cucumber の step 定義や ActiveRecord の動的メソッドにまで飛んでいってくれるそうです。初心者には参考になる情報だったのではないでしょうか。
デプロイ先
株式会社 paperboy&co. が運営している sqale に趣味で作成したサーバー監視サービスをデプロイしているそうです。git に push するだけでデプロイしてくれるので便利とのことです。AWS は簡単にディスクイメージのバックアップを取って実験でききるのが魅力とのことでした。IaaS や PaaS サービスは実際使ってみないと細かい操作性が分からないのでこれからサービスを始めようと思っている人には良い情報だったと思います。

Jenkins で行う並列テスト

山本和久 (@kazuhisa1976)

: IMGP4921.JPG

前回の岡山 Ruby 会議に続いて、テストについてのお話を聞かせてくれる株式会社リゾームの山本さんの講演です。

山本さんは 2011 年 7 月に開催された RubyKaigi 2011 に参加してテストに対する意識が高くなり、担当しているプロジェクトに自動テスト環境を導入して開発を行っていました。しかし、プロジェクトが進行するにつれてテストコードが膨らんでしまい、テストに時間がかかるようになってしまいました。

「テストが遅いので、ローカルのマシンでテストを行うと開発の妨げになる……」。

山本さんはテストが開発の妨げになることを防ぐために、次のことを始めたと話しました。

  • parallel_tests の利用1
  • Jenkins をインストールしたテスト用マシンでのテストの実行

これでしばらくは快適に開発が行えるようになりました。しかし、さらにプロジェクトが進行するとテストコードがもっと膨らんで、またもテストに時間がかかるようになりました。そこで、山本さんは複数マシンで並列にテストを実行することを考えました。Jenkins で並列にテストを実行する運用のために、次のことをしっかりと決めておかないといけないと話しました。

  • Jenkins のビルドパイプライン
  • テストコードの分割方法
  • 開発用ブランチからリリース用ブランチに push するルール

Jenkins のビルドパイプラインについてはデモ画面を見せながら、山本さんが取り組んできたことをわかりやすく説明しました。また「全てのテストが同時に終わるようにテストコードを分割する」「全てのテストが通っていないとリリース用ブランチに push できないようにする」と並列にテストを行うときに大事になる考えを話しました。

問題に遭遇するたびに改善策を探していき、「快適に開発が行えるようにしたい」という想いが伝わってくるお話でした。Ajax のタイムラグで時々失敗してしまうテストがある問題や、複数のテストが同時に実行されてときに結果が混ざって見にくくなってしまう問題が残っているので、今後はそれらを改善したいと話しました。

私と Ruby の3年間

行森奈雄 (@sutorada)

: IMGP4942.JPG

「Ruby を知って、人生が変わった」。

そんな発言で場を沸かせた、専門学校ビーマックス学生の行森さんの講演です。

行森さんは中学生の頃に学校で Linux を触っているところを先生に見つかり、「中高生 Ruby プログラミング講座」というイベントに出てみるように勧められ、Ruby に興味を持つようになりました。それからは東京のイベントで講演をしたり、オープンスクールでプログラミング講座を開いたりと、活発に行動していたそうです。オープンスクールでは四則演算のプログラムを作る講座を開いたり、アルゴリズムについての話したり、ライブコーディングをしたり、どうすれば参加者がプログラミングに興味を持ってくれるのか考えて教えてみましたが、思うようにいかないことが多かったそうです。最近は「”まつもとさん”と言う日本人が作ったプログラミング言語だよ」と Ruby について簡単な説明をして、自分で作ったゲームを遊んでもらう方法がうまくいっていると話しました。また、このような活動を続けているうちに、家族のコンピュータに対する見方が良くなったそうです。Ruby で「日常」を変えようとしている姿は、参加者たちに大きな印象を残したでしょう。

学校で長期休暇を楽しく過ごせるアプリを作る課題が出されて、Ruby でゲームを作ろうと考えていたそうですが、課題で使用する言語が Java に決められてしまったそうです。「岡山 Ruby 会議で Ruby のことを話してきた」と教授に熱意を伝えて、「日常」で Ruby が使える機会を増やしていただきたいと思います。

招待講演

Rubyist によるアジャイル開発

川端光義 (@agilekawabata)

: IMGP4959.JPG

遠路、大阪から来ていただきました。株式会社アジャイルウェアで受託開発をされている川端さんの発表です。 川端さんは元々 Java エンジニアで、アジャイル開発を実践、その経験から書籍の執筆もされたそうです。2

そして使う言語が Java から Ruby に変わったときに衝撃を受け、自分はプログラマとしてまだまだひよっこだと感じたそうです。 そんな Ruby で受託開発を始めて、2012 年に株式会社アジャイルウェアを設立。 川端さん自身はここ 1 年くらいプログラミングをしておらず、経営業務と営業がメインとの事です。 本日は、Rubyist と一緒に仕事をしたというお話をしていただきました。

開発事例の紹介では、いくつかのプロジェクトの事例を発表されたのですが、どのプロジェクトも競合が居るなかで受注を獲得できた決め手は短納期や、低コストだったそうです。Ruby による生産性の高い開発が武器になっているんだなと感じました。

また、開発の生産性が高まると色々な変化が出たそうです。 ドキュメントをほとんど、納品物としても作らくなったとのことです。ドキュメントを作成・修正して意識合わせするよりもプログラムを作成・修正して意識合わせする方が早くなり、プログラミングが要件定義そのものとなったとのことです。 そしてこのようなスタイルで開発を進めているので要件を細かく伝えなくても良くなるようになったそうです。

次にテスト駆動開発はできないというお話もしていただきました。テスト駆動しようと思うと、要件が最初にある程度決まってないと出来ないのですが、細かい要件を聞かずにソフトウェアを作りながらすすめるため、頻繁に変更も発生することからテストを最初に書いて開発するという流れにならないとのことです。

発表後にもたくさんの方が質問されており、Ruby でのアジャイル開発の実際の事例が参考になったかたが多いのではと感じました。

Rails アプリのセキュリティ対策入門

大垣靖男 (@yohgaki)

: IMGP5018.JPG

PHP 界で有名な大垣さんがなんと岡山 Ruby 会議に登場です。セキュリティの専門家でもある大垣さんに Rails アプリのセキュリティ対策について語って頂きました。

まずはじめに、Rails に限らない一般的な IT セキュリティのお話をして頂きました。 IT セキュリティの 3 要素として機密性・完全性・可用性の 3 つがあげられます。

よくある勘違いとして「セキュリティは完璧でなければならない」という意見がありますが、リスク管理を行い許容できるレベルまでの対策を行うことが大切とのことです。そのための指標として法律や標準、ベストプラクティスにならうことが重要です。

Rails アプリのセキュリティ

Rails4 から採用された仕組みとして Strong Parameter があります。Controller でバリデーション3を行うことで、Model よりも入力に近い場所でチェックを行うことが可能となりました。これは Model でのバリデーションと組み合わせて使用することで「多重のセキュリティ・フェイルセーフ」になりより強固なアプリケーションを構築することができます。

JavaScript インジェクション

クロスサイトスクリプティングの対策になります。 JavaScript インジェクションは侵入経路が多岐にわたる上、クライアントで実行されると全くログに残らないため非常に厄介です。基本的には Rails 標準の Helper を使うことが大切とのことです。

CSRF とセッション

Rails4 も Rails3 と同様の CSRF 対策が施されています。ただおかしなリクエストが来た時の挙動が変更になっているので注意が必要とのことです。

またセッション ID はログイン後に reset_session でリセットすることが望ましいそうです。

必ず参照して欲しい資料

Rails で Web アプリケーションを作る上で次のサイトを必ず参照して欲しいとのことです。

LT

一般講演の終了後に、希望者が LT を行う時間が設けられました。今回の岡山 Ruby 会議では 9 名の方が発表されました。

弊社とまつもとさんの関係とか地方で Ruby の仕事を選択していくということ

山本由佳里 (@rikayu_y)

倉敷市で仕事をされている山本由佳里さんは、島根県で生まれ育った父の影響で島根県が推進しているプログラミング言語である Ruby に興味を持つようになり、書籍などで勉強されていたそうです。また、父が役員をしている株式会社システム工房エムがまつもとさんが勤務されているネットワーク応用通信研究所(NaCl)と関わりがあるそうで、Ruby により興味が持てるようになったそうです。仕事では Java を使った開発を依頼されて、「Ruby を使いたい!」と思いがあっても Ruby を使えない場面が多いそうですが、「Ruby が使いたいならば Ruby を使える仕事を待つのではなく、自分で積極的に Ruby を使っていくのが良い。」と話されました。

Ruby/PureImage

@keisuke_n

画像処理を行うライブラリである PureImage について @keisuke_n さんが発表されました。PureImage には文字やグラフの描画をはじめとする様々な機能がありますが、Rubyist にとって何よりも嬉しいと思うことは Ruby の標準ライブラリだけで作られていることです。「Ruby の標準ライブラリは適度にパフォーマンスチューニングされているので、標準ライブラリだけで作れば早い処理ができるようになる。」という考えを話し、標準ライブラリだけを使ったピュアなコードを書く方法を参加者たちに勧められました。

関西 Ruby 会議方面から来ました!

@muryoimpl

2013年8月31日に大阪で関西 Ruby 会議 05 が開催されます。@muryoimpl さんは招待講演者として Rubyist として活躍している方を呼んだことや「survive」という開催テーマについて話し、参加者たちが関西 Ruby 会議 05 に興味を持つように、楽しく宣伝されました。

lambda_driver.gem で加速する関数型プログラミング

@razon

Ruby の Proc オブジェクトで関数合成や引数の入れ替えをできるようにする lambda_driver という gem4 を @razon さんが紹介されました。関数型プログラミングが好きな Rubyist は多いので、この gem に興味を持った方は多いのではないでしょうか。

mikutter を導入しよう

@kasoku_ksk

mikutter という Ruby で書かれた Twitter クライアントを @kasoku_ksk さんが紹介されました。@kasoku_ksk さんは 「プラグインが自由に作れること」や「Ruby のコードを実行できること」などの mikutter の利点を話し、多くの人に使ってもらいたいという気持ちをアピールされました。

レガシーブラウザ対応について

@LuckOfWise

レガシーブラウザに対応させるときの苦労を @LuckOfWise さんが発表されました。@LuckOfWise さんが関わっているWebアプリケーションでは、レガシーブラウザ専用のWebページを用意し、コードを分割することでレガシーブラウザに対応させたそうです。しかし、メンテナンスの手間が増えてしまうので良い方法とも言えません。@LuckOfWise さんは「レガシーブラウザ対応は断りましょう。」と話されました。

Okayama.rb #11 に参加してきた!

イワタさん (@qt_luigi)

Okayama.rb に初めて参加し、そこで感じた楽しさをイワタさんが発表されました。Okayama.rb はプログラミングが好きな人たちが岡山市のファミリーレストランに集まってワイワイ話したり、コーディングをしたりするコミュニティです。イワタさんは Ruby 初心者ですが、Ruby の開発環境を整えるところから話を聞くことができたそうなので、「初心者でも楽しめます。」と話されました。

Rubyist のための Kotlin 紹介

@patorash

Kotlin という JetBrains 社が開発したプログラミング言語を @patorash さんが紹介されました。Kotlin は Java の思想をベースにして作られた言語ですが、Rubyist でも読み易いコードが書けるそうです。

FizzBuzz で学ぶ Ruby

小西雅也 (@ore_public)

FizzBuzz を実装する中で Ruby の機能を学べると小西さんが発表されました。小西さんは Fixnum クラスに新しいメソッドを追加して FizzBuzz を実装する方法(オープンクラスによる実装方法)や、Ruby 2.0 から加わった Module#refine と main.using を使う方法を紹介されました。

懇親会

昨年と同じ Ryoutei 座スタジアムでの懇親会で、会場のプロジェクタを活かしてのLT大会を開催しました。 飛び入り参加OKのLT大会で、大変盛り上がった懇親会となりました。


  1. https://github.com/grosser/parallel_tests 

  2. バグがないプログラムのつくり方 Java と Eclipse で学ぶ TDD テスト駆動開発 

  3. ここでのバリデーションとは Rails における validates メソッドが行うようなバリデーションに限らず、より広い意味の「入力チェック」の事を指しています。 

  4. http://yuroyoro.github.io/lambda_driver/