kawasawa / kawasawa.github.io

制作物や執筆記事、業務経歴をまとめた Web サイトです。

Home Page:https://kawasawa.github.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

@kawasawa

概要

筆者の制作物、執筆記事、業務経歴をまとめた Web サイトです。

技術情報

実装はフロントエンドのみで、React を基盤とし MUI でインターフェイスを構築しています。
システムの展開と運用は GitHub で行っており、バックエンドに相当する処理は Google 内のサービスで代用しています。

技術スタック
開発言語 TypeScript
フロントエンドフレームワーク React
CSS フレームワーク MUI (Material UI)
リンター ESLint
フォーマッター Prettier
テストフレームワーク Jest
パッケージマネージャー Yarn
CI/CD GitHub Actions
ホスティング GitHub Pages
ER 図 tbls
API 仕様書 ReDoc
API テスト Newman
性能テスト K6
ライセンススキャン FOSSA
脆弱性スキャン Snyk
カバレッジ計測 Codecov
エラー解析 Sentry
アクセス解析 Google Analytics
バッチ処理 Google Apps Script
データ永続化 Google Spread Sheets
メール配信 EmailJS , SendGrid

アーキテクチャ

Web サイトは GitHub Pages によってホスティングされています。
アクセス情報は Google Analytics で、エラー情報は Sentry で解析されます。
ページ内に表示される Qiita の記事は、Apps Script により自動取得されたものです。日次で収集されるこれらの情報は、DB の代替として永続化を担う Spread Sheets に蓄積されており、クライアントは Google Sheets API を介してレコードを抽出します。
また、問い合わせの送信はメールによって通知される方式で、この処理は EmailJS を介してフロントエンドから直接実行され SendGrid によりメール配信が行われます。

overview

ワークフロー

CI/CD は GitHub Actions によって実現されており、パイプラインは master ブランチへの merge をトリガーにスタートします。
静的解析 (ESLint)、UT (Jest)、IT (Newman)、性能テスト (K6)、ライセンススキャン (FOSSA)、脆弱性スキャン (Snyk) を順次行い、これらの検証をパスすればアプリをビルドします。
ビルドされたアプリは、ER 図 (tbls), API 仕様書 (ReDoc)、検証レポート類 (Codecov, Newman Reporter, K6 Reporter) と併せてデプロイされ、Web サイトが GitHub Pages にリリースされます。
連携された Slack からは、パイプラインのステータスを確認できます。

workflow

開発情報

開発環境

開発環境で React アプリケーションを動かす際は、GCP への疎通は行わず、API 処理をモックで代用します。モックは Express と MySQL を組み合わせた API サーバが Docker 上に展開されたもので、アプリケーションはこのサーバに対して疎通を試みます。

development

現在は macOS で開発しておりますが、もともとは Windows 上で環境構築していたため、使用したツール類は macOS / Windows 対応のクロスプラットフォームアプリを中心に選定しています。VS Code でのコーディングとテストのほか、Sourcetree でのバージョン管理、Docker での環境構築、Chrome での動作確認からなります。ローカルで実行されるモックサーバに対する API テストやパフォーマンス測定に意義はありませんが、実際の開発現場に近い環境を用意したく必要なツール類を導入しています。
なお、使用する Node.js のバージョンは .tool-versions をご確認ください。

製品
OS macOS
パッケージ管理 Homebrew
バージョン管理 asdf
Web ブラウザ Google Chrome
Docker コンテナ管理 Docker Desktop
コードエディタ Visual Studio Code
OpenAPI エディタ Stoplight Studio
Git クライアント Sourcetree
DB クライアント TablePlus
API クライアント Postman
性能テストツール K6
作図ツール draw.io

ディレクトリ構成

プロダクトのディレクトリ構成を下記に示します。
app 配下がフロントエンド (React ソースファイル) に、mock 配下がバックエンドのモック (Express ソースファイルおよび MySQL 構成ファイル) となっています。

+--.github             // GitHub関連ファイル
|
+--.vscode             // VSCode設定ファイル
|
+--.workspace          // その他雑多なファイル
|
+--app                 // Reactアプリケーション
|  |
|  +--public           // 公開ファイル
|  |
|  +--src              // ソースファイル
|  |  |
|  |  +--api           // APIリクエスト
|  |  |
|  |  +--assets        // 静的ファイル
|  |  |
|  |  +--components    // ページに配置される部品
|  |  |  |
|  |  |  +--controls   // 部品を構成するコントロール
|  |  |  |
|  |  |  +--dialogs    // 部品に内包されるダイアログ
|  |  |
|  |  +--entities      // オブジェクト
|  |  |
|  |  +--hooks         // カスタムフック
|  |  |
|  |  +--locales       // 多言語情報
|  |  |
|  |  +--pages         // ページ定義
|  |  |
|  |  +--utils         // 汎用処理
|  |
|
+--mock                // モック
|  |
|  +--db               // MySQL設定ファイル
|  |
|  +--server           // Expressアプリケーション
|  |  |
|  |  +--src           // ソースファイル
|  |  |  |
|  |  |  +--api        // API処理
|  |  |  |
|  |  |  +--db         // DB処理
|  |  |  |
|  |  |  +--routes     // ルーティング処理
|  |  |
|  |
|
+--tools               // ツール類
|  |
|  +--gas              // GASソースファイル
|  |
|  +--k6               // K6テストコード
|  |
|  +--postman          // Postmanテストコード
|  |
|  +--swagger          // OpenAPI定義ファイル
|  |
|  +--tbls             // tbls設定ファイル
|

あえてやっていないこと

  • ブランチ戦略
    本来であれば、ブランチを main, develop, feature などに分け、レビューを経て製品版にマージするのが常套ですが、本開発ではこれを実施しません。
    大きな要因としては、比較的頻繁に変更が入る上、実験的な内容も多く、コミット履歴が荒れることを嫌ったためです。また、ポートフォリオサイトという特性上、開発者が筆者一人に限られるためレビューに有効性がありません。

  • 本番環境分離
    通常、Web サイトのリリースでは、資材をステージング環境に展開しテストを経てから本番環境に適用します。
    本開発では、アプリケーションを更新する際、即座に本番環境の資材が置き換えられます。CI/CD パイプラインで静的解析、テスト、スキャンが済んでおり、仮にリリースミスやデグレードが発生した場合も影響範囲は限られ、容易に切り戻し可能なためです。

ドキュメント

プロダクトの品質評価に関わる資料を下記に列挙します。

開発者向けの資料を下記に列挙します。

以上

About

制作物や執筆記事、業務経歴をまとめた Web サイトです。

https://kawasawa.github.io

License:MIT License


Languages

Language:TypeScript 94.7%Language:JavaScript 3.2%Language:Makefile 1.2%Language:HTML 0.8%Language:CSS 0.2%