なかしょの技術日誌

業務では非MS系のものばかりですが、ここではMS系の技術やサービスを中心に書いていきたいと思います。

Azure Pipelines で Shift LeftなSwift開発を

2020年8月20日に開催されたYUMEMI.swift #9 ~テストと自動化~ でLT登壇をしました。

yumemi.connpass.com

発表した資料はこちら

www.slideshare.net

以下、発表資料の解説

f:id:nakasho_dev:20200825004228j:plain

DevOpsという言葉はだいぶIT業界に浸透してきており、実践している企業は多いのではないでしょうか。


f:id:nakasho_dev:20200825005030j:plain

では、DevSecOpsを知っている、または、実践している企業はどのくらいあるでしょうか。


f:id:nakasho_dev:20200825013627j:plain

DevSecOpsにはShift Leftという考え方があります


f:id:nakasho_dev:20200825013915j:plain

今回は、そのShift Leftを実現する一例を紹介します。


f:id:nakasho_dev:20200825014734j:plain

Azure DevOpsの機能にはCI/CDを実現するためのAzure Pipelinesがあります


f:id:nakasho_dev:20200825014855j:plain

Azure Pipelinesはコミュニティやサードベンダが提供する豊富な拡張機能があり、その中にWhiteSource Boltという機能があります。


f:id:nakasho_dev:20200825015301j:plain


f:id:nakasho_dev:20200825015924j:plain

この脆弱性を診断する機能をCIに組み込んでShift Leftを実現します。


f:id:nakasho_dev:20200825225250j:plain

拡張機能をインストールするとPipelinesのグループにWhitesource Boltが表示されます。


f:id:nakasho_dev:20200825230906j:plain

メールアドレス、企業名、国名を入力すると利用可能となります。


f:id:nakasho_dev:20200825231946j:plain

Pipelineへのタスクの登録は非常に単純です。 拡張機能で追加されたWhitesource Boltを登録するだけです。 一点、注意としては、CarthageやCocoaPodsなどでライブラリを取り込んだ後で実行しないと検査対象となりません。


f:id:nakasho_dev:20200825233018j:plain

さて、今回試したライブラリです。 とりあえずTrustKitを古いものにしてみました。 その結果がこちらです。


f:id:nakasho_dev:20200826000417j:plain

それぞれの項目の説明スライドです。


f:id:nakasho_dev:20200826001230j:plain

f:id:nakasho_dev:20200826001244j:plain

f:id:nakasho_dev:20200826001252j:plain

f:id:nakasho_dev:20200826001305j:plain

f:id:nakasho_dev:20200826001349j:plain

結果を見ると残念ながらSwiftのファイルはないようです。 TrustKitで使用しているReport出力用のjquery等が検出対象となったようです。 Swiftファイルで対象となるファイルをみつけたかったのですが、見つかりませんでした。

ですが、簡単な手順でOSS脆弱性やライセンス違反のリスクなどを認識することをCIに組み込めるのは魅力的ではないでしょうか。

参考資料

whitesource.atlassian.net

docs.microsoft.com

TDD Boot Camp 2020 Online#1 で TA (Kotlin, Swift)を担当しました

2020年8月1日に開催されたTDD Boot Camp 2020 Online#1 にTAとして参加しました。

tddbc.connpass.com

参加に至る経緯

2018年9月に開催されたTDDBC Tokyo 2018-09に参加して、次に東京で開催される際はTAをやりたいと思っていました。

tddbc.connpass.com

Covid-19の影響でオフラインの勉強会がなかなか開かれない中、TDDBCオンラインのTAの募集が始まりました。

tddbc.connpass.com

そこに応募しTAとして参加することになりました。

どんなことをやったか

本イベントではTAとCoC(Code of Conduct)を担当しました。

CoCについて

最近のコミュニティイベントでは行動規範を設けるところが多いです。 TDDBCでも話題となり、当然設けようという流れになりました。 そこで各スタッフが関わったイベントで採用されたCoCを紹介しあいました。そして私がその場の勢いでCoC担当に指名されたので、原案を作ることとなりました。

