バックエンドのフリーランス案件を見ていると、Java、Go、PHP、Pythonなど言語名が目立ちます。ただ、案件の難易度や条件を分けるのは言語だけではありません。
見るべきなのは、API、データベース、認証、性能、非同期処理、監視・運用まで、どこを任されるかです。同じSpring Boot経験でも、既存APIの改修と新規サービスの設計では責任範囲が大きく異なります。
単価差は言語より担当工程で考える
バックエンド案件では、実装だけを担当するケースもあれば、要件整理からAPI設計、DB設計、レビュー、障害対応まで含むケースもあります。案件を比較するときは、まず担当工程を一列に並べます。
- 既存仕様に沿った実装・改修
- APIやデータモデルの設計
- 認証・認可、セキュリティ設計
- 性能改善やボトルネック調査
- テスト、自動化、レビュー
- 監視、障害対応、継続的な改善
上に行くほど高い、という単純な話ではありません。ただ、自分で判断する範囲が広い案件ほど、設計経験や周辺知識まで確認されやすくなります。
APIは「作れる」より設計判断を見る
Spring BootやFastAPIを使えばREST APIそのものは構築できます。Springの公式ガイドでもHTTPリクエストを受けてJSONを返すRESTサービスの基本が示され、FastAPIの公式チュートリアルでもAPI実装を段階的に学べます。
実務で差が出るのは、その先です。リソース設計、エラー形式、認証、再試行、冪等性、バージョニングなど、利用側まで考えた判断が必要になります。
- エンドポイントをどの単位で切るか
- 失敗時にどのステータスを返すか
- 同じリクエストが再送されたらどうするか
- 認証と認可をどの層で行うか
- 仕様変更を既存利用者へどう影響させないか
DB設計はCRUDの外側を見る
バックエンドではデータベース操作の経験もよく確認されます。「SQLを書ける」だけでなく、データの一貫性、トランザクション、インデックス、ロック、スキーマ変更まで扱うかで役割は変わります。
たとえば一覧APIが遅いとき、アプリケーションコードだけを直せばよいとは限りません。クエリ、インデックス、取得件数、キャッシュ、外部API待ちなどを分解して調べる必要があります。
案件面談では「DBは何を使いますか?」だけでなく、「スキーマ変更や性能改善を誰が判断しますか?」まで確認すると、担当範囲が見えやすくなります。
非同期処理は失敗時の設計まで見る
通知、外部API連携、集計、ファイル処理などでは、すべてを同期的に待つと応答が遅くなることがあります。PythonのasyncioはI/O待ちを含む非同期処理の基盤として利用され、FastAPIでもasync/awaitを使った処理が公式に説明されています。
ただし「非同期にした」だけでは実務設計として不十分です。失敗時の再試行、重複実行、タイムアウト、処理順序、監視まで考える必要があります。
- 途中で失敗した処理を安全に再実行できるか
- 二重実行でデータが壊れないか
- 外部サービスが遅いときにどこで打ち切るか
- 失敗をどのログ・メトリクスで検知するか
案件条件は「運用まで持つか」で変わる
実装してテストへ渡すところで終わる案件と、本番監視や障害対応まで担当する案件では求められる知識が異なります。運用まで含むなら、ログ、アラート、再現手順、ロールバック、変更手順まで確認します。
バックエンドの市場価値を上げたい場合も、言語を増やすだけでなく、設計から運用まで一本につながる経験を作るほうがスキルシートで説明しやすくなります。
面談で確認したい5つの質問
- 新規開発と既存改修の比率はどの程度ですか
- API・DBの設計判断は誰が行いますか
- 認証・認可やセキュリティ設計は担当範囲に入りますか
- 性能問題や障害発生時はどこまで対応しますか
- コードレビューや技術選定で期待される役割は何ですか
この五つが分かれば、言語名だけでは見えない案件の難易度を比較できます。まずは自分の経験を「実装・設計・性能・セキュリティ・運用」に分け、どこまで一人で説明できるか棚卸ししてみてください。