かんたんで複雑な、ウェブサービスの作り方を紐解くブログ

パッケージシステムかスクラッチシステムか?その選び方とメリデメ

Programming
2021/07/15

ウェブサービスを構築する時に重要となるのが、ウェブサービス屋台骨となる「システム構築」の方法です。 一口にウェブサービスのシステム構築といってもさまざまなパターンや方法があり、今回はその方法について考えてみます。

ゼロからスクラッチで作成する

1つ目の方法は、ゼロからスクラッチで開発する方法です。 この方法の最大のメリットは「すべての機能を柔軟かつ自由に作成することができる」ことです。サービスとして提供されている「ASP/SaaS」と呼ばれるパッケージ型システムの場合、そのサービスがどのような機能を持つかが予め決められていますが、スクラッチから作成すれば、細かい機能仕様まで、すべて自分たちで定義し、開発することができます。 また現在では、複雑なシステムを構築する場合でも「Laravel」「Django」「Rails」といったプログラミングを行う上でのフレームワークが多数用意されており、例えばログイン機能などもそれらフレームワークを利用すれば、スピードや精度を上げつつ構築することができます。 とはいえスクラッチから作成する場合、スケジュールやコストが増加しやすい傾向にあること、またパッケージシステムとして提供されている場合、セキュリティ上の問題点や不具合に関してもすでにテストが行われている場合がほとんどですが、スクラッチの場合は、別途脆弱性診断等を自ら行う必要がでてきます。 加えて、一つひとつの機能を細かく定義する必要が発生するため、画面設計等を行うUXデザイナーやエンジニア双方に高いスキルセットが必要となります。

ASPやSaaSなどのパッケージシステムを利用する

スクラッチで作るほど自由に機能を保持する必要がなかったり、または大きなスケジュールやコストを使うことができない場合には、ASPやSaaSと呼ばれるパッケージシステムを利用する方法があります。 一番有名なところで言えばWordpressのように、ウェブサイト内部にブログ機能をつけて記事更新をできるようなパッケージシステムがあります。これらはCMS(コンテンツ管理システム)と呼ばれ、「ブログ記事の登録や削除」「お問い合わせフォームの作成」「ブログ記事のバージョン管理」などができる機能が揃っており、比較的簡単にスタートすることができます。 また、ユーザー情報を管理しつつメール配信の自動化などマーケティングを行って行く場合には「MA(マーケティングオートメーション)」などもパッケージシステムとして存在します。 MAでは、お問い合わせフォームを作成し、そこからお問い合わせが来たユーザー情報を管理画面で管理、必要なタイミングでメールの自動返信などを行うことで、ユーザーを囲い込むことができます。 これらのように、予め用意されたパッケージシステムを利用すれば、スケジュールやコストを大幅に抑えることができます。 ただ一方で、こういったパッケージシステムは予め決められた機能を利用する必要があり、自社のサービスや運用フローに合わせようとすると、限られた機能の中では利用できない場合なども多々あります。 そのため、「機能の自由度」か「開発のスケジュールやコスト」かいずれを優先するかを明確に見定め、その上でパッケージシステムを導入するなどの意思決定が重要となります。

APIを利用したシステム開発

スクラッチでは時間がかかる、とはいえパッケージシステムでは自由度が無さすぎて自社では利用できない。そんな時に考えられるのが、APIやWebhookなどを利用したシステム開発です。 例えば「ブログを登録して閲覧する」ことができて、かつ「ユーザー登録してマイページを見れる」ウェブサービスが必要となったとします。 その場合「ブログの登録」はASPやSaaSのシステムを利用します。そうすることでブログの登録や削除、下書き保存、ワークフロー設定、公開/非公開設定などの機能は、新たに開発することなくASPサービス内部の機能を利用します。 ただ一方で「作成したブログ記事は、ログインしているユーザーがマイページ内部でしか見られないようにしたい」というニーズがあった場合に、登録したブログ記事をAPIで取り出したり、または認証機能をAPIを利用して開発したりなどを行うことで、ある程度機能を保持しつつ、同時に既存のパッケージシステムも利用できるようになります。 これはある種「パッケージシステムの簡単さ」と「スクラッチシステムの自由さ」の両方をちょうどよく取り入れられる方法となります。 ただこの方法でもデメリットはあり「複数のシステムをつなげ合わせる」ことから、その部分に関して開発技術が必要になること、またパッケージシステム側がAPI機能を提供していなければ、そもそもブログ記事のデータだけを取り出すなどはできなくなります。 また、システム数が増えれば増えるほど各システムが提供するAPI仕様をエンジニアが調べた上で理解し、実装を進めていく必要があります。よって、エンジニアには高いスキルセットが必要となる場合がほとんどです。

最後に感想として

現在ではさまざまな方法でシステムを用意することができるようになっており、今後も日々新しい選択肢は増えていくのかもしれません。 とはいえ結局は会社の目的や文化、フェーズごとに「機能なのか?」「スピードなのか?」「お金なのか?」必要とされるものは大きく異なります。 そのため、やはりそれぞれの現状に合わせた形でシステム開発が必要になってくるのだと思います。