私はXP祭りの実行委員もしており、その打ち合わせの中でCoCが話題になったばかりでした。その時は confcodeofconduct.com をベースにしようと話していたので、その情報を元にオフライン的な表現をオンライン的な表現に変換して原案を作成しました。

そして、ある夜のスタッフ会議でその原案を元に意見を交わしました。厳しすぎな表現や当たり前すぎる表現は削ろうという意見もありましたが、そもそも緩い規範にしては意味がない、こんなやつおらんやろ、というものも記述すべき、ということで削ることはしませんでした。

削らない方針で決まった後ぐらいに、@t_wada さんから以下のサイトを紹介されました。

atsushieno.hatenablog.com

各スタッフが熟読した後に興味を持ったのが以下の文です。

コミュニティ運営メンバーによる違反行為についても同様に情報提供を求めますが、十分な対応が期待できない場合はTwitterなどのソーシャルメディアに助けを求めてください。

なるほど、CoCを正しく定めて相談窓口を設けても運営が正しく機能していなければ相談者を助けることはできません。その一文を加えることとして完成したのが以下のCoCです。

github.com

準備会ではCoCの相談練習として、Discordで私にDMを送ろうというイベントがあり、参加者の皆様からDMを受け取りました。当日はまったくDMがなく皆さん楽しめたようで何よりです。

TAについて

TAについては準備会前、準備会、準備会後、イベント当日と色々とやることがありました。ちなみにC#、Kotlin、Swift、Javaができると申告していましたが、Kotlin、Swiftの担当となりました。

ペアプロ演習

ペアプロ担当、TA担当、オブザーバーに分かれてTA同士のペアプロを実施して、課題を抽出しました。VSLiveShareの環境構築や、Discordでの画面共有、ブラウザIDEなど色々と試して意見を出し合いました。

私はがペアプロしたときは C# で VS LiveShareを使用してペアプロしました。業務でもずっとペアプロしていますが、普段とは違う人とペアプロするのは新鮮で楽しかったです。

このペアプロ演習を何セットかした結果、イベント一日だと準備に手間取ってTDDを楽しめないペアが発生しそうという懸念を持ち、準備会を開催することとなりました。

テンプレート準備

TDD用のテンプレートを準備しました。テストフレームワークを準備する時間ももったいないので、運営側で用意するという方針です。もちろん、強制するものではないです。当日のペアで合意したものであれば問題ないです。

私が担当したのはKotlin、Swift、C#(Mac)用でした。

github.com

github.com

github.com

C#Mac向けテンプレートはXamarin Studio用のものがあったのですが、.NET Core + NUnit のテンプレートを新たに作成しました。

準備会

準備会はイベント当日の約2週間前に行われました。 事前に作成したチェックリストに従い参加者がTDDのペアで環境構築等を進め、早く対応できたペアは実際にTDDをやるなどして、親睦を深めていました。 私が担当するグループはKotlin、Swift、Goが一組ずつでしたが、Go言語は知見がないのであまり絡まなかったのは反省。

準備会後

