Day1 質問・雑談コーナー (2021)
Scrapbox上でYoutube live見れるの便利だ
LIveが終わると、そのままarchiveへのリンクになるのか。なるほど
20:10-20:30の質疑応答コーナーでこちらのページに質問を書き込んでいただけると

がお答えします!
登壇中、登壇者のスライドに直接コメントしてもOKです

アクセスすると {"name":"NotMemberError","message":"You are not a member."}
が返ってきます
ご指摘ありがとうございます!

今、画像2件を置き換えてみたのですが、見えてますでしょうか?

2021/3/9 19:09
見えました!

です!

ありがとうございます!🎉

ホントだ!
雑談ばっかり見てた...

質問コーナー、だと質問じゃないことは書きづらい感じがあるので、何でも書けるようなページがあるといいですよね

たしかに。質問・雑談コーナーとかの方がよかったのかも

Scrapbox儲かってますか?

儲かっていてほしい
無料でフルアクセスできると逆に不安になってしまう現象がある

外国の人がScrapboxめちゃくちゃ気に入ってくれたけど収益面はやっぱり気になってて、情報ここにストックするのにちょっと不安がってた
それはすみません。もうちょっと安定感があるように見せていきたいですね

実際は、収益だけでなくアクセスも伸びていて、nota tech confでのshokaiの話も、scrapboxのスケーラビリティの確保の話になると思います
エクスポートはできます
大事

帳簿の見方よくわかってないけど、インフラコストの10倍ぐらい売り上げあるのですぐサービスが消える事はないと思います

まぁ調達もしましたしね

儲かってます!

サブスクリプション売上は、この5年で10倍以上になっています
かつ、黒字化しています
コロナ禍も追い風になっています(そんなに強調するつもりはないですが)
実は、売上に伴って採用も増えていて、絶対数は多くないですが、現メンバーの半分はこの2年以内に入ってきた人かも
モックアップ作るのはSandbox環境とかある感じですか?

モックアップはフルスクラッチで作っていただいています

ご回答ありがとうございます!

デザイナーさんが作っている感じなんですね

UIの振る舞いに限っていえばデザイナーがやることは多いんですが、機能の提案や実際のデータを伴う検証に関しては皆がモックアップに参加してます

なるほどなるほど

UIの振る舞い
については餅は餅屋ですね

GCSってことはGCPで稼働していると思うのですがDatastore(Firestore)を使わずに(自前で?)Mongo DBを運用しているのは何か理由があるのでしょうか?

「運用できるなら」という条件がつくけど Mongo のほうが Firestore より楽じゃね

MongoDBの運用がそもそも大変じゃないかなと思っていて、それならFirestore向けにEntityを設計したほうが楽そうな印象


MongoDB サーバー運用たしかにめんどくさいですね。 MongoDB Atlas が GCP でも local SSD 対応したら移行したい...

Firestore よく知らなくて (Firebase ならわかりますが) Datastore も古い App Engine のときの知識ですが、 Mongo みたいな複雑なクエリ (aggregation とかも)できなくて index 組み合わせとかいろいろ制限があったりとか、何より Google にロックインされちゃうのがキビシイ感じですね
個人的にはDBはなにつかってもその製品にロックインされるのであまり気にしなくなりました。複雑なクエリが打てないのはそうで、代わりにアプリケーション側でやったり、トリガで集計したりする感じになりますね

Firestoreはたしかに、高速性に過剰に振っているのでアプリケーション側で頑張る事が多いですね

GCPに行く前からGyazoはmongoでやっていたので、特に移行する理由がなかったのかも

なるほど。GCPにはどこかから移管したんですね

AWSでした

ありがとうございます!mongoid便利そうでよさそうですね

Firestoreだとcache周りがめんどくさいです

自分が調べた範囲ですが、単純なcache機能しか使えなさそうでした
自分が使っていた範囲だとGAEから使っていたからかレイテンシーはほとんど気にならずキャッシュなしで十分なパフォーマンスが出ていてキャッシュはあまり考えなくてよかったですね

service workerで全てのfetchを横取りして、networkから取得するかcacheから取得するかを細かく制御するのは実装が難しそうです
Reactを使っている場合、
SWRなどの概念を取り入れると破滅が防げるらしいです

議論が開発メンバー全員集まって通話してるとのことですが、ファシリテーションはどうやって、どういう感じで各自発言するタイミングとか設けてたりとかしてますか
質問の意図としてはリモートでどうやって議論が終結させるのかが気になった
事前にScrapbox上に議題を書いてもらいます

アナウンス
進捗
相談・議論
カーソルがぶつかり合ったりしませんか?

定例会議のアジェンダは、先に入力欄をテンプレとして作ってしまうのがコツです

