管理画面のボタンを安心して押してもらうためにやったこと
このページに書いてもらっても大丈夫です。
最近の趣味
「6502」の由来
ここ3年間くらいはハードウェアをやってないなあ……
https://gyazo.com/3d993876cd9da01fc89605fe6e682850
実例
https://gyazo.com/c1f1a1cd8de03febaa5e91c6a4b58414
https://gyazo.com/fa7a324f2f0b4380403c414dc745a289
HelpfeelとScrapboxの連携方法
Scrapboxに書いた記事は、1〜2時間に1回Helpfeelに自動で反映される。
Helpfeelを契約したScrapboxプロジェクトに対して、botを巡回させて実現している。
Googleのクローラーのようなもの。
https://scrapbox.io/files/6283541b5dc3f300235ee8a1.png
しかし実務上では、なるべく早く記事を修正したい、botを待つ時間がないこともある。
たとえば
緊急の事態が起きてしまった。
ヘルプ記事のタイトルは「アプリに緊急のアップデートを行いました」
なるべく早くユーザーにこの記事を提供して、適切な対策をしてもらいたい。
話が変わって技術的な話、HelpfeelはHerokuにデプロイされている。 Herokuアプリはdynoという単位で構成されている。 コンピューティングリソース、メモリ、OS、一時的なファイルシステムを備えた軽量の独立した環境です。
いくつか種類がある。
web dyno
ウェブサイトのserveを行うおなじみのdyno。
worker dyno
実行したいタスクが発生したとき一時的に使い、役目を終えたら開放される。
one-off dynoでできること
Herokuのコンソールに入ってコマンドを実行する。
新しい機能をリリースして、マイグレーションやバッチ処理を実行するときなどに使う。
重いタスクも実行できる
one-off dynoは一時的に使うdynoだけど、連続最大24時間使える。
意外とめっちゃ長いですねakix.icon
新しいインフラを構築せずに、Herokuの中だけでサーバーレスなことができる。 記事更新タスクの実行方法
緊急のときは、Herokuを使えるベテランがheroku runコマンドを使って、記事を更新していた。 heroku runを実行すると、one-off dynoが起動してタスクが実行される。
https://scrapbox.io/files/628354211e7a2a001f6109b2.png
この方法だとコミュニケーションが発生して、実質いますぐ記事更新できない。
⇩人間を仲介していた箇所を自動化する。hata6502.icon
https://scrapbox.io/files/6283542586a101002389ccca.png
いますぐ記事更新ボタンの使い方
https://gyazo.com/82f90ea9ee39d2a458fce7a8e1e003f9
※いますぐ記事更新ボタンは、ベータ版として一部のプロジェクトでのみ使えます。
ステータスが「更新中」になり、2〜3分待つと「完了」になる。
https://gyazo.com/ea9e513edab402b8b841483cfa5e0a35https://gyazo.com/54f6708297b488b4d0e31767496888c2
裏側でやっていること
+安心して使うためにやっていること
dynoリソースやエラーの通知。
リアルタイムなステータス表示。
シンプルなREST API
one-off dynoを起動するスクリプトを書いて実験した。
dynoリソースやエラーの通知
one-off dynoは最大で同時に50個まで起動できる。
ベータ版では最大10個までに制限をかけている。
これはHelpfeel側でかけている上限値。
将来のために、使えるdynoの数を予約しておきたい。
記事更新タスク以外でも、one-off dynoを使いたいタスクが生まれるかもしれない。
マイグレーションやバッチ処理を実行したいときなど、まれに使うことはある。
いまのところ、one-off dynoは同時に1〜2個使われる規模感。
しかし、
「いますぐ記事更新ボタン」は、2022年4月に一部のユーザー限定でリリースしたばかり。
ボタンを使えるユーザーは、これから増えていく予定。
現段階では、記事更新ボタンがどれくらい使われるかの予測が難しい。
one-off dynoを10個全部使われると、いますぐ記事更新ボタンを安定供給できなくなる。
クロールが始まった通知
現在起動しているone-off-dynoの台数も通知する。
クロールが無事に完了した通知
クロールがエラーになった通知
https://gyazo.com/6ba4c758c28e988250f60521a9501bc6
リアルタイムなステータス表示
記事更新ボタンを押すと、ステータスが「更新中」になる。
2〜3分待つと「完了」になる。
https://scrapbox.io/files/6283542ca15421002020d93c.png
ブラウザをリロードしないと、現在のステータスを確認できない仕様だった。
Ajax通信が使われる前の、ひとむかし前なウェブサイトなイメージ。 社内でいただいたフィードバック
💬「今どのくらい作業が完了してますといったパーセンテージなどが見れたらうれしい。」
💬「クロールの状況(ステータス)が分かりにくいところは要改善。」
💬「一度ボタンを押したらPC閉じてもいいですか?」
記事更新タスクをクライアントサイドで動かしている、と考えた方からの質問。
エンジニアだけでは気づきにくい質問でありがたかったです。
おもしろい。実装把握してると思い至らない発想ですねakix.icon
待ち時間があるのってファイルのアップロードとかインポートとかがメジャーだから、その習慣かもshokai.icon
リロードしなくても、記事更新の状況をリアルタイムに確認できるよう修正した。
REST APIを生やして、一定時間ごとにfetchする。 ベータ版とはいえ、状況の確認しやすさは当たり前品質だなと思った。hata6502.icon その他
記事更新の「中止ボタン」というのも考えたけど、ベータ版では実装を見送った。
印刷中のプリンターを止めるような感覚で押せるボタンを目指していた。
幻になった「中止ボタン」
https://gyazo.com/0030ead3f978ba9bed3aa9097fcae005
記事更新ボタンによる変化
https://scrapbox.io/files/628354211e7a2a001f6109b2.pnghttps://scrapbox.io/files/6283542586a101002389ccca.png
Before
緊急で記事更新したいときに連絡を取る必要があった。
コミュニケーションに時間がかかる。いますぐ記事更新できない。
1〜2時間待って、Helpfeelのbotが巡回するのを待ったほうが楽。
heroku runコマンドを使っていた。
Herokuの権限を持つベテランしか使えない。
コマンドを間違えると危険。
After
Notaの新しいメンバーや一部の顧客も、いますぐ記事更新できるようになった。 コミュニケーション不要、ボタンを押すだけになった。
Notaの新しいメンバーや一部の顧客も、いますぐ記事更新できるようになった。
安心して記事更新できるようになった。
dynoリソースやエラーの通知、ステータスの表示、……
2022年4月18日に「いますぐ記事更新ボタン BETA」をリリースした。
正式版リリースに向けて、Slack通知を見ながらテコ入れ中。