準備会後は、振り返りをしたり、個人では当日の課題を解いてみたりしました。課題を実際に解いておかないとTAとして適切に対応できないですよね。課題を解いたのはイベント2日前でした...(^^;

イベント当日

8月1日のイベント当日は @t_wada さんの基調講演とライブコーディングから始まり非常に盛り上がりました。自分自身にも非常に学びがありました。

TDDハンズオンでは、担当ペアをいったりきたりと、移動しながらちょこちょこ助言をしていました。あまり助言し過ぎないように、でも手が止まらないように言葉を選ぶのを意識しました。担当したペアはいずれも片方はベテランという状態であまり私の出番はなかったですが。

45分ごとにレビュを実施することになっていて、レビュ時の班長となっていたのですが、 その班に @t_wada さんがいらっしゃってくれたので、都度、非常に知見のある発言をいただき、私が思い切り勉強させてもらいました。

ハンズオンも終わり、懇親会も非常に盛り上がって、本当に成功したイベントでした。これからも関わっていきたいです。

振り返り会

イベントから約一週間後の8月9日20時から行われました。

実は7月の中旬にエアコンが壊れて、その日に修理があり、夕方に直って涼しさを満喫していたら寝落ちしてしまい、参加したのは21時からです。その間、色々な知見のある振り返りがあったかと思うと非常にもったいないことをしました。

振り返りではないけれど電通大OBが多いというネタで盛り上がっていたようで、同じ電通大OBとしてはその場にいなかったのが残念でした。

最後に

あまり触れていませんでしたがスタッフの打ち合わせは非常に学びがありました。集まれば何か意見を出し合って前に進んでいる感がアリアリで、特にTDDBCのオンラインを他の人も今後企画・運営しやすいようにノウハウを残さなければという使命感で色々とノウハウを蓄積していったのが素敵でした。 このあたりの記事が参考になります。

mohira.hatenablog.com

jnuank.hatenablog.com

今後もTDDやXPを普及に寄与していきます。

リモートペアプロのための製品・サービス

みなさんリモートペアプロしていますか。 COVID-19の影響で在宅勤務になっている人が多いと思います。 今まで対面でペアプロしていたのにリモートになって試行錯誤しているのではないでしょうか。

本記事ではリモートペアプロのための製品・サービスを紹介したいと思います。

各製品・サービスについての深堀はしません。

IDEやエディタのプラグイン

Visual Studio LiveShare

visualstudio.microsoft.com

Visual StudioVSCodeに対応。

無料。

対応言語も幅広い。

JetBrains純正のリモートペアプロツール(名称不明)

Collaborative development : IDEABKL-708

JetBrainsが開発しているJetBrains製IDE向けのプラグイン

2020.2がリリースされたタイミングでEarly Access Previewが発表される模様。

Teletype for Atom

teletype.atom.io

Atomでリモートペアプロするためのツール。

無料。

motepair

atom.io

Atomでリモートペアプロするためのツール。

無料。

Remote Collab for SublimeText

teamremote.github.io

SublimeTextでリモートペアプロするためのツール。

無料。

SAROS

www.saros-project.org

オープンソースのリモートペアプロツール。

Eclipse、JetBrains製IDEに対応。

XMPPで通信するので、そのためのサーバを立てる必要がある。

CodeTogether

www.codetogether.com

Eclipse、JetBrains製IDEVSCodeに対応。

無料プランあり。 Covid-19の状況をふまえて終了期間未定でProも無料らしい。

CodeStream

plugins.jetbrains.com

VSCodeVisual Studio、JetBrains製IDEAtomに対応。

無料プランは30日間限定。

TeamHub

teamhub.dev

VSCode、JetBrains製IDEに対応。

価格のことは書かれておらず、Early Access版のみのようなので、 現在は無料で使えそう。

Webで共有するサービス

Visual Studio Codespaces

visualstudio.microsoft.com

Visual Studio Online。

LiveShareが利用可能。

GitHub Codespaces

github.com

Visual Studio Codespacesのようなもの。

repl.it

repl.it

無料プランあり。

Gitpod

www.gitpod.io

VSCode CloneでVSCode Extensionが使えるらしい。

無料プランあり。

AWS Cloud9

aws.amazon.com

AWSクラウドベースIDEサービス。

EC2のコンピューティング とストレージのリソース分の料金が発生。

CodeSandbox

codesandbox.io

Classroom Modeという授業をやるように適したモードがあるらしい。

無料プランあり

Codeanywhere

codeanywhere.com

有料プランのみ

CodePen

codepen.io

無料プランあり

画面共有サービス

画面共有サービスはたくさんありすぎるのでペアプログラミングでの使用をうたっているツールを選びました。

TUPLE

tuple.app

USE Together

www.use-together.com

Screen.so

screen.so

TeamViewer

www.teamviewer.com

ひとまずは以上。 気が向いたら深堀します。

App Center Pushの廃止に伴い、Notification Hubs SDKがリニューアル

以前のBlogで以下の内容を書きました。

nakasho-dev.hatenablog.jp

このmBaaS機能のリタイアによって、App Centerの初期のころからあるPush機能も廃止となりました。
そして、5月15日に以下の発表がありました。

devblogs.microsoft.com

廃止されたPush機能を使っている開発者がAzure Notification Hubsへ移行しやすいように、App Center Pushでのフィードバックを踏まえた新しいAzure Notification Hubs SDKが発表されました。

github.com

github.com

Azure Notification Hubs SDK の主な機能

以前のSDKを知らないのでMSの記事にあるものをそのまま紹介します。

バイス登録

アプリ開発でDeviceTokenを保存する方法って面倒ですよね。SDK側でPushの有効/無効を見て、Notification Hubsへデバイスを自動登録してくれるようです。

タグによる通知のターゲット設定

App Center Pushではオーディエンスという機能を使用して、どういう属性のユーザにPush通知するかを決定していました。
Notification Hubsではタグを使用して同様の機能を実現できます。また、タグ式を使用することで複数のタグを組み合わせた複雑な条件でリアルタイムのターゲティングが可能となるようです。

インストール情報のタグ

カスタムタグをデバイスのインストールに追加することで、アプリ/OSのバージョン、言語、国、デバイスモデルなどによって定義したユーザへ通知できます。

ユーザのタグ

App Center AuthでカスタムのユーザIDをデバイスに紐づけることができました。
新しいSDKを使用することで、カスタムのUserIDプロパティタグを設定できます。
例えばAzure Active Directory B2Cから受け取ったアカウントIDを紐づけるなんてことができると思います。

アラート/サイレント通知

SDKを使用してリスナーを設定するとサイレント通知を受け取ったときやアラートをユーザがクリックしたときに通知を受け取れるようになります。

オンライン/オフライン同期

バックグラウンドで同期を管理する機能が、デバイスがオフラインの時に全てインストール情報の変更が追跡されて、ネットワークが再接続されると、それらがサービスに同期されることを保証するそうです。
オフライン時に変更した設定により、無効となったタグの通知は来ないってことかな?

プッシュの有効化/無効化

SDKの機能を使用してアプリケーション側からPushを有効、または、無効にできます。 ここでいう無効というのはプッシュトークンがリフレッシュされないことであり、元のトークンの有効期限が切れるまではプッシュが受信されます。

App Center Pushからのマイグレーション

以下のサイトで説明しています。

docs.microsoft.com




なんかサンプルアプリを試してみたいなぁ...

PlayFab Meetup#3 で「すごろくゲームでPlayFabの活用を検討」というLTをしました

2020年4月25日に開催されたPlayFab Meetup#3 で「すごろくゲームでPlayFabの活用を検討」というLTをしました。

jpfug.connpass.com

発表した資料はこちらです。

www.slideshare.net

初のオンライン勉強会でのLTでした

以下のようなことを話しました。

アジャイルな開発をしよう

ソーシャルゲーム業界は競争が激しく、開発サイクルを速く、変化する顧客のニーズにも対応していかないと他者に負けてしまいますよね。
でも、ただ早く変化に強いだけだと自社の強みが出せません。なのでValue Propositionを大事にしましょう、と話しました。

ノンデベロッパーでもPlayFabを検証できるPostmanSDK

私が所属するProduct チームでは、Productが利用する外部のAPIをProduct ManagerとProduct DesignerがPostmanを使ってどのようなデータが取得できるか等を確認し、どうProductに取り込むかを検討します。
PlayFabはゲーム開発を強力に支援するBaaSですが、システムの仕様をPlayFabに合わせることで生産性が向上します。開発の自由度を高くしてしまうと、PlayFabで用意されていない機能をAzureFunctions等で独自実装する必要があり工数や運用費用も上がります。
実際にゲームの仕様を決定するProduct ManagerとProduct DesignerがPlayFabの仕様を理解するのにはPostmanSDKは有益です。
PostmanSDK経由で登録したデータを管理画面を見て確認したり、管理画面から登録した内容をPostmanSDK経由で確認したりすることで、PlayFabの仕様について理解を深めることができます。

すごろくゲームを作るとしたらPlayFabのどの機能が活用できるか

例として、ゲームの仕様を考えた後に、どのようにPlayFabを活用できるかを検討してみました。実際に作って検証してみたわけではないので粗々ですが、どのようにAPIを調査していけば良いかは掴んでもらえるかな、と思います。

今後もPlayFabの情報を発信していきたいと思います。

Visual Studio App Center の MBaaS機能がリタイアとなりました。

起きたらびっくり

本日、朝起きて出社する準備中に以下のツイートを見てびっくりしました。

思わずコメント付きリツイートしてしまいました。

なんでびっくりしたか

Visual Studio App Center のmBaaS機能は、発表とほぼ同時に仕様を調査したり、勉強会で登壇したりしていたので、けっこう期待していました。

App Center Blogの記事はこちら devblogs.microsoft.com

自分が発表した資料はこちら

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

www.slideshare.net

なんで期待していたのか

mBaaSがFirebase1強と思われる中で、MSがmBaaSに取り組んでいくと発表してくれたのはとても頼もしかった。対抗するサービスがいくつかないとmBaaS分野の成長が鈍化するかもしれませんし。
AAD経験者にとって、Firebase Authenticationを使用するよりもApp Center Authを使ってAADB2Cでユーザ管理できるのはとても便利だし、AADと連携できるサービスと相性が良いと思った。
また、GDPRだとかCCPAだとかが騒がれている昨今、扱うサービスすべてでアカウントに紐づく情報を削除できる必要があります。AADに対応しているサービスは多く、Azureやそれ以外の色々なサービスを全てAADアカウントと紐づけていたら、個人情報を削除する際もユーザの情報が追跡できると考えています。
もちろんApp Center Authがなくても実現できますが、SDKがあることで敷居が低くなることは確かです。
特にWindows Mobileの開発を停止したMicrosoftにとって、AndroidiOSのモバイル開発者がAzureを選ぶ理由として敷居を低くするのは重要だと思っていました。
また、App Centerはデスクトップアプリにも対応しており、mBaaSに留まらないBaaSとして成長を見せてくれるものだと思っていました。

反省点

リタイア宣言のブログで書かれていますが、App Centerチームはユーザのフィードバックから学習し、今回の結論を出した、とのこと。
私はApp CenterのmBaaSについて勉強会で登壇等はしていたけどApp Centerチームへのフィードバックはおこなっていなかった。やはり自分が続けて欲しいサービスはしっかりフィードバックもおこない開発継続となるようにしていかないとと改めて思いました。

CI/CD Test Night#5 で「Azure PipelinesをサーバサイドのCI/CDに活用」というLTをしました

2019年10月2日に開催されたCI/CD Test Night#5 で「Azure PipelinesをサーバサイドのCI/CDに活用」というLTをしました。

testnight.connpass.com

発表した資料はこちらです。

www.slideshare.net

いつもモバイル関連なのでモバイルではないことをしゃべろうとしてサーバサイドの話をしました。

以下のようなことを話しました。

  • Azure Pipelines には様々なビルドテンプレートがある
  • Azure Pipelines Agent使うとオンプレミス環境でのデプロイも簡単になる
  • ビルドパイプラインとリリースパイプラインは明確に分けよう
  • リリースパイプラインには特定ユーザによる承認の仕組みがある
  • Azure Artifactでプライベートリポジトリを作ろう

今後もCI/CDについて色々紹介できればと思います。