管理画面とのつらくない付き合い方(How to get along with admin interfaces painlessly)

### for Agileware Drinkup at RubyKaigi 2019
---

## (RubyKaigiではやりづらい) Railsアプリケーションの話をします

---
## About me
Mitsuhiro Shibuya @mshibuya

* The Leader of SRE team in Opt, an advertising agency
* Ruby / Scala / Cloud infrastructure
* https://github.com/mshibuya
* RailsAdmin/CarrierWave committer

---
## オプトではRubyエンジニアとエンジニアリングマネージャーを切実に募集中です！！(We're looking for Ruby engineers and engineering managers!)

---
## 管理画面(Admin interfaces)

- おおよそ実用性のあるRailsアプリケーションには管理画面が必要なはず
- 管理画面を自前で作る
    - 大変だし、とくにサービスの立ち上げ当初はそこまで労力をかけづらいことも多い
- 管理画面系のgemたちを使う
    - 簡単に管理画面が作れるよ！と謳っているが…
- Almost every practical Rails application needs admin interface. Creating them from scratch is hard, so using gems for admin interfaces will be reasonable choice. 

---
## Gems for admin interfaces
- ActiveAdmin
- RailsAdmin
- Administrate
- etc…

---
## つらい声を聞いたりもする(People are experiencing pain using them)

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Railsアプリを作る時、個人的に絶対避ける3大gemはdevise、activeadmin、ransack。目先のラクさと将来遭遇する面倒事のバランスがとれてない。</p>&mdash; ᴊᴜɴʏᴀ oɢᴜ®ᴀ (@junya) <a href="https://twitter.com/junya/status/558448411473489920?ref_src=twsrc%5Etfw">January 23, 2015</a></blockquote>

> なんかもう色々辛いし不毛なので必要にならない方が良いのですが…。
> - [「rails_adminをカスタマイズする方法まとめ」](https://qiita.com/joker1007/items/4ac31f081c44634a5e90)より

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">RailsAdminとActiveAdminつらいのはどっち？</p>&mdash; wtnabe (@wtnabe) <a href="https://twitter.com/wtnabe/status/821628392147681282?ref_src=twsrc%5Etfw">January 18, 2017</a></blockquote>

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">I want to love activeadmin and railsadmin, but it&#39;s too hard to break out of the mold. Brainstorming how to do better. Any thoughts?</p>&mdash; Johnathon Wright (@mustmodify) <a href="https://twitter.com/mustmodify/status/175234320418615296?ref_src=twsrc%5Etfw">March 1, 2012</a></blockquote>
---
## Q: なぜつらくなるのか？(Why are they have painful time?)
---
## A: サービスが成長するから(Because services grow up!)
---
## サービスは成長する
- 成長しなかったらそもそもオペレーションも増えないのでつらくなることはない
- 成長するうちのどこかで、サービスのオペレーションそのものがサービス独自の強みとなっていなければならないポイントが必ず来る
- 独自の強みを作ろうとしたら、どうあがいても既存のソリューションでは賄うことができない
- Your service grows up. To be big, it must have an operational excellence, which you can't find in any existing solution.

---
## 管理画面系gemはサービス立ち上げ期の武器

- 管理画面系gemを使うことで、管理画面の作り込みに必要な手数を大幅に削減できる
- 増えるかどうかもわからないオペレーションのことを考えるのは最低限にして、サービス自身の強みに注力しよう
- 既存のプロダクトのリプレースなど、既に複雑なオペレーションが必要なことがわかっている場合には採用せずに自前実装で行くのが吉
- Admin gems are weapons for start-up phase of a service, not suitable if you already know that your service will require complex operations.

---
## サービスの成長と付き合っていく
- サービスが順調に成長したら、遠くないうちに自前実装に舵を切ることを迫られる
- どんな状態になったら切り替えるかを当初からプランしておければベスト
- 少なくとも、管理画面系gemでつらくなった頃には自前実装に切り替えられるよう準備をしておく
- Be ready for throwing admin gems and create your own admin interface from scratch, before being on admin gems gets too hard.

---
## まとめ
- オペレーションの強みもサービスの強みの一つ。強みは自分で作り上げるしかない
- 管理画面系gemはオペレーションコストが問題にならないサービス立ち上げ期にはとても有用
- いずれは自前実装に切り替える時がくるので準備をしておこう
- Operational strength is one of your service's strengths, you'll need your original one if you want your service to be big.

---
# 良い管理画面ライフを！(Good luck for your admin interfaces!) 

---
# おまけ：で、どのgemを選んだらいいの？

この図がたいへん的を射ていてわかりやすい

> ![比較図](https://camo.qiitausercontent.com/eeb9bef1d3bbd1429b03db2044e3da99483dbd51/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f31303731352f31363834633636662d633038352d346364622d313466362d6463393764363634613431362e6a706567)
> （Qiita記事「[rails管理画面系gem比較してみた](https://qiita.com/baban/items/f751fb05c4d2367878aa)」より引用）

「RailsAdminで初速を稼ぎ、頭打ちになる頃に自前実装へ」が発表者おすすめの戦略