🧰(判断基準) ライブラリやSDKに依存するかしないか2024/06/24に公開3件技術選定考え方techDiscussionTaka2024/06/26興味深い記事をありがとうございます! 1つ質問で、SDKを用いてサービス稼働率が下がってしまうことのデメリットってどんなことがあるのでしょうか? 私がFirebaseなどの認証基盤でSDKを使った経験がないため、ここの部分についてハッキリと理解できませんでした。教えていただけると幸いです! 山下 裕一朗2024/06/26コメントありがとうございます。 Firebase を用いてコメントをしますが、Firebase はあくまで例であることを念のため言及しておきます。 そして前提を確認させてください。 Firebaseなどの認証基盤でSDKを使った経験 SDKを使用した場合でも Firebase と直接 HTTP 通信をした場合でも根本的には変わらないと考えています。Firebase の稼働率が 100% でない限りは、サービス全体の稼働率は記事で述べた式の通り下がると思います。 筆者は、Firebase を使用する際にSDKを使用するか否かに関わらず、外部サービスを使用することでサービス全体の稼働率が下がる、という点に言及したつもりでした。SDKという言葉を使用したことで若干の混乱を招いたかもしれません。この記事では以下のように捉えて頂けると幸いです。 外部サービス === SDK 外部サービスの一例 === Firebaseなどの認証基盤 この前提を元にご質問に回答させて頂きます。(もしかしたらもう不要かもですが) サービス稼働率が下がることのデメリットとして最も大きな点は、得られるはずだった利益が得られなくなることではないでしょうか。 突然のサービス停止は、その時間にユーザーがサービスが使えないばかりか、不安定なサービスとみなされて競合サービスに乗り換えられるリスクがあります。よって、サービス稼働率は重要です。 また、Firebase などの認証基盤は、非常に有名なので流石に稼働率はほぼ100%に近いだろうと考えるかもしれません。確かにその通りです。Firebase はほぼ100%の稼働率です。なのでSDKを使用しても実際にはサービス稼働率はほとんど下がらないと考えるかもしれません。 しかし、SDKやライブラリは、メジャーバージョンアップデートで破壊的変更をすることがあります。破壊的変更とは、簡単に言えばSDKやライブラリを使用する部分のコードを何かしら変更しないとこれまでと同じように使えなくなることです。 破壊的変更に事前に気づいてコードを修正できれば何も問題はありませんが、破壊的変更に気づくためには人間による作業が必要な場合があります。 (ライブラリの場合は Renovate などを使用すれば機械的に気づけますがRSSで流れてくる情報を目で確認しなければならない、みたいな場合もありますよね) 人間はミスをするのでどこかで作業漏れが発生します。そしてその漏れは1度発生しただけで致命傷になる可能性があります。例えば、サービスが停止した後に問題に気づいたが、その破壊的変更に対応するには数日以上かかるかもしれません。数日間サービスが停止したらとんでもない問題ですね。 よって、このような人為的ミスの可能性も考慮して実際の稼働率を測るべきです。2年に1回人為的ミスが発生して5日間サービスが停止するとしたら稼働率は99.3%です。そして、SDKの数だけ指数関数的に稼働率は下がります。5個のSDKを使用していたら稼働率は 96.5% です。年間13日弱のサービス停止です。 極端な話、この認証基盤を自チームで実装していればこんなことには決してならないはずです。単純にCIで気づけるからです。なので、まずは自力で実装することを第一選択肢とし、自身やチーム、組織の能力、時間、コスト制約を考慮して場合によってはSDKを使用する、という考え方が良いのではないかというのが筆者の意見でした。 念の為補足しておきますが、この記事とコメントは、全部自前で実装するべきだ! みたいな過激な考え方ではなく、あくまでライブラリやSDKを導入するための検討基準のようなものを提示した、と捉えて頂けると筆者の意図を汲んで頂けて嬉しいです。 ここまでが筆者の主張でした。引き続きご質問などございましたら記載頂けると嬉しいです! Taka2024/06/26詳細な説明ありがとうございます! 正しく以下の前提部分の認識ずれていたため理解することができました! 外部サービス === SDK 人為的なミスによる稼働率の低下の部分も納得です!ありがとうございます! 返信を追加
Taka2024/06/26興味深い記事をありがとうございます! 1つ質問で、SDKを用いてサービス稼働率が下がってしまうことのデメリットってどんなことがあるのでしょうか? 私がFirebaseなどの認証基盤でSDKを使った経験がないため、ここの部分についてハッキリと理解できませんでした。教えていただけると幸いです! 山下 裕一朗2024/06/26コメントありがとうございます。 Firebase を用いてコメントをしますが、Firebase はあくまで例であることを念のため言及しておきます。 そして前提を確認させてください。 Firebaseなどの認証基盤でSDKを使った経験 SDKを使用した場合でも Firebase と直接 HTTP 通信をした場合でも根本的には変わらないと考えています。Firebase の稼働率が 100% でない限りは、サービス全体の稼働率は記事で述べた式の通り下がると思います。 筆者は、Firebase を使用する際にSDKを使用するか否かに関わらず、外部サービスを使用することでサービス全体の稼働率が下がる、という点に言及したつもりでした。SDKという言葉を使用したことで若干の混乱を招いたかもしれません。この記事では以下のように捉えて頂けると幸いです。 外部サービス === SDK 外部サービスの一例 === Firebaseなどの認証基盤 この前提を元にご質問に回答させて頂きます。(もしかしたらもう不要かもですが) サービス稼働率が下がることのデメリットとして最も大きな点は、得られるはずだった利益が得られなくなることではないでしょうか。 突然のサービス停止は、その時間にユーザーがサービスが使えないばかりか、不安定なサービスとみなされて競合サービスに乗り換えられるリスクがあります。よって、サービス稼働率は重要です。 また、Firebase などの認証基盤は、非常に有名なので流石に稼働率はほぼ100%に近いだろうと考えるかもしれません。確かにその通りです。Firebase はほぼ100%の稼働率です。なのでSDKを使用しても実際にはサービス稼働率はほとんど下がらないと考えるかもしれません。 しかし、SDKやライブラリは、メジャーバージョンアップデートで破壊的変更をすることがあります。破壊的変更とは、簡単に言えばSDKやライブラリを使用する部分のコードを何かしら変更しないとこれまでと同じように使えなくなることです。 破壊的変更に事前に気づいてコードを修正できれば何も問題はありませんが、破壊的変更に気づくためには人間による作業が必要な場合があります。 (ライブラリの場合は Renovate などを使用すれば機械的に気づけますがRSSで流れてくる情報を目で確認しなければならない、みたいな場合もありますよね) 人間はミスをするのでどこかで作業漏れが発生します。そしてその漏れは1度発生しただけで致命傷になる可能性があります。例えば、サービスが停止した後に問題に気づいたが、その破壊的変更に対応するには数日以上かかるかもしれません。数日間サービスが停止したらとんでもない問題ですね。 よって、このような人為的ミスの可能性も考慮して実際の稼働率を測るべきです。2年に1回人為的ミスが発生して5日間サービスが停止するとしたら稼働率は99.3%です。そして、SDKの数だけ指数関数的に稼働率は下がります。5個のSDKを使用していたら稼働率は 96.5% です。年間13日弱のサービス停止です。 極端な話、この認証基盤を自チームで実装していればこんなことには決してならないはずです。単純にCIで気づけるからです。なので、まずは自力で実装することを第一選択肢とし、自身やチーム、組織の能力、時間、コスト制約を考慮して場合によってはSDKを使用する、という考え方が良いのではないかというのが筆者の意見でした。 念の為補足しておきますが、この記事とコメントは、全部自前で実装するべきだ! みたいな過激な考え方ではなく、あくまでライブラリやSDKを導入するための検討基準のようなものを提示した、と捉えて頂けると筆者の意図を汲んで頂けて嬉しいです。 ここまでが筆者の主張でした。引き続きご質問などございましたら記載頂けると嬉しいです! Taka2024/06/26詳細な説明ありがとうございます! 正しく以下の前提部分の認識ずれていたため理解することができました! 外部サービス === SDK 人為的なミスによる稼働率の低下の部分も納得です!ありがとうございます! 返信を追加
山下 裕一朗2024/06/26コメントありがとうございます。 Firebase を用いてコメントをしますが、Firebase はあくまで例であることを念のため言及しておきます。 そして前提を確認させてください。 Firebaseなどの認証基盤でSDKを使った経験 SDKを使用した場合でも Firebase と直接 HTTP 通信をした場合でも根本的には変わらないと考えています。Firebase の稼働率が 100% でない限りは、サービス全体の稼働率は記事で述べた式の通り下がると思います。 筆者は、Firebase を使用する際にSDKを使用するか否かに関わらず、外部サービスを使用することでサービス全体の稼働率が下がる、という点に言及したつもりでした。SDKという言葉を使用したことで若干の混乱を招いたかもしれません。この記事では以下のように捉えて頂けると幸いです。 外部サービス === SDK 外部サービスの一例 === Firebaseなどの認証基盤 この前提を元にご質問に回答させて頂きます。(もしかしたらもう不要かもですが) サービス稼働率が下がることのデメリットとして最も大きな点は、得られるはずだった利益が得られなくなることではないでしょうか。 突然のサービス停止は、その時間にユーザーがサービスが使えないばかりか、不安定なサービスとみなされて競合サービスに乗り換えられるリスクがあります。よって、サービス稼働率は重要です。 また、Firebase などの認証基盤は、非常に有名なので流石に稼働率はほぼ100%に近いだろうと考えるかもしれません。確かにその通りです。Firebase はほぼ100%の稼働率です。なのでSDKを使用しても実際にはサービス稼働率はほとんど下がらないと考えるかもしれません。 しかし、SDKやライブラリは、メジャーバージョンアップデートで破壊的変更をすることがあります。破壊的変更とは、簡単に言えばSDKやライブラリを使用する部分のコードを何かしら変更しないとこれまでと同じように使えなくなることです。 破壊的変更に事前に気づいてコードを修正できれば何も問題はありませんが、破壊的変更に気づくためには人間による作業が必要な場合があります。 (ライブラリの場合は Renovate などを使用すれば機械的に気づけますがRSSで流れてくる情報を目で確認しなければならない、みたいな場合もありますよね) 人間はミスをするのでどこかで作業漏れが発生します。そしてその漏れは1度発生しただけで致命傷になる可能性があります。例えば、サービスが停止した後に問題に気づいたが、その破壊的変更に対応するには数日以上かかるかもしれません。数日間サービスが停止したらとんでもない問題ですね。 よって、このような人為的ミスの可能性も考慮して実際の稼働率を測るべきです。2年に1回人為的ミスが発生して5日間サービスが停止するとしたら稼働率は99.3%です。そして、SDKの数だけ指数関数的に稼働率は下がります。5個のSDKを使用していたら稼働率は 96.5% です。年間13日弱のサービス停止です。 極端な話、この認証基盤を自チームで実装していればこんなことには決してならないはずです。単純にCIで気づけるからです。なので、まずは自力で実装することを第一選択肢とし、自身やチーム、組織の能力、時間、コスト制約を考慮して場合によってはSDKを使用する、という考え方が良いのではないかというのが筆者の意見でした。 念の為補足しておきますが、この記事とコメントは、全部自前で実装するべきだ! みたいな過激な考え方ではなく、あくまでライブラリやSDKを導入するための検討基準のようなものを提示した、と捉えて頂けると筆者の意図を汲んで頂けて嬉しいです。 ここまでが筆者の主張でした。引き続きご質問などございましたら記載頂けると嬉しいです!
Taka2024/06/26詳細な説明ありがとうございます! 正しく以下の前提部分の認識ずれていたため理解することができました! 外部サービス === SDK 人為的なミスによる稼働率の低下の部分も納得です!ありがとうございます!
Discussion
興味深い記事をありがとうございます!
1つ質問で、SDKを用いてサービス稼働率が下がってしまうことのデメリットってどんなことがあるのでしょうか?
私がFirebaseなどの認証基盤でSDKを使った経験がないため、ここの部分についてハッキリと理解できませんでした。教えていただけると幸いです!
コメントありがとうございます。
Firebase を用いてコメントをしますが、Firebase はあくまで例であることを念のため言及しておきます。
そして前提を確認させてください。
SDKを使用した場合でも Firebase と直接 HTTP 通信をした場合でも根本的には変わらないと考えています。Firebase の稼働率が 100% でない限りは、サービス全体の稼働率は記事で述べた式の通り下がると思います。
筆者は、Firebase を使用する際にSDKを使用するか否かに関わらず、外部サービスを使用することでサービス全体の稼働率が下がる、という点に言及したつもりでした。SDKという言葉を使用したことで若干の混乱を招いたかもしれません。この記事では以下のように捉えて頂けると幸いです。
この前提を元にご質問に回答させて頂きます。(もしかしたらもう不要かもですが)
サービス稼働率が下がることのデメリットとして最も大きな点は、得られるはずだった利益が得られなくなることではないでしょうか。
突然のサービス停止は、その時間にユーザーがサービスが使えないばかりか、不安定なサービスとみなされて競合サービスに乗り換えられるリスクがあります。よって、サービス稼働率は重要です。
また、Firebase などの認証基盤は、非常に有名なので流石に稼働率はほぼ100%に近いだろうと考えるかもしれません。確かにその通りです。Firebase はほぼ100%の稼働率です。なのでSDKを使用しても実際にはサービス稼働率はほとんど下がらないと考えるかもしれません。
しかし、SDKやライブラリは、メジャーバージョンアップデートで破壊的変更をすることがあります。破壊的変更とは、簡単に言えばSDKやライブラリを使用する部分のコードを何かしら変更しないとこれまでと同じように使えなくなることです。
破壊的変更に事前に気づいてコードを修正できれば何も問題はありませんが、破壊的変更に気づくためには人間による作業が必要な場合があります。 (ライブラリの場合は Renovate などを使用すれば機械的に気づけますがRSSで流れてくる情報を目で確認しなければならない、みたいな場合もありますよね) 人間はミスをするのでどこかで作業漏れが発生します。そしてその漏れは1度発生しただけで致命傷になる可能性があります。例えば、サービスが停止した後に問題に気づいたが、その破壊的変更に対応するには数日以上かかるかもしれません。数日間サービスが停止したらとんでもない問題ですね。
よって、このような人為的ミスの可能性も考慮して実際の稼働率を測るべきです。2年に1回人為的ミスが発生して5日間サービスが停止するとしたら稼働率は99.3%です。そして、SDKの数だけ指数関数的に稼働率は下がります。5個のSDKを使用していたら稼働率は 96.5% です。年間13日弱のサービス停止です。
極端な話、この認証基盤を自チームで実装していればこんなことには決してならないはずです。単純にCIで気づけるからです。なので、まずは自力で実装することを第一選択肢とし、自身やチーム、組織の能力、時間、コスト制約を考慮して場合によってはSDKを使用する、という考え方が良いのではないかというのが筆者の意見でした。
念の為補足しておきますが、この記事とコメントは、全部自前で実装するべきだ! みたいな過激な考え方ではなく、あくまでライブラリやSDKを導入するための検討基準のようなものを提示した、と捉えて頂けると筆者の意図を汲んで頂けて嬉しいです。
ここまでが筆者の主張でした。引き続きご質問などございましたら記載頂けると嬉しいです!
詳細な説明ありがとうございます!
正しく以下の前提部分の認識ずれていたため理解することができました!
人為的なミスによる稼働率の低下の部分も納得です!ありがとうございます!