どうもDiver Down LLC.のen30です。
web1weekで楽しそうにしている人たちを見ていたら気持ちが盛り上がってしまい だーすー と Admin Guildというサービスを作りました。
ウェブサービス運営者同士でGoogle Analyticsのデータを見てワイワイできる(予定)のサービスです!
お気に入りした(Like)サービスをウォッチしたりもできます。
いまのところ運営者ギルドのSlackメンバー限定で登録出来るようになっています。
まだ機能としては
- Slackログイン
- Google Analytics連携でサービス登録
- バックグラウンドでリアルタイムユーザ数を取得してランキング
程度しかなく、なんとかインターネット上にURLを公開するところまでやって終了時間まで滑り込んだ、という感じですがこれから諸々実装していきます。
僕は普段は主にRailsで開発しています。web1weekでは短期間で小さなサービスを作ることになるので、技術検証も兼ねて個人的にはかなり攻め気味の技術を選んでみました。(その結果まるで間に合いませんでしたが!)
なぜ選んだのかは書いていたら長くなってしまったので記事最後のおまけに回しました。
@expo/next-adapter
だとサーバサイドでも環境変数が使えないNext.jsとExpoの連携には
Using Next.js with Expo for Web - Expo Documentation
を参考に @expo/next-adapter
を利用しました。
@expo/next-adapter
を使うと process.env
が書き換えられてしまい、 getServersideProps
内などサーバサイドでも環境変数を自由に使うことができません。
Expoは基本クライアントのためのビルドをするものだと思うので、わからないでもないですがNext.jsと組み合わせて使う上ではちょっとつらいです。
とりあえずIssueをたてておきました
- With @expo/next-adapter, process.env is not available even on server side. · Issue #2156 · expo/expo-cli
いまのところ、サーバサイドで外部から何かを渡したいなら環境変数ではない方法で渡す必要があります。
今回はApp Engineに置いてGCPのSecret Managerを利用しました。
サービスの性質上、ユーザがサービス上にいなくても定期的にGoogle Analytics APIで情報を取得したいです。ですがFirebase Authenticationだと refresh_token
が取ません。
なので
- Google Sign-In for Websites で refresh_token
も取得
- Firebaes Authentication の firebase.auth().linkWithCredential()
と組み合わせることで対応しました。
最近あまり新しいサービスを出せていなかったし、締め切りありの短期間でウォー!!!!と開発するのが楽しかったです。
楽しい企画をありがとうございました。
Railsは少人数で最速でウェブサービスを立ち上げるには本当に良いフレームワークだと思っています。マシュマロではTurbolinks + StimulusというRails wayど真ん中の選定をしました。開発速度という意味ではいい選択だっと思っています。
とはいえ、触れる情報、環境の変化で
『Railsは次に作るサービスでも良い選択肢だろうか』
というのに少し迷いがでてきました。
いままで主にVPSを使ってましたが、最近はGCPにも結構触っています。
少人数(いまのところ一人)で開発していく上では、運用に時間的コストを払っていると全然回らないなという課題があります。
マネージドサービスの
というのは大きな魅力です。
Railsを使っているからスケールしないというようなことは、とんでもない規模になってもなかなか無いと思います。ただ、今Sidekiqを使っている場面でCloud Tasks, PubSub + Cloud Functionsを選んだり、サービスをうまく組み合わせて作ることで、もっと運用で考えることを減らせるのでは?という選択肢が見えてきました。
もちろんRailsとそういうサービスを組み合わせていくことも出来るわけですが、どう組み合わせていくかを考えていく必要があります。もしそちらの方向に舵を切っていくならRailsである意味があまり無くなってしまうかもれしれないと感じてきました。
Railsの中心にはHTMLがあります。一方JavaScript中心の世界もあり、進歩が目覚ましいです。目覚ましすぎてどうにも隣の芝が青く見えてきました。
以前アプリ☆メーカーを書き換えるのにReactを使いました。それなりに早い段階での採用だったので自分で考えなければいけない部分があまりにも多くなってしまいました。webpackのconfigは?ルーティングは?状態管理どうする?SSRは?等。その結果、一人で開発するのでは全然開発速度がでない、品質も低い、変化も早くメンテナンスコストも高い、という失敗をしてしまいました。その失敗から、インタラクティブであることに高い価値があるサービスだったり、開発チームが大きいのでなければ全然コスパが良くないなという印象でした。
なので、しばらくは距離を起きつつ横目にちらちらと進歩を見ていたのですが、最近の動きを見ていて、ここらでもう一度手を動かして触ってみたいなと思ってきました。
これから作るサービスで、ネイティブアプリ展開もあるかもしれないなと考えているものがあります。
RailsをAPIサーバにして、WebのフロントにReactやVueを使うという選択肢はありますが僕はそういう使い方はHTML中心であるRailsの良さの半分を捨てることになるので、微妙かなと考えています。それならNext.jsの方がきれいに見えます。
Web寄りの自分を含む少人数で、Webもネイティブアプリもカバーしたいと考えたとき、React Nativeが魅力的に見えます。React Nativは軽く触った印象、style周りも標準のコンポーネントも結構いい感じだなと思っているので、React Native for WebでのWeb開発はどんな感じなのか、というのを試してみたいと思ってきました。
まだ開発が進んでいなさすぎてなんとも言い難いですが、それぞれの印象。
get*Props
でうまいことやってくれるのも/api
か getServersideProps
か、今回はCloud Functionsもあり。どれも使ってみて結構良いものだなと思いましたが、やはりRailsと比べると重要でない決断をかなり多くの場面でしないといけないようには感じます。学びながらなので比較しづらいですが、WebだけであればRailsの方が結構開発速度がでそうかなという印象です。
ネイティブアプリへの展開までRails(Basecamp) wayに乗っかるのなら、HTMLを中心に起きつつもネイティブアプリもつくる
turbolinks/turbolinks-iosみたいな方向もあります。こちらでどの程度のものが作れるのかが気になってきました。
特に開発中のHeyは最初からネイティブアプリありでスタートするとのことなので、その方向でDHH, Basecampが何か新しい道を示してくれたりするのだろうかと少し期待しています。
また、Railsを使っていると最高に便利なのはActiveRecordで、他の選択肢でも同じような生産性が出せるのかというのは結構大きな懸念点です。Prismaや、Hasuraあたりも試してみたいところでしたが開発時間的に全然そこまでいけませんでした。
ひとまずは好印象なのでもう少し開発を進めつつ、RDB周りはどうかというのも探っていきたいと思います。