2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
TABETEのフロントエンドをNuxt.jsでリプレイスする話(全1記事)
リンクをコピー
記事をブックマーク
榊原徹哉氏(以下、榊原):最初に自己紹介になりますが。私は榊原徹哉といいます。好きな言語やフレームワークはVue.jsとか、Rubyが好きです。好きなものはガジェットです。例えば、indiegogoでおもしろいガジェットを漁ったりとか、家をスマートハウス化したりしています。最近の趣味はInstagramで、会社のInstagramを運営しています。良かったらフォローしてください。
今コークッキングという会社で働いているんですが、仕事は「TABETE」というB to B to Cのフードシェアリングサービスをつくっています。まず、その「TABETE」について説明します。飲食店さんが本当は食べて欲しいのに、急な天候の変化でお客さんが想定よりも少なかったり、Twitterでコース料理のドタキャンなどの理由で「食材や料理が余りそうだな」と感じた時に、お弁当としてTABETEに出品します。
ユーザーは出品情報を見て、サービス上でクレジットカード決済をして、指定された時間にお店に行けば、その料理をレスキュー、つまり手に入れることができます。TABETEは、「食べて欲しい!」という気持ちと食べる人(食べ手)を繋ぐサービスです。美味しい料理がお得に食べられるサービスなので、ぜひここにいるみなさまも使ってください。よろしくお願いします。
(スライドを指して)これは現在のTABETEを構成しているアーキテクチャの全体像です。ここに一応Firebaseを使っていたりするんですけど、WebとかAPIとか、バッチとか管理画面とか、そういうものはぜんぶRubyで書いています。先月「Ruby biz グランプリ」というRubyの特徴を活かして、新たなサービスを開発している企業を対象としたグランプリがあったんですけど、大賞をいただきました。
ちょっと待てと。「Rubyしか書いていないって言ってたけど、これってVue.js の勉強会だよね?」と思われた方がいると思うんですけど、 フルRubyで開発している現在のサービスのフロントエンドをVue.jsにリプレイスします!
ということで、仕切り直してTABETEをフロントエンドが理由でリプレイスする話です。
今日のアジェンダです。最初にリプレイスするきっかけの話をして、その次に言語・フレームワークの選定、最後にVue.jsを導入して良かったことなども話したいと思います。まず、リプレイスするきっかけについてです。そもそもリプレイスしようという話の発端は、現在のTABETEのデザインを一新するということが大きな理由です。
現在のデザインはデザイナーさんではなく、リリースのために取り急ぎCOOにデザインしてもらったものでしたが、最近ついに念願のデザイナーを雇うことができました。このタイイミングでTABETEの世界観をより一層出すために、サービスもデザインも一新することになりました。
さて、現在のベースはRubyなので、そこからフロントエンドの見えるところだけを改修するのか、それともすべてを一新するリプレイスをするのかという議論になりました。(スライドを指して)ここ1年のおおまかなスケジュールです。横軸が2018年の1月から2019年の1月で、時間軸です。
最初の3ヶ月ぐらいはサービスの開発やリリースをして、iOSのアプリ開発したり、管理画面をいきなりリプレイスしたりとか、あとはWebサービスの全国版対応やAndroid版の開発など、いろいろやっていました。スケジュールを見てわかるとおり、今運用されているサービスのほとんどの管理画面、API、フロントエンドは、全て3ヶ月で開発したものを用いています。
最初の構想として、リリースの1ヶ月前までは「データベースにアクセスするのは全てAPI経由でやろう」と思っていました。でも、リリースに向けて圧倒的な開発速度を求められたために、中途半端に「もうWebからもアクセスしよう」とか、直接データベースを叩き始めて、しかもロジックをWebアプリケーションのほうに書いたりとか、かなり可読性の悪いことになっていました。
ただ救いとしては、APIはけっこうきれいに書いていて、実は今のAPIを開発する前に、3種類ぐらいプロトタイプ実装をしていて、「どれが一番開発しやすいか」「変化に対応できるか」という議論を行っていました。その結果を反映したことで、突然の方針変更やシステム改修とかは速度感を求められるんですけど、そういうものにもついていけるようなソースコードになっていました。ただ今回はフロントエンドの話なので、その辺はちょっと省略させていただきます。
iOSアプリはWeb開発が終わったあとなので、サービスに必要なAPIのすべてを開発していました。その結果フロントエンドの改修コストは最小限になっていたためいつでも改修できるような状態でした。
ここまで説明したとおり、Webアプリケーションのソースコードが汚いということと、必要なAPIはすべて揃っていたので、改修ではなくリプレイスすることに決めました。
次は「どの言語で開発しよう」とか、「フレームワークをどうしよう」という時の話です。いきなりですが、サーバーはホスティングサービスを利用したいという思いがありました。現在のWebサーバーというのはGoogle Compute Engineというものに載せていますが、通常1台構成で運用しており、テレビ放送があるときにサーバーを手動で増やして、デプロイもCapistranoなどのデプロイツールを使っていないので直接サーバーに入って、ソースコードを直接引っ張ってきたりというような事をして対策をしていたんです。
ただ、APIのほうはGoogle App Engineにのっかっていて、メディア露出の際の負荷対策とかもオートスケーリングがあるのですごく楽だったんですけど、「今の現状をどうにかしたいな」という思いがあったので、Firebase Hostingを使い、同時にJavaScriptにリプレイスする事にしました。Firebase Hostingの導入は学習期間を含めて2時間程度でできるので、みなさんも試してみてください。
JavaScriptに書き換えることは決まりましたが、よく話題になるのがReact.jsにするか、Vue.jsにするかなどのよくある「宗教論争」です。(スライドを指して)これは日本ではなくて世界のGoogleトレンドでReact.jsとVue.jsを比較したものなんですが、Vue.jsのほうが人気があったりよく書かれているということなんですけど、Vue.jsはシンプルで少ないコード量でいろいろできたり、最初の学習コストがけっこう少ないので、Vue.jsを採用しました。
最後に導入して良かったことについてお話しします。
まず初めに公式ドキュメントがとても充実しているのことに、すごく驚きました。フロントエンド界隈では普通なのかもしれないですけど、かなりリッチでした。例えば、サーバーサイドのドキュメントだと、サンプルを落としてきてがんばって起動して、いろんなコードを読んで、「あっ、必要なのはここか!」「じゃあ、いろいろ改変して試してみよう!」みたいな感じの流れなんですけど、Vue.jsはドキュメントを表示しているブラウザ上でいきなり実行や修正できる事に感動しました。
また、コミュニティがDiscordとかにもあるんですけど、とても優しいんです。しかも日本語で質問できるから、GitHubやStackOverFlowにがんばって英語に翻訳して投稿したけど、返事が返ってきてもよくわからないみたいなことが起きません。実際にチャット内に、「Enterキーを押したら送信されて悲しい」とか、「どうやってDiscordを触ればいいの?」みたいなことを書いている人がいるんですけど、「ググれ!」って言われるのかなと思ったら「改行はShift + Enterで」と言われていたりして。これって優しすぎますよね。
また、「決済はStripeを使いたいな」と思っていたので、「Stripe Vue.js」で検索したら、CodePenとかに、もうすでに動くやつがプラウザ上で動作するものが既にあったりしました。
この様に、Vue.js界隈の優しさや先人の知恵の膨大な量により、学習コストが開発速度に大きな障壁にならなかった事が使ってみて良かったと感じたポイントでした。やっぱりVue.jsは楽しいです。
最後になりますが、もともとサーバーサイドのエンジニアだったので、Googleやコミュニティに助けられながらですけど、フロントエンドの開発をするのはとても楽しいです。まだUIやUXの知識とかは全然足りていないんですけど、コミュニティに助けられてばかりなので、逆に貢献できる側になりたいなと思います。本日はご清聴ありがとうございました。良かったらTABETEを使ってください。
(会場拍手)
関連タグ:
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2024.11.29
「明日までにお願いできますか?」ちょっとカチンとくる一言 頭がいい人に見える上品な言い方に変えるコツ
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.04
いつも遅刻や自慢話…自分勝手な人にイラっとした時の切り返し 不平等な関係を打開する「相手の期待」を裏切る技
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.03
職場の同僚にイライラ…ストレスを最小限に抑える方法 臨床心理士が語る、「いい人でいなきゃ」と自分を追い込むタイプへの処方箋
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
2024.12.05
「今日こそやろう」と決めたのに…自己嫌悪でイライラする日々を変えるには
PR | 2024.12.04
攻撃者はVPNを狙っている ゼロトラストならランサムウェア攻撃を防げる理由と仕組み