cover image
💻

Greenfile.work使用技術と方針

tag
技術
プロダクト
エンジニア
writer
DDaisuke Suzuki

全体的な開発の方針

プロダクト開発において、専門領域に特化したエンジニアではなく、ビジネスからユーザーへの提供価値まで考えてほしいという思いがあります。
そのため、弊社のエンジニアはフロントが得意な人やバックエンドに詳しい人、という個性はあるものの、基本的には一つの機能・一つの提供価値においてすべての領域に関わっていることを大切にしています。
 
使用技術は大きく「フロントエンド」と「サーバーサイド」「インフラ・DevOps」の3種に分けています。
それらの技術選定や現在の開発フローについて簡単に説明します。

フロントエンド

notion image

技術スタック

  • 言語:TypeScript & JavaScript
  • ライブラリー:React
  • 状態管理:Redux (redux-thunk, redux-saga)
  • スタイルライブラリー:Styled Components & Sass
  • エディター: Visual Studio Code

方針

もともと、弊社のGreenfile.workローンチ時は、JavaScript を使用して開発していました。
これは、サービスローンチ時に開発速度を優先するための技術選定で、開発者の少ない状況ではベストな選択だと考えています。
サービス運用を続けていく中で、導入社数が増え、サービスを利用するユーザーが増えていく一方、開発組織の拡大を見据えた時、より属人化を防ぎ、チーム開発を効率化する手法として JavaScript から TypeScript への移行を進めています。

サーバーサイド

notion image

技術スタック

  • 言語:Python / Kotlin
  • Web Application Framework:Django / Spring Boot
  • エディター:Visual Studio Code / IntelliJ IDEA

現在の方針

バックエンドも、フロントエンドと同様の話になりますが、ローンチ時にはビジネス戦略上、PMF前の戦略転換やシステムリプレイスを想定し、開発スピードと致命的なバグ・手戻りの少なさの観点からメンバーに知見のあったPython / Django REST frameworkを使用して開発を行いました。 建設業界の会社間の関係性の複雑さや、関係者の多さなど、ドメイン特有のロジックや機能を実装していくにつれ、パフォーマンスチューニングの限界や型付を曖昧にできることのコード的な見通しの悪さなど、チーム開発においての障害が前述のメリットを上回るようになったため、PythonからKotlinへ段階的に置き換えていくことを検討・実施中です。

今後について

前述の通り建設業界は複雑であるものの、継続的な機能改善を行うことがSaaSとしてユーザーの方々に期待されていることでもあります。
そのため、継続的な機能改善がしやすい構造にすべく、PdMと相談しながらドメインモデルの設計を行っています。
プログラミング言語は静的型付けであり、Better Javaとして扱いやすいKotlinを採用しています。
アーキテクチャの構成としてはドメインモデルを表現する層、アプリケーションを構成する層、Frameworkに依存する層に分け、メンテナンスがしやすいことを心がけています。
 

インフラ・DevOps

技術スタック・ツール

notion image
 
システムを利用において、安定稼働・アジリティを保ちながら運用のコストのバランスを考慮し、プロダクト開発に注力するためにパブリッククラウドであるAWSをベースにプロダクトを構成しています。 ユーザー目線ではサービスを安定的に提供するため、開発目線ではプロダクトの新機能・機能改善のリリースサイクルを担保するために、マネージドサービスを活用しつつ、ドメイン機能単位でコンテナ化しリリースを行っています。 インフラを構成する方法に関してはできるだけコード化を実施し、 運用上影響が少ないところからAWS CDKを利用しInfrastructure as Codeを構成しています。 AWS CDKで作成されてない部分に関してもeksctlaws cliのシェルスクリプトを作成し、 手動での作成を排除しなからのインフラを構成しています。 また、ローカルの開発環境においてもminikubeコンテナ環境を再現し、 Telepresenceにより連携サービスを再現しています。
 

今後

インフラ・DevOps全般のSRE領域において、少し遠い目で、プロダクトの効率を育てることに注力していきます。 安定稼働と運用の効率化を軸に、セキュリティや再現性のバランスを取りながら、ユーザーはもちろん、プロダクトにとっても最適な構成を探っています。