Skip to content

bicstone/portfolio

Repository files navigation

Oishi Takanori (@bicstone) ポートフォリオ & ブログ

GitHub Actions による CI check の結果 GitHub Actions による本番環境へのデプロイの結果 GitHub Actions による検証環境へのデプロイの結果 FOSSAによる依存関係のライセンススキャン結果 sonarcloudによる静的スキャンの結果 DeepSourceによる静的スキャンの結果 Javascript Standard Style を採用しています

2020 年に作成したポートフォリオサイトです。
2022 年には、ブログ機能を追加しました。

PC・タブレット・スマホでポートフォリオサイトを表示した写真、マルチプラットフォームに対応したことを示す図

構成

Gatsby.js + Amazon CloudFront (Cloud Functions) + Amazon S3 を用いた Jamstack 構成としました。

※ 検証環境は GitHub Pages を使用

特徴

パフォーマンス

  • SSG で構築しており、ビルド後の資産は完全に静的であるため、高速で応答します。
  • インフラには、Amazon CloudFront + Amazon S3 を用いており、ユーザーの最寄りデータセンターから転送されるため通信が安定します。
  • Cache-Control HTTP ヘッダーを適切に設定しており、2 回目以降に余分なダウンロードを防止したり、逆に古いコンテンツが表示されることを防ぎます。
  • 画像やサードパーティスクリプトなどは遅延読み込みを行っています。
  • Lighthouse を使用しレビューを受けています。

セキュリティ

  • SSG で構築しており、ビルド後の資産は完全に静的であるため、脆弱性による改ざん等のリスクが軽減されます。
  • セキュリティを強化する HTTP ヘッダを設定しています。 (ただし広告配信のため CSP は最小限度の設定)
  • 利用可能な暗号スイートを TLSv1.3 と TLSv1.2 に限定し、2022 年現在判明している脆弱なプロトコルをブロックしています。
  • Mozilla Observatory, DeepSource, SonarCloud を使用し、レビューを受けています。
  • 使用ツールは二要素認証を用いたアカウント保護を行っています。
  • GitHub の Environments や Protection rule などを活用し、ブランチやシークレットの保護を行っています。
  • Personal access token が必要な場面では、すべて Fine-grained PAT を用いて最小限度の権限を与えています。
  • AWS への認証において OpenID Connect を活用しています。短命の認証情報を用いることで、リポジトリにシークレットを保持せずにデプロイをしています。
  • Renovate を用いて依存関係を定期的にアップデートしています。
  • 2023 年まで DNSSEC を構成し、DNS キャッシュ ポイズニング攻撃や DNS スプーフィングなどのリスクを軽減していました。2023 年に廃止しました。

アクセシビリティ

  • 文字と背景とのコントラスト比は 4.5:1 を超えるように設定しています。
  • ダークモードでは、彩度を下げて目に負担がかからないようにしています。
  • キーボードのみで操作できるように設計しています。
  • テキストブラウザや音声ブラウザで使用できるよう、セマンティクスなマークアップで実装しています。
  • 代替テキストや、必要に応じて WAI-ARIA を設定しています。
  • axe 及び Lighthouse でレビューを受けています。

DevOps

  • GitFeatureFlow を採用しています。
  • CI/CD や SaaS を使用することで、開発効率を高めつつ、継続的な自動化と品質保持を行っています。
  • Amazon CloudWatch による監視を行っています。
  • FOSSA を用いることで、ライブラリ追加時のライセンス管理を行っています。
  • Sentry を用いてエラー管理を行っています。

テスト

使用技術

言語 / FW

  • TypeScript (strict モード)
  • React.js
  • Gatsby.js (プラグインを活用し高速に構築ができるため選定)
  • MUI material (一覧性の高いダッシュボード風のデザインにするため選定)
  • Emotion
  • MDX
  • Prism.js
  • React Virtuoso

ツール

  • Webpack
  • Babel
  • ESLint
  • prettier (フォーマットを自動化することで省力化)
  • graphql-code-generator (型を自動生成することで省力化)

CI / CD ツール

  • husky (ローカル環境での CI)
  • GitHub Actions (CI / CD)
  • SonarCloud (静的レビュー)
  • DeepSource (静的レビュー)
  • FOSSA (ライセンスの管理)
  • Renovate (ライブラリ管理)

その他

  • Google Tag Manager
  • Google Analytics
  • Sentry

タスクランナー

ローカルサーバーを立ち上げ

yarn develop

プロダクションビルド

yarn build

プロダクションとしてサーバーを立ち上げ

yarn build
yarn serve

キャッシュのクリア

yarn clean

リンターによる静的解析

yarn lint

リンターによる静的解析(自動修正モード)

yarn lint:fix

TypeScript による型検証

yarn typecheck

GraphQL の型情報を取り込む

yarn graphql

amazon s3 への deploy

yarn deploy

動作対象ブラウザ

package.json の browserslist を参照

Submodule について

content ディレクトリ及び static ディレクトリは、著作権などが複雑になるのを避けるため、非公開リポジトリで管理しています。

contentcontent-sample ディレクトリをコピーして作成してください。

static は空のディレクトリを作成してください。

ライセンス

  • ディレクトリ内に LICENSE ファイルがある場合、そのライセンスに従います。
  • Git Submodule で参照しているプライベートリポジトリは ライセンスなし(未公開) です。
  • その他は MIT License

FOSSAによる依存関係のライセンス集計