Laravel・PHP アプリケーション
引き継ぐことを前提に作る Laravel アプリケーション。
顧客ポータル、サブスクリプション課金、社内ツール、そしてそれらを御社のほかのシステムとつなぐ API。型付けを行い、重要な部分にはテストを書き、私を大きな混乱なく交代させられるほどしっかりドキュメントを残します。それが「完成したプロジェクト」の唯一の誠実な定義だと考えています。
01範囲私が作るもの
対象となるのは、たいていこうしたアプリケーションです。
顧客・パートナー向けポータル
お客様がログインして、注文、請求書、書類、利用状況、利用権限など自分のデータを確認できる場所です。難しいのは画面ではなく、権限モデル、監査ログ、そして 1 つのアカウントにアクセス権の異なる 6 人のユーザーが必要になったときの扱いです。
サブスクリプション課金と請求書発行
料金プラン、日割り計算、支払条件、督促、税金、PDF の請求書、そして経理チームが本当に信頼できる照合レポート。課金は累計額ではなく複式簿記の台帳で組み立てます。誰かが請求に異議を唱えた日、累計額では監査のしようがないからです。
スプレッドシートに代わる社内ツール
今は共有スプレッドシートで回っている業務。バージョンの食い違いがあり、それを理解しているのはたった 1 人。それをアプリケーションにすることは、企業が発注できる中で最も効果の高い仕事であることが多く、たいていは規模も最小です。
API とシステム連携
自社のフロントエンド、モバイルアプリ、パートナー向けの REST または GraphQL のエンドポイント。さらに、ERP、CRM、決済サービス、倉庫管理システムなど、御社が使うほかのシステムと Laravel をつなぐ連携作業も行います。
他人が書いたコードベースの引き継ぎ
こうした案件は、1 週間の読み取り専用期間から始めます。テストがあれば実行し、ドメインモデルを整理し、気になる点も含めて見つけたことを文書にします。その評価は継続するかどうかに関係なくお渡しするので、「コードは問題ない」と聞くためだけにお金を払うことはありません。
02方針予算の使いどころ
予算を何に使うか。
アプリケーションの予算の多くは、いつも同じ 3 か所で失われます。だからこそ、デモで見栄えのする部分ではなく、そこに力を注ぎます。
何よりも先に、データモデル
スキーマの判断は、安く取り消すことができません。稼働から 18 か月後、実際の顧客データとそれを参照する一連のレポートを抱えたまま 1 つのテーブルを 3 つに分けるマイグレーションは、プロジェクトの一生で最も高くつく日です。そのマイグレーションに 2 週間余分にかけるより、スキーマに 2 日余分にかけたいと考えています。
お金や権限に関わるすべて
課金、ロール、台帳に書き込む処理にはテストを書きます。カバレッジのバッジのためではなく、次の担当者が前四半期の請求書を知らないうちに壊すことなく、料金ロジックを変更できるようにするためです。それ以外の部分では、厄介な経路をテストし、自明なものには手を出しません。
ほかのシステムが止まったとき
連携は、動いた時点では完成していません。相手のシステムがタイムアウトしている間も、まともに振る舞えて初めて完成です。つまり、キューに入れたジョブ、回数を区切った再試行、冪等キー、そして人が読めるエラーログ。仕入先の調子が悪い午後があっても、データは失われず、遅れるだけで済みます。
どれも特別なことではありません。普通の Laravel を、丁寧に作るだけです。その差が表れるのは 2 年目。多くの制作会社がすでに去り、実際に何を買ったのかがわかる時期です。
03引き継ぎ最後に御社の手元に残るもの
納品物は、動いているアプリケーションだけではありません。
- 01
リポジトリ
- 最初のコミットから、私のではなく御社の組織に置きます。履歴はそのまま、何をしたかだけでなく、なぜそうしたかを説明するコミットメッセージとともに。
- 02
アーキテクチャ文書
- ドメインモデル、私が下した判断、そして却下した選択肢とその理由をまとめた数ページの文書です。次の開発者の 2 週間を節約する文書です。
- 03
すぐに動くローカル環境
- 新しい開発者が、クローンしてからアプリケーションが動くまで 1 時間以内。シーダーで現実的なデータが作られる状態にします。それに 1 日かかるなら、プロジェクトは完成していません。
- 04
デプロイとロールバックの手順
- デプロイの方法、環境変数、バックアップの保存先、そして深夜 2 時に私へ電話せずにロールバックする方法。
04よくある質問よく聞かれる質問に、率直にお答えします
ご依頼の前によく聞かれること。
Laravel のアプリケーションにすべきですか?それとも WordPress サイトですか?
技術者でない人が編集するページを公開することが主な目的なら、たいてい WordPress のほうが安く、早く作れます。ユーザーがログインして注文、予約、承認、レポート作成など何かをすることが主な目的なら、それはアプリケーションです。アプリケーションを WordPress に押し込むと、2 年間で見れば、最初からきちんと作るより高くつくのが普通です。
既存のコードベースを引き継いでもらえますか?
はい、仕事のかなりの部分を占めています。まず 1 週間の読み取り専用期間で、何があるか、何が危ういか、最初に何をするかをまとめた評価書を作ります。その後どう判断されても、その文書はお手元に残ります。
テストは書きますか?
お金、権限、データの整合性に関わる部分には書きます。カバレッジの数字は追いません。ゲッターが値を返すことを確かめるだけのテストだらけのスイートは、品質のふりをした保守コストです。テストがあるのは、誰かが課金処理を壊さずに変更できるようにするためです。
デプロイやホスティングはどうしますか?
VPS、Forge、Ploi、Vapor、コンテナなど、すでにお使いのものに合わせます。まだ何もなければ、トラフィックに見合う最もシンプルなものをおすすめします。ほとんどの業務アプリケーションでは、それはクラスターではなく、データベースのバックアップが管理された、適切に設定されたサーバー 1 台です。
自社の ERP や CRM と連携できますか?
たいていは可能です。本当の問題は、できるかどうかではなく、相手のシステムが遅いときや止まっているときにどう振る舞うかです。回数を区切った再試行つきのジョブキューと読みやすいエラーログで、相手の障害があってもデータは失われず、遅れるだけで済むようにします。
公開後に変更が必要になったら?
リポジトリとドキュメントは御社のものなので、誰に依頼していただいても構いません。引き続き私に、ということであれば、月ごとの作業時間パックをご用意しています。私が避けたいのは、構造的に欠かせない存在になることです。私にしか保守できないアプリケーションは、御社にとってのリスクであって、私にとっての強みではありません。