Slide 1

Slide 1 text

ActiveAdmin Better Practices 2015/07/11 株式会社Aiming 黒木慎介

Slide 2

Slide 2 text

自己紹介 • 株式会社Aimingのエンジニア(大阪web 開発チームのリーダー) • Railsなどを使ってオンラインゲーム運営 を助けるものをいろいろ作っています • Ruby/Rails歴5年 • 今年の5月から大阪スタジオに勤務してい ます

Slide 3

Slide 3 text

提供 Aimingは関西Ruby会議06に協賛しています!

Slide 4

Slide 4 text

目次 • ActiveAdmin概要 • TIPS初級編 • TIPS中級編 • TIPS上級編

Slide 5

Slide 5 text

ActiveAdmin概要 • 少ない記述量で定型的なCRUDの画面と処 理を実装できるgem – CRUD=データの登録・閲覧・更新 • 管理ツールを作るのに使ってます • 規模はかなりでかいです…

Slide 6

Slide 6 text

例えばこんなmodel

Slide 7

Slide 7 text

こういうのを書くと

Slide 8

Slide 8 text

こんなんとか

Slide 9

Slide 9 text

こんなんとか

Slide 10

Slide 10 text

こんなんができます

Slide 11

Slide 11 text

もうちょっと書くとこんな感じ

Slide 12

Slide 12 text

便利そうに見えるが… • 定型的なCRUD以外の処理をさせようとす るととたんにドはまりしたりする – 管理ツールの開発をしていると、定型的な CRUDでは満たせない要求が必ず出てくる – ActiveAdminで管理ツールを作る時には、い かにこのはまりを回避するかが重要になる

Slide 13

Slide 13 text

自分が感じるActiveAdminの問題点 • 使い始めにつまづきやすいところがある – 公式サイトが更新されていない – Rubygemsへのリリース頻度が低く、1.x系 は未だにpreのまま • コードをかなり読み込んで構造を理解し ないと対処法がわからないことが結構あ る

Slide 14

Slide 14 text

まあいろいろありますが • 知っていれば回避できる問題もあるので、 それを知ってもらいたい、というのが今 日の発表の趣旨 • Bestとはいえない手段が必要なときもあ るけど、Betterな手段で不幸を回避して、 ProgrammingをEnjoyしましょう

Slide 15

Slide 15 text

TIPS初級編1 • ActiveAdminでググると、 activeadmin.infoという公式サイトっぽ いものがヒットする • しかし、これを読んではいけない

Slide 16

Slide 16 text

どういうこと? • ここでgithubのレポジトリを見てみま しょう • https://github.com/activeadmin/activ eadmin#documentation

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

どういうこと? • activeadmin.infoのドキュメントはあま り更新されていなくて、記述が古くなっ ているところが結構ある • Githubのレポジトリのdocs以下を見ま しょう

Slide 19

Slide 19 text

TIPS初級編2 • Rails4系に対応しているのは、1.x系だけ • しかし、1.x系はまだpreのバージョンし か出ていないので、バージョンの指定を しないと、0.x系のものを取ってきてしま う – 依存性を解決できなくてbundleがこける

Slide 20

Slide 20 text

Gemfileの書き方 • gem ‘activeadmin’ # NG • gem ‘activeadmin’, github: ‘activeadmin’ # OK • gem ‘activeadmin’, ‘~> 1.0.0.pre1’ #OK

Slide 21

Slide 21 text

TIPS中級編 • 定型的なCRUDではない処理をする場合の カスタマイズの仕方を知ろう

Slide 22

Slide 22 text

カスタマイズが必要なケース • 特定のmodelクラスのCRUDではない処理 を行う場合 • ModelクラスがActiveRecord::Baseの子 クラスではない場合 – CSV読むとか • ActiveRecordを拡張するgemを使ってい て、CRUDのやり方が変わっている場合 – 複数DBとか

Slide 23

Slide 23 text

カスタマイズの代表的なやり方 • register_page(例を示します) • controller do … end • member_action / collection_action

Slide 24

Slide 24 text

register_pageの例

Slide 25

Slide 25 text

register_pageの例

Slide 26

Slide 26 text

register_pageの例

Slide 27

Slide 27 text

TIPS上級編 • ActiveAdminのページのレイアウトをい じるのは難しい • レイアウトのテンプレートファイルがど こかにあるわけではない • ActiveAdminのviewクラス(arbre)につい て理解しよう

Slide 28

Slide 28 text

arbre(あるぶる) • HTMLをDSLで書くためのgem • ActiveAdminの開発初期にview部分が抽 出されたもの • ActiveAdminのviewクラスは、arbreの拡 張として、複数定義されている • ActiveAdminのviewは、これらのクラス を組み合わせて描画されている

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

例題 • データを表示するtableの中で active_decoratorで定義したメソッドを 使った表示を行いたい • 普通にやろうとすると、tableに渡す前段 階でdecorateを呼んであげる必要がある – コードがごちゃっとしがち

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

見た目をいじる流れ • カスタマイズしたい部分のHTMLのタグの idなどを確認する • bundle openからのgrepでみつける • モンキーパッチを書く

Slide 34

Slide 34 text

おさらい • ActiveAdmin概要 • TIPS初級編 – ドキュメントはGithubを見よう – Rails4なら1.0.0.pre1以上を使おう • TIPS中級編 – カスタマイズのやり方を知ろう • TIPS上級編 – viewの構成を知ろう

Slide 35

Slide 35 text

他にも • あれやこれやあります – decoratorの使い方とか – 関連を含めたtableやfilterの書き方とか – メニューの並び順制御とか • 続きはQiitaで – http://qiita.com/skuroki@github – まだ書いてないネタもたくさんあります

Slide 36

Slide 36 text

おしまい • ありがとうございました • AimingはRailsエンジニアを募集しています! – Ruby/Rails未経験者採用実績あります • 勉強会会場提供もやってます – グランフロント!駅近!便利!