title | keywords | permalink | folder | sidebar |
---|---|---|---|---|
Go Guidelines: Introduction |
guidelines golang |
golang_introduction.html |
golang |
golang_sidebar |
{% include draft.html content="Goガイドラインはドラフト版です。" %}
Goガイドラインは、Goで記述されたサービスアプリケーションを対象とするクライアントライブラリー設計者に向けたものです。
Azure SDKは、Azureサービスに接続する開発者の生産性を高めるように設計する必要があります。その他の品質(完全性、拡張性、パフォーマンスなど)は重要ですが、二次的なものです。生産性は、以下に説明する原則に従うことによって達成されます:
- SDKは、対象言語の一般的な設計ガイドラインおよび規則に従う必要があります。対象言語の開発者にとっては自然な感じがするはずです。
- 強み・弱みを生かしたエコシステムを受け入れます。
- エコシステムと協力して、すべての開発者のためにエコシステムを改善します。
- クライアントライブラリーは、言語内、サービス、そして、すべての対象言語間で一貫している必要があります。競合する場合、言語内の一貫性が最も優先度が高く、すべての対象言語間の一貫性が最も優先度が低いです。
- ロギング、HTTP通信、エラー処理などのサービスにとらわれない概念は一貫している必要があります。開発者は、クライアントライブラリー間を移動するときに、サービスにとらわれない概念を再学習する必要はありません。
- クライアントライブラリーとサービスの用語の一貫性は、診断性の向上に役立ちます。
- サービスとクライアントライブラリーのすべての違いは、気まぐれではなく、慣用的な使用法に根ざした既存の理由を明確に示す必要があります。
- 対象言語ごとのAzure SDKは、1つのチームが開発した1つの製品のように感じます。
- 対象言語間で機能の同等性が必要です。これは、サービスの機能の同等性よりも重要です。
- 私たちはサポートされているテクノロジーの専門家であるため、開発者が必ずしもそうである必要はありません。
- 開発者は、Azureサービスでの成功を容易にする優れたドキュメント(ヒーローチュートリアル、ハウツー記事、サンプル、APIドキュメント)を見つける必要があります。
- ベストプラクティスを実装する予測可能なデフォルトを使用することにより、着手が容易になるはずです。プログレッシブコンセプトの開示について考えます。
- SDKは、対象言語とエコシステムの最も通常のメカニズムを通じて容易に取得できる必要があります。
- 開発者は、新しいサービスコンセプトを学ぶときに圧倒されます。コアユースケースは発見可能でなければなりません。
- 開発者は何が起こっているのか理解できるはずです。
- ネットワークコールがいつどのような状況で行われるかを発見できるようにします。
- デフォルトは発見可能であり、その意図は明確です。
- ロギング、トレース、エラー処理は基本的なものであり、注意深さが必要です。
- エラーメッセージは簡潔で、サービスと相関があり、実用的で、人間が読めるものでなければなりません。理想的には、エラーメッセージは、ユーザーが実行できる有用なアクションにユーザーを導く必要があります。
- 対象言語に適したデバッガーとの統合は容易です。
- 破壊的な変更は、ほとんどの新機能や改善の有益さよりもユーザーエクスペリエンスにとって有害です。
- 徹底的なレビューと非常に強力な正当化なしに、非互換性を意図的に導入してはなりません。
- 互換性を強制する可能性のある依存関係に依存しないでください。
{% include requirement/MUST id="golang-general-follow-general-guidelines" %} [一般的なAzure SDKガイドライン]に従ってください。
{% include requirement/MUST id="golang-general-repository" %} すべてのソースコードを [azure/azure-sdk-for-go] GitHubリポジトリーに配置してください。
{% include requirement/MUST id="golang-general-engsys" %} [azure/azure-sdk-for-go] GitHubリポジトリーでの作業については、Azure SDKエンジニアリングシステムガイドラインに従ってください。
{% include refs.md %} {% include_relative refs.md %}