しきりにSaaS is Deadという文言が目に入ってくるので、自分でも経験として何か作ってSaaS解約してみたい。
ということで比較的すぐ実現できそうなノートアプリをテーマに作ってみた。
最低限であれば比較的難しくなさそうなのと、今後いろいろ機能拡張のしがいもあるのでちょうどいいのもある。AI連携系の実験したくなった時のベースにしやすそうなのもある。
ターゲットとして、Standard Notesというノートサービスで$63/yearのプランを契約していて、特段不満もないがこれでなくてもいい感はずっとあった。
これの解約を目標とする。
ざっくり要件
- ブラウザで動作
- マークダウンで書ける
- シンプル軽快にテキストが書けて余計なことをしない
- Google Driveなど外部クラウドストレージのみに実データを保存する、ローカルにも残さない
- モバイル対応
- サーバーレスでほぼお金をかけずにセルフホスト可能
アーキテクチャ
ベースはCloudFront + S3 / LambdaというAWSで標準的なサーバーレスWebアプリケーションの構成としている。
データはすべてGoogle Driveに保存するが、リフレッシュトークンの管理のためにDynamoDBを置いている。またDemo Modeとしてログイン不要で使えるモードを用意していて、これのデータもDynamoDBに置いている(デモなので60分で消滅するようTTL設定している)。
Google Driveである理由は、私が有償契約を持っているのがGoogle DriveとiCloud Driveだけで、まともにAPIを使わせてくれそうなのがGoogle Driveだけのため。ただし今後の拡張性を考慮し、ビジネスロジックとストレージプロバイダー関連の実装は明確に切り離している。
少し特色としてフロントでマークダウンを処理するところは多少なりとも軽快動作に寄与することを期待してWASMにしている。実態としてはGoで書いていてgoldmarkというライブラリにほぼ依存している。
開発手法
検証を兼ねてAntigravityの利用を基本とした。
Antigravityは全部入りという感じで、特にカスタマイズせず何でもこなしてくれるのはよかった。
ただ私だけなのか、DevContainerがいまいちちゃんと動かなかったり、VS Codeと見た目一緒だけど何かしらあれやこれやで現時点で代替はしにくいなという印象だった。
あと2,900円のプラン(Google AI Pro)だとややクォータが厳しめ。
成果物、開発期間等
以下のようになった。
https://github.com/j-un/GophDrive
MVPレベルの機能の開発期間は、私自身は仕事したりドラクエ7をやったり普通の生活を送りながら3~4日くらい。くわえて個人的趣味で開発環境立ち上げやAWSデプロイをいかに楽にできるか追求して+数日くらい。
まだちょいちょい改善したいところはあるが、自分用としては十分かなという感じで満足している。
Googleログインはクライアントアプリ側で私のアカウントしかできないようにしてあるが、Demo Modeは開放しているのでよかったら触ってみてください。
https://gophdrive.n-s.tokyo
またローカルでの環境起動は1コマンド、AWSデプロイはGoogleからClient ID/Secret取得+数コマンドくらいで実行できるのでよかったら試してみてください。
雑感
あらためて、SaaS is Deadという扇情的なフレーズがそこかしこに飛び交っていて、いちいち反応してリンクをクリックしても時間の浪費になりそうでできるだけ見ないようにしていることもありコンテキストを正しく理解できていないかもしれないが、何がDeadするのかは立場や文脈によって変わってくると思われる。
なのでここでは論点をSaaSというサービス提供形態に絞った場合、従来のソフトウェアが持つ大きな価値の一つは再現性であり、これは確率論的に出力を生成するAIでは代替しきれない領域なので、SaaSのSoftwareの部分が死ぬことはないはずである。
一方、自分(達)に必要なちょっとしたソフトウェアをその場で生成するという世界には、我々はすでに両足突っ込んでいるのは今回の実験からも明らかであり、as a Serviceの側面は少なくとも今のままではいられないだろう。ここ最近よく目にする「技術者ではないが3日でxxができた。これで十分だ。」的な話は3日でxxができたに過ぎず、そのまま数ヶ月の運用に耐えるかは別の話だし、たぶん無理だとは思う。しかし1年後くらいには無理ではなくなっていそうな気もする。
で、そんな時代でもサービスとして生き残りそう、あるいは新しく台頭しそうなものはあるのだろうか。
飲み会の雑談レベルの解像度で考えてみる。
1. AIエージェントのためのガードレール
AIエージェントが自律的に動く世界において、その行動を制御するガードレールをエージェント自身に内包させるのはリスクが高い。権限分離の観点からも、ガードレールは外部に配置されるべきである。その仕組み自体もAI駆動になる可能性は高いが、独立した第三者的なサービスとしての需要はありそう。
具体的にどんな感じになるかあまりイメージできないが、とりあえず決定論的なフィルタリング(特定のキーワードや正規表現にマッチしたらブロック的な)とか、入出力の埋め込みベクトルを解析して変なことをしていないか検知したりとか?もっとすごいものもいろいろ出てきそう。
2. ソフトウェアの振る舞いに対するアサーション
AIの生成したコードが正しいことをどのように判断するのかは昨今関心の高いテーマだと思う。
AIが100%完璧なソフトウェアを生成し続けることは考えにくく、これは今のモデル性能だと言わずもがなで、また今後モデルの性能がどれだけ向上しても、最終的なボトルネックは人間の言語化能力に帰着する気がする。すなわち人間が作りたいものとか、何が正解なのか、といった基準はとても曖昧で、イーロンマスクがやっているBrain Machine Interfaceみたいな技術が普及したとて人が自分に必要なものを細部まで完璧にイメージしてアウトプットすることはきっと難しい。
生成されたものが正しいとどう判断するのか、それを人間にどう理解させるのか。ちょっとサービス云々とずれてしまうが、この手の課題を解決するアサーションの仕組みやプラクティスはおそらくまだ試行錯誤の段階で、今後発展の余地があるはず。これは今でいうQA的な業務の延長にありそう。
あと監視やオブザーバビリティなど、継続的に動かし続けるシステムの信頼性維持のための広義のSRE的なプラクティスは今後も必要となると思われる。
であるとすると、QAやSREの領域は今後もエンジニアリングの仕事が人間に残りそうな予感はする。
3. 摩擦そのものに価値があるサービス
アナログレコードに針を落とすような、不便さや摩擦、あるいはその操作体験自体に価値があるサービスは残りそう、というか、新たに発生しそう。
具体的に何なのかあまり思いつかないが、SNS系とか、アート性の高いプロダクト、またはインタラクティブなアートそのものとか。
少なくともtoC向け(非業務系)に限定されるとは思うが、効率化の行き着く先で逆に不便なものとか手触りのあるサービスが求められたりするのは昨今の風潮とも合致する。
おわりに
時代の変わり目にいるなあと日々実感しながら生きています。
楽しんでいきましょう。