【読了】「Adaptive Code ~ C#実践開発手法 第2版」

Adaptive Code ~ C#実践開発手法 第2版 (マイクロソフト関連書)

Adaptive Code ~ C#実践開発手法 第2版 (マイクロソフト関連書)

「Adaptive Code ~ C#実践開発手法 第2版」を読了しました。

学び

第3章 依存関係と階層化

3.3.2 横断的関心事

横断的関心事(ロギングやトランザクション管理など)は、
カプセル化した上でコードに適用するのが悪影響の少ない方法。
アスペクト指向プログラミングの導入→C#AORライブラリとして「PostSharpがおすすめ。」

www.postsharp.net

第5章 テスト

5.1.3 より複雑なテスト

モックフレームワークMoq2の利用。
下位のレイヤーでスローされた例外を上位の新しい例外でラッピングすることが推奨される。

5.2.1 保守可能なテストの書き方

SUT(System Under the Test)を表す変数にはsutという名前をつけるのには一貫性の利点がある。
テストメソッドの名前は実装ではなく意図が伝わるようにする。

5.3 テストのBuilderパターン

Builderパターンを利用し、モッククラスのメソッドを数珠つなぎに出来るようにすることで、
テストの意図を明確にすることが出来る。
テストの循環的複雑度は1を超えることがないようにする。

第12章 依存性注入

App.configファイルのセクションを使って、インターフェイスを実装にマッピングする方法を示すことができる。
(.NetFramework4.7.2より、ASP.Net WebFormsなどでもDependency Injectionが行えるようになったが、
web.configなどで実装を定義できるかが不明だったが、この方法で実装できる?)

感想

第1部ではスクラム、カンバンについての紹介にページが割かれているが、
第2部以降ではコード例なども交えて実践的な開発手法についての解説に入っていく。

などなど多岐にわたるプラクティス・原則について、実践的なコード例を多数交えて紹介している。

コード例も、参考書等でよくある説明のために簡素化された形ではなく、タイトルどおり「実践的」であると言える。 前述した「テストのBuilderパターン」などは早速現場で利用し始めている。

かなりのボリュームではあるが、オブジェクト指向の初心者/中級者が上級者にステップアップしていくために
必ず役に立つ1冊であると断言できる。

Amazonのレビューが2件しかないのが本当に不思議。

【Azure】AZ-900:Microsoft Azure Fundamentals に合格しました

今月頭にAZ-900:Microsoft Azure Fundamentalsを受験し合格しました。

www.microsoft.com

勉強方法としては、まずMicrosoft Learnの以下のラーニングパスを読み込みました。

docs.microsoft.com

さらに自分は心配だったため、以下のUdemyのコースを購入しました。

AZ-900 -- Microsoft Azure Fundamentals -- Practice Tests

模擬試験が3つと、それぞれの回答解説が付いてきます。
英語ですが、Chromeの翻訳機能を使えば十分読めるレベルになりました。
結果的にはこちらを購入して、試験慣れしておいてよかったです。
Learnの読み込みだけだとちょっと足りなかったと感じました。
セール時の最低価格(自分は¥1,200で購入)で購入できたので費用対効果は十分でした。

ひとまず合格できて安心しましたが、
やはりAzureに関する本当に基礎的な知識が中心なので、
AZ-900保持だけだと現場で「Azure出来ます!」とアピールするレベルには到達出来ないと感じました。
なので、次はAZ-203の合格に向けて勉強を開始しました。

www.microsoft.com

AZ-203の試験範囲のラーニングパスをMicrosoft Learnで開始しましたが、
実際にサービスのリソースを作成したり、コードを書いたり手を動かすレッスンが中心なので、
AZ-203の勉強を通じて「Azure出来ます!」レベルに到達出来ることを期待しています。

「本当にやれる事を全部やってますか?」Fukabori.fm ep17より

17. 本当にやれることを全部やってますか? w/ takoratta | Fukabori.fm

 

Fukabori.fm エピソード17を聴いて。

強く印象に残ったフレーズがあった。

 

エンプラ企業で新しい取り組みにチャレンジするにはどうすれば良いか、といった話題からのtakorattaさんの言葉。

 

辞める気になって会社に働きかけてみましょう


ほんとうにやれること全部やっているかという事を考えてほしい


ここの人にこういうと角が立つかもしれない


こんな事をやった人はいない


こうやったらスタンドプレーと思われるかもしれない


辞める気になったら何も怖くない


やろうと思ってる事全部やれるはずなんですよ


