Slide 1

Slide 1 text

© SMS Co., Ltd. 1 PHPカンファレンス小田原 2024 出来らあっ!!(という気持ち)から始めた、 コンテナ化と開発者体験の向上施策 Shota Ito

Slide 2

Slide 2 text

© SMS Co., Ltd. 2 みなさん

Slide 3

Slide 3 text

© SMS Co., Ltd. 3 楽しんでますか〜?

Slide 4

Slide 4 text

© SMS Co., Ltd. 4 を見てふふふってなった方も なんだろう?ってなった方も

Slide 5

Slide 5 text

© SMS Co., Ltd. 5 ぜひぜひ仲良くしてください ※MySQL 寿司ビール問題で検索すると色々出てきます

Slide 6

Slide 6 text

© SMS Co., Ltd. 6 閑話休題

Slide 7

Slide 7 text

© SMS Co., Ltd. 7 01 02 03 04 05 06 目次 自己紹介とサービス紹介 医療キャリア事業に携わり始めたときのきっかけ ローカル環境の整備 デプロイフローの整備 全体を巻き込んで行動するときに心がけているマインドと振る舞い 今後の課題

Slide 8

Slide 8 text

© SMS Co., Ltd. 8 01 自己紹介とサービス紹介

Slide 9

Slide 9 text

© SMS Co., Ltd. 9 自己紹介 • 株式会社エス・エム・エス プロダクト推進本部 技術推進グループ • 2023 年4 月入社( ちょうど今月で1 年 ) • SRE( 最近はPlatform Engineering 寄り) • 群馬県からフルリモートでお仕事中 • X: @st_1t • 今日がまさかの10 周年 伊藤 翔太 / いとう しょうた

Slide 10

Slide 10 text

© SMS Co., Ltd. 10 エス・エム・エスについて エス・エム・エスは、 「高齢社会に適した情報インフラを構築することで人々の生活 の質を向上し、社会に貢献し続ける」というミッションを掲 げ、多様な事業を展開しています。

Slide 11

Slide 11 text

© SMS Co., Ltd. 11 分野 区分 サービス キャリア 介護キャリア 医療キャリア 介護事業者 ヘルスケア シニアライフ 海外 *1 .柔道整復師、あん摩マッサージ師、はり師、きゅう師のこと サービス一覧&紹介 介護職向け求人情報 看護師向け 人材紹介 看護師向け 求人情報 介護・医療・福祉の 資格講座情報 PT/OT/ST 向け 人材紹介 ケアマネジャー向け 人材紹介 看護学生向け 就職情報 放射線技師向け 人材紹介 高校生・看護学生 向け奨学金情報 臨床検査技師向け 人材紹介 看護師・看護学生向け コミュニティ 臨床工学技士向け 人材紹介 保育士向け 人材紹介 治療家*1 ・セラピスト向け 人材紹介 介護事業者向け 経営支援 介護事業の 経営者・管理者向け情報 高齢社会の 調査・研究・情報発信 医療従事者向け医薬情報 治療家*1 ・セラピスト向け 求人情報 柔道整復師・あはき師 向け受験参考書 人事・組織ソリューション 管理栄養士・栄養士向け 人材紹介 介護職向け人材紹介 介護で働く人の ためのスクール 介護で悩む人向け コミュニティ 高齢者向け食事宅配 紹介サービス 高齢者向け住宅 紹介サービス 遠隔指導特定保健指導 サービス 管理栄養士・栄養士向け コミュニティ 企業の介護離職 防止ソリューション ICT を活用した 禁煙サポート 認知症患者とその家族 向け認知症情報 認知症予防 ソリューション 認知症予防の 習慣化サポート 遠隔指導重症化予防 サービス 女性の健康経営 サポート 産業保健に 関わる人向け情報 企業向け健康管理 業務サポート 住まいにまつわる 総合情報サイト 葬儀社紹介サービス  ケアマネジャー 向けコミュニティ 医療従事者向け人材紹介 ( マレーシア、フィリピン、アイルランド、UK 、ドイツ等) 看護師向け キャリアサービス 行動療法に特化した 禁煙サポート 自治体向け調査・ 計画策定・予防事業 医療介護業界特化型 ストレスチェック

