きっかけ
サークルの先輩方が各自自分のポートフォリオサイトを持っているのを見て自分でも作りたいな~と思いました。
やりたいこととしては、
- とりあえず形にして公開する
- ドメインが欲しい!
- CSS に時間がかかるとイヤだったので Material-UI を使ってみる
- フロントエンドを React、バックエンドを Go 言語を使ってみる
- デプロイは fly.io を使ってみる
- ブログ記事をデータベースで管理してみる
といったことを考えていました。
Go 言語を使ってみたいと思った理由としては、サークル活動の講習会で Go でバックエンド開発をしてみようという講義がきっかけでした。先輩の作ってくれた講義資料はこちらから見ることができます。
...がしかし作ってみようとしたもののかなりの重実装になりそうだったので途中で断念しました。やっぱりバックエンドは難しい。
ドメインの取得
やはり、自分のサイトを作る際にドメインがあったほうがいいなと思い、Cloudflare Pagesでドメインを取得しました。年額$10.44 でした。(安い!)
現在は、新しいポートフォリオサイトをbatoran.comで公開しています。動作はしませんがアーカイブはこちらになります。
フロントエンド
TypeScript
フロントエンドはコード品質の担保と開発効率の向上から TypeScript を使って開発しました。
TypeScript の存在は初めて知りました。どうやら TypeScript は JavaScript に型定義を追加したもので、型の異なる関数呼び出しや代入をコンパイル時に検出することによりプログラムの品質を高めることができるようです...メモメモ...(とほほの TypeScript 入門より)
Material-UI
デザインは、CSS に時間かけたくないという個人的な(怠惰な)理由から Material-UI を使いました。ここでも初めて UI コンポーネントライブラリを使いました。開発が楽になる一方で、デザインがほかのサイトと被ってしまったり、カスタマイズが難しかったりという問題があるなと感じました。
バックエンド
Go言語
Go言語を初めて開発で使いました。
実装した機能は
- ログイン機能(単一認証)
- 記事管理画面
- 記事作成画面からの記事投稿
- 記事削除機能
です。一応形にはなったけど、超最低限度の実装になってしまいました。(まあ動くけど、見せられるものじゃないよね程度です)
デプロイ
自分自身、デプロイってなあに?からのスタートでした。
調べてみると、fly.ioが無料で使えるみたいなので使ってみる。しかし、常時起動できないためサイトを公開したもののサーバーがきちんと起動してない状態になってしまいました。
勉強になったこと
フロントエンドとバックエンドの連携
これも開発を進めてみて知ったことですが、クライアント側がサーバーにGETやPOSTなどのリクエストを送り、それに対しサーバーがデータを返す(レスポンス)というやり取りが行われていることを知りました。
こんな感じでヘッダを付与してサーバーにリクエストを送り、サーバーからデータを受け取っています。
JWTを使った認証
認証はハッシュ化したパスワードを照合する形にしました。
あとは、一定期間のログイン状態を保持したかったため、JWTを使った認証を実装しました。
とにかく調べていろいろなサイトを頼りに実装しました...
データベース
ブログ記事をデータベースで管理するために、SQLite3 を使いました。SQLite3を単体で操作したことはあるものの、Go言語との連携は初めてでした。
まとめ
主にバックエンドの開発について学ぶことができました。認証、データベース、CORSの実装などバックエンドならではの分野を学ぶことができました。
記事の作成から一覧表示、削除までの機能ができただけでも苦労しました。おそらく、最初から目標を高く設定しすぎたのではないかと思います。
まだまだ実力不足・理解不足であるので、今後もっと知識を深め改良できたらいいなと思います。