ASINとJANコードを変換するサイトを作った

LaravelとVueの勉強を兼ねて作ってみた。 MWS-APIPA-APIを使用すれば、ASINからJANコード(EANコード)を取得できるがAPIキーが必要なので、何もなくてもASIN・JANコードの相互変換できるサイトを作った。
需要は多分ない。

asin-to-jan.firebaseapp.com

Laravelはレイヤードアーキテクチャっぽく作った。この規模だと必要ないんだろうけど練習も兼ねてやってみた。 Controller→Service→Repository→Eloquentみたいな感じでサービス層にロジックを集めたが、結局RepositoryからはModelのオブジェクトを返してるので、やろうと思えばService層でDB更新したりできるから、あんまり意味なかったのではという気がしている。RepositoryでDTOに詰め替えればいいような気もするが、カラムが多いので詰め替えるのもめんどくさい。結局、ORMとどう両立させればいいのかよくわからない。

サービスコンテナとMockeryに感動した

サービスコンテナとMockery使ったらめちゃくちゃテスト書きやすくて感動した。調子に乗ってモック使いまくってたら、テストは通るのにエラーになるみたいな本末転倒なことになったので、やっぱり面倒くさくてもなるべくモック使わないでテストするべきだった。モック使いまくって自分の思い込みで作ったテストみたいな感じになってしまった。

Nuxtを使う

Laravel MixでbladeとVueを簡単に使うことができるが、Nuxtを使ってみたかったので、フロントエンドとバックエンドを分けることにした。作っている最中はこれLaravel Mixで十分だったのでは・・・という気しかしなかったが、Firebase Hostingで一瞬でデプロイできて、ドメインを取る必要もないので結果的に分けてよかったと思った。デザインセンスがないのでNuxt + Vuetifyで楽をすることにした。Vueはほぼ初めてだったけど、途中で親子コンポーネントはpropsで親から子にデータ渡してemitで子から親にデータを渡すことを知って、なんとなくコツを掴んだ。でも再利用可能なコンポーネント作るのムズくない?と思った。

Dockerで構築

バックエンドはさくらのクラウドで一番安いサーバを借りた。 herokuとかで無料でやりたかったが、APIでガンガンにデータを取ってDBに貯める(使用するAPIではJANコードからASINの検索ができないのでDBにJANコードとASINのデータを持っている必要がある)ので、50Gくらいスペースが欲しかった。今まで開発環境でしかDockerを使用したことがなかったが、パスワードとか個人情報とか扱わないので思い切ってDockerでデプロイしてみた。nginxのSSL化に詰まったりしながらも割と簡単に公開できた。 ufwのこととか、portとexposeの違いとか色々知れたが、Dockerの知識というかLinuxとネットワークの知識が全然足りないなと思っている。。。
特に生半可な知識でDocker使っているのでセキュリティ関係が怖い。玄関の鍵閉めたけど窓全開でしたみたいなことが起きてそうで怖い。

reCAPCHTA

個人的にはお問い合わせとかアンケートはGoogle Formのリンク貼れば十分だと思っているが、reCAPTCHAを使ってみたかったからお問合せフォームを作った。前はパネルからバスの画像とか信号機の画像とか選ぶ必要があったけど、今は必要ないみたいです。

作ってみて

作ってみてというか最近すごい思うのが根拠はないけどWebアプリの仕事って徐々に無くなるのではみたいに思っていて、モバイルアプリ作ってみようかなと思ってる次第ですね。