Azure Pipelines で Shift LeftなSwift開発を
2020年8月20日に開催されたYUMEMI.swift #9 ~テストと自動化~ でLT登壇をしました。
発表した資料はこちら
www.slideshare.net
以下、発表資料の解説
DevOpsという言葉はだいぶIT業界に浸透してきており、実践している企業は多いのではないでしょうか。
では、DevSecOpsを知っている、または、実践している企業はどのくらいあるでしょうか。
DevSecOpsにはShift Leftという考え方があります
今回は、そのShift Leftを実現する一例を紹介します。
Azure DevOpsの機能にはCI/CDを実現するためのAzure Pipelinesがあります
Azure Pipelinesはコミュニティやサードベンダが提供する豊富な拡張機能があり、その中にWhiteSource Boltという機能があります。
この脆弱性を診断する機能をCIに組み込んでShift Leftを実現します。
拡張機能をインストールするとPipelinesのグループにWhitesource Boltが表示されます。
メールアドレス、企業名、国名を入力すると利用可能となります。
Pipelineへのタスクの登録は非常に単純です。 拡張機能で追加されたWhitesource Boltを登録するだけです。 一点、注意としては、CarthageやCocoaPodsなどでライブラリを取り込んだ後で実行しないと検査対象となりません。
さて、今回試したライブラリです。 とりあえずTrustKitを古いものにしてみました。 その結果がこちらです。
それぞれの項目の説明スライドです。
結果を見ると残念ながらSwiftのファイルはないようです。 TrustKitで使用しているReport出力用のjquery等が検出対象となったようです。 Swiftファイルで対象となるファイルをみつけたかったのですが、見つかりませんでした。
ですが、簡単な手順でOSSの脆弱性やライセンス違反のリスクなどを認識することをCIに組み込めるのは魅力的ではないでしょうか。
参考資料
TDD Boot Camp 2020 Online#1 で TA (Kotlin, Swift)を担当しました
2020年8月1日に開催されたTDD Boot Camp 2020 Online#1 にTAとして参加しました。
参加に至る経緯
2018年9月に開催されたTDDBC Tokyo 2018-09に参加して、次に東京で開催される際はTAをやりたいと思っていました。
Covid-19の影響でオフラインの勉強会がなかなか開かれない中、TDDBCオンラインのTAの募集が始まりました。
そこに応募しTAとして参加することになりました。
どんなことをやったか
本イベントではTAとCoC(Code of Conduct)を担当しました。
CoCについて
最近のコミュニティイベントでは行動規範を設けるところが多いです。 TDDBCでも話題となり、当然設けようという流れになりました。 そこで各スタッフが関わったイベントで採用されたCoCを紹介しあいました。そして私がその場の勢いでCoC担当に指名されたので、原案を作ることとなりました。
私はXP祭りの実行委員もしており、その打ち合わせの中でCoCが話題になったばかりでした。その時は confcodeofconduct.com をベースにしようと話していたので、その情報を元にオフライン的な表現をオンライン的な表現に変換して原案を作成しました。
そして、ある夜のスタッフ会議でその原案を元に意見を交わしました。厳しすぎな表現や当たり前すぎる表現は削ろうという意見もありましたが、そもそも緩い規範にしては意味がない、こんなやつおらんやろ、というものも記述すべき、ということで削ることはしませんでした。
削らない方針で決まった後ぐらいに、@t_wada さんから以下のサイトを紹介されました。
各スタッフが熟読した後に興味を持ったのが以下の文です。
コミュニティ運営メンバーによる違反行為についても同様に情報提供を求めますが、十分な対応が期待できない場合はTwitterなどのソーシャルメディアに助けを求めてください。
なるほど、CoCを正しく定めて相談窓口を設けても運営が正しく機能していなければ相談者を助けることはできません。その一文を加えることとして完成したのが以下のCoCです。
準備会では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)用でした。
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のオンラインを他の人も今後企画・運営しやすいようにノウハウを残さなければという使命感で色々とノウハウを蓄積していったのが素敵でした。 このあたりの記事が参考になります。
今後もTDDやXPを普及に寄与していきます。
リモートペアプロのための製品・サービス
みなさんリモートペアプロしていますか。 COVID-19の影響で在宅勤務になっている人が多いと思います。 今まで対面でペアプロしていたのにリモートになって試行錯誤しているのではないでしょうか。
本記事ではリモートペアプロのための製品・サービスを紹介したいと思います。
各製品・サービスについての深堀はしません。
IDEやエディタのプラグイン
Visual Studio LiveShare
Visual Studio 、VSCodeに対応。
無料。
対応言語も幅広い。
JetBrains純正のリモートペアプロツール(名称不明)
Collaborative development : IDEABKL-708
JetBrainsが開発しているJetBrains製IDE向けのプラグイン。
2020.2がリリースされたタイミングでEarly Access Previewが発表される模様。
Teletype for Atom
無料。
motepair
無料。
Remote Collab for SublimeText
SublimeTextでリモートペアプロするためのツール。
無料。
SAROS
XMPPで通信するので、そのためのサーバを立てる必要がある。
CodeTogether
Eclipse、JetBrains製IDE、VSCodeに対応。
無料プランあり。 Covid-19の状況をふまえて終了期間未定でProも無料らしい。
CodeStream
VSCode、Visual Studio、JetBrains製IDE、Atomに対応。
無料プランは30日間限定。
TeamHub
価格のことは書かれておらず、Early Access版のみのようなので、 現在は無料で使えそう。
Webで共有するサービス
Visual Studio Codespaces
旧Visual Studio Online。
LiveShareが利用可能。
GitHub Codespaces
Visual Studio Codespacesのようなもの。
repl.it
無料プランあり。
Gitpod
VSCode CloneでVSCode Extensionが使えるらしい。
無料プランあり。
AWS Cloud9
EC2のコンピューティング とストレージのリソース分の料金が発生。
CodeSandbox
Classroom Modeという授業をやるように適したモードがあるらしい。
無料プランあり
Codeanywhere
有料プランのみ
CodePen
無料プランあり
画面共有サービス
画面共有サービスはたくさんありすぎるのでペアプログラミングでの使用をうたっているツールを選びました。
TUPLE
USE Together
Screen.so
TeamViewer
ひとまずは以上。 気が向いたら深堀します。
App Center Pushの廃止に伴い、Notification Hubs SDKがリニューアル
以前のBlogで以下の内容を書きました。
このmBaaS機能のリタイアによって、App Centerの初期のころからあるPush機能も廃止となりました。
そして、5月15日に以下の発表がありました。
廃止されたPush機能を使っている開発者がAzure Notification Hubsへ移行しやすいように、App Center Pushでのフィードバックを踏まえた新しいAzure Notification Hubs SDKが発表されました。
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からのマイグレーション
以下のサイトで説明しています。
なんかサンプルアプリを試してみたいなぁ...
PlayFab Meetup#3 で「すごろくゲームでPlayFabの活用を検討」というLTをしました
2020年4月25日に開催されたPlayFab Meetup#3 で「すごろくゲームでPlayFabの活用を検討」というLTをしました。
発表した資料はこちらです。
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機能がリタイアとなりました。
起きたらびっくり
本日、朝起きて出社する準備中に以下のツイートを見てびっくりしました。
📣 Announcing MBaaS Service Retirement. 📣
— Visual Studio App Center (@VSAppCenter) 2020年2月3日
See what that means for you:https://t.co/6XeL327vJq
思わずコメント付きリツイートしてしまいました。
ヽ(;゚;Д;゚;; )ギャァァァ https://t.co/F9RDYENj3A
— なかしょ (@nakasho_dev) 2020年2月3日
なんでびっくりしたか
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にとって、AndroidやiOSのモバイル開発者が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をしました。
発表した資料はこちらです。
www.slideshare.net
いつもモバイル関連なのでモバイルではないことをしゃべろうとしてサーバサイドの話をしました。
以下のようなことを話しました。
- Azure Pipelines には様々なビルドテンプレートがある
- Azure Pipelines Agent使うとオンプレミス環境でのデプロイも簡単になる
- ビルドパイプラインとリリースパイプラインは明確に分けよう
- リリースパイプラインには特定ユーザによる承認の仕組みがある
- Azure Artifactでプライベートリポジトリを作ろう
今後もCI/CDについて色々紹介できればと思います。