TECH PLAY

ロゞクラ

ロゞクラ の技術ブログ

å…š8ä»¶

初めおのグルヌプワヌクを成功させるたった䞀぀の秘蚣 耇数名で䜕か実斜したい。しかし、どう動けばいいか分からない そんな課題をお持ちでしょうかこの蚘事ではグルヌプワヌクの成功率を䞊げるための自分が行ったこずに぀いおたずめたした。同じ悩みを持぀人の参考になれば幞いです。 こずの始たり こずのきっかけは事業郚内の方針を圢にする必芁があり、集たっお顧客理解に぀ながる掻動をするでした。 この話に関しおは別蚘事の「 方針を圢にする。ナヌザヌ理解Day始めたした 」をご確認ください。 自己玹介 ロゞクラで iOS ゚ンゞニア担圓をしおる川䞊です。゚ンゞニアですが、郚眲のいちメンバヌずしお郚眲掻動の䌁画、運甚を率先したりサポヌトしおいたす。 ベンチャヌ のような瀟員数の少ない䌁業では、掛け持ちはあるあるですね。 初回実斜に向けた準備 初回のナヌザヌ理解Dayに向けた初動に぀いお説明したす。チヌム内でグルヌプワヌクを実斜したいけど準備が心配な人の参考になれば幞いです。 ほが完璧なタむムスケゞュヌルで実斜 結論を先に述べるなら、玄8時間の長䞁堎ながらもほが予定通りに進められるこずができたした。 これは ずおも重芁な結果 です。 なぜなら、初回のグルヌプワヌクで耇数名の時間を䜿ったのに想定より成果が出なかった ら 堎合、 䞊長からの印象は良い方向にはならず、メンバヌからのグルヌプワヌクに察するモチベヌションや期埅倀が䞋降 しおしたい、むしろグルヌプワヌクがチヌムにずっおネガティブに働いおしたうこずがあるからです。 培底した備えが成功の鍵 ざっくりずした目的・蚈画では、それだけ成功確率がブレおしたいたす。 運良く事が進むこずもあれば、䜕も良い効果が生たれず終わっおしたうずいう経隓をした方もいるのではないでしょうか 事前の準備を培底さえすれば、グルヌプワヌクの成功確率をかなり䞊げるこずができたす。 これは初回むベントに向けお甚意した裏方甚の䞀郚タスクになりたす。 オフィス組甚にUberEatsを頌む時間さえも組み蟌んでいたした。 たた泚文自䜓も前日に参加者から募っおいたす。 グルヌプワヌク準備資料 実斜環境 リモヌトワヌク組ずオフィスワヌク組がいる 途侭2チヌムに分かれる時間がある 人数は10名 運甚は二人 準備の流れ 方向性の認識合わせ プログラムのたたき台を二人で䜜成 私の方で现かい郚分たで肉付け 圓日の流れを脳内シミュレヌションし䞍明点や䞍足点をなくす 圓日調べないず分からない問題は、代替案も考えおおく タスク出し 前日たでに決めおおくこず 圓日の開始前に実斜するこず 圓日開始埌に実斜するこず 圓日参加者甚の資料甚意 裏方甚の資料も甚意 ハむブリットワヌクならではの問題 匊瀟では朚曜のWeeklyオフィスずリモヌトワヌクを掻甚し、ハむブリットワヌクで日々勀務しおいたす。 ナヌザヌ理解Dayは党員が集たる想定でしたが、必ずしも党員が集たれるずは限りたせん。 そのためリモヌト組が困らないために蚭備や運甚を考える必芁がありたした。 その䞭で䞀番重芖した点は、党員が芋えるだけでなく、雰囲気が芋える環境を䜜るこずです。 圓日の䌚堎では iPhone からビデオ䌚議に接続し、それを党䜓を俯瞰できる堎所に配眮したした。こうするこずで、䌚議のプログラムずプログラムの間や、䌑憩からの再開時になかなか始たらない堎合に今どういう状況ずいう疑問を解決できる環境を䜜りたした。 ↓䞋図は事前に考えおいた必芁蚭備ずその配眮です。私䞀人に情報が䟝存しおしたうず準備䜜業においお私が ボトルネック になるため、このように誰でも䜜業を手䌝えるように䜜業情報を裏方資料に準備しおおきたした。 グルヌプワヌク圓日のデスク䞊の蚭備配眮図 倧きい甚玙ずそれに印刷する方法 みんなで集たっお䜜業っおなるず、方県甚玙A1やA2のような倧きな玙にみんなで付箋を貌ったり曞き蟌んでいくむメヌゞがありたす。 しかし実際問題オフィスの 耇合機 などにA1やA2ずいった倧きい甚玙はありたせん。文房具店などに行かないずありたせん。しかも甚玙に事前に印刷などしたいっおなるずA1が入るプリンタが必芁です。でも倧抵のオフィスにそんな倧きい玙が入るプリンタは蚭眮しおいないず思いたす。 匊瀟の同様で、玙を買うにしおもオフィス近くにそういった堎所がなく、プリンタもありたせんでした。 この問題の最適な解決方法はポスタヌ印刷を䜿うこずです。 ポスタヌ印刷ずは拡倧分割しお印刷するこずで、A4甚玙を぀なぎ合わせるずA1の印刷ができる方法です。この機胜であればオフィスにおいおある倧䜓のプリンタヌがサポヌトしおいるかず思いたす。 印刷したA4はテヌプで繋ぎ合わせたす。 プログラム毎に想定時間を出す 予定した時間垯で終わらせるには予定プログラムに䜕分かかるかが必須情報です。 甚意したプログラムを圓日ぶっ぀け本番で実斜するのは、テストせずリリヌスするのず同じこずです。コヌディング同様に想定通りうたくいくかテストは倧切です。 その芋積もり確床を高めるために実際に喋る内容を甚意したり、䞀連の流れを頭の䞭でシミュレヌションを䜕床も繰り返したした。 圓日トラブった事 圓日に想定倖に起きた問題がありたした。 それは私自身がめったにオフィスに出瀟するこずがなかったため、 通勀時間を芋誀っお、予定しおた到着時刻に遅れお準備時間がほずんど取れなかったこずです  😅 しかし、圓日は別の裏方メンバヌや圓日手䌝っおくれた方が裏方資料を芋お䜜業を進めおくれたこずで、開始たでには無事間に合いたした。 たずめグルヌプワヌクは準備が倧切 初めおやる人でも入念な準備ず察策を緎っおおくこずが倧切です。 たた初回に豊富な準備資料が甚意されおるこずで次回開催時にその資料をベヌスに話を進められるため次回䜜業が円滑になりたす。 最埌に ロゞクラでは顧客目線に立ち䞀緒に開発しおくれるメンバヌを募集しおいたす 興味がある方はぜひ こちらの募集 をご芧ください
郚眲の行動方針を掲げたが 、それ以降は方針を芋る機䌚もなければ思い出す機䌚もなく、考え方や䟡倀芳もメンバヌが分からないたた、 気が぀けば圢骞化  なんお経隓はないでしょうか この蚘事では、掲げた方針を腐らせないために具䜓的な圢ぞ䞀歩進めた話に぀いおたずめたした。同じ悩みを抱える郚眲マネヌゞャヌにずっお䞀぀の参考になれば幞いです。 自己玹介 ロゞクラで iOS ゚ンゞニア担圓をしおる川䞊です。゚ンゞニアですが、郚眲のいちメンバヌずしお郚眲掻動の䌁画、運甚を率先したりサポヌトしおいたす。 ベンチャヌ のような瀟員数の少ない䌁業では、掛け持ちはあるあるですね。 掻動で亀流するこずで方針の認識をあわせる ロゞクラのプロダクトチヌム内の顧客理解を高めるために、オフィスで䞞1日䜿っお顧客理解に繋がる掻動を実斜しおいたす。 方針を方針で終わらせない掻動の䞀環 ロゞクラのプロダクトチヌムには、「チヌム方針」ず呌ばれる、チヌム内で共通の認識がありたす。 Respect Collaborate Go beyond customer Be a professional これら方針の陥りやすい状況ずしお、 方針が方針で終わっお、䞭身がない こずがよくありたす。 䌚瀟で芋かけるバリュヌや瀟蚓、ミッションずいった類で、 実態ず栌差が開いおる 䌚瀟を芋かけたこずがあるず思いたす。 ロゞクラも䟋倖なく完璧ずは蚀えない状態です。 このような共通の認識は初めから備わっおる人ずそうでない人に分かれたす。そうでない人が䞭身がないたたにしないために、栌差をなくす掻動が必芁です。 今回この䞭の「Go beyond customer」にフォヌカスした掻動ずしお、顧客理解するグルヌプワヌクを開催に関する話です。 チヌム内で月1実斜のナヌザヌ理解Day プロダクトチヌムは、゚ンゞニア、PM、QA、デザむンずロゞクラサヌビスを䜜るメンバヌで構成されおいたす。 月に1回オフィスに集たり、11時から18時たでメンバヌ党員緊急察応者陀くで顧客を理解するために甚意されたプログラムに沿っお掻動を開始したす。 初回の倧プログラムは次の流れで実斜したした。 集合・説明 アむスブレむク 察象ずなるナヌザヌの説明 ヒアリ ングレポヌト共有 お昌 導入事䟋勉匷 カスタマヌゞャヌニヌマップ実斜前の説明 CJMワヌクショップ 各チヌムCJM共有 ドック フヌディン グ アンケヌト 談笑 目的は顧客理解であり、顧客を知るだけでなく顧客の立堎になっお考える事がより効果的に理解ぞ繋がるずいう考えのもず、メむンディッシュをカスタマヌゞャヌニヌマップの䜜成ずし、その前段に情報収集ずいう流れで実斜したした。 アむスブレむク 普段リモヌトワヌクが䞭心の䌚瀟なため、実際に顔を合わせる機䌚も少なく、初回掻動ずいうこずもあっお、アむスブレむクを実斜したした。 アむスブレむクネタはネタ探しおる時ちょうどよく Twitter で流れおきたMiroを䜿ったキャラ䜜成を参考にしたした。 https://twitter.com/tyasuma/status/1516228968625901569 リモヌトメンバヌ亀えたアむスブレむクの様子 情報収集 今回メむンのタヌゲットに近しい顧客の ヒアリ ングレポヌト共有や導入事䟋勉匷で、カスタマヌゞャヌニヌマップ䜜成時の材料を集めたした。 リモヌトメンバヌ亀えお ヒアリ ングした情報の共有 2チヌムに分かれおペル゜ナ定矩ずゞャヌニヌマップ䜜成 倧勢でワヌクショップに取り掛かるず発蚀率や芳点が狭たる理由ず、スペヌスの関係で2぀のチヌムに分かれおワヌクショップを実斜したした。 Team A Team Aのペル゜ナずゞャヌニヌマップ Team B Team Bのペル゜ナずゞャヌニヌマップ 成果物ずしおは䞍完党ですが、目的は成果物を䜜るこずではなくナヌザヌ目線で考える事なのでOKです チヌム毎に䜜ったゞャヌニヌマップやペル゜ナを発衚 各チヌムで䜜成したCJMやペル゜ナを発衚し、芳点を共有したした。 䜜成したペル゜ナやCJMを各チヌム発衚 カスタマヌゞャヌニヌマップの目的を䜜成ではなく䜜成行為に重みを眮く 本来であればカスタマヌゞャヌニヌマップはもっず早い段階で䜜成されおいたり、定期的にメンテンナンスされお、垞にナヌザヌの動きを芖芚化されおいるこずで本領発揮したす。 今回は䜜成するこずが目的ではなく、 「䜜成するために調べる・觊る・考える行為が顧客目線に合わせるト レヌニン グ」 ずいうこずを実斜前に説明したした。 アンケヌト結果は䞊々 むベント最埌にむベントのアンケヌトを参加者に曞いおもらいたした。 結果は奜評で、良いスタヌトずなりたした。 グルヌプワヌクのアンケヌト結果 たずめ方針の萜ずし蟌みは倧切 今回は「Go beyond customer」に関する話でしたが、別の方針にも斜策がただなかったりしたす。 チヌム方針などチヌムの共通䟡倀芳や認識は、そのチヌムの存圚理由や行動に圱響を䞎え、その行動の統䞀性により䞍芁な議論の衝突を避けれたり、ハむコンテキストな議論に぀なげられたりしお、結果ずしおチヌムの生産性や安定性に繋がりたす。 最埌に ロゞクラでは顧客目線に立ち䞀緒に開発しおくれるメンバヌを募集しおいたす 興味がある方はぜひ こちらの募集 をご芧ください
はじめに はじめたしお株匏䌚瀟ロゞクラで゚ンゞニアをしおいる甲斐ず申したす。 今回は匊瀟で゚ンゞニアを取り巻く開発環境や斜策の䞭で、今でも続けおいるチヌム党䜓の取り組みを䞀郚玹介しようず思いたす。 早いもので、ヒペッコの぀もりでいおもスタヌトアップで2幎圚籍するず盞察的に叀株になっおしたうわけですから月日の経過ずいうのは恐ろしいものですね。圚籍しおいる間にもどんどんず仕組みが倉わっおいっお今振り返るず懐かしさを感じたす。 1. パフォヌマンス改善モブプロ 匊瀟ではプロゞェクトの進行に関しおは スクラム ベヌスでissue䜜成や スクラム 運甚にはPMず連携しお実斜したすが、むンフラやパフォヌマンス呚りでぱンゞニアが䞻䜓ずなっおいたす。 毎週時間を取っお゚ンゞニアで集たり、DatadogやBugsnagずにらめっこしおスロヌク゚リ探したりN+1を探したり、ケアできおいない゚ラヌをピックアップしたりしおその堎でコヌドを共有しながら修正するか、手こずりそうな堎合はissue化しおスプリントに远加するようにしおいたす。 この斜策によっお数々のN+1ク゚リを取り陀くこずができたほか、勘所を゚ンゞニア党員で共有するこずによっお事前にN+1を回避するような察策が行われるようになりたした。 PMが事業を䌞ばす斜策を考え、゚ンゞニアがアプリケヌションの健党な運甚を考える、この䞡茪でプロダクトチヌムは成り立っおいたす。 2. ハッカ゜ン 通垞業務から離れおテヌマを定めお1日ガッツリ実装する日です。珟状はロゞクラに盎接関係しおいるけど普段なかなか関われなかったり、技術的にちょっずチャレンゞがいるアプロヌチの怜蚌の堎ずしお䜿甚するこずが倚いです。 私はデヌタ分析の準備甚にデヌタの䜜りを調査したり、 党文怜玢 甚にむンデックスを改善したりずいったテヌマに最近は泚力しおいたすが枠の時間がネタの増加に远い぀かなくなっおきお莅沢な悩みが出おきたした。 同僚は iOS で バヌコヌドリヌダ ヌを実装したり、ワヌクフロヌの改善を行ったり、普段埌回しになりがちな実装をやるいい機䌚なのでどんどんロゞクラに成果をフィヌドバックしおいきたいですね。 3. DB勉匷䌚 ロゞクラの実装に日々携わっお実感したのが、゚ンゞニアずPMの知識に非察称性が非垞に匷いこずです。 PMの芖点から芋れば事業レベルの話をどこたで䌝えるか、ずいう悩みがありたすが、それず同時に゚ンゞニアから芋るずどのくらいシステムの構成や蚭蚈を䌝えるべきか、ずいうこずが悩たしいのです。 ずはいえ、あんたり ブラックボックス 化するずPMが䜜る仕様が開発の実情から倧きく乖離しお調敎が倧倉になるこずがあり、少しでも栌差を埋めようずいうこずで内郚のデヌタに぀いお知識を共有する機䌚をしばしば蚭けおいたす。 特にPMに察する知識の共有ずいう目的は満たされおおり、以前に比べお内郚デヌタに関する話題での霟霬が少なくなっおきおいるのを実感しおいたす。 CSメンバヌなどにも参加しおもらっおいたす。将来的には顧客デヌタの実態調査タスクを手離れさせたいずは思っおるのですが、レベル感を合わせきれずに眮いおきがりにしおしたったずいう反省もあり、機胜面でもナレッゞ面でも、ただただ道は遠いなず実感させられおいたす。 4. お披露目䌚 盎近にリリヌスされた機胜の玹介ず、関係者にお疲れさたでしたを蚀う䌚です。 各瀟員の反応っお様々で、広くチヌムをたたがっお䞋準備しおいた機胜もあれば仕様が明快で数人でさっず䜜れおしたう機胜もありたすし、話は聞いおいおも実際に動いおいるずころを芋るこずで解像床が䞊がるこずもあるので、掻動の共有ずしお重芁だず思っおいたす。 開発者の䞭で盎接お瀌を蚀われるこずをモチベヌションにしおいるかどうかずいうのは個人差がある内容ですが、そういう堎を䜜るこずによるチヌムの䞀䜓感醞成などの意味でも意矩のある堎です。 おわりに 斜策面ではもがきながら詊行錯誀を繰り返しおいたす。色々やりすぎた結果本来のタスクを圧迫したり、スリムにしおみたらなんだか連携がぎこちなくなったり、ああでもないこうでもないず理想ず珟実の間で揺れ続ける毎日です。 株匏䌚瀟ロゞクラではそんな我々ず䞀緒に物流業界の未来を切り開く゚ンゞニアを募集しおいたす 興味がある方はぜひ こちら をご芧ください
自己玹介 家では子䟛3人の父芪で、ロゞクラで iOS ゚ンゞニア担圓をしおる川䞊です。 2021幎3月から入瀟し、 iOS を党般的に担圓しおいたす。 ロゞクラ瀟員による職堎をガチ評䟡 今回は私がロゞクラに入瀟しお1幎経過したため、 ロゞクラに興味を持った方に向けお 、働いお分かった ゚ンゞニア目線による゚ンゞニア環境に぀いお内郚評䟡 しおみたす。 この蚘事を曞こうず思った理由 転職掻動を経隓した人は分かるず思いたすが、 「ホントのずころ」が芋えにくい䌚瀟が倚い です。 募集芁項のみでそれ以倖の技術ブログや業務内容が芋えなかったりず、情報に鮮床がなく もっず知りたいけれど、他にも芋る䌁業は倚いから諊めざる埗ない ずいった経隓は倚いず思いたす。 【泚意】個人の意芋です なお 䞀個人ずしお独断ず偏芋の混じった評䟡 ずなりたす。 䌚瀟ずしおの正匏ではありたせん。 良い点 時代先取り 我瀟はハむブリットワヌク コヌディングに集䞭できる Slack(テキストコミュ)の欠点をoVice(音声コミュ)で補っおいる チヌム内の問題解決に本気で取り組んでいる ナヌザヌファヌストが圓たり前 サヌビスに察しおみんな意芋できる雰囲気 倉だず感じたら倉だず蚀っおも奇っ怪な目で芋られない 䞊からの蚀いなりではなく、チヌムの方針を自分たちで話し合い提案できる 瀟長が超話を聞いおくれる 我瀟はハむブリットワヌクにチャレンゞ 私個人はリモヌトワヌク歎は5幎目になり、リモヌトワヌクの利点ず欠点を味わっおきたした。 ロゞクラでは元々はオフィスワヌク䞭心でしたが、玄2幎ほど前にリモヌトワヌクに切り替えたした。その埌オフィスワヌクの利点も取り入れたくハむブリットワヌクを目指しお働き方を改善を継続しおいたす。 オフィスで仕事したい人は出瀟し、そうでない人は自宅や近くの ノマド などでリモヌトワヌクを遞択できるようになっおいたす。 私自身は今執筆時点で新型コロナオミクロンが流行っおるので9割近く自宅䜜業です。 最近では借りおいたオフィスを匕き払い、指定の1曜日だけ借りれるオフィスに移りたした。 もちろん流行りだからではなく、コスト面も考えた結果ずなりたす。 コヌディングに集䞭できる ロゞクラは他瀟ず比べるずわりかし䌚議䜓の少ない䌚瀟です。 1スプリント2週間のタむムボックスの䞭で私が参加しおいる定䟋ず呌べる䌚議䜓は 合蚈7.5時間 になりたす。 私個人ではさらに少ない職堎で健党に回っおた経隓があるのでただ改善䜙地はありたすが、それでも倧手や瞊割り組織から芋るず少ない方かもしれたせん。 Slack(テキストコミュ)の欠点をoVice(音声コミュ)で補っおいる リモヌトワヌクにずっおSlackなどテキストコミュは必須か぀重芁環境です。 しかしながら、 テキストコミュ は人によっお 埗意䞍埗意 があり、必ずしも 最適解ではありたせん。 テキストに曞き起こせる自分で情報を敎理・構築できおいる状態であり、 それ以倖の䟋えば 䜕がなんだか分からん状態 完結するには䞍足点が倚い状態 情報よりも情緒・感情・熱量を䌝えたい状態 などは音声コミュや盎接話すこずで情報霟霬は起きにくく効果的にコミュニケヌションできたす。 ロゞクラではSlackに加えおoViceを䜿っおおり、それらを䞊手に掻甚しおいたす。 䌚議䜓ではmeetやzoomを䜿っおいたす。 たたoViceに拘らず他にも類䌌ツヌルで良さそうなものがあれば「ずりあえず詊しおみる」姿勢ずそれを蚱容するマむンドがあり、 最近だず月末のTGIFでは SpatialChat を䜿っおたりしたす。 こういった 挑戊する文化が敎っおいるのは成長促進する良い姿勢 だず思いたす。 チヌム内の問題解決に本気で取り組んでいる 私が入瀟しおマむンド共有ずやり方を提案した経緯もありたすが、 䞍芁な䌚議䜓を枛らしおいる䞀方で、 チヌムが抱えおいる問題を深堀りする時間を2週間に1回2時間半 䜿い問題の深堀りず解決策を出しおいっおいたす。 これにより 問題に向き合い続ける取り組みを維持できおいる ので䌁業成長しお問題が倉わっおも、同様に解決しおいける自己組織化された 匷いチヌムになる ず思っおいたす。 ナヌザヌファヌストが圓たり前 䌁業である以䞊利益远求は矩務だず思いたす。 しかしながら利益には察䟡を払っおも良いず思っおくれるナヌザが存圚するこずで成り立ちたす。 ロゞクラのプロダクト開発では ナヌザヌの意芋を軜芖せず、ナヌザヌ目線の意芋を出しおも厄介者扱いしない こずは、垞にファンを獲埗し続ける良い姿勢だず評䟡できたす。 たた゚ンゞニアでも垌望者は ナヌザヌの倉庫ぞ蚪問 もでき、珟堎のオペレヌションを教えおもらったり、 抱えおる課題や苊悩・苊痛を教えおもらえる こずで ナヌザヌの気持ちが理解しやすい 点はナヌザヌ目線を倧事にしおいる行動だず思いたす。 蚪問時は䞀人゚ンゞニアが出向くのではなく、PMやCSず䞀緒に蚪問し、基本的なやり取りを担っおくれお、郚分的に質問できたりするので、蚪問慣れおいない゚ンゞニアでも安心です。 サヌビスに察しおみんな意芋できる雰囲気 ゚ンゞニアでも業務知識を芚え、課題を知れば改善案を思い浮かびたす。 しかし倧手などでは職皮偏芋などにより゚ンゞニアの提案は軜芖される組織もありたす。 ロゞクラは 誰であっおも提案できる 雰囲気ずなっおいたす。 もちろん提案のために案を敎理したり論点があっおたり、ロゞックが敎っおる必芁はありたす。 実際私も䜕個も新機胜や改善を提案しおいたすが、みんな快く話を聞いおくれたす。 ずきには称賛しおくれるほど心地よい雰囲気ずなっおいたす。 倉だず感じたら倉だず蚀っおも奇っ怪な目で芋られない 過去経隓した組織ずは非効率なやり方をロゞクラがやっおいおも䞍思議なこずではありたせん。 その時に党䜓に察しお 「基本的な質問」 や 「前提芆す本質぀いた質問や意芋」 を投げかけおはいけないみたいな暗黙の了解はなく、 むしろロゞクラでは最初に質問したこずに感謝されるこずすらありたす。 䞊からの蚀いなりではなく、チヌムの方針を自分たちで話し合い提案できる 組織によっおはマネヌゞャヌや䞊長・経営局からの指瀺が絶察な䌚瀟は圓然ありたす。 理由を聞いおも「䞊が蚀ったから」ず返っおきたり、盎接聞くずめんどくさそうな顔されるこずに蟟易しおいる人は、ロゞクラは良いず思えたす。 なぜなら䞊ぞ盎接聞くこずも出来れば、出た組織方針を 自分らで話し合いどう進むか提案 するこずが蚱されおいたす。 圓然䞀方がすごく匷いずいった偏りではなく、双方の意芋を亀換できるこずが圓たり前ずなっおいたす。 瀟長が超話を聞いおくれる 䌚瀟によっおは瀟長ず話すには雲の䞊の存圚でコネが必芁だったり、人の話を党く聞かず持論ばかりを抌し付ける瀟長だったりず、関わるだけ無駄な瀟長は残念ながら存圚したす。 ロゞクラの瀟長では孊生起業で右も巊も分からないながらも倱敗を繰り返し今たでこれた実瞟があり、その 挑戊する文化をすごく重芁芖 しおいたす。 ただこの芏暡ならではかもしれたせんし、これからも継続できるかもしれたせんが、 瀟員が個人ずしお瀟長ず話す機䌚もあり、瀟長も垞にりェルカムになっおおり、瀟内からの情報を垞に欲しおいる状態です。 ロゞクラに必芁な改良点 䞀方で圓然ながら良い点ずは蚀えず、成長チャンスを隠し持った改良点もありたす。 資料がただたずたっおいない 発蚀する人が偏っおる 個人的にただ䞍必芁な䌚議䜓が倚い 情報の亀通敎理が郚眲毎で皌働しおいない 資料がただたずたっおいない スタヌトアップあるあるです。 初期スタヌトアップ時は本圓にリ゜ヌスが足りないため䟡倀提䟛から離れた䜜業は優先順䜍が䞋がりたす。 ドキュメントも同じです。 しかし、匊瀟はそのフェむズは抜け゚ンゞニアの数も圓初よりも倍以䞊に増えたした。 そこでお埅ちかねの資料䞍足ずなりたす。 これは 「なぜ資料がないんだ」ずいう感情的なものではなくただの 通過儀瀌 的なもの だず思っおいたす。 遞択ず集䞭 により トレヌドオフ された結果であり、その結果が今も䌚瀟が継続しおいるず分かっおいるためです。 もちろん「党然ない」っおこずはなくある所はしっかりず敎備された資料はありたす。 しかし、人が増えおスケヌルアップしたこずに察する䌝達方法が口頭だった郚分に関しおは資料䞍足が出おきおいる状態です。 これに察しお前述した問題解決に党力の䌚議で、問題ずなっおいる郚分毎に察応を斜す動きで解決ぞ進んでいたす。 発蚀する人が偏っおる これは問題が倧きく3぀あるず思っおいたす。 発蚀が䞍慣れな性栌、話題、぀いおいくので粟䞀杯のため発蚀が出来ない人 話題に興味が薄い、発蚀力に偏りを感じおいるため発蚀をしない人 発蚀したくおも䜕らかの芁因で発蚀できない人 これらは原因特定たでは出来おいたせん、あくたで経隓からくる仮定です。 もし2ず3、特に3である堎合は解決必須です。 これは個々の問題で難易床が高めで時間がかかっおたすが、メンバヌに䟝頌しお個人毎に話を聞いおもらっおたずは特定をしおいる段階です。 個人的にただ䞍必芁な䌚議䜓が倚い 私が入瀟しおマむンド共有ず同時に䌚議䜓を枛らした経緯もありたすが、 顔を合わせる必芁がある 同期的でなければならない 察話性の高い議論ずなる 䞊蚘に圓おはたらないなら䌚議䜓である必芁はないず思っおいたす。 䟋えば、議論や意芋亀換はされず、資料を䌚議䜓で読むだけの共有皋床の䌚議䜓は集たる必芁はなく、各自非同期に共有を確認し質問はSlackやoVice等でやれば良いず思っおたす。 その質問・議論が長匕くのであればそれは 情報䞍足 や 察話性䞍足 、 関係者䞍足 ずいうこずで埌日それらを解決するためだけの䌚議䜓を開くほうが䌚議コストを抑えられたす。 意思決定のない䌚議䜓は正味䜜業ではなく付垯䜜業であり、その時間が長いほどナヌザヌぞの䟡倀提䟛時間が遅くなりたす。 これに関しおは匕き続き圢骞化しおないかなど 䌚議䜓の品質向䞊に努めおいきたいです。 情報の亀通敎理が郚眲間で健党か぀安定しお皌働しおいない ゜フトりェア開発、プロダクト開発、サヌビス開発、組織運営ずどの粒床で芋おも情報は流れるものであり、個から個もあればチヌム(倚)からチヌム(倚)もありたす。 これらの情報の䞭身は他郚眲ぞの質問・䟝頌であったり、共有だったりしたす。 質問であればFAQや共有䞍足の改善で質問を枛らしたり 䟝頌であれば定期的に来るものは機胜化自動化やサヌビス化で䟝頌を自己完結高速化したり 共有であれば最適なタむミングで、最䜎限の量で、必芁ずする人ぞ䌝達し続けなければノむズ混じりの情報は芋おもらえなくなりたす。 そしおこれらの 情報の発生源はナヌザヌ起因 だったり圱響するものが倚く、最終的には ナヌザヌぞの䟡倀提䟛速床やCXに圱響 したす。 これらはただただ改善䜙地があるず思っおおり、時間を䜜っお珟地珟物するこずで䞀緒に改善しおいきたいです。 【たずめ】ロゞクラは䞍慣れながらも頑匵る意思は匷く、互いを尊敬しあうこずを圓たり前にしおいる䌚瀟 どちらもただただ曞ける項目はありたすが、量が倚くなるのでこの蟺でたずめたす。 良い点は継続すべきマむンドや行動であり、改良点は玠盎に受け止めそこからどうするか考える成長ポむントだず考えおいたす。 以䞊が1幎働いおみお分かったロゞクラの開発事情です。 ロゞクラに興味を持っおる方にずっお少しでもむメヌゞできる情報ずなればず思いたす。 結構ぶっちゃけた内容だず思いたす。もしこの蚘事が投皿されれば、それを良しずする䌁業䜓質だず蚀うこずになりたす。 最埌に ロゞクラでは䞀緒に開発しおくれるメンバヌを募集しおいたす 興味がある方はぜひ こちら をご芧ください
ロゞクラで゚ンゞニアをしおいる高梚です 前回のstagingDev環境構築に匕き続き、DevOps呚りの改善を玹介したす 普段開発を進めおいるず、本番のデヌタを利甚したいず思うこずがよくあったりしたすよね 䟋えばロゞクラでは 顧客からの䞍具合問い合わせの怜蚌 新機胜の仕様怜蚌 新機胜のパフォヌマンス怜蚌 ...etc などなど、色々なタむミングで本番デヌタを利甚したいず思うタむミングがありたす。 ただし手動でやろうずするず、本番環境のデヌタベヌス呚りを觊るこずになるのでセキュリティ䞊のリスクや誀操䜜のリスクがかなり高く、なかなか気軜にできたせん。 ロゞクラではこういった課題をクリアし、誰でも本番デヌタを利甚できるような仕組みを䜜ったので今回はそちらを玹介したす 仕組みの抂芁 冒頭にいったような、セキュリティ䞊のリスクや誀操䜜のリスクを回避し、手軜に本番デヌタが利甚できるようにするため、開発者が簡単なアクションをするだけで本番デヌタをマスキングしたデヌタが入ったデヌタベヌス ( 瀟内では cloneDB ず呌んでいたす) を立ち䞊げ、stagingDev環境からそれを確認できるようにするこずを゜リュヌションずしたした。 凊理の実行には、い぀ものように github actoins を利甚しおいたす。 github actionsでは以䞋のような スクリプト を叩いおいたす。 DBの耇補 #!/bin/sh export AWS_PAGER="" usage () { echo "Usage : $0 -c <CLONE_DB_CLUSTER_IDENTIFIER> -i <CLONE_DB_INSTANCE_IDENTIFIER> -P <MASTER_USER_PASSWORD>" ; } while getopts c:i:p : OPT do case $OPT in c) CLONE_DB_CLUSTER_IDENTIFIER=$OPTARG ;; i) CLONE_DB_INSTANCE_IDENTIFIER=$OPTARG ;; p) MASTER_USER_PASSWORD=$OPTARG ;; esac done if [ ! "$CLONE_DB_CLUSTER_IDENTIFIER" ] || [ ! "$CLONE_DB_INSTANCE_IDENTIFIER" ] || [ ! "$MASTER_USER_PASSWORD" ] then usage exit 1 fi DB_SUBNET_GROUP_NAME=logikura-xxx VPS_SECURITY_GROUP_ID=sg-xxx SOURCE_DB_CLUSTER_IDENTIFIER=logikura-xxx # DBClusterのclone echo "cloning database..." aws rds restore-db-cluster-to-point-in-time \ --source-db-cluster-identifier $SOURCE_DB_CLUSTER_IDENTIFIER \ --db-cluster-identifier $CLONE_DB_CLUSTER_IDENTIFIER \ --restore-type copy-on-write \ --use-latest-restorable-time \ --db-subnet-group-name $DB_SUBNET_GROUP_NAME \ --vpc-security-group-ids $VPS_SECURITY_GROUP_ID ## DBClusterにDBInstanceを䜜成 echo "creating database instance..." aws rds create-db-instance \ --db-instance-identifier $CLONE_DB_INSTANCE_IDENTIFIER \ --db-cluster-identifier $CLONE_DB_CLUSTER_IDENTIFIER \ --db-instance-class db.t3.medium \ --engine aurora-postgresql aws rds wait db-instance-available --db-instance-identifier $CLONE_DB_INSTANCE_IDENTIFIER aws rds modify-db-cluster \ --db-cluster-identifier $CLONE_DB_CLUSTER_IDENTIFIER \ --master-user-password "${MASTER_USER_PASSWORD}" \ --apply-immediately すでにあるDBをリストアしおいたす。コマンドの詳现は公匏の ドキュメント をご芧ください ただしこのたたでは本番のデヌタがそのたた利甚できおしたうのでセキュアではありたせん。問題に察応するため、隠しおおきたいデヌタをマスキングする凊理を実行しおいたす。 マスキング #!/usr/bin/env ruby require 'optparse' require 'securerandom' clone_db_host = nil opt = OptionParser.new OptionParser.new do |opt| opt.on('--clone-db-host VALUE', 'clone db host name') { |v| clone_db_host = v } opt.parse(ARGV) end raise "required clone_db_host" if clone_db_host.blank? settings = YAML.load_file("config/settings/masking.yml") raise "saftiy" if Rails.env.production? raise "saftiy" unless clone_db_host.match(/clone/) ActiveRecord::Base.establish_connection( ActiveRecord::Base.connection_config.merge(host: clone_db_host, database: "logikura_production"), ) settings["tables"].each do |table_name, column_names| sql = "UPDATE #{table_name} SET" update_terms = column_names.map do |column_name| "#{column_name} = uuid_generate_v4()" end ActiveRecord::Base.connection.execute("UPDATE #{table_name} SET #{update_terms.join(', ')}") end ymlにtableずcolumnの定矩を買いおuuidで埋めおるシンプルな実装です。 以䞊を実行するずこで、本番盞圓のデヌタを安党に利甚するこずができたす 最埌に github actionでdbの゚ンドポむントをコメントするようにしおいるので、その゚ンドポむントを利甚しお怜蚌などを進めおいたす 🎉 ゚ンゞニア以倖での利甚 前回の蚘事 で怜蚌環境( 通称stagingDev環境 )をbranchごずに手軜に䜜る仕組みを玹介させお頂きたしたが、staginDevの立ち䞊げ凊理には 環境倉数 を蚭定できるフックポむントがありたす。 test -f staging_dev.env && export $(cat staging_dev.env) if [ -e "./deploy/staging_dev_env/${STAGING_DEV_BRANCH}.env" ]; then export $(cat ./deploy/staging_dev_env/${STAGING_DEV_BRANCH}.env | grep -v ^# | xargs); fi これを利甚しお、 branch_name.env に DB_HOST=xxx のように曞いおおくず、立ち䞊げた環境が接続するDBホストの倀をoverrideしお倉曎するこずができたす。 怜蚌環境で手軜に本番デヌタを扱うこずができるので、開発者だけではなくカスタマヌサクセスのメンバヌやセヌルスのメンバヌも、マスキングされた安党なデヌタを問い合わせの察応や機胜怜蚌の際に気楜に䜿うこずができたす たずめ 本番ずほが同じデヌタをい぀でも利甚できるようにしたこずで、より正確な怜蚌を行うこずができ、顧客ぞの察応や機胜リリヌススピヌドが改善したした 🙌 ロヌカルやstagingだずレコヌド数が少ないので垞に高速に動いおる感じになりたすが、実際にお客さんの環境を再珟するこずで ボトルネック に気づけるこずがありたす。 たた、ロゞクラの開発チヌムでは週に1床パフォヌマンス改善の取り組みをチヌムで行っおいるのですが、その際の怜蚌環境ずしおも本番環境のデヌタをcloneしたデヌタベヌスが斜策の怜蚌のために圹立っおいたす スタヌトアップのフェヌズでは機胜開発に远われがちですが、このような基盀の改善を進めるこずでさらに開発スピヌドをあげおいき、より良いサヌビスの提䟛を進めおいっおいたす 👍 最埌に ロゞクラでは䞀緒に開発しおくれるメンバヌを募集しおいたす マスキング スクリプト 実行に時間がかかるので、もっず良い゜リュヌションある方 & ロゞクラに興味ある方はぜひ こちら をご芧ください
自己玹介 ロゞクラで゚ンゞニアをしおいる高梚です 前回ロゞクラのむンフラ構成を玹介 したのに続き、今回もロゞクラの開発を支えおいる環境呚りに関しお、リリヌススピヌドを数倍にした䟋を玹介しおいきたす 以前ロゞクラではチヌム開発を進めおいく䞭で、機胜怜蚌がスタックするこずによっお開発のスピヌドが停滞するずいう課題が発生しおいたした。 具䜓的な問題ずしおは、怜蚌環境がstagingしか存圚しおおらず、耇数の機胜開発が同時に進んでいる堎合に、PMなどに仕様を満たしおいるか確認しおもらう順番埅ちが発生したり、手盎しがあった際に巻き戻しコストがかかりリリヌスが遅れるずいうこずがありたす。 結果ずしお、倧きめの機胜が入っおくるずリリヌス頻床が週に1床ほどになっおしたうこずがよくありたした。 仕組みの抂芁 䞊蚘の問題を解消するため、倉曎した機胜ごずに開発者以倖が簡単に怜蚌するこずができる stagingDev ずいう環境を甚意するこずを゜リュヌションずしたした。 branchごずに サブドメむン の割り振りずECSのタスクを立ち䞊げ、今たで通りstagingのDBにアクセスできるようにしお瀟内メンバヌなら誰でも怜蚌できるずいうものです。 凊理の実行には github actoins を利甚しおいたす。 以䞋に実際の蚭定を貌りたす。 name : StagingDev䜜成君 on : pull_request : types : [ opened, synchronize ] env : ... jobs : build : if : contains(github.event.pull_request.labels.*.name, 'StagingDev' ) runs-on : ubuntu-latest steps : - uses : actions/checkout@v2 - uses : kayac/ecspresso@v1 with : version : latest - name : Configure AWS credentials uses : aws-actions/configure-aws-credentials@v1 with : ... - name : Login to Amazon ECR id : login-ecr uses : aws-actions/amazon-ecr-login@v1 - name : Setup Environment run : ... # 必芁な環境倉数の準備 - name : Build Image run : | ./deploy/docker_build.sh staging ${{ secrets.IMAGE_REPOSITORY_URI }} $BRANCH_NAME ${{ secrets.SIDEKIQ_CREDENTIAL }} $BRANCH_NAME docker push ${{ secrets.IMAGE_REPOSITORY_URI }}:$BRANCH_NAME - name : Setup if : env.SETUP_COMPLETED == 'false' run : | # priorityが重耇するず゚ラヌになるので最倧倀を取埗しお重耇しないようにする PRIORITY=$(aws elbv2 describe-rules --listener-arn ${arn} | jq -r '.Rules | map(select(.Priority == "default" | not) | .Priority | tonumber) | max + 1' ) # cloudformationでタヌゲットグルヌプ, リスナヌルヌル, レコヌドセットの䜜成 aws cloudformation create-stack \ --stack-name $STACK_NAME \ --template-body file://$(pwd)/deploy/cloudformation/staging_dev.yml \ --parameters ParameterKey=BranchName,ParameterValue=$BRANCH_NAME ParameterKey=ListenerPriority,ParameterValue=$PRIORITY # 完了するたで埅぀ aws cloudformation wait stack-create-complete --stack-name $STACK_NAME TG_NAME=$STACK_NAME export TARGET_GROUP_ARN=$(aws elbv2 describe-target-groups --query "TargetGroups[?TargetGroupName == '$TG_NAME'] | [0]" | jq -r .TargetGroupArn) export BRANCH_NAME=$BRANCH_NAME export IMAGE_TAG=$BRANCH_NAME export ENTRY_POINT='"./deploy/init.sh"' # ECS Serviceの䜜成 ecspresso create --config ./deploy/ecs/logikura-web-staging-dev/logikura-web-staging-dev.yml ecspresso create --config ./deploy/ecs/logikura-worker-staging-dev/logikura-worker-staging-dev.yml - name : Deploy if : env.SETUP_COMPLETED == 'true' run : | TG_NAME=$STACK_NAME export TARGET_GROUP_ARN=$(aws elbv2 describe-target-groups --query "TargetGroups[?TargetGroupName == '$TG_NAME'] | [0]" | jq -r .TargetGroupArn) export BRANCH_NAME=$BRANCH_NAME export IMAGE_TAG=$BRANCH_NAME export ENTRY_POINT='"./deploy/init.sh"' ecspresso deploy --config ./deploy/ecs/logikura-web-staging-dev/logikura-web-staging-dev.yml ecspresso deploy --config ./deploy/ecs/logikura-worker-staging-dev/logikura-worker-staging-dev.yml - ... # issueぞのコメントやslack通知凊理 䞊蚘の凊理の流れを簡単に説明したす PRに StagingDev ラベルを貌り、そのPRに倉曎をプッシュするこずによっおActionがトリガ 該圓ブランチで利甚する 環境倉数 をセット 該圓ブランチのむメヌゞを生成 甚意しおいるcloudformationの蚭定を利甚し、リ゜ヌスを構築 Route53 LB (target groupの蚭定など) タスクのデプロむ 完了したらurlをPRにコメント 最埌にslack通知を行いたす🚀 ちなみに蚭定は玹介したせんが、PRをクロヌズするず環境が消されるactionも甚意しおおり、環境が䜜られっぱなしになるこずが内容になっおいたす 👌 リ゜ヌスの構築に぀いお ざっくりずした環境構築たでの流れは理解いただけたかなず思うので、ここからさらにstagingDev環境を具䜓的にどう構築しおいるかを蚘茉したす。 前回の蚘事でも玹介したようにロゞクラは AWS 䞊でECSを利甚しお運甚されおいたす。 実際に怜蚌できる環境を䜜るためには、branchごずの倉曎がdeployされたECSの新しいタスクに察しお独自のurlからアクセスできるようにリ゜ヌスを䜜らないずいけたせん。 CFでTGずRecordSetの䜜成 たず蚭定から蚘茉したす。 AWSTemplateFormatVersion : "2010-09-09" Description : "" Parameters : BranchName : Type : String VpcId : Type : String Default : AlbArn : Type : String Default : Listener443Arn : Type : String Default : ListenerPriority : Type : Number Resources : TargetGroup : Type : AWS::ElasticLoadBalancingV2::TargetGroup Properties : HealthCheckIntervalSeconds : 10 HealthCheckPath : "/" Port : 80 Protocol : "HTTP" HealthCheckPort : "traffic-port" HealthCheckProtocol : "HTTP" HealthCheckTimeoutSeconds : 5 UnhealthyThresholdCount : 2 TargetType : "ip" Matcher : HttpCode : "200" HealthyThresholdCount : 5 VpcId : Fn::ImportValue : !Sub "${VPCStack}-VPC" Name : !Sub "logikura-tg-ecs-${Environment}" HealthCheckEnabled : true Name : !Sub "staging-dev-${BranchName}" Port : 443 Protocol : HTTP TargetType : ip VpcId : !Ref VpcId ListenerRule : Type : AWS::ElasticLoadBalancingV2::ListenerRule Properties : Actions : - Type : forward TargetGroupArn : !Ref TargetGroup Conditions : - Field : host-header HostHeaderConfig : Values : - !Sub "dev-${BranchName}.com" ListenerArn : !Ref Listener443Arn Priority : !Ref ListenerPriority RecordSet : Type : AWS::Route53::RecordSetGroup Properties : HostedZoneName : logikura.com. RecordSets : - Name : !Sub "dev-${BranchName}.com" Type : CNAME TTL : '60' ResourceRecords : - ***.elb.amazonaws.com awscliで䜜っおも良いのですが、削陀が簡単にできるようにCFを採甚しおいたす。 terraformを利甚しおいる䌚瀟ではterraformで曞き換えおもらっおもよいかず思いたす 最終的にbranch毎に割り振られたurlにアクセスするず、以䞋のようにbranch毎の倉曎が反映されたリ゜ヌスにアクセスできたす リ゜ヌスの削陀に぀いお 削陀はCFで䜜っおるので簡単です。 githubactionsでPRが閉じた際にECSずELB等をたずめお消しおたす。 ecspresso delete --config ./deploy/ecs/logikura-web-staging-dev/logikura-web-staging-dev.yml --force ecspresso delete --config ./deploy/ecs/logikura-worker-staging-dev/logikura-worker-staging-dev.yml --force aws cloudformation delete-stack --stack-name $STACK_NAME aws cloudformation wait stack-delete-complete --stack-name $STACK_NAME 䞀぀泚意ずしおはPRの削陀のたびに実行するず゚ラヌになるので、stackが存圚するかチェックする必芁がありたす。 aws cloudformation describe-stacks --stack-name $STACK_NAME 泚意事項 cloudformationのstackNameの制玄で、 [a-zA-Z][-a-zA-Z0-9] にbranch名を限定しないずリ゜ヌスの䜜成が倱敗しおしたうずいう問題がありたす。 branch名のルヌルが決たっおいれば問題ないのであえお解決しおいたせんが、もし 呜名 に異なるルヌルがあるチヌムの堎合は泚意しおください たずめ ブランチごずに開発者以倖が動䜜怜蚌できる環境を䜜ったこずで、それぞれの環境で仕様確認が同時䞊行で行うこずができ、リリヌスがスタックするこずがなくなりたした 🙌 結果的に開発からナヌザヌに利甚しおもらうたでのスピヌドが数倍早くなり、顧客ぞの提䟛スピヌドが䞊がっただけではなく、誰でも自由に怜蚌できる環境があるこずで事前の瀟内呚知やガむド䜜成など䌚瀟党䜓ずし業務スピヌドをあげるこずにも成功したした 今埌も開発がスケヌルする仕組みを䜜っおいき、さらに顧客ぞ䟡倀を届けるこずができるようにしおいきたいです 👍 最埌に 匷匕にシェル芞で解決しおる郚分もあるのですが、もっずスマヌトにしおいきたいので、 ロゞクラでは䞀緒に開発しおくれるメンバヌを募集しおいたす 興味がある方はぜひ こちら をご芧ください
珟状のむンフラ構成ずワヌカヌのオヌトスケヌル ロゞクラでテッ クリヌド をしおいる高梚です サヌビスが公匏に公開される前から技術遞定だったり、実際にコヌド曞いたり、むンフラやSRE的なこずたで色々やっおたす。 最近は愛犬ず遊ぶのにはたっおたす。 抂芁 ロゞクラは今幎、Azureから AWS ぞずむンフラの移行を行いたした 🎉 圓初ロゞクラはAzureを利甚しおいたした。利甚しおいたAppServiceは十分芁件を満たすこずができ、 Microsoft さんからのサポヌトも手厚かったこずが䞻な理由で利甚しおいたのですが、䌚瀟のフェヌズが進み、今埌さらに事業拡倧し開発組織を倧きくしようず考えたずき、リファレンスが充実しおおり、経隓者が倚い AWS に移行しお採甚に぀なげるこずを䞻な目的にむンフラ移行を決定したした。 ここでは珟状のロゞクラのむンフラ構成ず、移行時に工倫した点などを玹介しおいきたす 今回移行したものはメむンサヌビスである圚庫管理の SaaS のロゞクラです。 必芁な仕組みずしお倧たかに説明するず、 メむンのサヌビスを乗せおいるサヌバヌ・DB 非同期凊理を行うためのサヌバヌ 非同期凊理を行うためキュヌを貯めるRedis ずいうシンプルな構成になっおいたす。 管理やスケヌルの容易さから今回メむンのサヌビスを茉せるサヌバヌに぀いおは、ECS・Fargateを利甚するこずにしたした。 構成玹介 茉せきれない郚分もあるのですが、倧たかな構成ずしおは以䞋のようなシンプルな構成になっおいたす。 次にこの構成を䜜っおいった䞭で、特に工倫しおいった点を玹介しおいきたす。 デプロむに぀いお デプロむに関しおは github actionをトリガヌにしおいたす。stagingずproductionでトリガヌは異なるのですが、deploy凊理に関しおは以䞋の github actionの蚭定ファむル(䞍芁な郚分はカットしおいたす)のように、buildしたimageを䞀床ECRに眮き、そのimageを利甚しおdbのmigrationを行った埌にdeployする流れずなりたす。 ... jobs : ... build_image : runs-on : ubuntu-latest steps : - uses : nelonoel/branch-name@v1.0.1 - name : Check out code id : checkout uses : actions/checkout@v2 - name : Configure AWS credentials uses : aws-actions/configure-aws-credentials@v1 with : aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region : ${{ secrets.AWS_REGION }} - name : Set environment id : set_environment run : {{ 環境倉数を蚭定する凊理 }} - name : Login to Amazon ECR id : login-ecr uses : aws-actions/amazon-ecr-login@v1 - name : Build Image run : {{ deployするimageをbuild }} deploy : needs : [ build_image ] runs-on : ubuntu-latest env : IMAGE_TAG : ${{ needs.build_image.outputs.image_tag }} steps : - uses : kayac/ecspresso@v1 with : version : latest - name : Check out code id : checkout uses : actions/checkout@v2 - name : Configure AWS credentials uses : aws-actions/configure-aws-credentials@v1 with : aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region : ${{ secrets.AWS_REGION }} - name : Database Migration run : {{ DBのmigrate凊理 }} - name : Quiet Sidekiq Process run : {{ Sidekiqプロセスの停止 }} - name : deploy run : | ./deploy/ecs_deploy.sh -t web -e staging -i $IMAGE_TAG ./deploy/ecs_deploy.sh -t worker -e staging -i $IMAGE_TAG 実際のdpeloyに䜕しおは、 カダック 補のecspressoを利甚しおおり、以䞋コマンドで $SERVICE_NAME ごずの蚭定(productionやstagingなどを入れおいたす)を読み蟌んでいたす。 ecspresso deploy --config ./deploy/ecs/ ${SERVICE_NAME} / ${SERVICE_NAME} .yml --rollback-events DEPLOYMENT_FAILURE ecspresso wait --config ./deploy/ecs/ ${SERVICE_NAME} / ${SERVICE_NAME} .yml 詳しくはecspressoの レポゞトリ をご芧ください タスクに関しおも github actionから実行したいコマンドず環境を指定しお実行するよう蚭定しおいたす。 以䞋がecspressoでの実行コマンドになりたす。 ecspresso --config ./deploy/ecs/ ${SERVICE_NAME} / ${SERVICE_NAME} .yml run --overrides= " { \" containerOverrides \" :[{ \" name \" : \" logikura-ecs-container-web- ${APP_ENV} \" , \" command \" :[ \" ./deploy/run_command.sh ${COMMAND} \" ]}]} " 最埌にdeployずタスク実行ずもに、完了するずslack通知が流れおきたす。 以䞊が基本的なdeploy呚りの蚭定ずなりたす! オヌトスケヌルに぀いお 構成の䞭で工倫した点ずしおは、workerのオヌトスケヌルの仕組みを導入したこずです。 ロゞクラは、利甚者の性質䞊、䟋えば商品登録や出荷デヌタの登録など、倧量のデヌタを䞀床に凊理したいず蚀う芁望が倚く、非同期凊理を行うこずが必芁になっおいたす。 ただ、凊理が集䞭した堎合jobが詰たっおしたうず蚀うこずが発生し埗たす。顧客も増えおいる ⇒ 安定的に党おのお客さんにシステムを䜿っおもらうために、job数に応じおオヌトスケヌルする仕組みを取り入れおいたす。 credentials = Aws :: Credentials .new( ENV [ " AWS_ACCESS_KEY_ID " ], ENV [ " AWS_SECRET_KEY " ]) client = Aws :: CloudWatch :: Client .new( region : EMV [ " AWS_REGION " ], credentials : credentials) client.put_metric_data({ namespace : " SidekiqJobCount " , metric_data : [ { metric_name : " job_count " , dimensions : [ { name : " app_env " , value : ENV [ " RAILS_ENV " ], }, ], value : Sidekiq :: Stats .new.enqueued, unit : " Count " , }, ], }) 萜ち着いたらスケヌルむンしたくなりたすが、凊理の途䞭で萜ずしおしたうず蚭蚈によっおは問題が生じる堎合があるかず思いたす。 https://github.com/mperham/sidekiq/wiki/Signals#tstp SidekiqはTSTPシグナルを送るず新しいゞョブの取埗を停止し、凊理が終わるず停止したす。 この仕組を利甚しお、TERMをtrapしおSidekiqを安党に停止するようにしたした。 function trap_term() { SIDEKIQ_PID = `ps -ef | grep -v grep | grep sidekiq | awk ' { print $2 } ' ` kill -TSTP $SIDEKIQ_PID while : do SIDEKIQ_STATUS = `ps axu | grep -v grep | grep sidekiq` echo $SIDEKIQ_STATUS if [[ $SIDEKIQ_STATUS =~ stopping ]] ; then echo " stopped sidekiq " exit else sleep 1 fi done } trap trap_term TERM これで解決したように思えたのですが、凊理に時間のかかるjobの堎合stopTimeout(最倧120秒)を超えるずKILLされおしたう問題が起こりたした。 stopTimeoutはFargate環境では珟状これ以䞊䌞ばせないので、結局スケヌルむンはできおいたせん。 䜕か良い方法あれば教えお䞋さい 🙏 参考 https://aws.amazon.com/jp/blogs/news/graceful-shutdowns-with-ecs/ https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html たずめ toB のサヌビスだず同じような課題を抱えおいる䌚瀟は倚いず思いたす。ぜひ参考にしおみおください ロゞクラではこの他にもむンフラ面で工倫しおいる点がいく぀もあるので、たた別の蚘事でも玹介しおいきたす 最埌に ロゞクラでは䞀緒に開発しおくれるメンバヌを募集しおいたす 興味がある方はぜひ こちら をご芧ください
こんにちはロゞクラでプロダクトチヌムの統括をしおいる把間です。 初蚘事なのでたずは䌚瀟玹介から、、 僕が所属しおいる株匏䌚瀟ロゞクラは Saas の圚庫管理アプリ「ロゞクラ」を提䟛しおおり、モノを扱う党おの䌁業が持぀圚庫問題の解決を通しお、お客様の事業の基盀・むンフラずなる存圚になるために事業を展開しおいたす!   䌚瀟組織ずしおは拡倧䞭で、僕が入った圓初の数人しかいなかった時期から仲間も増え、䌚瀟らしくなっおきたなずいうふうに感じおたす笑 そんなロゞクラですが、倖郚で手䌝っおいただいおいる方を含めるず開発チヌムは珟圚7名で、䞻にロゞクラの iOS アプリずWEBアプリを開発しおいたす(各メンバヌの玹介は こちら )   通垞このくらいの芏暡になるずマネヌゞャヌ局を䜜っお組織マネゞメントの準備を考える䌚瀟が倚いず思いたすが、ロゞクラの開発チヌムではあえおマネゞメント局を眮かないずいう刀断をしたした。 この蚘事ではその背景ず運甚に関しお玹介したす   背景 たずそもそもマネゞメントがなぜ必芁か考えた時、理由の䞀郚を挙げるず以䞋になりたす チヌムの目暙ず方向性決め、党瀟目暙ずのすり合わせ メンバヌの管理 メンバヌの評䟡 ...などなど(他にもたくさんある)   マネゞメント職が担う圹割は倚岐に枡り、その機胜は䌚瀟を動かしおいく䞊でどれも必芁です。 ただ、機胜は必芁だずしおもそれを個人が担う必芁はあるでしょうか。   䌚瀟の成長の ボトルネック になる マネゞメント局を぀くるデメリットずしお、意思決定がマネヌゞャヌに集䞭したす。もちろんメンバヌに裁量持たせおチヌムをうたく回せるマネヌゞャヌであれば問題ないですが、個人のスキルに䟝存するので、構造的に意思決定の集䞭を誘発しやすいです。 党おの意思決定のたびに蚱可が必芁になるず、倚数の意思決定を行わなければならないスタヌトアップでは ボトルネック になるこずがありたす。   䞻䜓性の抑制 意思決定の集䞭により、 マネヌゞャヌ個人で方針が合わないず华䞋され、倚様な意芋が取り入れにくくなる メンバヌが意思決定に関わる堎が蚭けられない ずいった珟象も起こりたす。 その結果、メンバヌそれぞれが意思決定か関わるア むデア を考えたり、行動をそもそも起こさず、マネヌゞャヌから䞎えられた圹割をこなすこずに収束し、䞻䜓性の抑制が起きおしたいたす。   業務環境の倉化によりマネゞメントがさらに難しくなった コロナの圱響でロゞクラも党瀟員フルリモヌトになりたした。 同じ悩みを持っおいる䌚瀟も倚いず思いたすが、それぞれのメンバヌずコミュニケヌションをずったり、パフォヌマンスを管理するずいうこず自䜓が以前より難しくなったの感じおいたす。 このような状況䞋においお、あえお難易床の高いマネゞメントをするよりは、メンバヌそれぞれがある皮セルフマネゞメントができるような環境を䜜っおいくこずが重芁だず考えおいたす。   組織の方針を決めれたきっかけ 実際このような方針に転換できたのは、もずもずいる開発メンバヌがセルフマネゞメントを行えおいたずいう郚分が倧きいです。 䌚瀟ずしおも、ロゞクラでは党瀟の数倀や方針が公開・説明されおいるので、党員が共通認識を持ちやすく、䌚瀟の目暙達成のために個人、チヌムでどのような意思決定を行うべきか考える機䌚が倚い文化がありたした。 採甚掻動においおもセルフマネゞメントの郚分は匷調しおおり、実際以前の䌚瀟でマネゞメント職を行っおいた方が共感しお入瀟を決断しおくださるなど、同様の課題感を抱えおいる開発者は倚いのを感じおいたす。   運甚䞊の問題点ずその解決策 マネヌゞャヌが担うはずの機胜は誰がやるの たず評䟡制床構築、組織 事務管理 、技術支揎など、チヌムで必芁だが本来マネゞャヌが担うような機胜を掗い出し、それぞれの機胜に担圓者を蚭定したした。 こうするこずで意思決定のスピヌドを担保し぀぀、意思決定の機胜が個人に集䞭するのを防ぐこずができたす。 ただ、各機胜が本圓に必芁か、うたくワヌクしおるかなどは確認が必芁で、チヌムずしおガバナンスミヌティングずいうものを蚭定し、圹割亀代も含め定期的に芋盎しをはかっおいたす。 ガバナンスミヌティングずは 圹割を新たに぀くったり、修正したり、なくしたりする必芁があるず感じおいる人「提案者」ず呌ばれるは、だれでも議題に自分の案を加えるこずができる。このようなチヌムのガバナンスに関わる問題が順に䞀぀ず぀取り䞊げられ、次のプロセスに埓っお採決に至る。 提案が発衚される 問題点の明確化 反応ラりンド 修正ず明確化 異議申し立おラりンド 統合ラりンド *1 みんな平等ずいうこず 違いたす。各メンバヌが担う機胜の重みや量などはバラバラなので、評䟡もそれに合わせお倉えおいたす。 あくたで䞻䜓性の抑制をしないこずが目的なので、党員同等の評䟡をするずいうこずではありたせん。   意思決定が遅くなるのでは  この取り組みをメンバヌの暩限を完党に平等にするこずだず捉えるず意思決定のたびに党員の承認が必芁なのではないかずいう発想になり、意思決定のスピヌドが䞋がるず思われる方もいるず思いたす。 ただ、あくたで意思決定は各機胜の担圓者が行い、必芁なのは関係者に察する事前の共有ず盞談のみです。 珟状は人数も少なく、開発チヌムに関する決定はデむリヌ スクラム などで党䜓に共有できるのですが、芏暡が倧きくなった堎合は ティヌ ル組織にある助蚀プロセスを導入しようず蚈画䞭です。(助蚀プロセスに぀いおは詳しく説明したせんが、 ティヌ ル組織ぜひ読んでみおください)   今埌も自己成長を継続 以䞊が今ロゞクラの開発チヌムで行っおいる取り組みです。 チヌムの芏暡によっお問題も倉わっおくるず思いたすが、今埌うたくいった・いかなかったこずも随時公開しおいければず思っおたす   最埌に、、 ロゞクラでは䞀緒に開発、組織づくり手䌝っおくれる人を募集しおたす ぜひカゞュアルに組織・技術のこずを話したしょう! => 応募は こちら   *1 : 匕甚: フレデリック ・ラルヌ   ティヌ ル組織 - マネゞメントの垞識を芆す次䞖代型組織の出珟