
2025.02.12
職員一人あたり52時間の残業削減に成功 kintone導入がもたらした富士吉田市の自治体DX“変革”ハウツー
リンクをコピー
記事をブックマーク
k.goto氏:次が4番。エディタ内での開発完結。ここがかなりうれしいところかなと思います。スタートアップは、アプリ開発者が多いことが多いかなと思います。ということは、エディタに慣れている方が多いんじゃないのかなと。CDKはエディタ内でできることが非常に多いです。ドキュメント参照とか、リソース更新差分の表示のdiff表示、CDKリソースのユニットテスト、インテグレーションテスト。これはアプリケーションのソースコードではなくCDKの定義ですね。S3バケットとかSQSのキューとか、そういったもののユニットテストとインテグレーションテストも行えるので、開発ルーティンの大部分がエディタ内で完結できます。
(スライドを示して)これはCDKの開発フローの一例となっているんですが、最初にコンストラクトのガワだけでnew Bucketというものを書いておいて、それでドキュメントを見に行って、ドキュメントを基にパラメーターをコピペしたり、補完入力をしたり、必須入力漏れの項目のLintエラーとかを対応したり、diffしたり、ユニットテストをして、インテグレーションテストをして、デプロイをする。また上に戻ったり下に行ったりという一連のルーティンを、全部エディタ内で完結することが可能になります。
先ほど4つ挙げましたが、1つずつ掘り下げていきます。エディタ内でのドキュメント参照。これはCDKのドキュメント、いわゆるAPIリファレンスというのは、CDKはオープンソースなんですが、その内部にあるREADMEファイルとJSDocというコードコメントからなってるんですね。
これらから自動で生成されてWebにアップロードされる。アップロードというか、Webで見られるようになっています。それでCDKのコンストラクトを自分のVSCodeとかのエディタで打って、そのコンストラクトから型参照、コードジャンプでCDKの内部のファイルに飛べるんですね。つまり、そこからREADMEとかJSDocを見に行くことで、エディタでドキュメントを見ることができます。つまり、いちいち見たい項目のドキュメントをWebで検索しなくても、そのままコードジャンプですぐに飛べるので、いろいろな手間が省けるんじゃないのかなと思います。
例です。見えづらいので中は見なくてもいいんですが、上がJSDocで……。これがAWS Backupかなにかのプロパティで、デフォルト値が何で、こういうプロパティですよという説明がソースコードにあって。(スライドを示して)下のものはWebページからスクショしてきたものなんですが、自動で作られている。
これも中身はわからなくてもいいんですが、左側がREADMEファイルというものです。これを基に右側も同じくWebページから取ってきたんですが、丸々自動で作られているので、エディタ内で同じ情報が見られちゃうという特徴があります。
2番目にリソース更新差分のdiff表示というものがあります。CloudFormationではリソースの更新差分「〇〇というリソースを作りますよ、更新しますよ」というようなものを、Change Setという機能で確認できます。これはマネコンで確認することが多いかなと思います。
一方で、CDKではエディタ、実際はエディタ付随のターミナルですが、エディタでdiff確認が可能だったりします。これがcdk diffというコマンドです。これを使うことで、エディタで開発しながらその場で更新差分を確認できるという、非常に強い機能になります。
具体例ですが、例えばとあるリソースのThresholdというプロパティを100から90に変えた時に、cdk diffを実行すると、赤い文字から緑に変えたということが視覚的にわかる。
かつ、右上にreplaceと書かれていて。リソースの置き換え、削除されて作り直しされるということをreplaceというんですが、「これが走りますよ」というところまでもわかるというので、非常に便利です。
次がCDKリソースのユニットテスト。CDKのユニットテストではこんな感じでいっぱいやれることがあります。
まずCDKスタック。自分で定義したスタックからCloudFormationテンプレートのオブジェクトを生成することができるという関数が用意されています。
それを基にスナップショットテストができます。ここでスナップショットテストとは何かというと、前回のスナップショットと比較をして変更があるかどうかをチェックするテスト。スナップショットとは何かというと、CloudFormationのJSONですね。テンプレートファイルを保存しておいて、前の状態のものと確認する。そのスナップショットテストが、この関数によって行えます。
次はFine-grained Assertions Testというものがあって。これは何かというと、リソースの個数とか、どういうプロパティを持つかというチェックをするユニットテストの方法です。
右側のresourceCountIs。これも用意されている関数です。WAFが1個作られているとか、その下のhasResourcePropertiesというものに、WAFがDefaultAction:{Block: {} }というプロパティをちゃんと持っているかをテストする。
あとは便利なメソッドでMatch.xxみたいな関数も用意されていて。ここでいうと、anyValue()という疑似値を生成する。(anyValue()は)なにかの値を持つというのを生成するメソッドで、なにかの値を持っている。具体的なIPアドレスをユニットテストのソースコードに直打ちすることはあまりやらないので、なにかしらの情報、IPが入っているアドレスというキーがあるかがテストできる。
それとバリデーションテスト。これは意図したエラーになるかというテストもできます。
次がインテグレーションテストで、integ-tests-alphaモジュールというものがCDKから出されています。これは名前のとおりαバージョンなんですが、CDKのオープンソースの内部のインテグレーションテストにも使われているので、非常に信頼性が高いツールかなと。これが、CDKで定義をしたスタックを基に実際にデプロイが走る。
実際に生成されたリソースに対するインテグレーションテストを行って、最後に自動削除するというようなものです。
どんなものかというと、左側がLambdaとAPI Gatewayを作るCDKスタック。これは"Hello"というものを返すLambdaです。
(スライドを示して)右側もCDKのソースコードなんですが、左のCDKのスタックを生成して、それに対してhttpApiCallという用意されたメソッドで、実際にAPI Gatewayにリクエストを投げて、レスポンス内容で"Hello"が返るかというところまで全部CDKのコードでテストを行うことが可能です。
このhttpApiCallは、ヘッダーとかメソッドもいろいろ指定できます。
HTTP APIだけじゃなくて、AWS APIの呼び出しも可能です。例えば「デプロイしたSSMのパラメーターストアにこういう値が入っているか」とか。
複数の呼び出しの組み合わせも可能です。StepFunctionsでデプロイして、スタートして、describeしてみてSUCCEEDEDが返ってくるかみたいなものも全部CDKコード上で行えます。
例えばSQSのメッセージで、メッセージを入れてから取れるまでちょっと時間がかかったりする、期待する状態になるまで時間がかかるものは非同期で行うというようなメソッドも用意されています。
ということで、CDKはエディタでできることが非常に多いということが4番でした。
最後です。Construct Hub。スタートアップは作業が多くて、便利なものがあれば使い回したい。すでにできているものが世にあるんだったらそれを使いたいという要望があるかなと。ここで、AWSが(出している)便利なコンストラクトライブラリ集「Construct Hub」、Docker Hubみたいなものがあります。
これは千何百のオープンソースのCDKコンストラクトが公開されていて、オープンソースなので、それぞれになにかあったらプルリクも出せるし、個人で作った自作コンストラクトも公開できます。また、npmインストールみたいなかたちで取ってくるので、複数プロダクトでの再利用も簡単です。ということで、すぐに使える宝の山で工数削減(ができる)というメリットがあります。
(スライドを示して)ちょっと見づらいと思いますが、こんな感じで「Lambda」と勝手に入力したり、左側でTypeScriptとか。どんな人がPublisherで出しているのかということで、AWS公式が出しているかみたいな柔軟なチェックも可能な検索となっています。
ここで、プライベートで自分が作った物を業務で使って工数削減するという裏技もできたりします。
実際に私もやっています。
「Dockle」というDockerイメージのスキャンツールがあるんですね。これをCDKレイヤー上で走らせて、脆弱性検知の際にはECRプッシュをさせないということを全部CDKレイヤー上でやるということをオープンソースとして公開しています。よかったら使ってください。「Trivy」版も近いうちに作りたいなと思っています。
もう1個作っていて。これはニッチですが、500、502、503、504以外のHTTPCode_ELBのアラームを鳴らすアラームというものもオープンソースで公開しています。これを使いたい人はいないかもしれないですが(笑)。よかったらどうぞ。
ただ注意があって、誰でも公開できるので、信頼できる提供者から提供されているということを必ず確認してください。
ということで、CDKで生産性を向上できた5つの理由というかたちで、3つ目と4つ目にいっぱい機能を詰め込みましたが、こんな感じで5つにまとめました。
まとめとして、スタートアップ企業の開発現場から見たCDKの良いところを全部詰めておきました。
最後に宣伝だけさせてください。9月13日JAWS-UG CDK支部のCDKのパネルディスカッションで話をすることになりました。よかったらご覧ください。
自作のAWSツールをオープンソースで開発していまして、CloudFormationスタックを強制削除するツールとか、S3バケットを高速削除・空にするツールとか、Lambdaのいろいろを検索するツールとかを出しているので、よかったら使ってみてください。
ご清聴ありがとうございました。
関連タグ:
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.10
A4用紙を持ち歩いて殴り書きでアウトプット コクヨのワークスタイルコンサルタントが語る、2種類のメモ術
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
【著者来館】『成果を上げるプレイングマネジャーは「これ」をやらない』出版記念イベント!
2025.01.10 - 2025.01.10