HapInS Developers Blog

HapInSが提供するエンジニアリングの情報サイト

HapInSの技術選定

はじめに

この記事ではHapInSの技術選定について紹介します。

技術スタックと選定理由

それぞれの領域における技術選定を紹介します。

インフラ

HapInSのインフラは基本的にクラウドベースの構成となっています。 また構成管理もコードで行い、ソフトウェアと同じように変更管理を行っています。

クラウドサービス

AWS, GCP / Firebase

クラウドAWSGCP / Firebaseを使い分けています。
基本的なWebアプリケーションの構築はAWSベースで行っています。 採用している企業が多く、グローバルでナレッジが豊富なため採用しています。
一方でモバイルアプリ開発時にはFirebase、AI関連の開発時にはGCPを利用しています。 またGoogleWorkspaceを活用したお客様の場合にも、GCPを活用するケースがあります。

CI / CD

GitHub Actions

CI / CDにはGitHub Actionsを利用しています。 GitHubにサービスが同梱されていることや、昨今エコシステムがかなり整ってきていることが採用理由としてあげられます。

Codemagic

モバイルアプリのCI / CD基盤としてはCodemagicを活用しています。 モバイルアプリ開発で利用しているFlutterと相性がよく、またノーコードツールとして活用しているFlutterFlowとも連携できるため採用しています。

IaC (Infrastructure as Code)

Terraform

コードでのインフラ構成管理にはTerraformを利用しています。 複数のクラウドプロバイダーで利用できることや、学習コストの低さからTerraformを採用しています。 環境毎の差分を無くしたり、予期せぬ設定変更を防ぐために活用しています。

ソフトウェア

言語

Typescript (Javascript)

フロントエンド、バックエンドともにTypescriptベースで開発をしています。 エンジニアのリソース効率を最大限高めるために、フロントエンドとバックエンドの言語を統一しています またGAS (Google Apps Script) を扱うこともあり、知識を幅広く転用できるのも魅力の1つと考えています。

フロントエンド

React

フロントエンドのフレームワークとしてReactを採用しています。 フロントのフレームワークの中で一番利用されているかつ、エコシステムが非常に整っているため採用しています。 他のフレームワークと比較し一定の学習コストはかかるものの、中 〜 大規模のシステム開発にも活用できるため採用しています。

Tailwind CSS

デザインシステムとしてはTailwindを採用しています。 他のデザインシステムと比較し自由度が高いことが特徴で、受託開発の特性上一定の自由度を担保しつつデザインシステムを活用したいというケースにマッチしているため採用しています。

Feature Driven

設計手法としてはFeature Drivenなディレクトリ構成をとっています。 バックエンドと比較しLayeredな構成の利点を活かしきれないかつ、最近主流の構成となっているため採用しています。

バックエンド / DB

Node.js

バックエンドはNode.jsで構成しており、フレームワークは規模に応じて使いわけています。 小 〜 中規模の場合はExpressを利用し、中 〜 大規模の場合はNestJSを利用しています。

PostgreSQL

データベースとしてはPostgreSQLを利用しています。 またデータベース管理はNode.js用のORMであるPrismaを利用し、データベースアクセスやマイグレーション管理を抽象化しています。

DDD x Clean Architecture

設計手法としてはDDDとClean Architectureを採用しています。 受託開発の場合クライアントによって要求やモデリングが大きく異なるため、お客様の要求を正しく把握するためDDDベースでの設計を行っています。 また構成に関しても、中 ~ 大規模のものは全てClean Architectureベースで統一しています。 責務を明確にするという設計的な観点だけではなく、エンジニアが複数案件を担当した際のコンテキストスイッチや認知的負荷の低減も目的としています。

モバイルアプリ

Flutter

モバイルアプリ開発には、クロスプラットフォーム開発用のFlutterを採用しています。 こちらもエンジニアのリソース効率を高めるため、iOS / Androidともにシングルソースで実装できるFlutterを採用しています。 また同じクロスプラットフォーム開発向けのReact Nativeと比較し、Flutterは独自のレンダリングエンジンを利用しているためOS、バージョン差分が発生しにくいことも採用理由の1つです。

ノーコード / ローコード

HapInSでは小 ~ 中規模の開発やMVP開発において、ノーコード / ローコードを採用しています。

Google AppSheet

業務アプリケーションの領域ではGoogle AppSheetを活用しています。 Google Workspaceで利用できるノーコードツールで、非常に簡単に業務アプリケーションを作成することができます。 また他のGoogle Workspaceサービスとの接続性も高いため様々なシーンで活用しています。

Bubble

Webアプリケーションの領域ではBubbleを活用しています。 自由度の高いノーコードツールで、多様なニーズに応じた開発ができるためtoC領域のWebアプリケーション開発に採用している。

FlutterFlow

モバイルアプリの領域ではFlutterFlowを活用しています。 Flutterベースの開発をノーコード / ローコードで行うことが出来るサービスで、Flutterのコードとしてダウンロードもできるため採用しています。 小 ~ 中規模のアプリやデザインのみをFlutterFlowで作成し、その後コードベースで開発するなどハイブリッドな活用もしています。

HapInSにおける技術の扱い方

HapInSでは技術はあくまで手段として捉えており、クライアントに応じて適切な技術選定を行うことを重視しています。 一方で技術を深掘りする好奇心や、技術を好きな気持ちも非常に重要視しており、エンジニアの方が気になる技術を積極的に触れる環境も同時に提供しています。

最後に

HapInSでは上記のように様々な技術を活用して、お客様のビジネス成長に貢献しています。 もし弊社での開発に興味のあるエンジニアの方は、ぜひ一度お話ししましょう。

また「まだシステムの要件が決まってない」「お願いしようとしている開発会社で良いのか分からない」「見積を貰ったけど何を基準に選定すれば良いか分からない」など、お悩みを抱える企業様も是非一度HapInSのエンジニアと会話してみませんか?

blog.hapins.net