はじめまして。
IT業界未経験、プログラミング未経験の状態から独学でwebアプリを作製しました。
きっかけは趣味で使いたいアプリが無かったことです。
自分用に開発し始めてすぐにのめり込み仕事にしたいと思うようになり、一般向けに軌道修正してポートフォリオとしました。
※この内容はQiitaの記事と同じです。(4/25時点)
また、当面はQiitaのみ更新の予定です。
どの配信の何分何秒に何を歌ったか
の把握が難しいのが唯一の欠点です。通常画面 | ハンバーガーメニュー |
---|---|
アクセス方法は秘密です。
※元々使っていたのですが、ステルスリリースという一般的にある手法ということを昨晩知ったので掲載しました。(4/9追記)
言語、サービス | フレームワーク/ライブラリ |
---|---|
Next.js v13.5.6 | TypeScript v5.1.6 React v18.2.0 react-hook-form v.7.47.0 react-select 5.7.7 react-table 7.8.0 react-youtube 10.1.0 |
Go v1.18 | GORM v1.25.4 GIN v1.9.1 go-sqlmock v1.5.1 godotenv v1.5.1 ozzo-validation v3.6.0 (記載漏れのため追記) |
MySQL v8.0.32 | - |
ER図 | 画面遷移図 main, header/footer |
---|---|
GitHub リンク | GitHub リンク |
縮小画像掲載 予定 |
縮小画像掲載 予定 |
ER図
AWS構成図
プログラミング、IT業界ともに未経験で着手し独学で作りました。
Go
Gin
Next.js
MySQL
アーキテクチャ
Reactの流儀
を模倣するに留め、機能ごとにフォルダ分けすることで既存コードを探し出しやすい構成にした。
ページ構成やCSSも関わってくることから学習初期段階でクリーンアーキテクチャや完璧なアトミックデザイン等を導入しても適切に運用できるとは思えなかった。結果として将来を通して開発コストが増加してしまうものと考えた。機能要件
非機能要件
N+1問題対策:
正規化して設計
取得時はJoin使用
SQLインジェクション対策:ORM導入
不正なログイン対策:CookieにJWT保持
DB流出時の被害減少および平文が開発者(私)に見えないように:
パスワードをbcryptでソルト付けてhash化
メールアドレスをAESで暗号化
クリーンアーキテクチャを採用し、拡張と修正しやすさを向上
https化
コンテナ化で開発環境と本番環境の差を低減(Docker)
コンテナを一括管理(Docker Compose)
ステルスリリースページ(4/8追記)
※後日掲載予定
非常に長かったと思いますがここまでお読みいただきありがとうございました。
ここからはただのお気持ち表明になります。
このアプリを開発する上で、自分が大事にしたのは目的を見失わないことです。
そして、全ての機能はこれを達成するための手段でしかありません。 仮に気に入らない状態になっていても、仮にまだ実装したい機能があっても、目的に対して優先度が低ければ後回しにしています。 なので、実務レベルには遠く及ばないでしょうが都合よく言えばMVP開発です。
以下、自己流ですが同じような境遇の人に何か役立てばと思います。
GitHub issue |
Discord thread |
threadの中身 | 初期はDiscordのチャンネルにメモってました 管理しにくかったです |
---|---|---|---|
3 . 必要と思ったことはやる YouTube iflameのバグにぶつかった話です。 OSS公式ドキュメント通り書いても、期待通り動きませんでした。 バグの映像YouTube
OSSを類似品に変えてもダメでした。 サンドボックスので何でも試しました。 コード
react-playerサンドボックスのissue ↓ 解決しませんでしたYouTube
react-youtubeサンドボックスのissue ↓ 解決しませんでしたYoutube
自分の問題では無いと確信し、OSS issueへ投稿しました。 結局、同じ境遇の人から裏技的な回答をもらい、一応解決しました。 react-playerissue #1725
解決実践した自issue
ただ疑問なのは、こんな大掛かりなバグ、大問題になってもおかしくないです。本当は自分の使い方が間違ってるのかも?
4 . 他人の意見ももらう デプロイと同時にまずは知人にフィードバックをもらい、機能追加やバグ修正を行いました。未対応のものもGitHubのissueに記録しています。
5 . Xでとりあえず呟く どうしても分からなければXで呟きます。教えてもらえることもありますし、他人に分かるように情報を精査してまとめることで、問題の切り分けが進んだり問題は解決していなくても1ステップ進んだような気持ちになり、ストレスが軽減されていたように思います。結果、ポスト後に自己解決できたりします。
6 . paiza様コーディングテスト
Bランクに昇格すると紹介できる求人が増えるとのことでポートフォリオ完成前にチャレンジ。
2問目でなんとかクリア。(目標時間を数分オーバーし減点され昇格ならず。)
1問目は全く分からず、ご飯中やお風呂中も考えてなんとか正解には辿り着けました。慣れているうちにと、直ぐに2問目に挑戦しました。
ちなみに、そのエージェント様に再確認したところBランクでも30歳に紹介できるところは無かったと言われ挑戦をやめました。(ポートフォリオ作成に戻りました。)
ただ、1ヶ月後に別の方に変わってからGoの自社開発企業様を紹介していただけました。
今後も追加したい機能が山のようにあるので、仮にエンジニアになれなかったとしても開発は続けていきたいと思っています。
ちなみに、一番集中できたときで1日で19時間コーディングしてました。 (31時間くらい起きており、そのうち連続した24時間のなかの19時間) 人生でこんなに集中力が続いたのはじめてで、気がついたらそんなに経っていたという感じで楽しかったです。 逆に、この365日で1時間もやらなかった日はありません。 普段は1人暮らしですが、親の体調不良で看病のために帰省した際は、ゲーミングデスクトップからモニター(2枚)から全て持ち帰って意地でもやりました。
30歳を節目に未経験へのハードルがぐっと上がる業界の様ですが、悔いの残らない転職活動になるよう最後まで頑張ります。
もしご質問があればこの記事、Xのポスト、リポジトリのissue等にご連絡ください。 自分の勉強やV-karaの品質向上につながると思いますのでできる限りお答えします。