🙆‍♀️

4ヶ月で電子契約サービスを立ち上げた

に公開

先日、OpenSignという電子契約サービスを公開しました。

サービスの構想から公開まで約4ヶ月、ほぼすべての修正をCoding Agent経由で行いました。最初の1週間で概ね形になったものをお客様に売れるレベルに引き上げるのに、残りの(ほぼ)4ヶ月が必要だったという感覚でした。

AI時代に小さな会社が新規サービスを立ち上げた振り返りを書いていきます。

2025/07/10 自分の課題を解決する

株式会社ティヒは2023年に創業し、商業登記簿API登記くんを中心としたサービスを展開しています。社員が1名の小さな企業です。

登記くんを運営する中で、お客様との契約には電子契約サービスを利用していました。事業が軌道に乗り始め、お客様と契約をする機会が増えていざ有料プランを比較してみると、月額8千円〜1万円+1件100円〜(しかも年払いのみの場合も!)という強気の設定に驚きました。

電子契約サービスで検索すると何十サービスもHitしますが、いずれも同じような料金かつ、自分が使いやすいと思えるサービスも見つかりませんでした。

ちょうどClaude CodeやCodexなどのCoding Agentが実用的な水準になってきていたこともあり、1ヶ月位でつくれるだろうという(結果的には甘すぎる)考えで、開発を始めました。

2025/07/10

電子契約の仕組みについては、PDFをアップロードして契約の当事者がサービス内で署名をしていくという程度の解像度しかありませんでしたが、その日のうちにFEとBEをローカルで起動し、ポータルサイトとして操作できる状態にできました。

将来的にCloudRunで動かすことを念頭に、FEはNext.js、BEはGo(Gin+sqlc)、DBはPostgreSQLを選びました。


最初の数日で30万行くらい書いたようです。

2025/07/19 AATL証明書での署名

競合サービスの生成したPDFを分析し、電子契約として成立している状態はなにかということを調べ始めました。PDFに証明書を使って電子署名できる仕組みがあること、そしてAdobe AcrobatでPDFを開いたときに署名済みと表示されるには、証明書の中でもAATL証明書を利用する必要があることがわかりました。

証明書を使ってPDFに署名するには主に3方式があることもわかりました。

  • USBドングルに格納した証明書を利用する方式
    • 自動化が難しい
  • HSMに格納した証明書を利用する方式
    • 主流だがHSMに格納する方法が不明
  • プロバイダーのAPI経由で署名する方式
    • 1件いくらなのでコスト的に厳しい

PoCとしてssl.comのAATL証明書を使って、電子署名の付与に成功しました。

この時点で、原理的には電子契約サービスを立ち上げるためのブロッカーはないという確信を得たので、大きめのタスクを切っていって一つづつ取り組みました。

  • 決済・請求
  • ログイン周り
  • ビジュアル署名(PDFにスタンプの画像を挿入)
  • Dev/Prod環境の整備

2025/07/22 決済ロジック

Stripeのテストアカウントを通して、クレジットカード登録・決済ができました。StripeのPayment/SetupIntentの仕様には元々詳しかったので、あまり苦労しませんでした。

2025/07/26 値付けを決める

プランを、100件まで2200円で使い放題、超えたら110円/件と決めました。競合サービスの最安ラインが6000円だったので1/3にしました。


mikeshimura/goreportをもとにした請求書作成スクリプトを作って、月次で領収書が発行されるようにしました。

2025/08/02 ビジュアル署名


PDFにスタンプを入れられるようになりました。並行して、サイバートラストさんにAATL証明書の見積もりを依頼しました(HSM納品タイプ)。

2025/08/05 テンプレート機能のスコープアウト

契約書のテンプレートを保存して使い回せる機能を開発していましたが、どうしても機能が複雑になってしまうので要件から落とす決断をしました。

通常プランに加えて、SSOが利用できるコーポレートプラン(22000円)を提供することにしたので、SSOの仕様について調べ始めました。