Slide 12

Slide 12 text

© SMS Co., Ltd. 12 02 医療キャリア事業に携わり始めたときのきっかけ

Slide 13

Slide 13 text

© SMS Co., Ltd. 13 医療キャリア事業に携わり始めたときのきっかけ • 全社SRE 業務で医療キャリアの構成を見たときに、介護キャリアチームの良いところを展開 できそうなポイントがいくつかあった デプロイフローや、コンテナ化、監視設計等 • 入社時は介護キャリア事業のSRE(+ アプリ開発) と、全社SRE チームを兼務で入社していた 月〜水は介護キャリア事業の業務、木金は全社SRE 業務 お、これは大きな改善チャンスでは・・・?

Slide 14

Slide 14 text

© SMS Co., Ltd. 14 え!! 全社SRE業務をやりながら医療キャリアのインフラ改善を!?

Slide 15

Slide 15 text

© SMS Co., Ltd. 15 出来らあっ!

Slide 16

Slide 16 text

© SMS Co., Ltd. 16 まずは将来像を社内で語っていく

Slide 17

Slide 17 text

© SMS Co., Ltd. 17 まずは将来像を社内で語っていく やった~~~ ※社内Wikiをスターの多い順でソートして7位になるくらい多く、他はREADMEや用語集といった誰もが見る資料が多い

Slide 18

Slide 18 text

© SMS Co., Ltd. 18 が、

Slide 19

Slide 19 text

© SMS Co., Ltd. 19 できねえーーーーー!!!

Slide 20

Slide 20 text

© SMS Co., Ltd. 20 何ができない要因になっていたのか • 単純に時間がない(キャパシティオーバー) 介護キャリア向けの仕事としてアプリ開発に挑戦したり※1 、開発者体験を上げられそうな業務をやってみたり※2 • 全社SRE チームから医療キャリアチームのSRE へ引っ越し 元々やっていた介護キャリアとも距離が近いこともあり相談してキャリア事業専任SRE へ ※1 :35 歳から挑戦するインフラエンジニアのアプリケーション開発@SMS TECH BLOG ※2 :パスワードマネージャを1Password へ移行、アンチウィルスソフトウェアの変更検討

Slide 21

Slide 21 text

© SMS Co., Ltd. 21 03 ローカル環境の整備

Slide 22

Slide 22 text

© SMS Co., Ltd. 22 ローカル環境の整備@意識したこと • docker-compose.yml で定義しているアクセス経路を整理する - 初期構築時は動くことを優先にしてついホスト側に色んなポートを露出させがち - 色んなところでアクセス経路を持たせてしまうと、 - トラブルシュートが大変になりがち - 将来追加するコンテナのポートがバッティングしてしまうかも - Reverse Proxy を経由させることで、
 各Web サービスに名前でアクセスできるようにする - 例) - OK - https://www.local.example.com - https://mail.local.example.com - NG - http://localhost:3000 - http://localhost:8025

Slide 23

Slide 23 text