やってみたら良いと思うんですよね

 

この言葉を聞いて、胸が熱くなるとともに耳が痛くなった。

前の会社に居た時、自分は辞める気になって動く事が出来ていたのかな。

何もせずに逃げるように辞めてしまったのではないか。

そんな少しの後悔を感じつつも、勇気が湧いてくる言葉だった。

この思いを忘れず、今の会社と現場で、勇気を持って行動していきたいと思った。

【Azure】AZ-900 試験範囲を整理した

記事の概要

Microsoft Azureの認定試験「AZ-900:Microsoft Azure Fundamentals」の受験を申し込みました。

Microsoft Learnのラーニングパス「Azureの基礎」を基本に勉強していますが、ここで改めて試験範囲を確認し、項目ごとに対応するLearnのページをリンクして整理してみました。

試験範囲はhttps://www.microsoft.com/ja-jp/learning/exam-az-900.aspxより転載。(2019年7月6日時点)

試験範囲

Cloudの概念の理解 (15-20%)

Cloudサービスを使うメリットと注意点を説明

高可用性、スケーラビリティ、弾力性、アジリティ、障害許容性、災害リカバリなどの用語の理解

クラウド コンピューティングのメリット - Learn | Microsoft Docs

規模の経済の原則の理解

規模の経済 - Learn | Microsoft Docs

Capital Expenditure (CapEx) と Operational Expenditure (OpEx) の違いの理解
消費量ベースモデルの理解

資本的支出 (CapEx) と運用費 (OpEx) の比較 - Learn | Microsoft Docs

サービスとしてのインフラストラクチャ (IaaS)、サービスとしてのプラットフォーム (PaaS)、サービスとしてのソフトウェア(SaaS) の違いの説明

サービスとしてのインフラストラクチャ (IaaS) を説明 サービスとしてのプラットフォーム (PaaS) を説明 サービスとしてのソフトウェア (SaaS) を説明 3つの違うサービスタイプを比較、対照する

Public、Private、Hybridの Cloudモデルの違いを説明

Public Cloud を説明
Private Cloud を説明
Hybrid Cloud を説明
3つの違う Cloudモデルを比較、対照する

クラウド デプロイ モデル - Learn | Microsoft Docs

コアな Azure サービスの理解 (30-35%)

Azure アーキテクチャコンポーネントを理解

リージョンの説明

Azure のデータセンターとリージョン - Learn | Microsoft Docs

有効性ゾーンを説明

可用性ゾーン - Learn | Microsoft Docs

リソースグループを説明 Azure Resource Manager を説明

Azure Resource Manager での Azure リソースの管理と整理 - Learn | Microsoft Docs

Azure アーキテクト的コンポーネントを使用することのメリットを説明

Azure で有効なコアプロダクトのいくつかについて説明

仮想マシン仮想マシンスケールセット、アプリサービス、機能などの、計算のための有効な製品を説明
仮想ネットワーク、ロードバランス、VPN ゲートウェイ、アプリケーションゲートウェイ、コンテンツデリバリーネットワークといった、ネットワークのための有効な製品を説明
ブロブストレージ、ディスクストレージ、ファイルストレージ、アーカイブストレージなど、ストレージのための有効な製品を説明
CosmosDB、Azure SQL Database、Azure Database Migration サービス、Azure SQL Data Warehouse といった、データベースのための有効な製品を説明
Azure Marketplace とその使用シナリオを説明

Azure で使えるソリューションのいくつかについて説明

IoT on Azure で使える IoT Fundamentals、IoT Hub、IoT Central などのモノのインターネット(IoT) と製品について説明
SQL Data Warehouse、HDInsight 、Data Lake Analytics といったビッグデータと分析に使用できる、ビッグデータと統計と製品について説明
Azure Machine Learning Service と Studio などの、人工知能 (AI)に使えるAIと製品について説明
Azure Functions、Logic Apps、App グリッドといったサーバーレスコンピューティングに使えるサーバーレスコンピューティングとAzure 製品について説明
Azureソリューションを使うメリットと成果について説明

Azure 管理ツールについての理解

Azure CLIPowerShell、Azure Portal といった Azure ツールについて説明

Azure の管理オプション - Learn | Microsoft Docs

Azure Advisor についての理解

Cost Management と Azure Advisor で予測および最適化する - Learn | Microsoft Docs

セキュリティ、プライバシー、コンプライアンス、信用についての理解 (25-30%)

Azure でのネットワーク接続のセキュア化について理解

