見出し画像

Laravel・AWSを学習してポートフォリオを公開してみた

こんにちは! コーダー実務1年ほどのよわよわエンジニアです。

ポートフォリオを作ろうと思ったきっかけは登録者数45000人ぐらいのYoutuberの知り合いからWEBサービスの開発を依頼されたことでした。

Laravel+AWSを使ったWEBサービスの開発を学習しながら進めることになったのですが、それについて振り返りたいと思います。

最初はVue+Firebase

依頼されたのは昨年の11月頃で、当時はVueCLIとFirebaseを使ったフロントエンドの技術だけで作ろうとしていました。なぜなら当初は「知る人ぞ知る会員サイト」というイメージを持っていたから。この時期はUdemyをメインでJavaScript+Vueを学習していました。

しかし、依頼者と話を進めていくと途中から実際に利用されているような本格的な会員サイトを作る構想であることが途中でわかりました。

そのため、データベース等もしっかり組まないと後々大変になることがわかったため、改めて技術選定することに決めました。つまりフロントエンドだけでは不十分で、サーバーサイドやAWSのようなクラウドの環境も用意する必要があると考えた訳です。

もちろん知識も経験もないので1から勉強する必要がありました。

この決断を12月に行い、仕事納めの翌日12/26から本格的な学習を進めるための体制を作るために、MENTAという現役エンジニアを雇う準備を進めました。

MENTAでメンターを調達・学習準備体制を用意

いろんなメンターを確認して3人ほど契約前の通話をしました。

その際に自分が特に悩んでいた、「RubyとPHPの言語のどちらを使用すべきか」、ということを主に相談することにしました。

MENTAで話した方の1人はRubyを勧めてきました。理由は「日本語のドキュメントや解説が豊富で初心者に何度が低く、まず開発する感覚をつけることが大事」とのことでした。

一方、他2人はPHPを勧めてきました。理由は「Ruby」の場合はプロトタイプなどを開発する際は楽だが、その後の運用が厳しいらしく実際の企業案件でもRubyエンジニアがすぐ転職してしまうほどだから、とのこと。逆にPHPを扱うLaravelの場合はそうでもないようでした。

それぞれの話を吟味した結果、自分はPHP及びLaravelを選び、クラウドはAWSを使用することに決めました。

MENTAの契約条件は

・月2回通話(1回1時間を目安)

・slackで質問し放題

この条件で月10,000円の支払い。

PaizaでPHPとLaravelの学習

会社の仕事納めがあったからというのもあるのだが、学習開始した昨年12/26はテンションが高く、土曜日の夜に駅前のホテルやネカフェに泊まり、日曜の朝からカフェで勉強するといったことをしていた。そのほうが時間を効率的に使えると思ったからです。

学習方法については、メンターからpaizaラーニングという動画学習サービスを使って学習するように指示されたので、ひとまずそれを利用することにしました。

順番はPHP→Laravel→データベース関連といった感じです。

正直理解は深められてないけれど、立ち止まるのは嫌だったのでどんどん進めるようにしました。

paizaの学習を一通り進めた後は、実際のローカル環境でLaravelの開発を進めました。

Laravelについてはひとまず下記を覚えることが大事だと思います。

・MVCについて理解を深める

・コマンドでデータベースを操作するマイグレーションの操作やモデルの概念

・コントローラファイルからbladeファイルへのデータの渡し方の基礎やweb.phpを使ったルーティング

UIについて

UIやURL設計は動画サイトであるpaizaやUdemy、またMENTAを参考にした。

コースのindexページを用意すべきか、それとも直接動画ページまで飛ばすか、またbladeのファイル自体はどのディレクトリ構成で置くか、ネーミングはどうするか、数字で採番ですべきかなどについて悩みました。

データベース設計

ある程度できるようになったら、データベースの設計に取り掛かりました。

本来はプロジェクト作成前に構想すべきだと思いますが、全くの初心者がこれをやるのは無理かと思います。

そのためここはMENTAの人に相談しベースを一緒に作ることにしました。

PK, FKとか中間テーブル、リレーション、多対多の関係の概念を初めて知リマした。

・ユーザーテーブル

・動画テーブル

・上記の中間テーブル(視聴履歴)

また、中間テーブルからデータを取り出す際はモデルファイルにリレーション(関連)を貼る必要があるのですが、ここが自力ではどうしても解決できませんでした。

Laravelではモデルにメソッドを追加してその中にbelongsToとかbelongsToManyといったワードを指定する必要があります。

ここら辺は初心者が1人でやろうとすると必ず躓くと思います。

それからシーダーも覚えると便利です。

`php artisan migrate:fresh --seed`

のコマンドは暗記すべきだなと思いました。

AWSでデプロイ

ある程度できてきたら今度はデプロイを試みました。

最初はHerokuで行うことにしました。「.gitignore」で誤って/public/ディレクトリ以下を指定しまっていてデプロイできないエラーの解消がかなり時間がかかりました。

HerokuはherokuとGitのコマンドをドキュメント通りにやっていけば基本的に難しくないかと思います。

そしてその次はレンタルサーバとAWSでのデプロイを試みることに。

しかし、ここが難しく約1ヶ月かかり進められずでした。

公開するためのドメイン自体はお名前.comから取得することにしました。ここは営業メールが非常に多いのでムームードメインでもいいかもしれないです。

AWSの学習は主にUdemyとTechpitを使いました。

VPC:ネットワークの環境を作り

EC2:サーバを用意。sshコマンドでターミナルからサーバにログイン

Route53:ドメインとIPアドレスの紐付けを行う

RDS:t2microのMySQLでデータベースを用意

ACM:https化の証明書を発行

sshコマンドでターミナルからサーバにログインする初めての経験だったのだが、ここで基本的なLinuxのコマンドを覚えました。

特に下記のコマンドはよく使いました。

cd / pwd / ls / ls -la / cp / vim

AWSを利用してLaravelプロジェクトをデプロイするには、EC2サーバにログインした後に、特定のプロジェクトディレクトリでgit pullをし、ライブラリをインストールすためにcomposer install, npm install, npm run watchコマンドを実行することでできる。

...と思っていたのだが、他にもapacheかnginxの設定が必要な様子。ここでのパーミッションとかの設定にも苦労した。

とにかく辛かったのは「何が原因かわからないこと」でした。

AWSが原因だとしたらAWSの何が悪いのか、もしかしたらAWSではなくapache側かもしれないし、その他かもしれない。実務未経験者にはハードルが高く感じました。

メンターに相談して1ヶ月かけてなんとか解決し、https化に成功しました。

公開後は機能の追加

公開時の機能は、「一般と管理者用のアカウントの切り分け(role)」「ログイン機能」「動画視聴機能」「視聴履歴保存」ぐらいでした。

ここから「メモ機能」「非同期処理」「メール送信機能」をつけたいと思っているのですが、なかなか進まずという状態です。

まだPHPの基本的な記法やコントローラからビューへの渡し方もしっかりと理解できているわけではないので、ここは復習します。

5月末に一旦リリース予定なので、あと約1ヶ月、勝負どころ。

ここまで読んでいただきありがとうございました!

それでは!


この記事が気に入ったらサポートをしてみませんか?