このあたりからどこを触っても何かがデグレするようになってきました。

2025/08/12 SSO併用モードの衝撃

SSOと呼ばれているものに、大きくSAML2.0とOAuthがあることを理解し、今回はSAML2.0をサポートする方針を決めました。

  • パスワード認証モード
  • SSO・パスワード認証併用モード
  • SSOだけモード

の3つのモードを用意するという発明を
boardさんから学びました。通常のパスワード認証を使っていたお客様が、途中でSSOを有効にしてSSOのみに移行する際に、SSO・パスワード認証併用モードを経由していただくことで安全にSSOに移行することが可能になりました。

この時点では仕様を決めただけで、SSOの実装は完了していません。

2025/08/25 Sendgrid

Sendgridを契約しメール送信をAPI経由で確認しました。それまでは、ローカルでmailgunを使って開発していました。
このあたりはとにかく動いているものの質を上げていく作業をしていました。

2025/08/30 dev環境の立ち上げ

terraformを使ってCloudflareとGCPの設定を行い、dev環境を立ち上げました。

2025/09/06

テナント、組織のモデルを整理しました。Organizationと読んでいたモデルをTeamへとマイグレーションするなど、概念レベルの整理をし続けました。

また、Cloudflare Access+tailscaleを使ってdev環境にアクセスできる仕組みを構築しました。

2025/09/15 SSO成功

かなめりぜさんのSAML入門という本を読んで実装したら、正味2日でローカルで使ったSSOが疎通しました。SAML2.0についてAIがかなり詳しいのと、keycloak、SAML-tracerというツールが強力でした。

開発風景

2025/09/15 ~ 2025/10/17 マイナーチェンジ、デグレ、バグ

SSOが動いたことで、基本的な機能の動作確認は完了しましたが、とにかくとてつもない量の問題がありました。リストアップ→修正→デグレを修正を1ヶ月間ひたすらに繰り返しました。CodexのVibe Kanban機能を使ってのリファクタリングも精力的に行っていたこともあり、10/17時点で1297PRを作りました。

example

2025/10/05 本番環境でのHSM格納AATL証明書を使った署名

本番環境を構築したうえで、サイバートラスト様から納品いただき署名に成功しました。

2025/10/15 Okta経由のSSO成功

OktaのDeveloperライセンスを発行していただき、SSOログインに成功しました。IDPによってメタデータファイル、メタデータURLを使うパターンなどいろいろあるので主流なパターンに対応しました。

2025/10/20〜2025/10/31 利用規約・プラポリ策定・LP

弁護士の先生のお力をお借りして利用規約・プラポリの策定を行いました。

並行してLPのブラッシュアップを行いました。

Arcadeという素晴らしいツールを発見し、LPに組み込みました

2025/11/04 サービス公開

https://opensign.jp としてサービスを公開しました。SEOの設定やGoogle Search Indexへの登録、会社HPへのリンクなどを行いました。

Google Formを使ったお問い合わせ導線の整備、Sentryの導入、ログの構造化も行いました。

終わりに

AI時代に新規サービスを立ち上げるのはとても貴重な体験でした。最初の1週間で概ね形になったものをお客様に売れるレベルに引き上げるのに、残りの(ほぼ)4ヶ月が必要だったという感覚でした。

特に、仕様変更をすると思わぬところで大量のバグとデグレが発生するのが非常に大変でした。序盤に書いたテストは途中でほとんど消しました。大部分の期間は手動での動作確認のみで開発を進め、最後の1ヶ月でpytest + playwrightを使った自動テストを整備していきました。
また、データモデルは(特にお客様がついてしまうと)変えられないのである程度動作したタイミングでスキーマを総点検しました。

OpenSignはこれから実際にお客様に使っていただく段階で、まだスタートラインに立ったところです。ここからさらにサービスの質とお客様のサポートの質を追求していくつもりです。

Discussion