Journalを支える技術

Journalというジャーナリングをするアプリをリリースしました。 ジャーナリングとは自分が思っていることを書き出すことで自分について理解を深めたり、自分がやりたいことを見つけるのに役立ったりします。 日記をイメージしてもらうのがわかりやすいと思います。 今回はJournalを支えている技術について紹介します。 フロントエンド Next.js フロントエンドはNext.js(React)とTypeScriptを使っています。 なるべくシンプルに作りたかったので全ページをSPAで作っていますが、SSGできそうなところはSSGを使って静的ファイルにしたいと思ってます。 Tailwind CSS CSSにはTailwind CSSを使っています。Next.jsとの相性が良さそうだったのとシンプルで使いやすそうだと思って選びました。CSSの知識が乏しいのでネットの有識者を参考にした結果、Tailwind CSSにしました。 Vercel フロントエンドの本番環境のデプロイ先にはVercelを使っています。 VercelはNext.jsの運営元でデプロイがとても簡単で使いやすかったので選びました。 GitHubのリポジトリを指定すれば自動でデプロイをしてくれますし、設定も少なめで本当に簡単です。 Vectr サイトのロゴやファビコンを作るのにVectrを使っています。Vectrはsvg形式のファイルを無料で作れるので利用しました。 バックエンド Echo バックエンドはGoのフレームワークであるEchoを使っています。 GoでAPIを作るのにEchoはとてもお手軽とのことだったので選びました。 アーキテクチャにはクリーンアーキテクチャを選んでいます。クリーンアーキテクチャでコードを書いたことがありませんでしたが、テストコードが書きやすかったり、外部のライブラリなどの依存が減るので採用してよかったなと思っています。 また、コード量が増えたことはデメリットかなと思います。 Cloud Run バックエンドの本番環境のデプロイ先はCloud Runを使っています。 ローカルの開発環境でDockerを利用していて同じようなDockerfileでCloud Runにデプロイができ、Cloud Runがいい感じにリクエストをさばいてくれます。 ただ、アプリが起動するまでに10秒弱ぐらい時間がかかってしまいAPIのレスポンス待ちになってしまうのがデメリットかなと思います。Cloud RunはフルマネージドでAPIを叩かれていないときはコンテナが起動していないのでレスポンスに少し時間がかかってしまうのは仕方ないですね。 Cloud SQL データベースの本番環境はCloud SQL(PostgreSQL)を使っています。 普段の仕事でも使っているRDBが自分としては使いやすいの選びました。 その他に利用しているサービス GitHub Actions CI/CDツール。バックエンドのデプロイに使っています。 Firebase Authentication ログイン認証のため。 Google Domains ドメイン取得のため。なるべくGCPにサービスを寄せている。

April 20, 2021 · 1 min · 49 words · Yu

Next.js(React),Go kit(Golang)で「SENRYU」を個人開発した

今回はじめて個人開発でアプリを作りました!!今年の1月に個人開発をしようと考えてから、アプリ企画・技術選定をして、開発途中で作るアプリを変えたりと色々と迷走しましたが、なんとか一区切りつきました!!(8か月ぐらいかかるなんてチンタラやってたなあ(笑)) 開発したアプリや今まで考えていたことなどをまとめます。 アプリ概要 川柳を共有することができるSNSアプリ「SENRYU」を開発しました。 機能 ログイン ユーザー登録 ログアウト 川柳一覧表示 マイ川柳一覧表示 川柳投稿 フロントエンド Next.js(React) フロントエンドにはNext.jsを利用しました。TypeScriptを使ってみたくて、TypeScriptと相性がいいReactを選択して、最近話題のNext.jsにしようと決めました。 Next.jsはルーティング設定が楽だし、SSG, SSR, SPAをページごとに設定できて便利だしと使って良かったなと思っています。ただ、認証はFirebaseやNextAuth.jsを利用して他のSNSアカウントとかでログインする実装にするのが楽だと感じました。 Material-UI ReactのUIコンポーネントライブラリであるMaterial-UIを利用してUIの基礎を作りました。簡単に見た目を整えることができるので、とても便利です。 styled-components Material-UIの見た目を調整したい時にCCS in JSのstyled-componentsを利用しました。TypeScript内でCSSを書けるので普段CSSとかを書かない僕には使いやすかったです。 バックエンド Go kit(Golang) 個人的にGolangを利用したかったのとマイクロサービス構成でアプリを作ってみたいという理由からGo kitを利用しました。使ってみた感想としてあまり日本語のドキュメントとかなく調べるのが大変でしたが、Golangにはホットリロードがあってコンパイルが速く言語に慣れれば開発スピードが上がりそうだなと思いました。 データベース MongoDB NoSQLを利用したことがなかったので今回利用しました。MongoDBの基礎的な知識を身につけることはできましたが、RDBMSよりもNoSQLを利用するメリットがあんまりわからなかったです。 開発環境 Docker マイクロサービス構成でアプリ開発をしていたので、それぞれのサービス毎にコンテナを作成しました。ローカルでDockerコンテナを立てて開発するときはVSCodeのRemote Containerが非常に便利でした。ぜひ使ってみてほしいです。 対象リポジトリ senryu-frontend senryu-user senryu-post 記事を書くまでの経緯 元々、今年の1月に他のサービス開発を考えていました。技術選定の時には Next.js(React) TypeScript Go kit(Golang) MongoDB Docker Github Actions AWS K8s マイクロサービス でアプリを開発してリリースをしようと思っていました。せっかくの個人開発だし勉強もかねて挑戦してやる!っていう気持ちで技術選定をしましたが、今思うとDocker以外はほぼ経験がなかったのでめちゃくちゃ無謀だったなと思います。(笑) そんな感じで技術選定をしてから要件や仕様決めて開発を始めましたが、わからないことが多すぎで全然進捗がなかったです。。亀の足のような遅さでしたがなんとか進めていた 4月頃か5月頃に気づいてしまいました。 「クラウドでK8s使うと金けっこうかかるやんけ!」 今思うと当たり前だし、調査不足すぎだよ自分。。ということがあり、最初に作りたかったサービスは世にリリースするのが厳しいなと思いましたが、せっかくある程度までは勉強して作っていたので、違うサービスとして開発をしてGithubで公開してポートフォリオ的な感じにしようと決めました。 といった経緯で今に至ります。結果的には個人開発したアプリをリリースすることはできませんでしたが、Next.jsとGolangを学べたり個人開発の雰囲気を味わえたので良かったです。 最後に 個人開発はすべてを自分で考えないといけないので、とても大変ですが技術選定や作業の進め方など誰からも指図されずに好きなようにできるので、楽しいし学びが多いですね。

September 20, 2020 · 1 min · 60 words · Yu