![見出し画像](https://assets.st-note.com/production/uploads/images/12827446/rectangle_large_type_2_8828abe5e959897bc1bcb48502bbe53b.png?width=1200)
ポートフォリオサイトをリニューアルしました! (技術的な解説あります)
はじめに
1年以上前から考えていた、ポートフォリオサイトのリニューアルがやっとできました。
Finally I redesigned my portfolio site!!
— Takumi Hasegawa (@_unshift) July 8, 2019
But this is not full version. I'm building it now (with WebGL).https://t.co/D7fXcTvPXp
You can change settings for some experimental functions from "menu > settings".
Please try it!#unshiftjp #portfolio #nuxtjs #firebase pic.twitter.com/dTwQnPiQBg
といっても今回はまだシンプル版のリリースで
そのうち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は次のバージョンから対応予定です。
"auto light / dark mode" function depends on whether a browser supports "prefers-color-scheme", so currently only Firebox and Safari (macOS) support. pic.twitter.com/DBa2fFpLs0
— Takumi Hasegawa (@_unshift) July 8, 2019
light / dark mode
light or darkモードが選べます。「auto light / dark mode」がonのときはこの項目は自動で設定されます。
最近、OSやアプリのダークモードがぽつぽつと出始めていますが、今後Webアプリなどでもダークモードが出てきたりするんでしょうかね。今回はなんとなくつけてみました。
というわけで、技術的な解説 (メモ程度ですが、、)でした。
いいなと思ったら応援しよう!
![Takumi HASEGAWA (unshift Inc.)](https://assets.st-note.com/production/uploads/images/68933680/profile_d6402d097e6560ec8427f01c83c7bf3a.png?width=600&crop=1:1,smart)