ブログ

ryuzeeによるブログ記事。不定期更新

Rails4でスライド共有アプリを作りなおした話

RubyKaigiで寿司が出るなら行けば良かったと思ったみなさんこんにちは。

最近登壇した際に使ったスライドはSlideshareやSpeakerdeckではなく自作のスライド公開用Webサイト(https://slide.meguro.ryuzee.com/)で公開しています。 それについては以前の記事で書いた通りなのですが、最近時間がある(察してください…)ので、CakePHPで作った初期バージョンを勉強がてらRuby on Rails4で作りなおしてみました。

いままでRuby自体はChefのCookbookを書いたり、Serverspecのコードを書いたり、使い捨てプログラムを書いたりしていたのですが、初めてのRailsで「Railsを勉強しています!!」状態なのでやった内容を整理しておこうかと思います。

■初心者向けのメモ

自分が感じた初心者向けのポイントは以下のような感じです。

  • アセットパイプラインの仕掛けは先に理解しておいた方が良さそう。初めてRailsを触って一番時間を費やしてしまった…
  • とにかく設定より規約なので(という割にinitializerディレクトリの下がゴチャゴチャになりがちな気がするが)、始める前に、どんな種類のファイルをどこにおくのか整理しておく。例えば共通ライブラリ、外部からダウンロードしてきたJavaScriptなどなど
  • bundle exec rails gコマンドでファイルを自動生成していくと多数のファイルが同時に作られる。一方で自分には必要のないファイルが作られることもあるので、ファイルの生成を始める前にまずgeneratorの設定をしておくと良い。あとから不要なファイルを消すのは面倒ください。詳細はこのあたりを参照:http://qiita.com/yuutetu/items/135b1c8ab512208aebfe
  • 前項に関係するが、一度レールに乗ってしまうと後戻りが結構面倒くさいので、最初の段階である程度、どんな技術要素を使うのか、どんなgemを使うのかを設計した方が良い。特にUI系のものは継ぎ足していくと後々謎なことが起こる
  • gemはたくさんあるが、メンテナンスされていなかったり、不具合が多いものもあるので定番のものを見極める
  • もともとCakePHPで作っていたアプリの移行で、既存のschema_migrations(CakePHP用)テーブルにtypeというカラム名が使われており、Railsのマイグレーションが失敗してしまった。複数の言語で1つのDBを扱ったりするとこの手の問題がおこることがあるので注意が必要
  • ファイル数が全体的に多いので、VimでもEmacsでもなんでも構わないがキーボードでガンガン飛べるようにしておくことを強く推奨

■使っているgem

CakePHPだと使えるコンポーネントがCakeDCが作っているものくらいで、あとは頑張って作らないといけないとか、ライブラリを探す楽な方法が少ないとか切ない感じだったのですが、Rubyエコシステムすごい。とりあえずRubygemsを探せばだいたいほしいものはあるとか素晴らしい。 移植前後でコード量が1/3くらいまで減りました。使っているgemの主なものは以下のとおり。

mysql2

  • DBにMySQLを利用する場合は必須

twitter-bootstrap-rails

  • Bootstrap3を楽に導入できる。ただし最新バージョンを使うと後述のDeviseとConflictしていて一部Deviseの機能が動かなくなってしまったのでバージョンを固定している。細かい問題が色々おこる(例えばFont周り)ので敢えて使わなくても自前で管理すれば良い気がしなくもない

will_paginate / will_paginate-bootstrap

  • ページング機能を簡単につくれる。同様のものにKaminari

dotenv-rails

  • アプリケーションの設定情報をどのように管理するかはデプロイのしやすさに密接に関係がある。個人的には環境変数を使って外から値を設定できるようにするのがベストプラクティスだと考えている。このgemを使うと、アプリケーションのルートディレクトリにenvファイルがあれば、その中身を環境変数として設定して読み込んでくれる。envファイルがなければもともと設定されている環境変数を読んでくれる。開発環境ではenvファイルをおいておいて、本番では環境変数を直接読むように簡単にできる

devise / devise-bootstrap-views / devise-i18n / devise-i18n-views

  • ユーザー登録・ログイン・パスワード再発行・認証などを良きに計らってやってくれる。認証に複雑な要件がなければとにかく楽
  • 自前のカラムを追加するのもOKだが、trong Parameter関連の修正が必要。http://easyramble.com/add-field-devise-signup-form.html

php-serialization

  • これは普通の人はあまり用はないが、PHPでシリアライズされたオブジェクトを読んだり、PHP形式にシリアライスしたりできる

acts_as_commentable

  • コメント機能を簡単に追加できる
  • 詳細は、http://morizyun.github.io/blog/acts-as-taggable-on-gem-rails/
  • CakePHPのcakedc/tagsからの移行はSQLでゴリゴリやればOK

acts-as-taggable-on

  • タグ機能を簡単に追加できる

ransack

meta-tags

  • タイトルをはじめとしたメタタグの管理

aws-sdk / aws-sdk-core / aws-sdk-resources

  • 言わずと知れたAWSのSDK。最新はバージョン2系で、1系とは互換性がない。ネット上で検索すると記事が入り混じっているが、ソースの中でAWS(大文字のAWS)がある場合は1系、Aws(先頭のみ大文字)の場合は2系なので、それで区別をつける

ruby-filemagic

  • ファイルの種別を判別する。今回はアップロードされたファイルがPDFかパワーポイントであることを判別するのに利用

rmagick

  • 画像をリサイズしたりクリップしたりといった各種加工ができる定番ライブラリ

pdf-reader

  • PDFファイルのページ数などの属性を取得できる。ページ内のテキストも取得できるのだがあまり綺麗には取れないのでその部分は他のツールを使う

counter_culture

  • カウンターキャッシュ(関連するモデルの件数をレコードに保存する)を使う際にトランザクションでガードしてくれる。大規模だったりすると使うと良いかも

rails-settings-cached

  • アプリケーション内の設定情報などをDBに保存しつつキャッシュしてくれる。例えば個人設定なんかでこれを使うと良い

bootstrap3-datetimepicker-rails

  • Bootstrap3の画面で利用するDateTimePickerを簡単に導入できる

non-stupid-digest-assets

  • アセットパイプラインではファイル名の後ろに自動でハッシュが付与されるが、このgemを使うとハッシュなしのファイル名で生成できる

paperclip

  • 画像アップロード機能を簡単につくれる。アップロード先はローカルストレージだけでなく、Amazon S3やDropboxなども利用できる。最近のバージョンでようやくAWS SDK2に対応した

rspec-rails

  • どうもRailsではRSpecでテストするのが定番らしい(わりには最初からは入ってないのはなぜだ…)

factory_girl / factory_girl_rails

annotate

  • 開発時に利用する。これを使うとモデルなどのコードに関連するテーブルのスキーマ情報を挿入できる。いちいちテーブル定義表見たり、show columns from XXXをしなくて良いので効率があがる

rubocop / guard-rubocop

  • コーディング規約にしたがっているかをチェックしてくれる。設定ファイルは一杯落ちているので好みのものを拾ってくると良い
  • 設定ファイルは、https://gist.github.com/onk/38bfbd78899d892e0e83 が分かりやすかった

guard

  • こいつを起動しておくと登録されたジョブを自動でやってくれる。例えばRubocopをガンガン回せる

i18n_generators

  • 国際化対応用のファイルを自動で生成してくれる

bullet

  • N+1問題(レコード数が増えるのに連れて、投げるクエリの数が増えてしまう問題)を自動で検出してくれる。データが多くなる場合は必須
  • 見つかったあとは、Eager Loadingを使って対処すれば良い

hirb / hirb-unicode

  • Railsコンソールを見やすく整形したり色をつけたりしてくれる。Gemでインストールしたらコンソールで、Hirb.enableを実行するか、.irbrcを設定して常時有効化しておく

rails-erd

  • ER図を生成してくれる。プロジェクトの途中から参加したときとかにいいかも

rack-dev-mark

  • ブラウザでアクセスしたときに、いまの環境がdevelopmentだったらページの左上にその印を付けてくれる。開発環境だとすぐ分かるので便利

view_source_map

  • 画面が生成された際に、Partialを使って読み込んだ部分の前後に、どのパーツを読み込んでいるかのコメントを入れてくれる。デバッグに便利

better_errors

  • エラー画面をゴージャスな感じにしてくれる。デフォルトではlocalhostしか有効にならないので、仮想マシンを使っている場合はIPを追加する

database_cleaner

  • テスト実行の際にDBをクリーンアップしてくれる

capistrano / capistrano-rails / capistrano-rbenv / capistrano-bundler / capistrano3-unicorn

  • デプロイを自動化する
  • とにかくRailsプロジェクトをはじめたら最初からやるべき。というのもアセットパイプラインまわりの問題は開発環境ではわかりにくいため。なので開発環境をVagrantで用意しているのであれば、デプロイ用の擬似本番(staging)を定義しておくと良いかも
  • unicornと連携する場合、unicorn.pidの場所に注意。unicorn.rbdeploy.rbで同一のものを指している必要がある

なお、ソースは、https://github.com/ryuzee/open-slideshare-v2 においてあります。 ドッグフーディング重要ということで、自分の環境には適用しましたが、まだプロダクションレベルにはほど遠いのでそういうものと思って見るだけにしておいてください。

アジャイルコーチングやトレーニングを提供しています

株式会社アトラクタでは、アジャイル開発に取り組むチーム向けのコーチングや、認定スクラムマスター研修などの各種トレーニングを提供しています。ぜひお気軽にご相談ください。

詳細はこちら
  • スクラム実践者が知るべき97のこと
  • 著者/訳者:Gunther Verheyen / 吉羽龍太郎 原田騎郎 永瀬美穂
  • 出版社:オライリージャパン(2021-03-23)
  • 定価:¥ 2,640
  • スクラムはアジャイル開発のフレームワークですが、その実装は組織やチームのレベルに応じてさまざまです。本書はスクラムの実践において、さまざまな課題に対処してきた実践者が自らの経験や考え方を語るエッセイ集です。日本語書き下ろしコラムを追加で10本収録
  • プロダクトマネジメント ―ビルドトラップを避け顧客に価値を届ける
  • 著者/訳者:Melissa Perri / 吉羽龍太郎
  • 出版社:オライリージャパン(2020-10-26)
  • 定価:¥ 2,640
  • プロダクト開発を作った機能の数やベロシティなどのアウトプットで計測すると、ビルドトラップと呼ばれる失敗に繋がります。本書ではいかにしてビルドトラップを避けて顧客に価値を届けるかを解説しています。
  • SCRUM BOOT CAMP THE BOOK 【増補改訂版】
  • 著者/訳者:西村直人 永瀬美穂 吉羽龍太郎
  • 出版社:翔泳社(2020-05-20)
  • 定価:¥ 2,640
  • スクラム初心者に向けて基本的な考え方の解説から始まり、プロジェクトでの実際の進め方やよく起こる問題への対応法まで幅広く解説。マンガと文章のセットでスクラムを短期間で理解できます。スクラムの概要を正しく理解したい人、もう一度おさらいしたい人にオススメ。
  • みんなでアジャイル ―変化に対応できる顧客中心組織のつくりかた
  • 著者/訳者:Matt LeMay / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン(2020-3-19)
  • 定価:¥ 2,640
  • アジャイルで本当の意味での成果を出すには、開発チームだけでアジャイルに取り組むのではなく、組織全体がアジャイルになる必要があります。本書にはどうやってそれを実現するかのヒントが満載です
  • レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
  • 著者/訳者:David Scott Bernstein / 吉羽龍太郎、永瀬美穂、原田騎郎、有野雅士
  • 出版社:オライリージャパン( 2019-9-18 )
  • 定価:¥ 3,132
  • レガシーコードになってから慌てるのではなく、日々レガシーコードを作らないようにするにはどうするか。その観点で、主にエクストリームプログラミングに由来する9つのプラクティスとその背後にある原則をわかりやすく説明しています。
  • Effective DevOps ―4本柱による持続可能な組織文化の育て方
  • 著者/訳者:Jennifer Davis、Ryn Daniels / 吉羽 龍太郎、長尾高弘
  • 出版社:オライリージャパン( 2018-3-24 )
  • 定価:¥ 3,888
  • 主にDevOpsの文化的な事柄に着目し、異なるゴールを持つチームが親和性を高め、矛盾する目標のバランスを取りながら最大限の力を発揮する方法を解説します
  • ジョイ・インク 役職も部署もない全員主役のマネジメント
  • 著者/訳者:リチャード・シェリダン / 原田騎郎, 安井力, 吉羽龍太郎, 永瀬美穂, 川口恭伸
  • 出版社:翔泳社( 2016-12-20 )
  • 定価:¥ 1,944
  • 米国で何度も働きやすい職場として表彰を受けているメンローの創業者かつCEOであるリチャード・シェリダン氏が、職場に喜びをもたらす知恵や経営手法、より良い製品の作り方などを惜しみなく紹介しています
  • アジャイルコーチの道具箱 – 見える化の実例集
  • 著者/訳者:Jimmy Janlén / 原田騎郎, 吉羽龍太郎, 川口恭伸, 高江洲睦, 佐藤竜也
  • 出版社:Leanpub( 2016-04-12 )
  • 定価:$14.99
  • この本は、チームの協調とコミュニケーションを改善したり、行動を変えるための見える化の実例を集めたものです。96個(+2)の見える化の方法をそれぞれ1ページでイラストとともに解説しています。アジャイル開発かどうかに関係なくすぐに使えるカタログ集です
  • カンバン仕事術 ―チームではじめる見える化と改善
  • 著者/訳者:原田騎郎 安井力 吉羽龍太郎 角征典 高木正弘
  • 出版社:オライリージャパン( 2016-03-25 )
  • 定価:¥ 2,138
  • チームの仕事や課題を見える化する手法「カンバン」について、その導入から実践までを図とともにわかりやすく解説した書籍。カンバンの原則などの入門的な事柄から、サービスクラス、プロセスの改善など、一歩進んだ応用的な話題までを網羅的に解説します。
  • Software in 30 Days スクラムによるアジャイルな組織変革“成功"ガイド
  • 著者/訳者:Ken Schwaber、Jeff Sutherland著、角征典、吉羽龍太郎、原田騎郎、川口恭伸訳
  • 出版社:アスキー・メディアワークス( 2013-03-08 )
  • 定価:¥ 1,680
  • スクラムの父であるジェフ・サザーランドとケン・シュエイバーによる著者の日本語版。ビジネス層、マネジメント層向けにソフトウェア開発プロセス変革の必要性やアジャイル型開発プロセスの優位性について説明
  • How to Change the World 〜チェンジ・マネジメント3.0〜
  • 著者/訳者:Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
  • 出版社:達人出版会
  • 定価:500円
  • どうすれば自分たちの組織を変えられるだろう?それには、組織に変革を起こすチェンジ・マネジメントを学習することだ。アジャイルな組織でのマネージャーの役割を説いた『Management 3.0』の著者がコンパクトにまとめた変化のためのガイドブック