Azure Firewall について説明
Azure DDoS Protection について説明
Network Security Group (NSG) について説明
最適な Azure セキュリティソリューションを選ぶ

ネットワークを保護する - Learn | Microsoft Docs

コア Azure Identity サービスについて説明

証明書と認証の違いについての理解
Azuer Active Directory について説明
Azure マルチファクタ認証について説明

ID とアクセス - Learn | Microsoft Docs

Azure のセキュリティツールと機能について説明

Azure Security について説明

クラウドのセキュリティは共同責任 - Learn | Microsoft Docs

Azure Security センター使用シナリオについて理解
Key Vault について説明

Azure Security Center からヒントを得る - Learn | Microsoft Docs

Azure Information Protection (AIP) について説明

共有ドキュメントを保護する - Learn | Microsoft Docs

Azure Advanced Threat Protection (ATP) について説明

Azure Advanced Threat Protection - Learn | Microsoft Docs

Azure ガバナンス手法について説明

Azure ポリシーについて説明

Azure Policy を使用して IT のコンプライアンスを定義する - Learn | Microsoft Docs

イニシアチブについて説明

イニシアチブを使用してポリシーを整理する - Learn | Microsoft Docs

ロールベースのアクセスコントロール (RBAC) について説明

ロールベースのアクセス制御を使用したリソースのセキュリティ保護 - Learn | Microsoft Docs

Locksについて説明

リソース ロックを使用してリソースを保護する - Learn | Microsoft Docs

Azure Advisor セキュリティアシスタンスについて説明

Azure Advisor を使用してリソースのセキュリティを向上させる | Microsoft Docs

Azureの監視とレポートオプションについての理解

Azure Monitor について説明
Azure Service Health について説明
Azure Monitor と Azure Service Health のユースケースとメリットについて理解

サービス正常性を監視する - Learn | Microsoft Docs

Azure のプライバシー、コンプライアンス、データ保護基準について理解

GDPR、ISO、NIST といった製造コンプライアンス用語について理解
Microsoft Privacy Statement について理解 信用センターについて説明
Service Trust Portal について説明
コンプライアンス管理について説明
Azure がビジネス上のニーズに対して適用しているかを見極める

コンプライアンス マネージャーを使用してサービスのコンプライアンスを調べる - Learn | Microsoft Docs

Azure Government サービスについて理解

政府向けクラウド コンピューティング | Microsoft Azure

Azure ドイツサービスについて理解

Azure Germany クラウド コンピューティング | Microsoft Azure

Azure の料金プランとサポートについての理解 (25-30%)

Azure サブスクリプションについて理解

Azure サブスクリプションについて説明
Azure サブスクリプションの使用とオプションについて理解

Azure アカウントと Azure サブスクリプション - Learn | Microsoft Docs

コストの計画と管理について理解

Azure 製品とサービスの購入について理解

Azure 製品およびサービスの購入 - Learn | Microsoft Docs

Azure 無利用アカウント周りのオプションについて理解
リソースタイプ、サービス、ロケーション、入るのと出ていくトラフィックといったコストに関連する項目について理解
課金目的のゾーンについて理解

コストに影響する要因 - Learn | Microsoft Docs

料金プラン計算について理解

Azure 料金計算ツールでコストを見積もる - Learn | Microsoft Docs

所有するトータルコスト (TCO) 計算について理解

Azure TCO 計算ツールで総保有コストを見積もる - Learn | Microsoft Docs

コスト分析の実行、支払上限とクォータの作成、コストの所有者を特定するのにタグを使用といったAzureコストを最小限にするためのベストプラクティスについて理解。
Azureリザベーションの使用。Azure Advisor 推薦の使用。
Azure Cost Management について理解

Cost Management と Azure Advisor で予測および最適化する - Learn | Microsoft Docs

Azure で使用可能なサポートオプションについて理解

Dev、Standard、Professional Direct、Premier といった有効なサポートプランについて理解 サポートチケットのオープンの仕方を理解
サポートプランチャンネル外における有効なサポートチャンネルについて理解
ナレッジセンターについて説明

Azure のサポート オプション - Azure サブスクリプションのヘルプの入手 - Learn | Microsoft Docs

Azure Service Level Agreements (SLAs) について説明

Service Level Agreement (SLA) について説明
特定のAzure 製品かサービスの SLA を特定

Azure のサービス レベル アグリーメント - Learn | Microsoft Docs

Azure のサービスライフサイクルについて理解

