先日開催されたKaigi on Rails 2023に「管理機能アーキテクチャパターンの考察と実践」というタイトルで登壇させてもらいました。発表資料はすでに公開しており*1、本記事で発表内容をそのままなぞっても新規性がないな〜と考え、発表前に行った"余興"や懇親会やXでいただいたフィードバックや質問について回答する記事としてみます。
余興について
本記事で初めて上記の発表を見知った方や、発表をオンラインで見られた方にとっては「余興って何?」という疑問が浮かぶかと思うので説明すると、今回は登壇前の転換時間に"前説"をセルフでやってみました。*2
お笑いの世界には前説というものがあります。 舞台でもテレビの収録でもお客さんがいる場合は、本番に向けて場を温めるために若手芸人やフロアディレクターなどが注意事項を伝えながら簡単なネタを披露することです。 ネタを交えながら注意事項等を説明し客席をいい空気に温めます。 https://diamond.jp/articles/-/318070
「この発表直前の時間が登壇者にとっては一番いやな時間なので、余興を用意しました」 これ良いな #kaigionrails #kaigionrailsB
— 黒曜@Leaner Technologies (@kokuyouwind) 2023年10月28日
登壇直前の瞬間が嫌いなの、むっちゃ分かるw #kaigionrailsB
— sue445 (@sue445) 2023年10月28日
登壇前のシ〜ンとした重く冷たい空気が苦手なのは昔からそうで、コロナ禍以前にオフライン登壇した時もこんなことをやっていたなと懐かしくなりました。
あの空気に耐えかねる方はやってみてもいいかもしれません。ただしあまりにもネタに振り切って滑るとメンタルが崩れて全てが終わるので、まずは簡単な挨拶程度から入るのがちょうど良いと思います。
発表に対するフィードバックや質問
管理機能と呼ぶなって話、めっちゃ共感できました!
直前まで削るか迷っていた余談の1ページに反応がすごく多くて驚きました。
これに関するtweetも想定以上に伸びました。きっと皆様も思うところがあるのでしょう。
懇親会で話してると、余談として書いた「"管理画面"と呼ぶのをやめる(責務がはっきりした別の名前を与えるべき)」という話にかなり共感を得られて面白かった #kaigionrails / “管理機能アーキテクチャパターンの考察と実践 / Learn Architecture through Admin” https://t.co/jtpgfkOwEn
— ohbarye (@ohbarye) 2023年10月29日
これは筆者の発言が初出ではなく、Appendixに記載した記事が元ネタになります。筆者の知人である@itohiroさんがかつて以下のように語っておりました。
実は半年ちょっとくらい前まではPORTという名前も概念も存在せず、その機能の一部であり社内ユーザーが触れるRuby on Railsのフロントエンドの機能群が単に「管理画面」と呼ばれている状況で、その重要性やプロダクトとしての地位、エンジニアが機能開発にとりくむモチベーションさえもが非常に低い状況でした。これは由々しき問題です。
上記で述べたように、証券業務の機能は株式会社FOLIOの心臓部ともいえる非常に大事なシステムであり、重要な概念として認識される必要がありました。
今回の登壇にあたり同記事を読み直し、改めてめっちゃ良いこと書いてある…と感銘を受けておりました。
Q. じゃあB/43では管理機能をなんと呼んでいるの?
B/43のAdministration機能を担うものとして、A/43と呼んでいます。
「B/43のBはBudgetやBank, 43は資産や予算を意味しています」という話をブースでしたところ「30へぇ〜」ぐらいいただけたので、この小ネタも登壇に盛り込んでも良かったかもしれません。
Q. 管理機能を見てみたい!見られますか?
検証環境の一部機能だけをお見せします。ユーザー検索、eKYC(オンライン本人確認)、そしてブースで反響のあった反社会勢力DBを用いた検索機能を表示しています。もちろんデータはダミーです。
React Adminの所感については下記記事でもまとめているのでご興味があればぜひどうぞ。
ちなみに、ブースで動いていた"オーソリ電文くじ"結果表示画面もまさにReact Admin製の管理機能Frontendでした。ブースで見せていたのは今回用に特別に@uribouが実装してくれた画面でして、弊社のブースの”本気度”が伺えます。
Q. エンドユーザー向け機能と管理機能向けバックエンドのプロセス分離だけでは不十分では?
#kaigionrails #kaigionrailsB @ohbarye 管理画面とユーザー画面で対応するインフラ分ける話ですが、DBの read replica 分けるみたいなこともしてます? 個人的に管理画面だけで障害起きる時ってDBにやたら重たいクエリが走るケースが多くて、その場合Webサーバー分けるだけだと不十分かもと思ったり..
— qsona (@qsona) 2023年10月28日
フロントと管理機能分離したやったー!負荷分散!ってやってもだいたいRDB側が詰まるんですよね #kaigionrails #kaigionrailsB
— しんくう (@shinkuFencer) 2023年10月28日
おっしゃる通りです。互いの結節点であるDBで詰まったら共倒れになります。現時点では大問題になる前に監視やAPMで発見して定期的に対処しているフェーズです。
ちなみに@qsonaさんは筆者の元同僚で、2016年の『「管理画面」のマイクロサービスを立ち上げる前に考えるべきこと』や2019年の『マイクロサービスで管理画面が乱立する問題と対策』を書いており、数歩先をすでに歩いているな〜と今回の登壇資料を作りながら改めて思わされました。
Q. エンドユーザ向けと管理機能向けのAPIってアクセス制御とかやってる?
エンドユーザ向けと管理機能向けのAPIってアクセス制御(エンドユーザ向けで管理用APIアクセスさせない)とかやってたりするんだろうか #kaigionrails #kaigionrailsB
— しんくう (@shinkuFencer) 2023年10月28日
- ドメインは別物でエンドユーザーには露出していない
- 管理機能へのアクセスにはIP制限がある
- 認証の仕組みがエンドユーザーと管理機能ユーザーではまったく異なる
という具合です!
名札を確認しわすれてしまったのですが登壇直後に同じ質問を他の方からも頂いておりました。(Kaigi on Rails 2023に参加しました - BOOK☆WALKER insideを見るに、BOOK☆WALKERのyotaさんだったのかな?)
Q. 管理機能APIに一般ユーザーからアクセスされたら何が起きる?
どのレイヤで何をやっているかは伏せますが、存在しないURIにアクセスしたときと同じ挙動になります。悪意あるユーザーが管理機能用のURIを知ることはできません。
Q. スライドにスポットライト当てるのどうやっているんですか?
Logicoolのポインター使っています。ページ送り/戻りもすべてこれで操作しています。
ちょっとお高いデバイスですが2018年頃から使用してまして、当時は「これ買ったからには登壇活動がんばるぞ!」と意気込んでおりました。
Random Chat: 2023年でもadmin系のgemとか使う?
懇親会で話しかけていただいた方などに「rails_admin
, active_admin
, administrate
あたりのgemってここ数年で使っている?」と聞いたところほとんどの方がNoと答えていました。
また、Evil MartiansのSampoさんと懇親会でお話ししたのですが「あれらで要件を全て満たせることってあまりないですね」と仰っていました。他に話を聞かせてもらった某社x3もgemは使わず、素のRailsでmodelをつくったりviewを書いたりしてるようでした。
みなさまにお礼
話題が散逸してまとまりのない記事となってしまいましたが、この場を借りて発表を見てくださった方や質問・フィードバックをいただいた方にこの場でお礼を伝えたいと思います。発表資料を作成したり練習しているときはプロポーザルを提出した自分を呪ったりもしますが、皆様の声が筆者を何度でも蘇らせてくれます。
そして、何よりこのような場を提供してくれたKaigi on Rails運営の皆様にも改めてお礼を申し上げます。勝手ながら来年の開催にも期待しております!
お知らせ
最後にお知らせと宣伝です。 2023-11-09 (木) にスポンサーのメドピアさん、マイベストさんとの共催で「After Kaigi on Rails LT Night」を開催します。
Kaigi on Railsへご参加された方、都合が合わなかった方も Rails が好きな方はぜひお気軽にご参加頂けると嬉しいです!筆者も"「エンジニア9名でプロポーザル8件、採択3件」を支える技術と文化"というタイトルで登壇いたしますのでぜひお会いできればと思います。
本記事は@ohbaryeが執筆しました。