はじめに
この3か月間でいくつかの技術を使ってWebアプリをデプロイしました。 悩んだことの一つが技術選定です。 初心者なのであまり広く手を広げると身につくものが少なくなってしまうとは思ったのですが、一般的な原則を理解するのに役立つと考えて、できるだけ多くの技術を試しました。 そのうちのいくつかについてまとめてみます。
電車の経路案内アプリ
利用した技術
フロントエンド: React, Redux
バックエンド: Express, Prisma
デプロイ: Vercel
自己評価: ★☆☆
振り返り
初めて作成したアプリです。主要な駅から有名な観光地への経路を提案することが目的でした。
まず、Reduxはこのアプリには過剰でした。このサイズのアプリでは必要ないとは思ったのですが、好奇心から使ってみました。シンプルな機能であっても、より多くのコードが必要だったのでかかる時間が増えてしまいました。また、特有の用語や書き方を学ぶ必要がありました。迅速にサービスを提供したい場合、Reduxは使わない方が良いのではないかと思います。useContext
とページルーティングを使うだけで十分な気がします。
あと、ソフトウェアやシステムアーキテクチャの重要性がよくわかりました。このアプリだと、経路を検索するロジックや、APIからデータを取得、編集、管理するアーキテクチャが鍵になるポイントです。このあたりの設計や実装は学んだ内容に関連しているはずですが、かなり異なる経験や知識が必要だと思いました。\
独自のサービスを作るためには、それに適したアイデアやビジネスデザインが必要で、アプリ構築より前の段階のソフトウェア設計やインフラで専門性が求められると感じました。この分野で知識と経験を意識して深めたいと思います。
Reduxはこのアプリの要件には少し複雑すぎたため、星1つにします。
わかってはいましたがもっと適した技術スタックがあると思います。
シンプルチャットアプリ
利用した技術
フロントエンド: React, React Router
バックエンド: Golang, Redis
デプロイ: Vercel
自己評価: ★☆☆
振り返り
Golangに興味があったので使ってみたところ、プラットフォームによる制約について経験することができました。
最初はWebSocketを使ってチャットアプリを実装しようと考えていました。ただ、VercelはGolangを完全にはサポートしておらず、GolangはServerless Function
としてのみサポートされていました。これは呼び出されたときにのみ動作するため、GolangにこだわってしまうとVercel上でリアルタイムのチャットアプリをGolangで作ることはできませんでした。
このプロジェクトのテーマがこのアーキテクチャに合わなかったため、星1つです。
リアルタイムの接続が求められないWEBアプリならうまくいったと思います。
言語学習アプリ
利用した技術
フロントエンド: Next.js, NextAuth
バックエンド: Django RESTフレームワーク
デプロイ: Railway
自己評価: ★★☆
Review
このアプリはチームで協力して作りました。
個人的に最初の2つのアプリでは、ページルーティングと状態管理が課題だったと思います。Next.jsを使うことで、フォルダーやコンポーネントを整理して構築することができました。あと、ルーティングシステムは直感的で柔軟性があり、とても役に立ちました。Nextjsにはその他にも優れた特徴がありますが、この開発で最も有用だったのはこのルーティングシステムだと思います。
Djangoでは、データ操作がDjangoのモデルのおかげで簡単でした。モデルにより、データ操作のためのコードをわかりやすく書くことができ、スキーマに対して直接操作ができるような感覚でした。
Railwayは小規模なアプリをホスティング・デプロイするのに良いプラットフォームだと感じます。無料プランがあり、多くの言語をサポートしているからです。あとDockerファイルもサポートしているので、さまざまなケースで使えると思います。
Next.jsとDjangoはほとんどの場合うまく機能しましたが、組み合わせるのが少し難しい瞬間もありました。両方ともフルスタックフレームワークなので、相性については少し自信が持てないです。改良の余地が感じられるので星2つと評価しました。
ちなみに開発したものはこちらです!触ってみてください!!
Conclusion
現時点では、フロントエンドとしてNext.jsを最初の選択肢にしてみようと思います。
バックエンドには興味があるのでなるべくGolangを使ってみたいですが、他の選択肢もありですね。