© SMS Co., Ltd. 23 ローカル環境の整備@意識したこと • ドキュメントより仕組み化を徹底する Makefile でラップしてmake コマンドで立ち上がるようにする。 - ドキュメントは整備しても更新漏れに気が付きにくい - コマンド化してあると、失敗したりするので気が付きやすい - Makefile のヘルプ Tips - こんな感じで書いておいてあげると、
 ## 以降のコメントをmake コマンドが拾ってくれる % make help: このページを表示 install_commands: 必要なコマンド類をインストール init: 0 から環境を初期構築する start: 全てのコンテナを起動 stop: 全てのコンテナを停止 down: 全てのコンテナを削除する(MySQL のデータは消えません) restart: 全てのコンテナを再起動する sqldef: ローカル環境でスキーマ変更を適用する log: 全てのコンテナのログをtail し続ける glog: MySQL general query log を表示する destroy: 全てのコンテナを削除する(MySQL のデータも消えます) よくある操作手順はこちら: https://xxxx.example.com % help: ## このページを表示 @sed -n -e '/^[^#]*##/ s/^\(.*\):.*##/\1:/p' $(MAKEFILE_LIST) @echo @echo ' よくある操作手順はこちら: https://xxxx.example.com' • 証明書エラーを出さずにちゃんとHTTPS 通信できるようにする Google Chrome で「thisisunsafe 」と入力して回避もできるけどちゃんとやる - mkcert コマンドを利用するとサクッと証明書の発行まで済ませられる

Slide 24

Slide 24 text

© SMS Co., Ltd. 24 04 デプロイフローの整備

Slide 25

Slide 25 text

© SMS Co., Ltd. 25 デプロイフローの整備@解決したかった課題 • 意図せず自分以外のコミットもリリースされてしまわないようにしたい 同一サービス内でデプロイタイミングがバッティングすると、他の人の動作確認中のコミットが一緒にリリースされてしまう 可能性があった  →今本番リリースすると何のPR がリリースされるのかわかるようワンクッション挟むようにした • IDE のSFTP 機能でDevelopment 環境(EC2 )へデプロイする  Development 環境にSFTP で反映していたがサーバーへのアップロード漏れや、コミット漏れが発生していた → 複数名で動作確認するための環境へのデプロイはEdge 環境やGitHub Actions でデプロイを仕組み化 • DB のスキーマ変更を人力でやるのを辞めたい 開発環境も本番環境もDB サーバーにログインしてSQL を実行する運用になっていた →sqldef というツールを利用してGitHub Actions やmake でラップして実行するように整備

Slide 26

Slide 26 text

© SMS Co., Ltd. 26 デプロイフローの整備@整備後の全体像

Slide 27

Slide 27 text

© SMS Co., Ltd. 27 デプロイフローの整備@デプロイの流れ

Slide 28

Slide 28 text

© SMS Co., Ltd. 28 デプロイフローの整備@Edge 環境

Slide 29

Slide 29 text

© SMS Co., Ltd. 29 デプロイフローの整備@Edge 環境とは? • Pull Request をレビュアーが動作確認できるようにするための一時的な環境 - PR を作ったら必ず作成するというよりは、必要な場合に作成する使い方をしています - UI 変更や重めなロジックの変更等 - Label に「edge 環境」を追加するとGitHub Actions がAWS CloudFormation を使いデプロイ - PR にコミットが追加されたら更新され、PR がClose されたら自動で削除される Edge環境が作られたことを通知 実際のEdge環境

Slide 30

Slide 30 text

© SMS Co., Ltd. 30 デプロイフローの整備@Edge 環境を作るGitHub Actions の中身 github.event.pull_request.numberを使ってPR独自の値をenvに仕込んでおく 特定のラベル名の時に実行 envを利用してCloudFormation内のパラメーターを上書き

Slide 31

Slide 31 text

© SMS Co., Ltd. 31 デプロイフローの整備@DB Migrate

Slide 32

Slide 32 text

© SMS Co., Ltd. 32 デプロイフローの整備@DB Migrate • DB Migrate についてはsqldef というツールを利用しています • Laravel のmigration ではなくsqldef を利用しているのは、 - 既存のmigration ファイルが不足していた - 0 ベースからやるなら、実際のDB を元にしたスキーマ定義を抽出して保守出来る方が確実でやりやすい - 例)mysqldef -uroot test --export > schema.sql - dry run ができるのが良かった 引用:https://github.com/sqldef/sqldef

Slide 33

Slide 33 text

