ソフトウェアエンジニア

公明正大

誰もが簡単に業務改善に取り組める製品を開発し、あらゆる仕事の非効率を解消することで社会とソフトウェアの関係を再構築する。
製品を通して社会を変えていくためには仕様通りのものを作るだけではなく、ユーザーの、そして社会の課題を認識し、そこに我々だからできる解決策を提示する必要があります。

高い志を叶えるには技術力はもちろん、「良いソフトウェアを作りたい」という強い思いと、力を発揮できる組織環境が必要不可欠です。

トヨクモは、1人のエンジニアの力と影響力を信じています。
力を発揮しやすいような技術環境や開発体制を整え、また文化として定着しているナレッジ共有を通してチームと共に学習し、成長し続けることができるようにしています。

なるべく多くの人を非効率な仕事から解放し、人々が真に必要な価値創造に集中できる社会を、共に創りませんか。

会社紹介資料

製品開発の思想

弊社は「1つのことをうまくやる」製品を作りたいと思っています。

多くの場合新しい製品が売れると、より多くのユースケースに対応することで幅広いお客様に購入いただこうと仕様を拡張していこうとすると思います。しかし弊社ではそれをしません。

何か製品を作ろうとするときは最初に「これがあったら便利だな」「こういう不便を解消できたらいいな」といった課題意識(= コアドメイン)があると思います。弊社はそれを大事にし、様々なご意見・ご要望を頂いたときに、コアドメインと照らして適合しなければ対応しないというポリシーを持ち続けて開発しています。そして解決すべきではあるが、コアドメインに適合しない課題であれば別製品で解決するか、「製品間連携」という弊社製品間を組み合わせて1つの問題を解決するような仕様を作ることで解決するという方法をとってきました。

このようにしてエンジニアが仕様の全体像を把握しながら開発できるサイズに留め、スピード感を持って製品開発を続けています。結果、1製品を2〜6人の全体を見ることのできるエンジニアで開発し続けることができるようにしています。

技術スタック

インフラはAWSを中心に、FirebaseやVercelなども活用しています。アプリケーションのスタックとしては大きく分けて3種類あります。
1. PHP(Symfony)+TypeScript(Vue.js)
2. Clojure+ClojureScript(React)
3. Clojure(GraphQL API)+TypeScript(Next.js)
どのスタックの製品に参加していただくかはご経験とご希望によります。記載と同じ言語の使用経験は必須ではありません。

技術スタック紹介

業務の魅力

裁量が広い

弊社の製品開発ではエンジニアやデザイナーの裁量が広く、チームで議論しながら、仕様から決定して開発を進めています。社内には開発ロードマップを常に共有しており、なぜやるのか、その仕事はどこにつながっているのかを理解できるため、やらされ仕事感はなくオーナーシップを持って開発に参加できます。

幅広い経験を積める

現時点での実力や経験によってそれぞれの範囲は異なりますが、原則として開発メンバーはインフラからフロントエンドまでを視野に開発をしています。
「ある製品の一部の役割のAPI開発」などではなく、ユーザーの課題解決のために必要なことを横断的に行なっていくため、ソフトウェアエンジニアとして「1つのソフトウェアを作り育てる」経験を積むことができます。

刺激し合えるチーム参加

現状のトヨクモの開発メンバーは技術が好きなメンバーに恵まれていると思います。
その一員として製品のことだけでなく、技術について雑談・議論しながら仕事をすることができます。

OSSへの貢献

弊社はOSSへの貢献に力を入れています。業務の中で必要なPRを送ることはもちろん、自社OSSの公開や、寄付活動Thanks OSS Awardも行なっています。
特にOSSへの寄付については今後より拡大していく計画です。
製品開発だけでなくOSSを通して広く世の中に貢献することもできます。

成果の実感を直接得られる

弊社は社内の情報が極力制限されずに公開されており、ユーザーからの問い合わせ内容のすべてを知ることができます。またユーザー会などでの直接の会話を通してユーザーからフィードバックを受ける機会もあります。
また自分が開発を続けてきた機能によって売上が伸びる経験や、自分が開発している製品が実際に行政や他社で使われていることに接することもあり、そこから成果や社会貢献の実感を得て開発を続けることができます。

技術スタック紹介

