ポートフォリオサイトをリニューアルしました! (技術的な解説あります)
はじめに
1年以上前から考えていた、ポートフォリオサイトのリニューアルがやっとできました。
といっても今回はまだシンプル版のリリースで
そのうちWebGLを組み込んだリッチ版をリリース予定です。
以下のサイトが以前のポートフォリオで、機能的にはまだ生きているんですが3年前に作ったもので技術も古く、あまり見せたくなくなってしまったのでこのサイトは更新せずに、お仕事のリリース報告などはSNS上でしていました。
が、やはりポートフォリオサイト上でしっかり残していきたいと思い、サイトのリニューアルを考えていたんですが、それから1年近くかかってやっとリリースできました。(まだフルバージョンではないですが、、)
デザインについて
デザインとしては、案件ごとに設定した色を活かしたいため、ベースカラーは白と黒のみにし、シンプルに仕上げました。以前のポートフォリオのトンマナを引き継いだ感じになっています。使用フォントはFuturaとNoto sans。
スマホ版を先にデザインしたので、割とモバイルに最適化されていますが、デスクトップでも見やすいレイアウトを考えました。
背景のパターンはページ遷移ごとにリアルタイムで生成しています。
案件の詳細ページはそれぞれ色を設定して、案件ごとの柄が出るようになっているところと、ロゴのアニメーションがお気に入りポイントです。
というかシンプル版を考えたときに、一番始めにこのロゴのアニメーションを思いついたので、そこからシームレスな動きができるようデザインを開始しました。
ちなみにこの柄は以前Sony FES Watch Uのコンペイベントのデザインを作るために実装したパターン生成の仕組みを使っています。せっかくWebの記述を使ったので、どこかで使いたいと思っていました。
WebGLを用いたフルバージョンの構想も一応できています。。いつできることやら。
使用した技術
・Nuxt.js (generate)
・Firebase (Hosting, Storage, Firestore, Funcitons)
・CircleCI
・GitHub API
コンテンツの管理はFlamelinkという、GUIからFirebase (Firestore, Storage)へコンテンツの入力ができるサービスを使用しています。
入力項目を自由にカスタマイズできるようになっています。仮にこのサービスが死んでも、Firebaseにデータ自体は残っているので安心です。
構成はこの記事を参考にして、コンテンツの配信はすべて静的なリソースで行っています (JAMstackというらしい)。
もともと別の個人的にお受けしているお仕事で、この構成を使っており、今回自分のポートフォリオ用にカスタマイズしました。その案件で上記の構成をとった経緯は簡単に言うと、Firebase (と自分)が死んでもすべて静的なリソースなので、レンタルサーバに載せ替えれば、とりあえずコンテンツの存続ができるからです。
step1
Flamelink CMSからコンテンツ更新 (Firestore) → Functions + GitHubAPIでFirestoreのデータをJSON化 & Storage上の画像をダウンロードしてGitHubリポジトリにpush
step2
GitHubリポジトリに特定のタグを付けたコミットをpushすると、それをトリガーとしてCircleCI上でnuxt generate → firebase deploy としてデプロイ
という流れです。
最初は更新があったらdeployまで一気にやるつもりでしたが、管理画面からちょこちょこ更新したいシチュエーションがあり、そのたびにgenerateとdeployが走るのは良くないなと思い、deployのトリガーは別にしました。
CircleCIにはタグによって実行するWorkflowを変えることができるので、その機能を使用しています。
自分のサイトの更新時はCIもしくはSourcetreeからタグ付きコミットをpushすれば、generate & deployが走ります。前述の案件では、簡易的な管理画面を用意し、ボタンをクリックするとタグ付きの空コミットがpushされるようなFunctionを用意しました。
バックエンドの仕組みはこんな感じです。
フロントエンドはあまり複雑なことはしてないです。Nuxtがいろいろうまくやってくれています。
ただ、試験的に設定機能 (settings)を設けています。設定項目は
display mode
・full (フルver. 現在選択不可 開発中)
・simple (シンプルver.)
・minimum (超簡易ver.)
に切り替えが可能。単純に情報が見たい場合用に用意してみました。fullは今後リリース予定のWebGLあり版です。
menu position (モバイルのみ)
メニューの位置を
・bottom - right (右下)
・bottom - left (左下)
・top - right (右上)
から選べます。個人的には右下が好きなので、右下がデフォルトです。
auto light / dark mode
OSのカラースキーム (light or dark) の設定をサイト上に自動に反映するかどうかを選べます。この機能はブラウザがCSSのメディアクエリ (prefers-color-scheme) をサポートしている場合のみ使用できます。
現在はFirefoxとSafari (iOS以外)が対応している機能です (2019年7月8日現在)。Google Chrome、iOS Safariは次のバージョンから対応予定です。
light / dark mode
light or darkモードが選べます。「auto light / dark mode」がonのときはこの項目は自動で設定されます。
最近、OSやアプリのダークモードがぽつぽつと出始めていますが、今後Webアプリなどでもダークモードが出てきたりするんでしょうかね。今回はなんとなくつけてみました。
というわけで、技術的な解説 (メモ程度ですが、、)でした。