【ITニュース解説】How I Lost $8K in Freelance Work by Trusting the Wrong Tools
2025年09月20日に「Medium」が公開したITニュース「How I Lost $8K in Freelance Work by Trusting the Wrong Tools」について初心者にもわかりやすく解説しています。
ITニュース概要
フリーランスの仕事で誤ったツールを選んだ結果、8000ドルの損失を出した経験談だ。システムエンジニアを目指す者は、ツールの選定がプロジェクトの成否や金銭面に直結する重要性を学ぶべきだ。
ITニュース解説
筆者はフリーランスのWeb開発者として、あるクライアントから既存のECサイトのリファクタリングと新機能追加の依頼を受けた。ECサイトとは、インターネットを通じて商品を売買するウェブサイトのことで、オンラインショップとも呼ばれる。クライアントの既存サイトはShopifyという有名なECプラットフォームで構築されていたが、クライアントはShopifyの柔軟性のなさや手数料、検索エンジン最適化(SEO)の問題に不満を抱えていた。そこで、より自由にサイトをカスタマイズしたいという要望があったのだ。
筆者は当初、WordPressという別の有名なコンテンツ管理システム(CMS)を提案したが、クライアントはもっとモダンで最新の技術を使ったサイトを希望した。当時、筆者はNext.jsという高速で高機能なWebフレームワークと、Sanity CMSというHeadless CMSの組み合わせを学習中だった。Headless CMSとは、コンテンツの管理機能だけを提供し、見た目の部分(フロントエンド)は別の技術で自由に構築できるシステムのことを指す。この組み合わせが、モダンで高速、スケーラブルなサイト構築に最適だと考えた筆者は、自信を持ってこの技術スタックをクライアントに提案し、承諾を得た。
しかし、この選択が後に大きな問題を引き起こすことになる。筆者は、ECサイトのコアとなる「買い物かご」「支払い処理」「在庫管理」といった重要な機能について、Sanity CMSで実装することの複雑さや、Stripeのような決済システムとの連携の難易度を過小評価していたのだ。
Sanity CMSは、ブログ記事や商品情報といった「コンテンツ」を管理するには非常に優れたツールだった。しかし、顧客が商品をカートに入れ、注文し、支払いを行うという一連の「ビジネスロジック」を処理する機能は、元々備わっていない。これらの機能は、開発者がゼロから構築する必要があった。例えば、買い物かごの機能を実現するためには、ユーザーがどの商品をいくつ選んだかを記録する仕組みや、在庫数と連動させる仕組み、そして合計金額を計算する仕組みなどを、すべて手作業で作り上げなければならない。これは、本来コンテンツ管理に特化したツールであるSanity CMSの想定外の使い方であり、非常に複雑な作業となる。
開発が始まると、商品ページの表示やブログ記事の管理といった、Sanity CMSが得意とするコンテンツ関連の機能はスムーズに実装できた。しかし、買い物かごの実装や決済システムであるStripeとの連携に入ると、状況は一変した。Stripeのような決済ゲートウェイとの連携は、見た目以上に高度な専門知識と慎重な設計を必要とする。顧客のクレジットカード情報を安全に処理するためのセキュリティ要件、支払いエラーが発生した場合の適切な対処、注文確定、返金、一部返金といった複雑なワークフローの実装など、多岐にわたる課題が山積していた。
カスタムのEC機能をSanity CMS上に構築するためには、多数のAPIエンドポイントを設計し、実装する必要があった。API(Application Programming Interface)とは、異なるソフトウェアやサービスが互いに情報をやり取りするための窓口のようなものだ。これらを自力で開発する作業は膨大であり、また、商品の注文情報や顧客情報を扱うためのデータベースの設計も非常に複雑になった。加えて、顧客の個人情報や支払い情報を扱うため、高いレベルのセキュリティ対策も求められる。これらすべてが、筆者の予想をはるかに超える時間と労力を要した。
プロジェクトは遅延し始め、納期が迫る中で、筆者は連日残業を強いられ、心身ともに疲弊していった。このような状況が続いた結果、最終的にクライアントはプロジェクトの中断を決定した。この中断により、筆者は本来得られるはずだった報酬と、すでにプロジェクトに費やした膨大な時間と労力に見合う支払いを得られず、結果として8000ドル(日本円で約120万円)もの金銭的な損失を被ることになった。これは、技術選択の誤りが直接的に引き起こした、非常に痛い経験だった。
この経験から、筆者はシステム開発におけるいくつかの重要な教訓を学んだ。
第一に、ツールの選定は徹底的な調査と検討が必要だ。特にプロジェクトのコアとなる機能に影響を与えるツールを選ぶ際には、そのツールの得意分野と限界を正確に理解しておく必要がある。特定の技術が「モダン」であるとか「人気がある」といった理由だけで安易に選ぶのではなく、プロジェクトの具体的な要件に本当に合っているのかを深く見極めるべきだ。
第二に、自分の知識や経験を過信してはならない。たとえ自分が得意としている技術やツールであっても、特定のプロジェクト要件に対しては不適切である場合がある。常に客観的な視点と謙虚な姿勢で、最適な選択肢を探し求めることが重要だ。
第三に、困った時に助けとなるコミュニティやサポート体制の存在も確認しておくべきだ。技術的な問題に直面した際に、活発なコミュニティや豊富なドキュメントがあれば、解決の糸口を見つけやすくなる。筆者の場合、Sanity CMSはコンテンツ管理のコミュニティは充実していたが、複雑なEC機能に関するサポートは限定的だった。
第四に、プロジェクトの見積もりは現実的に行うべきだ。特に自分が未経験の領域や、複雑性が高いと予想される機能については、リスクや潜在的な困難を十分に考慮し、余裕を持った見積もりを立てる必要がある。楽観的な見積もりは、後で自分を苦しめることになる。
第五に、最初から一つの選択肢に固執せず、複数の代替案を比較検討することが大切だ。それぞれのツールのメリットとデメリット、プロジェクトへの適合性を多角的に評価することで、より適切な決定を下せるようになる。
最後に、クライアントとのコミュニケーションを密に取ることも極めて重要だ。プロジェクトの進行中に問題が発生した場合や、予期せぬ困難に直面した場合は、すぐにクライアントに状況を報告し、解決策を共に検討するべきだ。透明性のあるコミュニケーションは、信頼関係を維持し、最悪の事態を避けるための鍵となる。
システムエンジニアを目指す初心者にとって、この筆者の経験は貴重な学びとなるだろう。技術的なスキルを磨くことはもちろん重要だが、それ以上に、プロジェクト全体を見渡し、適切な技術選択を行い、リスクを管理し、関係者と効果的にコミュニケーションを取る能力が、プロフェッショナルとして成功するためには不可欠だ。常に学び続け、様々な技術に触れ、失敗から教訓を得て、より良いエンジニアへと成長していくことが求められる。ツールの選定一つが、プロジェクトの成否、ひいてはキャリアに大きな影響を与えることを、この事例は示している。