Upgrade to Pro — share decks privately, control downloads, hide ads and more …

あなたと組織がモダンアプリケーション開発を実践できるようになるまでの全過程

濱田孝治
October 07, 2021

 あなたと組織がモダンアプリケーション開発を実践できるようになるまでの全過程

MAD事業部で実践しているモダンアプリケーション開発、ビジネスアジリティの面で非常に優れた手法であることはMAD事業部誰もが実感しているのですが、その習得と実践には、今までのアプリケーション開発の知識だけでは不十分です。 このセッションでは、あなたと組織がモダンアプリケーション開発を実践できることをゴールとした時に、どのようなラーニングバスが必要か?どのような学習が効率が良いのか?を、弊社メンバーの経験則を元に皆さんにお届けします。

濱田孝治

October 07, 2021
Tweet

More Decks by 濱田孝治

Other Decks in Technology

Transcript

  1. 7 ⾃⼰紹介 濱⽥孝治(ハマコー) • CX事業本部 MAD事業部⻑ • Japan APN Ambassador

    2020 • JAWS-UG コンテナ⽀部運営 • 好きなサービス︓ECS, EKS, CloudFormation • 好きな⾔葉「わっしょい」 • @hamako9999
  2. 19 MAD事業部の経緯 • クラスメソッド株式会社 CX事業本部 • 2020年7⽉ • MADチームとして開始 •

    ⼈員は12名 • 2021年7⽉ • MAD事業部に変更 • ⼈員は12名 → 30名に • MAD領域を専⾨とするエンジニアと内製化⽀援チーム (別途ご紹介)がジョイン
  3. 20

  4. 22 MAD(Modern Application Development) AWSサービス︓Amazon DynamoDB、Amazon API Gateway、AWS IoT、AWS Step

    Functions、AWS Amplify、AWS AppSync、 AWS Glue、Amazon Kinesis、 Amazon Athena Google Cloudサービス︓ Cloud Firestore、Cloud SQL、 Cloud Pub/Sub Infrastructure as Code︓ AWS CDK、AWS CloudFormation、AWS SAM、 Serverless Framework、 Terraform CI/CD︓ Codeシリーズ、CircleCI、 GitHub Actions
  5. 42 エンジニアKさんの場合 • 前提 • クラスメソッドのAWSインフラエンジニア、ソリューションアーキテクト、プリセールス • Cognito周辺を⼀部経験 • コーディング経験は⼀切なし

    • 2019年7⽉ • PythonでLambdaのコードを書き始める • 当初はPythonの⽂法をググりながら、周囲のエンジニアの助けを経てスキルアップ • 合わせてテストを書き始める • 主な関⼼事 • Pythonを思い通りに書けるか • テストを書けるか • プロジェクトで採⽤されているライブラリを使えるか • SAMの利⽤(CloudFormationには慣れていたので、そこまで苦労はしなかった)
  6. 43 エンジニアKさんの場合 • 2020年2⽉ • CDK • 案件前からプライベートで書いていた • このとき初めてTypeScriptを触る

    • サーバーサイドコーディング • TypeScriptでLambdaを書く • 設計全般 • ⼀気にSW設計に⽬覚める(Clean Architecutere、ドメイン駆動設計) • DynamoDBの設計に⽬覚める(RDB経験は皆無) • Amazon DynamoDB deep dive:Advanced design patterns • いろんな⽂献を参考にしつつ、実際に⼿をかけて⾝体になじませていき理解していった
  7. 44 エンジニアKさんの場合 • 2020年4⽉ • フロントエンド • Reactに⼿を染める • Appolo

    Client, Reactfor, Material UIなどを⾃分で検証して選定 • StoryBookも体験 • Auth0との連携も試してブログ化 • TypeScriptでLambdaを書く • 学習 • 公式ドキュメントは全部読んで、チュートリアルをやった • まずは全部読んだ。全部 • サーバーサイドはGraphQL • GraphQLからAppSyncに⼿を出す • Amplifyコンソールを触りだしたのもこの頃 • 2021年4⽉ • gRPC, Go, Neptune • マイクロサービスの設計を強く意識しはじめる • マイクロサービスパターン • マイクロサービスアーキテクチャ
  8. 46 エンジニアKさんが今を振り返って やってよかったこと • ⼀回ぐらいOSSコントリビュートすると、達成感も出て気 持ちも捗ると思う • 本を読む • ⼀つのプロジェクトで全員が全員設計するわけではない

    • 原理原則を1から学ぶには、本を読んでそれをインプットすると、 既存のプロジェクトのコートの⾒え⽅が変わってくる。その疑 問点を同僚とディスカッションすることで理解が深められる • そこまでくると、同僚と話すだけで知識がどんどんはいってく る • ベースの知識が無いと理解を積み上げるのが難しい
  9. 48 エンジニアOさんの場合 • 前提 • クラスメソッド機械学習チームへの配属 • ひたすらSageMakerを試してブログを書いていた • API

    GW+Lambda(Python)、DynamoDB • Step Functions、Lambda(Python)、Glue → Fargate • S3 + Athena + Redash • 2020年4⽉ CX事業本部異動 • アプリケーション実装⼒をがっつり伸ばしたかった • APIとバッチ処理の開発 • ECS(EC2)、Spte Functions、Python、Autora(PostgreSQL) • 動かない単体テストがあり、それを参考に動かしつつ機能追加をしていった
  10. 49 エンジニアOさんの場合 • 2020年7⽉〜 • ⼤きめの受託開発案件に要件定義から参画 • 要件定義が何たるかを知った • 開発チームを牽引(バックエンドを中⼼に)

    • Pythonで書く想定だったが、引き継ぐ想定でクライアントと同じTypeScriptを利⽤ • CDKはやりたかったから採⽤(YAMLを書きたくなかった) • TypeORMを採⽤ • かなりむちゃだったが夜な夜な調べながら対応 • 実装⼒アップのために競プロをはじめる(AtCoder) • ここでかなり⾃⼒がついた
  11. 50 エンジニアOさんが今を振り返って 資格をとる • AWSとGoogle Cloudの資格を全部とった • もともと知識がなかったので、薄く広く知るためには最強 のツールだった •

    本はあんまり読まなかった 案件をゼロベースで担当する • ⾃分が考えて作っていくので、改めて深く考えるのと、顧 客調整しながらやっていくので、責任感と相まってガッツ リ成⻑できた
  12. 52 ⾎⾁になったもの⼀覧 ⾎⾁になったもの 業務でどのように役⽴ったか Clean Architecture 設計原則の⼀つとして押さえておくことが重要 ドメイン駆動設計⼊⾨ 設計原則の⼀つとして押さえておくことが重要 初めてのGraphQL

    GraphQLを始めるとき、何はなくとも⼀度やってみる Web API The Good Parts REST APIの設計原則を学ぶのに最適 リーダブルコード 読みやすいコードをどのように書けばよいか具体的なTipsを学べます。 CPUの創りかた アジャイルサムライ アジャイル・スクラムの基礎知識が得られる ITエンジニアのための機械 学習理論⼊⾨ 機械学習の理論について体系⽴てて説明しており、かつ、同じテーマについて複数 の⼿法を適⽤していてその違いを理解しやすいです。 NOSQLの基礎知識 若⼲古いですが、NOSQLについて俯瞰的な知識をサクッとつかめるのでおすすめで す。NOSQLについて触れる際に最初に読んでおくとよいと考えます。 データ指向アプリケーショ ンデザイン 最近読んでますけど、15年前にこの書籍があればよかったと読書会で毎回⾔ってる ぐらい良い本ですw
  13. 53 ⾎⾁になったもの⼀覧 ⾎⾁になったもの 業務でどのように役⽴ったか 強い先輩 若い時に体系的に⾝に着けるべきものを絶妙なタイミングで教えてくれる。 杉井が3年⽬までに教えてもらったこと ・デザインパターンなどの「ベストプラクティス」という概念 ・UML(設計ドキュメントの正しい書き⽅) ・JavaやってるんだったらJavaのコードを読め

    ・データベースの基本的な仕組み(テーブル設計とかチューニングの基礎になった) ・エンジニアは怠惰であれ ロジカル・シンキング (Best solution) ドキュメントの書き⽅とかコミュニケーションの取り⽅について学びました。 Effective Java 読んだのは2版ですけど、⾮常によかったです。 実装パターン 薄いですけど、ほんとよくまとまっててよかったです。先⽇メルカリで7000円ぐらい で売れましたw UNIXという考え⽅ 名著 LPICレベル2 Linuxが触れるようになった プログラマが知るべき97の こと バージョン管理ツールの存在を知った IPAの試験 元々iTunesの使い⽅ぐらいしか知らずにIT業界に⼊ったが、XXスペシャリストを全部制 覇する頃には⾊々トラブルシューティングとかまでできる⼒がついていた 3Minutes NetWorking ネットワーク関連の基礎知識を学びました。
  14. 54 ⾎⾁になったもの⼀覧 ⾎⾁になったもの 業務でどのように役⽴ったか AWS公式ドキュメント まずはここを調べます。 テスト駆動開発 友⼈と⼀緒にペアプロしながらやったのもあって勉強になった。 エクストリームプログラミ ング

    読んでないけど今では当たり前な(?)プラクティスが⾊々紹介されている AWS サービス別資料 知らないサービスを把握する際にまず⽬を通します。 リファクタリング 読んでないけどリファクタリングについてサンプルコードを元に学べる 計算機プログラムの構造と 解釈 関数型の考え⽅について理解が深まった気がします。 Qiita 検索するとよく引っかかります。 Stack Overflow 同じく英語で検索するとよく引っかかります。 達⼈プログラマー 僕が読んだのは第1版で新社会⼈の頃でした。それまで感覚でやっていたことを体系 的に⽰してもらったという印象でした。 [Web開発者のための]⼤ 規模サービス技術⼊⾨ AWSでシステムを構築する場合でも、結局負荷とは何なのかという感覚をつかんで いることは引き続き重要なのかなと思います。これは本当にオンプレでゲーム会社 のサイトとか設計するときに読んでました。 コミュニティ勉強会への参 加 知識が増えるだけじゃなく、技術の話ができる仲間が増え、その影響でまたイベン ト参加することが増えたり、、、と良い循環が回った気がする。楽しそうに仕事を している⼈たちが存在することを知れた
  15. 55 ⾎⾁になったもの⼀覧 ⾎⾁になったもの 業務でどのように役⽴ったか アプレンティスシップ・パ ターン キャリアとかについて悩んでたときに読みます。ソフトウェアエンジニアの⾔語化 できないモヤモヤに対するヒントになることが書いてあります オブジェクト指向でなぜ作 るのか

    オブジェクト指向、UML、モデリングなどの基礎的な知識が学べました AIエンジニアのための機械 学習システムデザインパ ターン MLOps 開発における様々な practice が全体的に備えています。また、理論と実践が 良いバランスで混ざっているのですぐ⼿元で試してみるのもできます。 プログラミングの⼼理学 20年くらい前に読んだ本で、その当時発刊後20以上経っていたような古い本ですが、 パンチカードなどが使われていた時期にすでにアジャイルのようなスタイルの開発 をしていた集団がいたというような話が書いてあって、プログラマーの⼼構え的な ものを学べました。後に発刊された達⼈プログラマーでやっとこの本で⾒た内容が 地に⾜がついた感じになったので、実践というより「読み物」かもしれませんが。 エキスパートCプログラミン グ―知られざるCの深層 内容もさることながら、コラムもマニアックで楽しくて、技術の無駄遣い全開なノ リでプログラミングがいっそう楽しくなりました。C⾔語の理解がかなり深まるいい 本でしたが、C⾔語を仕事で使ってなくても楽しめる技術の無駄遣い本です。技術で 遊ぶことがさらに楽しくなりました。
  16. 58 コンピューティング環境 • LambdaとFargateが半分半分ぐらい • コンテナに関しては、ECS on EC2はなし • EKSはEKS

    on EC2 • LambdaでAuroraも複数有り(RDS Proxy) • がっつりどちらが良いとはきめきれないので、案件特性、 ビジネス要件に応じて都度判断している
  17. 60 Infrastructure as Code • CDKが確実に増えている • CDKを使う場合は、必ずTypeScript • その他は群雄割拠

    • CloudFormation • Terraform • ServerlessFramework • ServerlessApplication Model
  18. 61 CI/CD • GitHub Actionsが強い • ISSUE管理、リポジトリ管理、プルリクエストレビューなどと⼀ 貫した環境で作業できるのが⾮常に強い • AWSとの親和性も最強。このアップデートは衝撃

    (GitHub ActionsでAWSの永続的なクレデンシャルを渡 すことなくIAM Roleが利⽤できるようになったようで す) • GitLabもよく使われている • Codeシリーズはあんまり… • 開発フローを回すのに⾟い場合が多い
  19. 68 アンチパターン① サービス要件が⾮常に厳しいアプリケーションに慣れて ない⼿法を適⽤しようとする • 社運をかけたプロジェクト • 1秒たりとも落とせないサービス • 新⼿法を取り⼊れるメリットを最⼤限活かすため

    失敗できないが故にスピードが遅くなる • 計画段階で複数プロダクトのプロコンを作成 • ⾮機能要件の全ケースと異常ケースを洗い上げ • 想定する全ての機能、⾮機能の検討が終わらない限り開発 に着⼿できない
  20. 71 アンチパターン①の解決策 SLA、SLOが低いもので試してみる • 社内のちょっとした情報共有ツールやブログなど • 半⽇ぐらい落ちても影響ないものあたりを選定 運⽤することでノウハウの蓄積速度が早い • 設計だけでなく、実際に⼿を動かして開発、そして運⽤す

    ることで得られる知⾒はものすごく⼤きい • 特にトラブル発⽣時に得られる知⾒は貴重 • たとえkubernetesの採⽤がオーバーエンジニアリングだ としても、あえてやってみる価値はある
  21. 79 ロールの違いを過剰に意識する 最初にロールを作って、それに当てはまる作業を振り分 けようとする • 「Dev」 vs 「Ops」 • 「アプリ」

    vs 「インフラ」 • 「YAMLは誰が書くの︖」 モダンアプリケーションの開発や運⽤における考慮事項 は多い • アプリケーション開発、構成管理、開発フロー整備、アプ リケーションデプロイ、テスト、監視、トレーシング、セ キュリティ、ロギング、ライブラリアップデート
  22. 93 MAD事業部のポリシー モダンな開発技術 をビジネス価値に 直結できる ゴール ネットの情報 ・ウェビナー ・ブログ ・公式ページ

    スタート 多数の顧客を⽀援した実績と知⾒を是⾮ 活⽤いただきたい ノウハウの出し惜しみは⼀切しません