アナウンス
ひとつめ
ふたつめ
進捗
Aさん
abc
Bさん
abc
Cさん
abc
…
相談・議論
相談ひとつめ
相談ふたつめ
etc...
それぞれがそれぞれ関係ある場所に書き込む感じか

ありがとうございます
勉強になりました

Mongoとかのドキュメント突っ込む系DB、モデルの更新タイミングによってキーがあったり無かったりしてハンドリングが大変そうなイメージがあるんですがそうでも無いですか?

スキーマの更新やマイグレーションに時間がかからないので、むしろモデル更新は楽かも?

ただし、古いデータが残ったりするようなバグを生む怖さはちょっとありますね
なるほど!V1ではこのキーあったけどV2で一旦無くなってV3でちょっとフォーマット変えて復活したんだよな〜みたいになってくると、モデルの歴史を知らなきゃいけなくて大変かも?と思って質問しました。

その場合は、そうですね。

あと、最近だと、異なるバージョンを同時にリリースしたり、リリース後、リバートしたりすることも多いですね。

↑の例だと、V1とV2が両方リリースされているような状態とか。V1からV2にゆるやかにデプロイされていくパターンとか
それはめちゃめちゃややこしそうですね...異なるバージョンで同じリソース触りはじめるとわけわからなりそうです

はい。

Gyazoだと昔の経験では、DBサイズが1000万行、50GBとか超えてくるとスキーマ変更はmysqlで30分はかかりました
なので、スキーマ変更を伴うようなデプロイするときは、どっちのDBでも考えることが多いですね...
それぐらいの規模になるとマイグレーション不要なのはメリット大きいですね

なるほど、クライアント側でスキーマをある程度保証する仕組みがあるんですね

あとはアプリケーションコードが複雑になるschema変更はbatchでさっさと理想的なschemaに揃える
言われてみると、確かにバッチでスキーマ揃えればいいですね。急になんとかなる気がしてきました。

静的型付け言語とかだとより良い感じになりますね
Gyazoに関して言うと、masterブランチのmongoidの定義が絶対正義なのでそんなにシッチャカメッチャカにはなっていないです

Gyazoでのフロントエンドスタイル実装はCSS in JS? CSS Modules?
グラフィック的なデザインをフィックスしてから実装される感じですか?

あとモックの精度ってどのくらいでしょうか?割と作り込む感じでしょうか?

ちょっとした機能追加や改善修正はプロトタイプ実装ファーストです

複雑になりそうなUIだけ、ワイヤーフレームやモックアップを作って議論してから実装します

モックの精度は、完成に近いものです

JSのアニメーションやCSSをそのままProductionに取り込めるレベル
なるほどありがとうございます!!

Gyazoのserver容量が気になります

この前Google Photoが容量の関係で画像のupload総量に制限をかけ始めたので、Gyazoでもいずれそういう問題が発生するのではないかと気になりました
むしろアップロード制限を緩和してもいいのではというような議論をしていたりします

upload制限あったんですか
この前めっちゃサイズの大きいpngファイルを数百枚に送ったらnetworkがガタガタになりました
serverに負荷かけちゃってごめんなさい
そうですね

scrapboxで、誰かが他人の文書を間違ってごっそり消してしまったことはありますか?

技術者が多ければ、間違っても戻せると思うのですが
一般の会社では、操作になれていない人の操作ミスが少し怖い感じはあるのです。
右上の Restore x
のプロトタイプ感
当然だけどテロメアは死んじゃうか
なるほど。ありがとうございます。気軽に書けることとの、やむを得ないトレードオフではあるのかもしれませんね。

編集が高頻度だとpage historyがちゃんとできてるのか気になる


すべての編集をリアルタイムにはhistoryに入れてないので、書いた瞬間に消されたのは無理です

間違えてページ遷移してしまい、Ctrl+Zが使えなくなったときとかに便利です
書いた瞬間の編集内容も取得できます
まあまた書けばいいんですよ。今書いたばかりなら何度も書くと洗練されてくる!!

PCにあまり触ったことがないような人は、編集権限を落として、クリックしないと編集できないようにしたりして。それだと差別になってしまうからだめですね

Ctrl+Zだけ覚えてもらえればなんとか…

包丁を落としたら危ないから、いつもカバーをかけておくのがいいのだろうか?みたいな。刃物の怖さをしらなきゃ、さわるのは危ないですから

今まではページの削除だけは簡単に復旧できなかったのですが、Streamから復元できるようになってよかったです

これで大抵の操作はもとに戻せるようになった
でも、一般に広く流行らせるためには、間違って更新できないようになればベター

遠い将来、VRゴーグルが実用化されたら、目線がカーソル近くや該当ページの上にあるときだけ更新できるようにならないかな・・なんて。いや無理か。
2つの方向性にまとめられそう

1. 間違った変更ができないようにする
2. (間違った)変更をしてもいつでもすぐに戻せるようにする
Scrapboxの方向性はこっちですね
はい