パブリックなものとプライベートな Preview 機能について理解
Preview 機能にどうやってアクセスするか理解
一般的可用性 (GA) という用語の理解
機能のアップデートを監視

パブリックおよびプライベート プレビュー機能へのアクセス - Learn | Microsoft Docs

【Azure】無料試用版のサブスクリプションが期限切れした後、サブスクリプションをアップグレードする

Windows Azureを無料アカウントで開始した場合、 30日以内は¥22,500 のクレジットを付与されて各機能を試用できます。
30日経過すると、無料試用版のサブスクリプションを使用できなくなります。

期限が近づくと「お客様の無料試用版の有効期限まであと ○日です」といったメールが送信されて、 アップグレードを促されます。

自分の場合はアップグレードするのを失念していて、30日を超えてしまいました。 Azure Portal上では以下のようなアラートが表示されます。

f:id:rikupapa-shima:20190703050342p:plain

そのままサブスクリプションのアップグレードに進んだのですが、 以下のサポートを選択する画面で少し迷ってしまいました。 必ず有償のサポートプランを選択する必要がある?

f:id:rikupapa-shima:20190703050346p:plain

と思ったらスクロールすると、 「テクニカルサポートがないか、自分は既に Microsoft Premier サポートの対象です。」 という選択肢があったのでこちらを選択。 おそらくこちらを選択することでサポート無し=BASICプランになれると判断しました。

f:id:rikupapa-shima:20190703050354p:plain

アップグレードできました。

f:id:rikupapa-shima:20190703050402p:plain

このあとPortal上のVM作成画面では引き続きサブスクリプションが「無料試用版」しか選択できず、 「選択したサブスクリプションは無効になっています」と表示されていました。 いったんPortalからサインアウトし、再度ログインすると「従量課金制」が選択できるようになっていました。

【Jenkins】Warnings Next Generationプラグイン

前置き

前回から引き続きJenkinsについて。
【Jenkins初期設定】Gmailへのメール送信で「javax.mail.AuthenticationFailedException」が発生 - shimapapa.devの日記

Jenkins設定のお手本はこちらのudemyのコースです。
www.udemy.com

今回の話題

コース内で設定したCheckstyleFindBugsプラグインは、現在Deprecated=非推奨になっておりました。

f:id:rikupapa-shima:20190614055303p:plain

調べたところ、現在は「Warnings Next Generationプラグイン」を使用するのが良いようです。

github.com

導入手順

1.インストール

「Jenkinsの管理 > プラグインの管理 > 利用可能」から、「Warnings Next Generation Plugin」を探してインストールします。

2. 設定

「プロジェクト > 設定 > ビルド後の処理の追加」から
「Record compiler warnings and static analysis results」を選択します。 追加された設定欄のToolで「Checkstyle」と「FindBugs」を選択し、保存します。

f:id:rikupapa-shima:20190614060058p:plain
f:id:rikupapa-shima:20190614060120p:plain

3. 結果の確認

ビルドが完了すると、プロジェクトページに

のリンクが表示されるようになります。

右下には  

のグラフが表示されるようになります。

f:id:rikupapa-shima:20190614060547p:plain

CheckStyle Warningsの画面 f:id:rikupapa-shima:20190614060754p:plain

FindBugs Warningsの画面。バグの詳細も確認できています。 f:id:rikupapa-shima:20190614060850p:plain

以上、「Warnings Next Generationプラグイン」についてでした。

【Jenkins初期設定】Gmailへのメール送信で「javax.mail.AuthenticationFailedException」が発生

前回の投稿でJenkinsのコンテナは起動でき、初期設定を進めています。
Azure Container InstancesでJenkinsを立ち上げる - shimapapa.devの日記

ちなみにお手本はこちらのudemyのコースです。
www.udemy.com

Jenkinsの管理>システムの設定>トークンリファレンス>E-mail 通知」にて
Gmailのアカウントを設定してメール送信を確認するのですが、以下のエラーが発生。  

javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials 104sm807qtc.36 - gsmtp

この原因はエラー内のURLを確認すればすぐに解ることなのですが、
Googleアカウントがデフォルトでは不正なアプリからのログインを許可していないためです。

Let less secure apps access your account - Google Account Help

アカウントの設定で「安全性の低いアプリのアクセス」をONにすると前述のエラーは発生せず、
Jenkinからのメールが受信できるようになります。
当然セキュリティ上非推奨の設定なので、あくまで一時的に許可するのがよいでしょう。