© SMS Co., Ltd. 33 デプロイフローの整備@DB Migrate • Local 環境 • $ make db_migrate といった形でmigrate する • Staging 環境 • スキーマファイルを修正したPR を作成するとGitHub Actions でDry run が実行されコメントされる • topic ブランチをmain ブランチにmerge するとStaging 環境へスキーマ変更が反映される • Production 環境 • $ make db_migrate_production といった形でmigrate する

Slide 34

Slide 34 text

© SMS Co., Ltd. 34 デプロイフローの整備@DB Migrate ecspressoを使って出力結果内容をGitHub commentに追記

Slide 35

Slide 35 text

© SMS Co., Ltd. 35 デプロイフローの整備@Deploy Pull Request

Slide 36

Slide 36 text

© SMS Co., Ltd. 36 デプロイフローの整備@Deploy Pull Request • 本番環境へデプロイするためのPull Request - main ブランチ -> deploy ブランチへの方向で自動生成されるPR - main ブランチにcommit が追加されると自動でPR のコメントが追加される

Slide 37

Slide 37 text

© SMS Co., Ltd. 37 03 全体を巻き込んで行動するときに心がけている マインドと振る舞い

Slide 38

Slide 38 text

© SMS Co., Ltd. 38 全体を巻き込んで行動するときに心がけているマインドと振る舞い • 既存のメンバーとシステムに対して最大限リスペクトする 今自分がもらっているお給料は今まで開発、保守、サポートしてくれているメンバーやシステムが発生しているものなので絶対に今 すぐこうすべき!みたいな考え方は捨て、よりよくするために一足飛びでやろうとするのではなく、背景を確認しながら一歩づつ確実 にやっていく。 • 単なる業務の押しつけにならないようにする アプリ開発者がインフラ構成をどんどん変えられるようになると従来のインフラ作業が減っていきます。
  単に業務の押し付けにならないよう、ここを変えられるとお互いどう嬉しいのかをちゃんと語っていくようにしています。 • 積極的にペアワークを誘っていく Terraform の書き方だけでなく、トラブルシュート等もペアワークして周辺知識を伝えていく

Slide 39

Slide 39 text

© SMS Co., Ltd. 39 04 今後の課題

Slide 40

Slide 40 text

© SMS Co., Ltd. 40 今後の課題 • Terraform をもっと色んな人がメンテできるようにしていく - PR を作ったらterraform plan 内容をPR のコメントに追記する - main ブランチにmerge したら自動でterraform apply - renovate を追加してバージョンの更新漏れを防いでいきたい - Terraform Cloud を検討中 • ガードレールを整備していきたい - ControlTower を有効にはしているけど、まだポリシーで絞るところまでは踏み込めていない

Slide 41

Slide 41 text

© SMS Co., Ltd. 41 今日の話を聞いて少しでも興味があればいつでもお声がけください • SRE の採用募集ページ 今日の発表内容は医療キャリア事業向けですが、他の事業でも募集しています。 • ユニークな制度 - スキルアップ手当( 年1 回15 万円支給) - MacBook Pro M2 Max( メモリ64GB) 貸与 または M3 Max ( メモリ64GB 以上にて機種検討中) - 希望者は GitHub Copilot for Business を利用可能 - Slack で技術書のリンクを連絡すると自宅に送付手配をしてもらえます • ソフトウェアエンジニア - バックエンド (PHP) の採用募集ページ PHP 以外にもRuby を主軸としているチームやJava/Kotlin を使っているチームもあります。

Slide 42

Slide 42 text

© SMS Co., Ltd. 42 今日の話を聞いて少しでも興味があればいつでもお声がけください Ask the Speaker のブースでは実際のコードを交えて話せたり、 今後予定してる開発者体験向上の施策や踏み込んだ課題についてお話もできます

Slide 43

Slide 43 text

© SMS Co., Ltd. 43 今日の話を聞いて少しでも興味があればいつでもお声がけください