開発体制・環境

開発メンバーの裁量

  • OS やエディタ、IDE といった個人の環境は、各自の責任で好きなものを使うことができる

  • 企画を決定する場に、実装を担当する開発メンバーが参加している

  • タスクの見積もりは、実装を担当するメンバーが中心となって行う

  • 全体のスケジュール管理は、途中の成果を随時確認しながら、納期または盛り込む機能を柔軟に調整する形で行う

  • プロダクトの開発言語やフレームワークなど主要な構成技術は、基本的に最新版より1年以上ビハインドしていない

コード品質向上のための取り組み

  • 社内ライブラリを作成し製品を横断してコードをシェアしている

  • 本番にデプロイされるコードには、全てコードレビューまたはペアプログラミングを実施している

  • 「リファクタリングは随時行われるべき」という価値観をメンバー全員が共有しており、日常的に実施している

  • コーディング規約をチーム全体で遵守するようにしている

  • 提出されたコードには自動的にリグレッションテストが実行される環境が構築されている

  • 静的解析ツールを導入して、CIを通している

テストの実施度

  • ほとんどのプロダクトコードに単体テストを記述、実施している

  • 機能の実装と同時にテストコードを記述している

  • 想定される複数環境での品質チェックを義務づけている

アジャイル実践状況

  • カンバンフローで開発している

  • 1ヶ月以下の短い期間でのイテレーション開発を実践している

  • 継続的なデプロイ(デリバリー)を行っている

ワークフローの整備

  • 全てのコードをGitHubで管理している

  • 各メンバーが実装したコードのマージはプルリクエストベースで行われる

  • 自動(=システム化され、1コマンドで実行できる)ビルド、自動デプロイ環境が整備されている

  • コードによるインフラ構成管理(Infrastructure as Code)の環境が整備されている

オープンな情報共有

  • 開発に必要な全ての資料やデータ(個人情報を除く)は、実装を担当するメンバーなら誰でも、上長その他の許可の必要なく自由に閲覧できる

  • KPIなどチームの目標・実績値について、メンバーの誰もがいつでも閲覧可能になっている

  • Slackを全社的に導入しており、チームのためのチャットルームがある

  • Scrapboxを使って、ノウハウや議事録、日報などの情報共有を行っている

  • 過去の対応理由と履歴をドキュメントとして残しており、なぜ今こうなっているかがわかるようにしている

  • 特定の人だけしかできない業務が存在しない(属人性をなくす取り組みをしている)

労働環境の自由度

  • 仕事中、イヤホンの装着が許容されている

  • リモート勤務を行うことができる(人によって可能な日数が異なる)

メンバーの多様性

  • 開発部門に学生アルバイトを受け入れている

  • 外国籍のメンバーがいる

待遇・福利厚生

  • 入社時には、各自希望のスペックのPC(〜50万円程度)、4Kディスプレイ、好きなキーボードやマウスなどの周辺機器が支給される

  • 全員定価15万円以上のオフィスチェアが支給される

  • ストックオプションまたは自社株購入支援制度がある

技術カルチャー

  • CTOやテックリードやエンジニアリングマネージャーのポジションあり

  • 取締役としてエンジニアリング部門の人間が経営に参加している

  • エンジニアの人事評価にエンジニアが関わっている

  • エンジニアを対象にした勉強会、カンファレンスを主催したことがある

新たな挑戦をしよう!

大きな組織のエンジニアの場合、サーバーサイド、フロントエンドなど職域だけでなく、携わる領域も細分化して担当するのが通常です。 しかし私たちの場合、機能を絞ったシンプルな製品を開発しているからこそ、ユーザーの課題解決のために必要なことに横断的に携わる機会があります。 もちろん個人の経験とスキルによってスタート地点は異なりますが、最終的には1つのアプリケーション全体を構築し発展させていけるようになっていただきます。

また、JVMの上で動くLISPであるClojureを積極的に活用しています(入社後利用するかは配属によります)。ポール・グレアムさんが「普通のやつらの上を行け」というコラムを書いたのは2001年のことです。それから20年以上経った今でも、プログラマ、ハッカーの力を信じる我々にとって、Clojureで製品をつくるということは正しい選択だと信じています。

募集職種一覧

ソフトウェアエンジニア