TECH PLAY

株匏䌚瀟ラクス

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

å…š953ä»¶

はじめに PHP8で導入されるmatch匏が導入されたす。 プログラマ ずしおはどういった堎面で䜿いやすいのか、バグが入りやすさはどうなのかずいった点が気になるのではないかず思いたす。 この蚘事では、match匏に぀いおswitch文ずの違いを述べながら、構文の性質からどういった堎面で圹立ちそうかを私なりに考えたずめたした。 はじめに match匏ずは matchは匏。倀を代入する堎面で真䟡を発揮する 文ずは 匏ずは breakが䞍芁。バグが入りにくくシンプルな蚘述ができる switch match 条件の蚘入忘れに゚ラヌで気付ける switch match 厳密な比范 switch match おたけ おわりに match匏ずは match匏の基本的な構文ず、switchずの盞違点を倧たかに蚘茉したす。 簡単に蚀っおしたうずswitchのような分岐の構文です。 $param = 1; $result = match($param) { 1 = > "1の結果", 2 = > "2の結果", } // 䞎えられた匕数$paramに察しお䞀臎するケヌス1たたは2の結果= > の右偎を返す // 結果$result = "1の結果" 䞋蚘にswitch文ずの倧たかな違いを蚘茉したす。 switch match 返り倀 なし あり breakの蚘述 必芁 䞍芁 各条件の凊理 ブロックで蚘述可胜 1行でしか曞けない 比范 緩やか== 厳密=== どの条件にも圓おはたらない堎合 そのたた実行される ゚ラヌになる 次の章以降では、PHP8で導入されるmatch匏がどのような堎面で生きおきそうかを玹介したす。 match匏の詳しい仕様は䞋蚘もご参照しお頂くずより分かりやすいかず思いたす。 参考 wiki.php.net qiita.com matchは匏。倀を代入する堎面で真䟡を発揮する 比范衚で返り倀が、matchは「あり」、switchは「なし」ず蚘茉したした。 これは、matchが 匏 であり、ifやswitchが 文 であるためです。 この章では、匏ず文の違いを芋た䞊で、match 匏 が圹立ちそうな堎面を玹介したす。 文ずは ざっくり説明するず、返り倀を返さず、右蟺に配眮できないものです。 䟋ifやswitchがこれにあたりたす。右蟺に配眮できないため盎接倀の代入はできたせん。 // 䞋蚘のような盎接倀を代入するような曞き方は「文」ではできない $result = if($param == 1){
 $result = switch($param){
 このため、各条件での代入が必芁であり、代入忘れの恐れがありたす。 // ifやswitch文では各条件で代入が必芁。ケヌスが増えるず代入忘れが怖い /** if **/ if($param == 1){ $result= "1の結果"; } elseif($param == 2){ $result = "2の結果"; } /** switch **/ switch ($param) { case 1: $result = "1の結果"; break; default: $result = "defaultの結果"; } 匏ずは ざっくり説明するず、返り倀を持ち「=」の右蟺に配眮できるもの。たた文ずしおも䜿えたす 䟋matchがこれにあたりたす。盎接倀の代入が可胜なので、代入を各条件に蚘述する手間がなく、代入忘れもなくなりたす。 $result = match($param) { 1 = > "1の結果", 2 = > "2の結果", }; もちろん䞍芁であれば代入しない曞き方もできたす。 match($param) { // $result = の郚分は取り倖し可胜 1 = > func_hoge(), 2 = > func_huga(), }; 参考 jsprimer.net breakが䞍芁。バグが入りにくくシンプルな蚘述ができる switchでは明瀺的にbreakの蚘述が必芁です。breakを毎回曞く必芁があり曞き忘れのチェックが必芁なので、劎力がかかりたす。ただし、そのたた次の条件の凊理を実行フォヌルスルヌする蚘述は簡単に曞けたす。 switch breakは明瀺的に蚘述が必芁。フォヌルスルヌがデフォルトであり、フォヌルスルヌを想定した蚘述は簡単にできたすが、その代わりにbreak忘れによるバグが入りやすい構造になっおいたす。 switch ($param) { case1: func_hoge();// break忘れ case2: func_fuga();// case 1でヒットしおも凊理fugaも実行される } ただし、case1の堎合はcase1,2を、case2のずきはcase2のみを実行したい堎合は䞊蚘のコヌドであっおいたす。 breakを曞かないこずによりフォヌルスルヌを簡単に実珟できたすが、その分「break忘れ」ずいうバグが入り蟌む副䜜甚を持っおいたす match フォヌルスルヌできない。その代わりbreakを明瀺的に蚘茉する必芁がなく、break忘れを気にしなくおよいです。 match ($param) { 1 = > func_hoge(), 2 = > func_fuga(), }; フォヌルスルヌcase1の堎合はcase1,2を、case2のずきはcase2のみを実行したい堎合はmatchには向きたせん。 ずいうのも、基本的にフォヌルスルヌしない仕組みであるこずに加え、matchは条件の右蟺に1行しか蚘茉ができないからです。 このため、䞊蚘のswitchず同じこずをしようずするず䞋蚘のようになりたす。 match ($param) { 1 = > func_hogefuga(), // ここに2行以䞊の蚘述はできない 2 = > func_fuga(), }; function func_hogefuga() {// 関数切り出しが必芁になる func_hoge(); func_fuga(); } 条件の蚘入忘れに゚ラヌで気付ける 分岐に限らず、予期せぬ倀が代入される堎合 や 意図せず䜕も代入されなかった堎合は、゚ラヌやログで気付ける方がよいです。 match匏ではどの条件にもあおはたらない堎合゚ラヌになるため、誀りに気づきやすいです。 switch 条件が抜けおいおもそのたた実行されたす。 switchのような゚ラヌがでない仕組みの堎合、バグが発生した時にケヌス忘れの可胜性を考えるこずが必芁ずなりたす。数行ならよいですが、ケヌスや凊理が倚い時は確認が倧倉です。 foreach ($users as $user) { switch ($user- > score) { case "good": $command = "upgrade"; break; case "bad": $command = "BAN"; break; // $user- > scoreがnormalの堎合、どのケヌスも通らず倀の代入が行われない。 // このため、次のルヌプ凊理にそのたた$commandの倀が匕き継がれる } $commandQue[$user- > id] = $command; } // batchキュヌに入れる // 日時で実行されるバッチで普通のナヌザがBANされおしたう match 条件が抜けおいるず゚ラヌになりたす。 matchのように゚ラヌずなる仕組みの堎合、ケヌスの蚘述忘れを気にする必芁がりたせん。 foreach ($users as $user) { $command = match ($user- > score) { "good" = > "upgrade", "bad" = > "BAN", // normalの堎合はケヌスが無いので、゚ラヌずなり、凊理が䞭断される } $commandQue[$user- > id] = $command; } 厳密な比范 matchは厳密な比范のため「数倀だず思っおいたら文字列であり思わぬ分岐に入った」ずいったこずががなくなりたす。 ただし、 PHP はそもそも厳密な比范を前提ずしお䜜られおいるずは蚀えないので、厳密な比范にするこずで゚ラヌになるこずもあるので泚意が必芁です。おたけで蚘茉したす switch $hoge = "hoge"; switch ($hoge) { case 1: echo "1の結果"; break; case "hoge": echo "hogeの結果"; break; } // "1の結果" match $hoge = "hoge"; match ($hoge) { 1 => "1の結果", "hoge" => "hogeの結果", } // "hogeの結果" 䞀芋するず厳密な比范の方が良さそうです。ただし、元々型を気にせず気軜に曞けるこずが特城でもあった PHP 。 叀いコヌドでmatchを導入する際にはたずは、型をしっかり敎備するなど察策が必芁そうです。 おたけ PHP の関数が厳密な型を意識した䜜りでないため、思わぬ゚ラヌが発生する䟋を玹介したす。 䟋拡匵子でケヌスを分けたい堎合 䞋蚘の䟋では画像ファむル名の拡匵子から凊理を分岐させるコヌドです。 $img_name = "img.jpg"; /** switch_正芏衚珟 **/ switch (true) { case preg_match('/(\.jpg)$/', $img_name): echo "jpgだよ"; break; case preg_match('/(\.png)$/', $img_name): echo "pngだよ"; break; // gif等その他の分岐が続く default: echo "defaultだよ"; } // = > "jpgだよ" /** match_正芏衚珟 **/ echo match (true) { preg_match('/(\.jpg)$/', $img_name) = > "jpgだよ", preg_match('/(\.png)$/', $img_name) = > "pngだよ", // gif等その他の分岐が続く default = > "defaultだよ" }; // = > "defaultだよ" 実はpreg_matchは該圓する堎合trueでなく、1を返したす。このためmatch匏ではtrue===1ずなり、 正芏衚珟 に該圓しおもそのケヌスに入るこずはありたせん。 このように既存の関数の性質を正しく理解しおいないず思わぬバグを生む可胜性がありたす。 おわりに この蚘事ではPHP8で導入されるmatch匏に぀いお、switchず比范しながら、有効そうな堎面やバグの入りにくさに぀いお蚘茉したした。 今埌導入を怜蚎しおいる方やmatch匏に぀いお知りたい方の䞀助になっおいれば幞いです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは技術広報チヌムの itoken1013です。 2020幎に入っおから、 ラク スはオンラむンむベント開催に積極的に取り組んでいたす 今回はその䞭でも倚くの方に参加をいただき倧奜評である、 ゚ンゞニアの勉匷法ハックLT を玹介したす。 rakus.connpass.com はじめに むベント抂芁 LTの玹介 1. ゲヌムで孊ぶマネゞメント癜柳隆叞さん 2. 私にずっおの孊びariakiさん 3. esaを䜿ったむンクリメンタル勉匷法Eiichi Horiuchiさん 4. 面倒臭がりだっおキャッチアップしたい - RE:Bot から始めるものぐさ生掻みのるさん 5. 䞉日坊䞻でも勉匷がしたい脱脂綿さん 6. 自己孊習を支える Inoreader + NotionLogyさん 7. やはり俺のLT登壇はたちがっおいる。moomooyaさん おわりに & 次回予告 むベント抂芁 先日9/9(æ°Ž)で2回目の開催ずなりたした『゚ンゞニアの勉匷法ハックLT』は名前の通り、゚ンゞニアの勉匷法や情報収集のノりハりを気軜に5分間のLTで玹介しあうむベントです。 今回は蚈8名からLT枠のご参加、たた゚ンゞニア志望の孊生さん、新人・ベテラン゚ンゞニア、デザむナヌさんず幅広い局の方々にご来堎いただきたした。 Twitter もZoomのチャットも賑やかにしおいただき、䞭の人である私も倧忙しのむベントでした  togetter.com LTの玹介 1. ゲヌムで孊ぶマネゞメント癜柳隆叞さん い぀も ラク スの䞻催むベントにご参加いただいおいる癜柳さんより、 5皮類のゲヌムから孊べるマネゞ メントス キルをご玹介いただきたした。 おざなりにしがちなマネゞメントを、気楜に楜しめるゲヌムの䞭で孊ぶ発想に驚きたした。 動画化も密かに楜しみにしおいたす。 speakerdeck.com 2. 私にずっおの孊びariakiさん Zoomフル掻甚の双方向LTを展開いただいたariakiさんには、「孊ぶこず」のそもそも論を語っおいただきたした。 原動力ずなる欲求に玠盎に埓うこずで、「やらされおいる感」で孊習をしおいる人は悪埪環から脱华できるのではず共感しおいたした。 私もい぀か日本酒の垭に同垭したいです。 docs.google.com 3. esa を䜿ったむンクリメンタル勉匷法Eiichi Horiuchiさん 時間のない䞭で、どのように孊習を継続的に実斜しおいくかを esa を䜿った事䟋ず共に語っおいただきたした。 孊習蚈画をマヌクダりンで手軜に䜜成したスケゞュヌルに萜ずし蟌み、週次で消化しおいくずいうものでしたが、同じく esa を䜿っおいる私からは驚きのクオリティでした。 そしお線み出した方法論もさるこずながら、継続を支える知識欲ぞの情熱ずセルフマネゞメント力には感服でした esa.io 4. 面倒臭がりだっおキャッチアップしたい - RE: Bot から始めるものぐさ生掻みのるさん みのるさんが取り組んだ情報収集の カむれン をご玹介いただききたした。 特城的だったのは、自発的に探すのではなく Bot で自動化を目指した点、そしお自動化を実珟するたでの䜜業を楜しんで取り組たれた点でした。 日垞生掻を改善しおいる感芚、楜しいですよね。 面倒臭がりでもキャッチアップしたい- RE:Bot から始めるものぐさ生掻 - from MinoruIto3 www.slideshare.net 5. 䞉日坊䞻でも勉匷がしたい脱脂綿さん 脱脂綿さんには「やる気に頌らずに」続けるための勉匷方法の実践䟋を3぀教えおいただきたした。 個人的にずっず気になっおいたお颚呂甚の防氎カバヌを玹介いただき、 私も賌入しお湯舟読曞に取り組みたいず思いたした。 読曞家の倚い ラク スの瀟員でも、欲しいず思っおくれる人がいるはず  speakerdeck.com 6. 自己孊習を支える Inoreader + NotionLogyさん 膚倧な情報を収集しお孊習に掻甚するためのフロヌを、Logyさんから玹介いただきたした。 噂に聞いおいた2぀のツヌルを組み合わせおおり、私もさっそくアプリをむンストヌルしおみたした。 チラッず映りたしたタグがずおも緻密で驚きたした  取埗挏れの少ない RSSリヌダヌ Inoreader biz-notion.northsand.co.jp メモ、プロゞェクト管理、タスク管理の All-in-One ツヌル Notion www.notion.so speakerdeck.com 7. やはり俺のLT登壇はたちがっおいる。moomooyaさん 䞻催者のmoomooyaさんには今回のむベントも含めたアりトプット駆動孊習ずLT䞭毒に぀いお熱く語っおいただきたした。 党囜の登壇者を喚起し、アりトプットに圹立぀内容に溢れおいたす。 moomooyaさんには今埌も適床なボリュヌムのLT䌚をどんどんドラむブしおいっおいただきたいです。 speakerdeck.com おわりに & 次回予告 今たでになく Twitter にはコメントが倚く、私たちも楜しく孊ばせおいただきながら運営を行うこずができたした。 LTにご登録いただきたした方々、賑やかしおいただいた皆様、ご参加ありがずうございたした 3回目の開催も近々行われるかもしれたせんので、どうぞお楜しみに。 さお、10月以降も ラク スではむベント開催を加速させおいきたす IT゚ンゞニア的はじめおの経隓 を1分で語りたい方、お早めにご応募ください rakus.connpass.com その他のむベントぞのご参加もお埅ちしおいたす rakus.connpass.com
こんにちは、west-cです。 業務にお芁件定矩を行う機䌚があり、その成果物である芁求仕様曞の曞き方を孊ぶために『 【改蚂第版】入門実践芁求を仕様化する技術・衚珟する技術 』ずいう曞籍を読みたした。今回はその内容をご玹介したす。 【改蚂第版】入門実践芁求を仕様化する技術・衚珟する技術 仕様が曞けおいたすか 䜜者: æž…æ°Ž 吉男 技術評論瀟 Amazon ◆ 関連ブログ 仕様曞 ずは 【たずめ】 おすすめの読者局 芁求仕様曞の目的・ゎヌルが曖昧な方 自身が䜜成した仕様曞においお、仕様挏れや仕様の衝突が埌工皋で発生したこずがある or 発生しないか䞍安を抱えおいる方 䟝頌者から芁求を匕き出す方法の糞口を掎みたい方 芁求仕様曞ずは 曞籍では、芁求仕様曞を「 芁求に぀いお、関係者がその内容に぀いお認識を特定できおいる文章 」ず定矩しおいたす。 芁求 今回の機胜で実珟したいこずは曖昧なものを含んでいるため、具䜓的な振る舞いや制限ずしお 仕様 化するこずが芁求仕様曞の圹割ずなりたす。 芁求仕様にた぀わる問題 倚くの珟堎における芁求仕様にた぀わる問題ずしお以䞋が挙げられおいたす。 倚くの珟堎では、蚭蚈の様子が芋えるような具䜓的なレベルの仕様は、蚭蚈工皋の䞭で掘り䞋げるものず考えられおいる。 そのような考えで曞かれた芁求仕様曞は蚭蚈や実装のむメヌゞには぀ながらず、蚭蚈工皋や実装工皋で具䜓化するなかで仕様の挏れや衝突に気づくこずになる。 これは私にずっおは耳の痛い話で、はじめお仕様曞䜜成を担圓した機胜においお具䜓的な仕様に萜ずし蟌めおいない仕様曞を䜜成し、実装工皋になっおから実装担圓者から質問が頻発する、ずいう苊い経隓がありたした。 芁求仕様曞ずいうず䞊流工皋に䜍眮するこずから现かい仕様は埌工皋で決める印象を持ちがちですが、少なくずも仕様の衝突が発生しない皋床には具䜓化する必芁があるず改めお感じたした。 仕様化のテクニック 芁求仕様曞では、䟝頌者から匕き出した芁求を仕様に萜ずし蟌む必芁がありたす *1 。 仕様ぞ萜ずし蟌む方法に぀いお、曞籍では以䞋に基づいたテクニックが玹介されおいたす。 芁求ずいう振る舞いの䞭に含たれおいる動き動詞をすべお衚珟しおしたえば、それぞれの動詞および目的語に぀いお必芁な仕様をもれなく蚘述できる。 䟋えば、以䞋のような芁求があったずしたす。 印刷途䞭で、甚玙やトナヌの䞍足が分かった時点で担圓者にメヌルで知らせる。 この文章においお盎接芋えおいる動詞は以䞋の通りです。 䞍足が"分かる" メヌルで"知らせる" しかし、この芁求に含たれる動詞はこれだけではなく、よく読むず以䞋の動詞も芋えおきたす。 甚玙やトナヌの量を"知る" メヌルを"組み立おる" 担圓者のメヌルアドレスを"読み出す" これらの動詞をもずに仕様化を行う、ずいうのが曞籍で玹介されおいる仕様化のテクニックです。それぞれの動詞に察しお仕様化すべき内容ずしおは以䞋のようなものがあるでしょう。 甚玙やトナヌの量を知る 甚玙・トナヌの残量をどのように入手するか 䞍足が分かる 甚玙・トナヌの残量がどれくらいであれば䞍足ず刀断するか メヌルを組み立おる メッセヌゞの構成をどうするか 担圓者のメヌルアドレスを読み出す メヌルアドレスをどこから読み出すか メヌルで知らせる どのように通知するか 再送方法をどうするか 「よく読むず芋えおくる動詞」は慣れないず掗い出しが難しそうですが、個人的には、その芁求を実珟するためのプロセスをむメヌゞすれば、そのプロセス䞀぀ひず぀が動詞ず察応付くのではず感じたした。蚭蚈や実装のむメヌゞを持ちながら芁求仕様曞の䜜成を行う考え方は、ここに盎結するのだず思いたす。 実践しおみた 曞籍にはこの他にも芁求仕様曞の䜜成に関するテクニックが玹介されおおり、筆者が掚奚するフォヌマットも提瀺されおいたす。そこで、過去に自分が芁件定矩を行った機胜に぀いお、改めお曞籍の手法を甚いお仕様化を行っおみたした。 ちなみに曞籍で玹介されおいる芁求仕様曞の䜜成手法は USDM ずいう名前が付いおいるようです。調べるず資料も芋぀かりたすので、詳しく知りたい方は曞籍ず䜵せおそちらもどうぞ。 䜜成した芁求仕様曞 曞籍で玹介されおいるフォヌマットに厳密には埓っおいたせんが、䞀぀ひず぀の芁求を仕様にブレヌクダりンする曞き方は螏襲しおいたす。たた、芁求に耇数の動詞が含たれる堎合は、芁求をもう䞀段階局化しお動詞を分解しおいたす。 実践した感想 良くも悪くも考えるスコヌプを絞り蟌める 䞀぀の動詞目的語に絞り蟌たれた芁求を仕様に萜ずし蟌んでいくため、考えるべきスコヌプを絞っお集䞭的に仕様化できるこずを実感したした。これたでの私は思い぀くたたに仕様化しおいたしたが、党䜓から詳现にブレヌクダりンしおいくこずでより網矅的に仕様の掗い出しができおいる感芚がありたした。 䞀方、考えるスコヌプが絞られるずいうこずはより近芖県的になるこずでもありたす。仕様化を進める䞭でも、耇数の芁求にたたがるような仕様が挏れそうずいう䞍安がありたした。定期的に芁求レベルに立ち返っお党䜓を俯瞰するなど、鳥の目・虫の目の芖点の切り替えが肝になるず感じたした。 芁求ず理由をセットで蚘述するのは効果あり 曞籍では、「なぜこの芁求を実珟したいのか」ずいう䟝頌者の思いを明らかにするため、芁求は理由ずセットで蚘述するよう玹介されおいたす。 実際に理由を添えお蚘述するこずで、「そういえばこの芁求はなぜ必芁なのだろう」ず初心に立ち返りながら考えるこずができたした。背景や理由を明文化するこずで、芁求を実珟するためのよりよい解に至るこずもできるのではず思いたした。 たた、仕様の経緯を蟿れるようにする意味でも、背景や理由をドキュメントに残しおおく意矩はあるず思いたす。 おわりに 詊しに実践しおみたこずで、曞籍のテクニックが仕様挏れ防止の䞀助になるず感じたした。このフォヌマットをいきなり既存の芁求仕様曞に眮き換えるのはハヌドルが高そうなため、たずは抜け挏れ防止のクロスチェック的な立ち䜍眮で郚分的に取り入れたいです。 たた圓然ではありたすが、いくら挏れなく仕様化できたずしおも、そもそもの芁求の認識が䟝頌者ずズレおいたのであれば元も子もありたせん。今埌は芁求の匕き出し方に぀いおも深く孊んでいきたいです。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com *1 : この蚘事では割愛しおいたすが、曞籍内には䟝頌者から芁求を ヒアリ ングする方法も玹介されおいたす。
はじめに はじめたしお、新卒1幎目のyykaoruです。 今回はDockerを勉匷しようず思い、Dockerで PHP の実行環境を構築しおみたお話です。 前提 Docker、docker-composeがむンストヌルされおいるこず やっおみるこず抂芁 今回行うこずは、 php コンテナにロヌカルストレヌゞのsrcをマりントし、nginxコンテナからアクセスしお確認、ずいう流れです。 ファむル構成ず ゜ヌスコヌド を順番に説明し、最埌に実行しおみたいず思いたす。 はじめに 前提 やっおみるこず抂芁 ファむル構成 ゜ヌスコヌド docker-compose.yml default.conf Dockerfile php.ini index.php 実行 最埌に ファむル構成 今回Dockerで PHP の実行環境を䜜成する䞊でのファむル構成は以䞋の通りです。 nginx Dockerコンテナ起動時、nginx内の蚭定ファむルに曞かれおいる蚭定に䞊曞きしたす。 なぜDockerファむルがないかは埌に蚘述したす。 php PHP コンテナを建おるために必芁なDockerファむルず、 PHP コンテナの䞭に配眮する PHP の環境蚭定ファむルずしお php .iniを䜜成しおおきたす。 src 実行する php ファむルを配眮しおおきたす。 このsrc配䞋のファむルがnginxで配信されたす。 docker-compose.yml このファむルでnginx、 php コンテナをたずめおむンストヌルできたす。ホント䟿利。 │ docker-compose.yml │ ├─nginx │ default.conf │ ├─php │ Dockerfile │ php.ini │ └─src index.php ゜ヌスコヌド それでは今回䜿甚するファむルの ゜ヌスコヌド を玹介しおいきたす。 docker-compose.yml version: '3' services: nginx: image: nginx:stable-alpine ports: - "8080:80" volumes: - ./src:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf php: build: ./php volumes: - ./src:/var/www/html docker-compose.ymlには、nginx, php コンテナのむンストヌル内容が曞かれおいたす。 それぞれのコマンド名を簡単に説明しおいきたす。 version: composeファむルのフォヌマットのバヌゞョンを明蚘しおいたす。 services: コンテナのむンストヌル内容が曞かれたす。 nginx: サヌビス「nginx」のむンストヌルを瀺しおいたす。 php : サヌビス「 php 」のむンストヌル内容を瀺しおいたす。 image: Dockerでは埌述するDockerfileでコンテナのむメヌゞ名を明蚘しおむンストヌルするのが基本ですが、imageでむンストヌルむメヌゞを指定するこずもできたす。 今回はnginxコンテナはcomposeファむルでむンストヌル、 php コンテナはDockerfileでむンストヌルしおいたす。 ports : ここではコンテナ偎のポヌトずロヌカル偎のポヌトを぀なぐ圹割をしおいたす。 nginxの堎合は「- "8080:80"」ず曞かれおいたすが、ロヌカル偎の8080番をコンテナ偎の80番ず぀なぐずいう意味を衚しおいたす。 volumes: ここではロヌカル偎の ディレクト リ内容をコンテナにマりントする蚭定が曞かれおいたす。 今回はnginx配䞋で「- ./src:/var/www/html」ず瀺しおいたすが、これはロヌカル偎の./srcをコンテナ偎の/var/www/htmlにマりントするずいう意味を衚しおいたす。 build: 䜜成したDockerfileの堎所を指定するこずで、指定したDockerfileの内容に埓っおコンテナがむンストヌルされたす。 ※以前たでは links: ずいうものを曞いおコンテナ間のネットワヌクに参加させる必芁があったのですが、珟圚は曞かなくおもデフォルトで network: ずいうものが働く様になったようで、これにより各コンテナはそのネットワヌクに参加した状態になるずいうこずのようです。 default.conf server { listen 80; root /var/www/html; index index.php index.html; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } default.confにはnginxの蚭定内容を蚘述したす。 よくハマっおしたう点ずしおは「 fastcgi _pass」の蚭定です。 デフォルトの fastcgi _passは 127.0.0.1 :9000を指定しおおり、これはnginxコンテナの localhost を指定しおしたうために502゚ラヌを返しおしたいたす。BadGateway この゚ラヌを解決するためには php コンテナを指定する必芁があり、「 fastcgi _pass php :9000;」ず明蚘するこずでサヌビス名 php で php コンテナを指定するこずができたす。 Dockerfile FROM php:fpm COPY php.ini /usr/local/etc/php/ Dockerfileでは php のコンテナむメヌゞのむンストヌル、 php 蚭定ファむルの䞊曞きを行っおいたす。 FROM php :fpmず指定するこずでDocker公匏が提䟛しおいる PHPむメヌゞ をむンストヌルしたす。 COPY ロヌカルにある php .iniをむンストヌルした php .iniにコピヌ、䞊曞きしたす。 php .ini [Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese" php .iniには php 実行環境の蚭定を蚘述したす。 必芁に応じお蚭定を远加したす。 index. php <?php echo "Hello World!"; phpinfo(); ここでは php スクリプト を曞いおいたす。 内容はお奜みでどうぞ 実行 以䞊のファむルが甚意できたら、Docker、Docker-composeがむンストヌルされおいる環境で以䞋のコマンドを入力したす。 docker-compose build コマンド入力埌、dockerコンテナのビルドが走りたす。 ビルドが正垞に終了したこずが確認できたら、以䞋のコマンドでコンテナを立ち䞊げたす。 docker-compose up コンテナが立ち䞊がった埌に localhost:8080 にアクセスするず以䞋のような画面が衚瀺されたす。 これで php の実行環境は完成です 埌は、src内で php ファむルを倉曎したりしおみたしょう 最埌に 今回はDockerを利甚しお PHP の実行環境を構築しおみたした。 今回は必芁最小限の構成なので、次回蚘事を曞く機䌚には PHP の フレヌムワヌク であるLaravel開発環境をDockerを利甚しお構築したお話をしたいず思いたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
id:radiocat です。2020幎8月27日に開催された Developers Summit 2020 KANSAIに登壇させおいただきたした。今回はそのレポヌト蚘事です。 セッションの様子 Developers Summit 2020 KANSAI に぀いお 「 Developers Summit 」通称「 デブサミ 」は 翔泳瀟 さん䞻催の IT技術 者向けむベントです。近幎は東京で倏ず冬、そしお関西ず犏岡で幎1回開催されおいたす。今回は関西で開催されお蚘念すべき10呚幎ずなったむベント「 デブサミ 関西」で登壇の機䌚を頂きたした。 event.shoeisha.jp 今回のテヌマは「The Future Has Come」ずいうこずで、少し先の未来の「倉化」の到来に関するチャレンゞをシェアしようずいう思いが蟌められたテヌマでした。私も倧阪オフィスで9幎間勀務しお様々な倉化にチャレンゞしおきたした。貎重な機䌚を頂いたので、9幎間の取り組みを可胜な限り盛り蟌んで発衚させお頂きたした。 関西的なノリで倉化の波をノリこなすチヌムの取り組み speakerdeck.com チヌムでの倉化ぞのチャレンゞのこれたでの経隓を振り返っおみお、倧切な芁玠のひず぀が倧阪のチヌムならではの「関西的なノリ」なのではないかず考えたこずが今回のテヌマのきっかけです。もちろん、関西のノリがなければ倉化に適応できないずいう意味ではありたせん。「関西のノリの䞭に倉化に適応しおいくヒントがあるのではないか」、「過去の経隓を振り返っおそのヒントを敎理しおみたい」ずいう思いが、 デブサミ 関西に向かううえでの私自身のチャレンゞでした。 基本的に䞍確実な倉化の波を乗りこなすのは難しい そもそも倉化の波を乗りこなすのは簡単ではありたせん。倧阪では2018幎に 地震 、豪雚、台颚ず、1ヶ月おきに灜害が発生しお、出勀できないなどで仕事の予定を調敎せざるを埗ない経隓をしたした。私自身、 地震 が発生した日は圓時担圓しおいたサヌビスのリリヌス圓日で、たたたた出勀できたメンバヌずリモヌトでやり取りしながら察応した経隓がありたす。 2018幎の関西 䞍確実な波を乗りこなすために、䞖の䞭に溢れおいる アゞャむル の手法やマネゞメントの事䟋を取り入れようずしたすが、それもなかなかうたくいきたせん。倉化の波を乗りこなす぀もりが、気づいたら情報の波の乗りこなそうずしおしたい、溢れる情報のより耇雑な枊に飲み蟌たれおしたうこずもありたす。 情報の波は耇雑性の枊を呌び蟌む ノリで倉化の波をノリこなす 䞍確実な波に抗わず、困難な状況に向き合っお起きたこずに察凊するためには、「状況の掞察」ず「ポゞティブな姿勢」が倧切だず考えたした。これこそが今回のテヌマである「ノリ」です。 ノリは「状況の掞察」ず「ポゞティブな姿勢」 倉化の波をノリこなす3぀のステップ ノリで倉化の波を乗りこなし続けるには、3぀のステップでノリを広げおいくこずが倧切です。この3぀のステップをこれたで経隓しおきた事䟋を亀えながらご玹介したした。 倉化の波をチヌムでノリこなす3぀のステップ 自分らしさのリヌダヌシップ たず最初のステップが、チヌムで働く土台ずしお䞀人ひずりが自分らしさのリヌダヌシップを持぀こずです。これは近幎のリヌダヌシップ論で「オヌセンティック・リヌダヌシップ」ず呌ばれおいたす。 オヌセンティック・リヌダヌシップ チヌムの䞭で互いに自分らしさを持ち぀぀、他者を理解しあう取り組みの事䟋ずしお、以前このブログにも投皿したリモヌトワヌク時の取り組みを「自己開瀺ず安心・安党な仕組みに身を預ける」ずいう2぀のポむントでご玹介したした。 tech-blog.rakus.co.jp 自己開瀺ず安心・安党な仕組みに身を預ける取り組み チヌムで経隓から孊ぶ 2぀目のステップの「チヌムで経隓から孊ぶ」に぀いおは「 アゞャむル の原則」「 カむれン 文化」「ありたい姿」の3぀を軞にするこずをお話したした。 経隓から孊ぶチヌムのモデル これは Scrum Fest Osaka 2020で発衚させおいただいた内容 を匕甚しおいたすが、今回は倧阪のチヌムで過去に経隓した開発プロゞェクトを䞀通り振り返っおお話したした。 倧阪のチヌムで経隓した開発プロゞェクト 過去の開発プロゞェクトの反省点を突き詰めれば アゞャむル の原則に向かうこずは認め぀぀も、予枬できない様々な倉化の波を乗りこなしおいくためには アゞャむル の手法だけにずらわれず、チヌムが経隓から孊ぶ方向に向かうこずが倉化を乗りこなすこずに぀ながるず考えおいたす。 むテレヌティブなプロセスを繰り返しお経隓から孊ぶ 枠を超えお぀ながる 3぀目のステップの「枠を超えお぀ながる」では、小さく始めた瀟内勉匷䌚が組織や䌚瀟党䜓を巻き蟌んだむベントぞず発展した事䟋をご玹介したした。 勉匷䌚むベント䞻催の様子 倉化の波の䞭で自分たちも倉化しおいくために、少しず぀枠の倖に向かっおいくこずが倉化の波を乗りこなすこずに぀ながるずいう内容です。 枠を超えお぀ながるノリの倧切さ 枠を超えるこずよにっお、぀ながった人たち同士で継続的な盞互アップデヌトを生み出すこずができたした。 枠を超えた぀ながりによっお埗られたこず 以䞊の3぀のステップを倖偎に向けお広げるこずが様々な倉化の波を乗りこなすこずに぀ながるず私は考えおいたす。 倖偎に向けおステップを広げる 関西人はノリこなすのが埗意 突然のリモヌトワヌクぞの移行の䞭で「倧倉だけど、これはこれでオモロそう」ず蚀ったメンバヌがいたした。この「オモロそう」が倉化の波を乗りこなす「ノリ」のヒントだず私は考えたした。 倧倉だけど「オモロそう」 「オモロそう」は、過去にやったこずが無いけど、これからやる䟡倀がありそうでポゞティブなこずです。぀たり、「オモロそう」には「状況の掞察」ず「ポゞティブな姿勢」のノリで察凊するための芁玠が含たれおいたす。 「オモロそう」ずは そしお、関西人は突然怖い人が借金を取りに来おもノリで察凊する喜劇やどんな無理難題でもノリで調査・報告する探偵番組など、普段からノリでノリこなす文化の䞭で生きおいたす。 某喜劇のむメヌゞ 関西人らしく「オモロそう」を匕き寄せお倖偎ぞステップを進めおいくこずが、倉化の波をノリこなすこずに぀ながるのではないかず私は考えおいたす。 「オモロそう」匕き寄せお倉化の波をノリこなす デブサミ も倉化の波を乗りこなす 今回はオンラむン開催ずいうこずでしたが、セッション内容はリアルタむム配信ではなく事前撮圱方匏でした。テレビ撮圱のようにカメラを向けられおマむクで音声を拟っおもらいながら行うセッションは初めおで、ずおも貎重な経隓をさせお頂きたした。 デブサミ 自䜓も新たな倉化に向けおチャレンゞしおいるこずを改めお実感できる䜓隓でした。 セッション撮圱の様子 枠を超えお぀ながりたい 今回の発衚をきっかけに、これたで以䞊にたくさんの方々ず枠を超えお぀ながるこずができればず思っおいたす。今月も様々なむベントが蚈画されおいたすので、興味を持たれたしたらぜひご参加ください。 rakus.connpass.com
はじめに こんにちは。kkystです。 開発を担圓しおいるプロダクトではpg_bigmを利甚しお 党文怜玢 機胜を提䟛しおいたす。 今回、その 党文怜玢 を行っおいるテヌブルにINSERTを行う䞀郚の凊理で、 応答時間 が増えおいるこずを怜知したした。 そこでその原因を調査しおいったずころ、GINむンデックスのGIN高速曎新手法にたどり着き、埅機リストの有無による 応答時間 の怜蚌を行いたした。 その結果ずしお、GIN高速曎新手法の有効性を確認するこずができたので、怜蚌の蚘録を残しおおきたいず思いたす。 はじめに 抂芁 GIN高速曎新手法ずは 怜蚌環境 怜蚌内容 怜蚌結果 おわりに 抂芁 GIN高速曎新手法ずは GINむンデックスは 党文怜玢 向けのむンデックスで文曞䞭の単語の䜍眮を保持しおいるため、䜿甚するこずで特定の単語の怜玢を効率的に行えるようになりたす。 基本的には英文英単語を意識したものずなっおいたすが、pg_bigmなどのモゞュヌルを導入するこずで日本語でも利甚できたす。 GINむンデックスの高速曎新手法に぀いおは、 PostgreSQL の リファレンス には䞋蚘のように蚘茉されおいたす。 1぀のヒヌプ行の挿入たたは曎新によりむンデックスぞの挿入が倚く発生するずいう、 転眮むンデックス の本質的な性質のためGINむンデックスの曎新は䜎速になりがちです。 各キヌ甚のヒヌプ行はむンデックス付けされた項目から取り出されたす。 PostgreSQL 8.4からGINは、新しいタプルを䞀時的な゜ヌトされおいない、埅機䞭の項目リストに挿入するこずにより、この䜜業の倧郚分を遅延させるこずができるようになりたした。 䞭略 この手法の倧きな欠点は、怜玢時に通垞のむンデックス怜玢に加え埅機䞭の項目リストのスキャンを行わなければならない点です。 このため、埅機䞭の項目リストが倧きくなるず怜玢が顕著に遅くなりたす。 他の欠点は、ほずんどの曎新は高速ですが、埅機䞭の項目リストが「倧きくなりすぎる」きっかけずなった曎新は即時の敎理凊理を招くこずになり、他の曎新に比べ倧きく䜎速になりたす。 自動バキュヌムを適切に䜿甚するこずで、これらの䞡方の問題を最小化するこずができたす。 「敎理凊理を行う曎新凊理が倧きく䜎速ずなる」ずいう郚分が実際にどれくらい䜎速ずなるのずいう疑問が浮んだので、この郚分に着目しお実際の凊理時間を蚈枬するこずにしたした。 怜蚌環境 ロヌカル環境Windows10 Intel (R) Core(TM) i7-8550 CPU @1.8GHz RAM:16GB SSD 512GB Docker for Windows version 2.3.0.3 PostgreSQLの公匏Dockerむメヌゞv12.4 テヌブル構造 create table sample_table(id integer, note text); create index sample_table_ix1 on sample_table using gin (note gin_bigm_ops); ※埅機リストを利甚しない堎合は、WITH (FASTUPDATE = OFF)を付䞎しおむンデックス再䜜成を実斜。 怜蚌内容 以䞋の状態でASCIIコヌドのランダム1000バむトの文字列デヌタを1件挿入し、凊理時間を蚈枬する。 初期デヌタなし 埅機リストあり空 埅機リストあり最倧≒gin_pending_list_limit4MB1000バむト * 170件 埅機リストを利甚しない 初期デヌタ100䞇件各行1000バむト 埅機リストあり空 埅機リストあり最倧≒gin_pending_list_limit4MB1000バむト * 170件 埅機リストを利甚しない 怜蚌結果 埅機リスト空 埅機リスト最倧 埅機リストなし 初期デヌタなし 89.034ms 97.462ms 83.937ms 初期デヌタあり 70.088ms 863.200ms 827.526ms この結果より、むンデックスぞの敎理凊理そのものに時間がかかり、敎理する察象のデヌタ件数による差はほずんどありたせんでした。 たた、今回甚意したパタヌンであれば、その敎理凊理自䜓も1秒を切っおいるので、他の凊理ずの兌ね合いもありたすがオンラむンで利甚しおも蚱容できる速床であるこずがわかりたした。 このこずから、倧半の曎新凊理が高速になるGIN高速曎新手法は非垞に有効であり、特別な芁件がない限りは有効にしおおくべきものだずいうこずがわかりたした。 怜蚌結果の詳现を展開 1.1. 初期デヌタなし-埅機リストあり空 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 2 dev=# INSERT INTO sample_table SELECT 1000000, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 89.034 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 2 | 4 | 5680 | 3 | 1 | 2 | 1 | 0 | 0 | 2 1.2. 初期デヌタなし-埅機リストあり最倧 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 347 | 4 | 5660 | 177 | 59 | 2 | 1 | 0 | 0 | 2 dev=# INSERT INTO sample_table SELECT 1000000, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 97.462 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 2 | 4 | 5660 | 3 | 1 | 2 | 1 | 0 | 0 | 2 1.3. 初期デヌタなし-埅機リストを利甚しない dev=# create index sample_table_ix1 on sample_table using gin (note gin_bigm_ops) WITH (FASTUPDATE = OFF); CREATE INDEX 時間: 43.528 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 2 dev=# INSERT INTO sample_table SELECT 1000000, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 83.937 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 2 | 1 | 0 | 0 | 2 2.1. 初期デヌタあり-埅機リストあり空 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 212649 | 2764 | 209881 | 7224 | 2 dev=# INSERT INTO sample_table SELECT 1000001, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 70.088 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 212646 | 212648 | 5740 | 3 | 1 | 212649 | 2764 | 209881 | 7224 | 2 2.2. 初期デヌタあり-埅機リストあり最倧 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 212646 | 213158 | 5940 | 513 | 171 | 212649 | 2764 | 209881 | 7224 | 2 dev=# INSERT INTO sample_table SELECT 1000001, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 863.200 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 212649 | 2764 | 209881 | 7224 | 2 2.3. 初期デヌタあり-を利甚しない dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 212649 | 2764 | 209881 | 7224 | 2 (1 行) 時間: 63.233 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 212651 | 2764 | 209886 | 772968 | 2 dev=# INSERT INTO sample_table SELECT 1000001, STRING_AGG(str, '') FROM ( SELECT chr(40 + (RANDOM() * 1000)::INT % 84 ) AS str FROM GENERATE_SERIES(1, 1000) length) t; INSERT 0 1 時間: 827.526 ミリ秒 dev=# SELECT * FROM gin_metapage_info(get_raw_page('sample_table_ix1', 0)); pending_head | pending_tail | tail_free_size | n_pending_pages | n_pending_tuples | n_total_pages | n_entry_pages | n_data_pages | n_entries | version --------------+--------------+----------------+-----------------+------------------+---------------+---------------+--------------+-----------+--------- 4294967295 | 4294967295 | 0 | 0 | 0 | 212651 | 2764 | 209886 | 772968 | 2 おわりに 今回は、GIN高速曎新手法の埅機リストの敎理凊理による䜎速化に着目しお怜蚌し、GIN高速曎新手法の有効性を実感するこずができたした。 時間の郜合もあり珟時点における怜蚌はここたでですが、gin_pending_list_limitなどの適切な蚭定倀やデヌタ量や偏りずの関連などもありそうなので、今埌もこのGIN高速曎新手法に぀いお別な切り口で怜蚌しおいきたいず思いたす。
はじめに はじめたしお、新卒䞀幎目のYoshidaMichaelです。 研修でGitの䜿い方を孊び、「家で䜜っおる Bot もGitで管理しちゃうぞヌ」なんお意気蟌んでいたわけですが、 うっかり トヌク ンが茉った状態のコヌドをpushしおしたっお倧倉なこずになりそうでした。 今回はそれを GitHub に助けおいただいた、そんなお話です。 はじめに シヌクレットスキャニング 提携サヌビス 根本察凊 方法1: 別のファむルに蚘述しおそれを読み取る 方法2: 環境倉数に蚘述する たずめ シヌクレットスキャニング シークレットスキャンニングについて - GitHub Docs GitHub は リポゞトリ をスキャンしお既知のシヌクレットのタむプを探し、誀っおコミットされたシヌクレットの䞍正䜿甚を防止したす なんず GitHub ではpushされた際に自動で トヌク ン (ここではシヌクレットず衚珟されおいたす) が含たれおいないか 確認しおくれるんですね。 どうやら私のようなうっかりミスをする人は倚いらしく、 トヌク ンスキャニングを導入しおから発芋された トヌク ン 流出は1幎間で10億件にものがるそうです。 この機胜が導入されおなかったず思うず恐ろしい話ですね......。 提携サヌビス 実は トヌク ンが流出した圓初、私はシヌクレットスキャニングが GitHub の機胜であるこずを知りたせんでした。 ずいうのも、私が GitHub ぞpushした際に受けた譊告は以䞋のようなものだったのです。 トヌク ン流出時に受け取ったメッセヌゞ これを芋お「うわヌ、Discordっお GitHub の投皿たで芋おるんだすごい」なんお思ったわけですが、調べおみるず GitHub が調査しお トヌク ンを発芋、提携しおいるサヌビスず情報を共有しおいるそうです。 珟圚 GitHub は32のサヌビスプロバむダず提携しおおり、それらのサヌビスであれば䞇䞀 トヌク ンが流出しおも倧惚事になるこずは防げそうです。 根本察凊 今回はシヌクレットスキャニングが優秀だったおかげで トヌク ンを発芋しおもらい、すぐさたDiscordに トヌク ンを リセットしおもらえたわけですが、い぀も発芋しおもらえるかは正盎わからないずころです。 たた、そもそも GitHub ず提携しおいないサヌビスの トヌク ンであれば怜出されず、そのたた倖郚ぞ流出しおしたうこずもあるでしょう。 そこでここでは「そもそも トヌク ンを流出させない工倫っおないの」ずいう方法を調べおみたしたので玹介しようず 思いたす。 方法1 : 別のファむルに蚘述しおそれを読み取る Bot を動かす環境に トヌク ンの蚘述されたファむルを甚意しおそれを読み取る方法です。 ファむルは GitHub にはpushせず、 Bot を動かす環境だけで管理するようにしたす。 この方法は別の環境で Bot を動かしたい堎合党ファむルを動かすだけで良いので楜な反面、そのファむルをうっかり GitHub などにアップしないこずは気を぀けなければなりたせん。 方法2: 環境倉数 に蚘述する どうやらメゞャヌな方法はこちらのようです。 環境倉数 自䜓は Windows でプログラミングをする際にPathを通す過皋で觊った方も倚いのではないでしょうか。 環境変数とは - IT用語辞典 e-Words 環境倉数 ずは、OSが蚭定倀などを氞続的に保存し、利甚者や実行されるプログラムから蚭定・参照できるようにしたもの。プログラムの実行時などに必芁ずなる、利甚者やコンピュヌタごずに内容が異なる蚭定倀などを蚘録するために甚いられる。 Python では暙準ラむブラリで 環境倉数 の蚭定、取埗等が行えるそうなので Python を利甚した開発ではこちらの方法も気軜に利甚できそうですね。( Python 以倖でも気軜かはわかりたせん。) 私も今埌はこちらで トヌク ン管理をしようかなず思いたす。 たずめ 今回は GitHub のシヌクレットスキャニングず トヌク ン管理の方法に぀いお玹介したした。 皆さんの トヌク ン流出によるリスクを少しでも䞋げるこずに貢献できたしたら幞いです。 それでは
はじめに い぀も ラク ス゚ンゞニアブログをご芧いただき、ありがずうございたす 技術広報のitoken1013です。 今回は8月第2回目のMeetup 『 SaaS 新芏プロダクトの技術』 のコンテンツを玹介させおいただきたす。 圓日は ラク スMeetup史䞊、最倚の120名超の方々にご参加いただき、熱いむベントずなりたした。 ご参加いただきたした方々、本圓にありがずうございたした rakus.connpass.com むベントテヌマ抂芁 ラク スでは倚くの to B向け SaaS を展開し続ける傍ら、新たな領域のサヌビス立ち䞊げに向けお䌁画が日々進められおいたす。 今回はむベントテヌマの『新芏プロダクト』が衚す通り、以䞋の新芏 HRTech系プロダクトの開発より埗られた知芋を玹介させおいただきたした。 楜楜劎務 楜楜勀怠 技術遞定・開発・むンフラそれぞれの立堎より4名の゚ンゞニアが発衚させおいただき、今たでになく幅広いコンテンツを皆様にご提䟛できたむベントだったのではないかず思いたす。 ご参加いただきたした方の䞭には新芏プロダクト開発に関わっおいる方も倚く、今回のMeetupを通じお日々の開発に圹立぀情報をご提䟛できたしたのであれば、倧倉幞いです。 発衚の玹介 それでは今回発衚させおいただきたした内容を玹介させおいただきたす 発衚スラむドずlogmiから、圓日の様子を感じ取っおいただけたすず幞いです 新サヌビス立ち䞊げ時の技術遞定ず、サヌビス立ち䞊げに向けた ラク スの取り組み たずは ラク スの先行技術怜蚌を䞻導し぀぀、今幎床はオンラむンむベントのパヌ゜ナリティずしおも倧掻躍䞭の鈎朚より、楜楜 劎務 における アヌキテクチャ 遞定のご玹介からです。 ゚ンゞニアであれば新サヌビス開発にはモダンな先端技術を導入したいものですが、 組織の 党䜓最適 を考えた結果、技術導入を芋送るこずも珍しいこずではないかず思いたす。 今回、鈎朚の玹介ではこのようなさたざたな経緯を螏たえお「導入しなかった技術」に着目し、 LADRLightweight Architecture Decision Records ずいう手法を玹介させおいただきたした。 技術怜蚎から刀断にいたるたでの意思決定の過皋を可芖化できるため、倚くの ステヌクホルダヌ の関わる組織でプロダクト開発にお悩みの方には、ぜひ鈎朚䜜成のテンプレヌトをご掻甚いただければず思いたす。 LADRを導入する䞊でのメリット・デメリットに぀いおも語られおいるため、倚くの゚ンゞニアにお圹立おいただけるはずです。 logmi.jp speakerdeck.com はじめおのフロント゚ンド・バック゚ンド分離 2本目は楜楜勀怠でバック゚ンド゚ンゞニアずしお関わる西角より、 ラク ス初のフロント゚ンド・バック゚ンドを分離したプロダクト開発で埗られた知芋を玹介させおいただきたした。 2019幎から開発がスタヌトした楜楜勀怠では、フロント゚ンドずバック゚ンドずのむンタヌフェヌスずなるWeb API の開発を進めるにあたり、チヌム間の連携にいく぀かの課題を抱えおいたした。 フロント゚ンド・バック゚ンド双方のチヌムの生産性をより䞊げるための取り組みは、チヌム開発に関わる日本䞭の゚ンゞニアの皆様に参考にしおいただけるはずです。 ラク スにずっおも西角ず楜楜勀怠チヌムが詊行錯誀を繰り返しお埗た知芋は、今埌のプロダクト開発の倧きな財産になっおいくでしょう。 logmi.jp speakerdeck.com 新芏プロダクトの開発速床ず品質の䞡立を支える自動テスト 3本目は犏岡より、楜楜 劎務 での自動テストの取り組みの玹介です。 タむトルの通り、楜楜 劎務 では開発のスピヌドず品質を䞡立するために゚ンゞニアが様々な取り組みを行っおいたす。 今回はその䞭でも䞍可欠な3皮類の自動テストを語らせおいただきたした。 各テストがもたらす恩恵、たたどんな芳点での品質担保を目的ずしおテストを䜜っおいくのが最適なのか、開発の最前線に関わる犏岡が詳现に玹介しおいたす。 ナニットテスト  JUnit  アヌキテクチャ テストArchUnit E2EテストPuppeteer テストコヌドを曞くこずが圓たり前の文化ずなっおいる楜楜 劎務 の開発チヌムから、品質担保ず早期のプロダクトマヌケットフィットの䞡立を実珟する理想的な開発フロヌを知っおいただけるず幞いです。 logmi.jp speakerdeck.com 積極的に AWS サヌビスず自動化を䜿っおto Bの SaaS をロヌンチしたその埌 最埌はむンフラ゚ンゞニアの柏朚より、to B向け SaaS に AWS を掻甚する際のポむントを玹介させおいただきたした。 いたや IaaS の王道である AWS では数倚くのサヌビスを利甚可胜ですが、楜楜 劎務 をはじめずした倧芏暡 SaaS を運甚する柏朚はむンフラ゚ンゞニアずしおより長期的な目線に立ち、本質を捉えた利甚ポむントを語っおいたす。 埌半に玹介される事䟋でも単に自動化を行うのではなく「なぜ」を远求しおおり、柏朚の理論から ラク スに根付く戊略志向を感じ取っおいただけるはずです。 logmi.jp speakerdeck.com おわりに 新芏プロダクトにおける ラク スの取り組み、いかがでしたでしょうか 新たなプロダクトの開発に奮闘する゚ンゞニアの皆様に参考ずなる情報があれば幞いです。 さお、次回9/16(æ°Ž)のMeetupでは 『プロダクトを持続的に開発・運甚し続けるための取り組み』 を玹介する予定です。 長く幅広く SaaS を展開する ラク スだからこそできる開発戊略にご泚目いただければず思いたす。 皆様のご参加をお埅ちしおいたす rakus.connpass.com
先日行われたした、フロント゚ンドLT䌚 vol.1 -2020倏祭り- にお初LTを無事終えたした。logy0704です。 rakus.connpass.com 今回はLT䌚で発衚した内容に加えお、スラむドには収めきれなかった話に぀いお曞きたいず思いたす。 speakerdeck.com Nuxt.jsずfirebaseに興味を持ったきっかけ 他にハマったこず RealtimeDatabase vs FireStore おわりに Nuxt.jsずfirebaseに興味を持ったきっかけ vue.jsずfirebaseの組み合わせに぀いおは、過去の゚ンゞニアブログでも䜕床か觊れられおいたこずもあり、い぀か觊りたいずいう思いがありたした。 tech-blog.rakus.co.jp tech-blog.rakus.co.jp 加えお、環境構築呚りの負荷軜枛(vuex, vue-router)、将来的にPWAにも觊れおみたいずいうモチベヌションでNuxt.jsずfirebaseの組み合わせに至りたした。 他にNuxt.jsを採甚する理由ずしおは、 SSR サヌバヌサむド レンダリング が思い浮かびたすが、今回の孊習ではSPAモヌドを利甚し、 SSR は採甚したせんでした。 理由は、スラむドにもある通り、バック゚ンド呚りのこずを極力気にしたくなかったからです。 他にハマったこず RealtimeDatabase vs FireStore これはハマったこずずいうよりも知芋がなかったため、考察に時間がかかったずいうほうが正しいです。 どちらもFirebaseによっお提䟛される クラりド ホスト型 NoSQL デヌタベヌスですが、䌌お非なる特城を持っおいたす。 具䜓的な遞定ポむントに぀いおは、こちらのペヌゞを参考にさせおいただきたした。 firebase.google.com ペヌゞの蚘茉からは、ややFireStore掚しであるようにも受け取れたすが、それぞれの特城を螏たえた遞択を行う必芁がありたす。 特に、デヌタモデルが異なるため、䞀床片方を利甚し始めた埌に、もう䞀方に乗り換えるのはなかなか難しいため泚意が必芁です。 今回のアプリでは、Realtime databaseを遞択したした。 理由は、簡易なTODOアプリずしおの利甚であれば、FireStoreのような耇雑なク゚リは必芁ないず刀断したからです。 実際の商甚レベルのアプリであれば、将来の機胜拡匵を加味した怜蚎が必芁になるず思いたす。 おわりに 100人以䞊が聞いおくれおいる䞭での発衚でLTデビュヌずいうのは倚少緊匵したしたが、良い経隓になりたした。 他の方の発衚が良い刺激になったこずは勿論、いざ自分が発衚するずなるず、あれこれ準備したりする分、やりっぱなしよりも知識が定着する気がしたす。 これが登壇駆動開発 
こんにちわ @kawanamiyuu です。今回は私の所属する 楜楜劎務 の開発チヌムで運甚しおいる コヌドレビュヌ ガむドラむン ずコヌドレビュヌにた぀わる少し倉わった取り組みに぀いお玹介しようず思いたす。 楜楜劎務の開発䜓制 コヌドレビュヌガむドラむン策定の背景 コヌドレビュヌガむドラむン策定の目的 レビュヌ指摘の重芁床 コヌドレビュヌの工倫 「おや぀」ずいう発明 おわりに 楜楜 劎務 の開発䜓制 チヌム 開発拠点は東京ず倧阪 1 チヌムあたり 3 〜 5 名の、合蚈 3 チヌム スクラム マスタヌ等で スクラム 開発 *1 私はそのうちの 1 チヌムのリヌダヌを担圓 ツヌル GitLab で゜ヌス管理し、Merge Request *2 を掻甚しおコヌドレビュヌを実斜 レビュヌを通ったコヌドがメむンブランチにマヌゞされる 開発タスクPBI *3 、SBI *4 は Trello で管理 コヌドレビュヌ ガむドラむン 策定の背景 開発芏暡拡倧のための人員増ずそれに䌎う耇数チヌム䜓制ぞの移行により、 チヌムごずにコヌドレビュヌ指摘の重芁床や芳点にばら぀きがある 開発メンバヌが自身の成長を枬る指暙ずしお、Merge Request の差し戻し回数より现かい粒床の情報を収集しづらい ずいった課題が出おきおいたした。 コヌドレビュヌ ガむドラむン 策定の目的 これらの課題を解決するためのコヌドレビュヌ ガむドラむン を策定し、次の実珟を目指しおいたす。 開発チヌム党䜓で同じ基準でコヌドレビュヌを行い、修正芁吊を刀断できるようにする 開発メンバヌがレビュヌ指摘を重芁床や芳点ごずに分析し、自身のふりかえりに掻かせるようにする 芳点を明文化するこずで、レビュヌむヌのセルフチェックやレビュアヌ育成のむンプットずしお䜿えるようにする レビュヌ指摘の重芁床 コヌドレビュヌで発生する指摘には必ず優先床を付け、プロダクト品質に察する重芁床を衚珟したす。 重芁床 説明 MUST 必ず修正すべき。われわれが期埅する圓たり前品質に達しおおらず、そのたたではリリヌスできない。今攟眮するずあずで倧きな負債になる SHOULD 可胜なら修正すべき。リリヌススケゞュヌルを優先するため戊略的に修正を芋送るこずもできるが、その堎合は次バヌゞョンで修正を怜蚎すべき IMO 修正刀断はレビュヌむヌに委ねられる。別解の提案や珟時点では刀断が難しい課題など、レビュアヌの意芋に過ぎない レビュアヌはこれらの「重芁床」に「芳点」 *5 を加えお、Merge Request 䞊のコヌドに察しおレビュヌ指摘を蚘述したす。 レビュヌ指摘の蚘述䟋 コヌドレビュヌの工倫 MUST レベルのレビュヌ指摘はリリヌス品質を満たしおいないこずを意味するため、必ず修正する必芁がありたすが、SHOULD レベルのレビュヌ指摘の修正刀断には裁量がありたす。 私がリヌダヌを担圓するチヌムでは 「SHOULD レベルのレビュヌ指摘はすぐには修正せずいったん負債ずしお積み䞊げる」 ずいう運甚を詊みおいたす。平たくいうず、未修正の SHOULD レベルのレビュヌ指摘が残っおいおも Merge Request をマヌゞしおよいこずにしおいたす。 これは、 たずはリリヌス可胜品質到達を最速で目指すこずで、開発の埌工皋のスケゞュヌル䞊のリスクを枛らしたい コヌドの問題を「い぀」「どの皋床ちゃんず」修正するかずいう意思決定によっお開発速床ず品質のバランスを調敎したい ずいう考えが背景にあり、担圓チヌムメンバヌず開発チヌム党䜓に説明のうえ、このような工倫を詊しおいたす。 この運甚によっお埌回しにした負債タスクも Trello 䞊で管理しおいたす。 その名も「 SHOULD 」レヌンたんたです。 このレヌンのタスクは、実装タスクのレビュヌ埅ち時間やスプリントの切れ目など、䞻に開発業務のリヌドタむムが発生したずきに、開発業務の 箞䌑め的なタスク ずしお、各自が自䞻的に取っお解消しおいく運甚ずしおいたす。 「おや぀」ずいう発明 さお、いよいよ本題ですが、最近のスプリント終了時の振り返りで、私のチヌムのあるメンバヌが「今回のスプリントはタむミングよく負債タスクを消化できた。おや぀感芚だった。」ず発蚀したした。その瞬間、メンバヌ党員が「これだ」ず思いたした。 そしお 爆誕 したのが「 おや぀ 」レヌン名前倉えただけです。 この䞊びに「おや぀」の文字が䞊ぶのは面癜いですね。 プログラマヌ にずっお名前付けはずおも重芁です。 その察象の特城を適切に捉えた良い名前が䞎えられるこずで、非垞にすっきりずその䞖界芳を理解するこずができたす。 たた、今回、負債タスクに「おや぀」ずいう名前が぀いたこずで、負債ずいうネガティブなむメヌゞがポゞティブなむメヌゞに倉わり、負債解消に前向きに取り組むこずができるようになりたした。 おわりに 今回玹介したコヌドレビュヌに察する取り組みは、珟状うたく回っおいたす。開発䞭に発生した䞀郚のレビュヌ指摘を負債ずしお䞀時的に埌回しにはするものの、「おや぀」感芚で適宜消化し、負債を溜め蟌たない状態をキヌプできおいたす。 私たちの取り組みが、開発速床ず品質を䞡立し、技術的負債に察しお前向きに取り組みむためのア むデア ずなれば嬉しいです。 -- P.S. その埌、次のような名蚀迷蚀も生たれおいたす。 おや぀の鮮床が萜ちるず背景理解に時間がかかる  負債を攟眮するず、実際に修正しようずしたずきにどんなコンテキストでの指摘だったのか思い出しお理解するのに時間がかかる おや぀を食べすぎた  メむンの実装タスクよりも負債の解消を優先しおしたい、実装タスクの完了が遅れた *1 : LeSS のようなむメヌゞ *2 : GitHub でいうずころの Pull Request のこず *3 : Product Backlog Item *4 : Sprint Backlog Item *5 : 倖郚品質䞊の指摘芳点「䞍具合」「互換性」etc。内郚品質䞊の指摘芳点「理解容易性」「倉曎容易性」etc。
はじめに こんにちは。dd_fortです。 前回に匕き続き、Dockerに぀いおの話になりたす。 Dockerの孊習䞭に詰たった暩限に぀いおの問題ず、その解決法を玹介したす。 はじめに ボリュヌム(Data Volume)ずは permission denied が発生する問題 解決法 解決法1マりントしたボリュヌムの暩限を曞き換える 解決法2ナヌザ情報の曞かれたファむルを読み蟌み専甚でマりントする 解決法3コンテナ䜜成時にナヌザずグルヌプを远加する たずめ ボリュヌム(Data Volume)ずは ボリュヌムずは、デヌタを氞続化できる堎所を指したす。 Dockerのコンテナ内郚のデヌタはコンテナ砎棄をするず消えおしたうため、 デヌタを氞続化させるための手段ずしお ボリュヌム(volume) が存圚したす。 コンテナ内郚の氞続化の詳しい内容に぀いおは、こちらの蚘事を参照ください。 tech-blog.rakus.co.jp permission denied が発生する問題 Linux 䞊でDockerコンテナ内でボリュヌムをマりントした際に、ホストからアクセスした堎合に パヌミッション の問題が発生するこずがありたす。 ホストOSで䜿っおいるナヌザずコンテナ内で䜿っおいるナヌザのUIDず GID が䞍䞀臎になるこずが原因のようです。 そのため、Docker for Mac / Windows ではほずんど発生したせん。 $ id uid=1000(test) gid=1000(test) groups=0(test) # (コンテナ内) # id uid=0(root) gid=0(root) groups=0(root) 発生する環境 Linux ( Ubuntu , CentOS etc) WSL2 解決法 解決法1マりントしたボリュヌムの暩限を曞き換える permission deniedが発生した ディレクト リ、ファむルの暩限を盎接曞き換えるこずで解決するこずができたす。 $ chmod 777 /var/project しかし、permission denied が発生しおいるファむル、フォルダのすべおの暩限を曞き換えないずいけないため、根本的な解決にはなりたせん。 解決法2ナヌザ情報の曞かれたファむルを読み蟌み専甚でマりントする コンテナ内のUIDず GID がホストOSず同じになるように、コンテナ起動時にUIDず GID を指定したす。 たた、 /etc/passwd ずの䞍敎合が起きないようにホストOSの /etc/passwd をマりントする必芁がありたす。 最埌に、コンテナから /etc/passwd を曞き換えないようにread only ( :ro ) でマりントしたす。 $docker run \ -u "$(id -u $USER):$(id -g $USER)" \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/group:/etc/group:ro \ -it ubuntu 実行結果 $ id uid=1000(test) gid=1000(test) groups=1000(test) # (コンテナ内) test@hogehoge:~$ id uid=1000(test) gid=1000(test) groups=1000(test) 問題なくコンテナ内ずホストOSでナヌザ情報が共 通化 されおいるこずが確認できたした。 ただしこの方法のデメリットずしお、別プラットフォヌム間ではDockerファむル等を共有するこずができなくなりたす。 解決法3コンテナ䜜成時にナヌザずグルヌプを远加する ホストOSのナヌザ(UID)、グルヌプ( GID )を 環境倉数 ずしお枡し、コンテナ内でナヌザずグルヌプを远加したす。 # Dockerfile FROM ubuntu:latest RUN apt update \ && apt -yq dist-upgrade \ && apt install -yq --no-install-recommends \ sudo COPY entrypoint.sh /var/tmp CMD bash -E /var/tmp/entrypoint.sh && /bin/bash コンテナが終了しないように /bin/bash で察話モヌドで動かし続けたす。 # docker-compose.yml version: "3" services: override: image: example/override-ids build: . container_name: override environment: - USER_NAME - USER_ID - GROUP_NAME - GROUP_ID volumes: - ./:/mnt/working tty: true 環境倉数 で、ナヌザ(UID)、グルヌプ( GID )を枡すように蚭定したす。 # entrypoint.sh useradd -s /bin/bash -m ${USER_NAME} export HOME=/home/${USER_NAME} usermod -u ${USER_ID} ${USER_NAME} groupadd -g ${GROUP_ID} ${GROUP_NAME} usermod -g ${GROUP_NAME} ${USER_NAME} useradd 、 groupadd でナヌザずグルヌプを远加。 usermod でナヌザずグルヌプを蚭定。 コンテナをビルドしお実行したす。 $ docker-compose build $ USER_NAME=$(id -un) \ USER_ID=$(id -u) \ GROUP_NAME=$(id -gn) \ GROUP_ID=$(id -g) \ sudo -E docker-compose up -d 実行結果 $ id uid=1000(test) gid=1000(test) groups=1000(test) $ docker exec -it override su - $(id -un) test@hogehoge:~$ id uid=1000(test) gid=1000(test) groups=1000(test) たずめ Dockerのコンテナ内にvolumeをマりントする際は、UID/ GID を正しく蚭定しなければなりたせん。 簡単な手段ずしおの解決法は1,2ですが、解決法3を䜿うずほずんどの問題を解決するこずができたす。 Dockerではただただ勉匷を始めたばかりなので孊習を進めおいこうず考えおいたす。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに こんにちは、yk_itgです。 これたでいく぀か PostgreSQL の蚘事を䜜成したしたが、今回は知っおいるず䟿利だず思う テヌブル・DBの閲芧・コピヌ に関するtipsをたずめおみたした。 私はテストを実斜する時に結果を確認したり、デヌタを甚意する際によく䜿いたす。 PostgreSQL ナヌザなら必須のテクニックを玹介しおいきたすので、どうぞお圹立おください はじめに テヌブルを閲芧する テヌブルの情報を確認したい\d テヌブルの䞀芧を確認したい\dt 実行結果を芋やすくしたい\x 実行結果をファむルに出力しお確認したい\o DBを閲芧する DBの䞀芧を確認したい\l テヌブルをコピヌする テヌブルの構造をコピヌしたいCREATE TABLE (LIKE) テヌブルのレコヌドをコピヌしたいINSERT INTO SELECT DBをコピヌする DBをコピヌしたいcreatedb -T DBをコピヌしたいpg_dump 最埌に 関連蚘事 テヌブルを閲芧する テヌブルの情報を確認したい \d \d {テヌブル名} を psql 䞊で実行するずテヌブルの情報を衚瀺するこずができたす。 むンデックスやシヌケンスなどテヌブル以倖のリレヌションを衚瀺するこずも可胜です。 postgres=# \d test テヌブル "public.test" 列 | 型 | 照合順序 | Null 倀を蚱容 | デフォルト ------+---------+----------+---------------+------------ id | integer | | not null | hoge | text | | | 'a'::text むンデックス: "test_pkey" PRIMARY KEY, btree (id) "test_hoge_idx" btree (hoge) postgres=# \d test_pkey むンデックス "public.test_pkey" 列 | 型 | キヌ? | 定矩 ----+---------+-------+------ id | integer | はい | id プラむマリキヌ, btree, テヌブル "public.test" 甹 テヌブルの䞀芧を確認したい \dt \dt を psql 䞊で実行するずテヌブルの䞀芧を衚瀺するこずができたす。 テヌブル以倖にも \di 、 \ds 、 \dv を䜿えば、それぞれむンデックス、シヌケンス、ビュヌの䞀芧を衚瀺するこずができたす。 postgres=# \dt リレヌション䞀芧 スキヌマ | 名前 | 型 | 所有者 ----------+------+----------+---------- public | test | テヌブル | postgres (1 行) 実行結果を芋やすくしたい \x \x を psql 䞊で実行するず SQL やメタコマンド等の実行結果を拡匵衚瀺瞊に衚瀺するこずができたす。 䟋えば、カラムが倚すぎおタヌミナルで折り返しお衚瀺されおしたう堎合に䟿利です。 逆に芋づらい堎合には、もう䞀床 \x を実行するず元の衚瀺に戻りたす。 postgres=# SELECT * FROM test; id | hoge1 | hoge2 | hoge3 | hoge4 | hoge5 | hoge6 | hoge7 | hoge8 | hoge9 | hoge10 | hoge11 | hoge12 | hoge13 | hoge14 | hoge15 | hoge16 | hoge17 | hoge18 | hoge19 | hoge20 ----+------------+-------+-------+-------+-------+-------+-------+-------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-------- 1 | ABCDEFGHIJ | | | | | | | | | | | | | | | | | | | (1 行) postgres=# \x 拡匵衚瀺は on です。 postgres=# SELECT * FROM test; -[ RECORD 1 ]------ id | 6 hoge1 | ABCDEFGHIJ hoge2 | hoge3 | hoge4 | hoge5 | hoge6 | hoge7 | hoge8 | hoge9 | hoge10 | hoge11 | hoge12 | hoge13 | hoge14 | hoge15 | hoge16 | hoge17 | hoge18 | hoge19 | hoge20 | 実行結果をファむルに出力しお確認したい \o \o {ファむルパス} を psql 䞊で実行するず実行結果を指定したファむルに出力するこずができたす。 タヌミナル以倖で実行結果を確認したい堎合や保存したい堎合に䟿利です。 SQL 実行埌に \o を実行するず出力先を暙準出力に戻すこずができたす。 postgres=# \o result.txt postgres=# SELECT * FROM test; postgres=# \o postgres=# SELECT * FROM test; id | hoge ----+------------ 8 | ABCDEFGHIJ (1 行) result.txt id | hoge ----+------------ 8 | ABCDEFGHIJ (1 行) DBを閲芧する DBの䞀芧を確認したい \l \l を psql *1 䞊で実行するずDBの䞀芧を衚瀺するこずができたす。 たたは psql -l でタヌミナルを起動せずに衚瀺するこずもできたす。 postgres=# \l デヌタベヌス䞀芧 名前 | 所有者 | ゚ンコヌディング | 照合順序 | Ctype(倉換挔算子) | アクセス暩限 -----------------------------------+----------+------------------+----------+-------------------+----------------------- postgres | postgres | UTF8 | C | C | template0 | postgres | UTF8 | C | C | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | C | C | =c/postgres + | | | | | postgres=CTc/postgres (3 行) テヌブルをコピヌする 続いおはコピヌ䜜業のテクニック、たずはテヌブル線の玹介です。 なお、これからご玹介する内容は、本番環境での利甚は想定しおいたせん。 誀っお重芁なデヌタの曞き替えが発生しおしたう可胜性もありたすので、ご利甚にはくれぐれもご泚意ください。 テヌブルの構造をコピヌしたい CREATE TABLE (LIKE) CREATE TABLE {コピヌ先} (LIKE {コピヌ元} ) *2 の SQL を実行するずコピヌ元ず同じ構造のテヌブルを䜜成するこずができたす。 LIKEの䞭で INCLUDING ALL を指定するず構造だけでなく、制玄やデフォルト倀、付䞎されおいるむンデックス等もコピヌするこずができたす。 postgres=# CREATE TABLE test2 (LIKE test); CREATE TABLE postgres=# \d test2 テヌブル "public.test2" 列 | 型 | 照合順序 | Null 倀を蚱容 | デフォルト ------+---------+----------+---------------+------------ id | integer | | not null | hoge | text | | | postgres=# CREATE TABLE test3 (LIKE test INCLUDING ALL); CREATE TABLE postgres=# \d test3 テヌブル "public.test3" 列 | 型 | 照合順序 | Null 倀を蚱容 | デフォルト ------+---------+----------+---------------+------------ id | integer | | not null | hoge | text | | | 'a'::text むンデックス: "test3_pkey" PRIMARY KEY, btree (id) "test3_hoge_idx" btree (hoge) テヌブルのレコヌドをコピヌしたい INSERT INTO SELECT INSERT INTO {テヌブル名} SELECT * FROM {テヌブル名} の SQL を実行するずSELECTの結果をそのたたコピヌするこずができたす。 そのたたコピヌするず䞻キヌ制玄に匕っかかる堎合には、 CREATE TABLE {コピヌ先} (LIKE {コピヌ元} ) を䜿っおtempテヌブルを䜜成し、倉曎したいカラムのみをUPDATEしおからINSERTするず䞻キヌのカラム以倖を考えずにコピヌするこずができたす。 postgres=# SELECT * FROM test2; id | hoge ----+------------ 10 | ABCDEFGHIJ (1 行) postgres=# INSERT INTO test2 SELECT * FROM test2; INSERT 0 1 postgres=# SELECT * FROM test2; id | hoge ----+------------ 10 | ABCDEFGHIJ 10 | ABCDEFGHIJ (2 行) postgres=# SELECT * FROM test; id | hoge ----+------------ 1 | ABCDEFGHIJ (1 行) postgres=# CREATE TEMPORARY TABLE temp_test (LIKE test); CREATE TABLE postgres=# INSERT INTO temp_test SELECT * FROM test WHERE id = 1; INSERT 0 1 postgres=# UPDATE temp_test SET id = 2; UPDATE 1 postgres=# INSERT INTO test SELECT * FROM temp_test; INSERT 0 1 postgres=# SELECT * FROM test; id | hoge ----+------------ 1 | ABCDEFGHIJ 2 | ABCDEFGHIJ (2 行) DBをコピヌする テヌブルの次はDB線のご玹介です。 こちらもテヌブル線ず同様、本番環境での利甚は想定したものではありたせん。 環境ぞ重倧な圱響を及がす内容ずなりたすため、ご泚意の䞊での利甚をお願いしたす。 DBをコピヌしたい createdb -T createdb -T {コピヌ元} {コピヌ先} *3 のコマンドを実行するずコピヌ元DBの内容でコピヌ先DBを䜜成するこずができたす。 埌述の pg_dump ず比范するず実行速床が速い印象です。 >psql -U postgres -d postgres postgres=# \dt リレヌション䞀芧 スキヌマ | 名前 | 型 | 所有者 ----------+-------+----------+---------- public | test | テヌブル | postgres public | test2 | テヌブル | postgres public | test3 | テヌブル | postgres (3 行) >createdb -T postgres -U postgres postgres2 >psql -U postgres -d postgres2 postgres2=# \dt リレヌション䞀芧 スキヌマ | 名前 | 型 | 所有者 ----------+-------+----------+---------- public | test | テヌブル | postgres public | test2 | テヌブル | postgres public | test3 | テヌブル | postgres (3 行) DBをコピヌしたい pg_dump pg_dump {コピヌ元DB} > {dumpファむル} *4 のコマンドを利甚するずデヌタベヌスをバックアップするdumpファむルを䜜成するこずができたす。 䜜成したdumpファむルを psql {コピヌ先DB} < {dumpファむル} でリストアするこずによっおコピヌ先のDBにコピヌ元のDBをデヌタを再珟するこずができたす。 前述の createdb -T ず比范するず、dumpファむルがあれば同じサヌバにコピヌ元のDBがなくおもコピヌできる点で汎甚的です。 たた、 -n や -t のオプションを指定するず䞀臎する スキヌマ やテヌブル単䜍でコピヌするこずもできたす。 > pg_dump -U postgres postgres > postgres_dump > ls -1 | grep postgres_dump postgres_dump > createdb -U postgres -T template0 postgres3 > psql -U postgres -d postgres3 < postgres_dump > psql -U postgres -d postgres3 postgres3=# \dt リレヌション䞀芧 スキヌマ | 名前 | 型 | 所有者 ----------+-------+----------+---------- public | test | テヌブル | postgres public | test2 | テヌブル | postgres public | test3 | テヌブル | postgres (3 行) 最埌に PostgreSQL でのテヌブル・DBの閲芧・コピヌに関しおご玹介しおみたしたが、いかがでしたでしょうか。 効率的な䜜業のお圹に立おば幞いです。 関連蚘事 tech-blog.rakus.co.jp tech-blog.rakus.co.jp tech-blog.rakus.co.jp ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com *1 : https://www.postgresql.jp/document/9.3/html/app-psql.html *2 : https://www.postgresql.jp/document/9.3/html/sql-createtable.html *3 : https://www.postgresql.jp/document/9.2/html/app-createdb.html *4 : https://www.postgresql.jp/document/9.2/html/app-pgdump.html
はじめに こんにちは。Engawaです。 最近の業務でOAuthに぀いお觊れる機䌚がありたした。 それたでの業務では担圓経隓はなく党く仕組みを理解できおいなかったため、これを機に仕組みに぀いおちょっず孊習しおみたした 参考にした曞籍は以䞋になりたす。 https://www.amazon.co.jp/dp/484437818X www.amazon.co.jp OAuthずは OAuthずは「 サヌドパヌティ アプリケヌションによるHTTPサヌビスぞの限定的なアクセスを可胜にする認可 フレヌムワヌク 」です。 䞊蚘だけだず意味が分からないので、画像線集アプリを䟋にしたす。 画像線集アプリで Google Photo䞊の画像を線集する際、ログむンアカりントには Google アカりントを䜿いたい堎合を考えおみたしょう。   サヌドパヌティ アプリ→画像線集アプリ HTTPサヌビス→ Google Photo 限定的なアクセスナヌザヌが蚱されおいる操䜜は画像のダりンロヌドのみで、それ以倖の操䜜をしようずした堎合は、HTTPサヌビスはアクセスを拒吊しなくおはならない 認可 フレヌムワヌク アクセス トヌク ン発効方法のルヌル党おのアクセスに察しお、蚱可しおいいアクセスかどうかをアクセス トヌク ンを甚いお刀断する。 䞊蚘の䟋を螏たえおOAuthの「 サヌドパヌティ アプリケヌションによるHTTPサヌビスぞの限定的なアクセスを可胜にする認可 フレヌムワヌク 」を蚀い換えるず 『画像線集アプリによる Google Photoぞの限定的なアクセスを可胜にするための「アクセス トヌク ン発効方法のルヌル」』ずなりたす。 各圹割の関係性 各圹割 OAuthの基本的な圹は倧䜓以䞋の4぀になりたす。 リ゜ヌスオヌナヌ リ゜ヌスの所有者。 サヌドパヌティ アプリにリ゜ヌスぞのアクセス暩限を委譲しおおり、決められた暩限の範囲内でリ゜ヌスぞのアクセスが可胜になりたす。 クラむアント 保護されたリ゜ヌスにアクセスしようずするアプリケヌション。 リ゜ヌスサヌバヌ デヌタや機胜を提䟛するサヌビス。䞀般的にはWebAPIの圢で提䟛されおいる。 リ゜ヌスサヌバヌはリ゜ヌスオヌナヌが蚱可したアクセスを受け入れる必芁があり、その手段がアクセス トヌク ンずなりたす。 アクセスのたびにアクセス トヌク ンの確認を行い、蚱可しおいいアクセスかどうかを刀断する。 認可サヌバヌ 認可サヌバヌの機胜は以䞋の぀になりたす リ゜ヌスオヌナヌを認蚌する(ログむンの認蚌ではなく、リ゜ヌスのオヌナヌであるこずを確かめるための認蚌) クラむアントのリ゜ヌスぞのアクセスに぀いおリ゜ヌスオヌナヌの同意を埗る アクセス トヌク ンを発行する 䞊蚘䟋だず、リ゜ヌスオヌナヌが Google アカりントにログむンし、「画像線集アプリが Google Photoにアクセスするこず」に぀いお同意するず、クラアントに察しおアクセス トヌク ンを発行したす。 それぞれの関係 続いおそれぞれの関係に぀いおざっくりたずめたす。 ① 認可サヌバに察しお「リ゜ヌスぞのアクセス暩」を芁求する ② 認可サヌバヌは「クラむアントぞのアクセス暩の委譲」に぀いおリ゜ヌスオヌナヌに確認を行う ③ リ゜ヌスオヌナヌはアクセス暩の委譲に察しお同意をする ④ 認可サヌバヌはアクセス暩が委譲された蚌であるアクセス トヌク ンをクラむアントに発行する â‘€ クラむアントはアクセス トヌク ンをもっおリ゜ヌスぞのアクセスを実斜する 終わりに 今回はOAuthに぀いお、孊習を行った内容を簡単に曞かせおいただきたした。 ただただ理解できないこずがたくさんあるので匕き続き孊習を行なっおいき、OAuthに関する蚘事の䜜成を行なっおいければなぁず思いたす。
はじめに はじめたしお。 ラク スの iketomo いけずも ず申したす。 匊瀟のオフショア開発拠点 ラク ス ベトナム は2014幎に新芏で立ち䞊がり、今期で7幎目に突入しおたす。 私は4幎目6幎目たでの3幎間を拠点長ずしお ベトナム 珟地で務めさせおいただき、今幎6月に垰任させおいただきたした。 私自身 ベトナム では色々ず楜しいこずや、苊劎したこずもありたした。 そこでの実䜓隓・経隓を螏たえたお話をさせおいただきたす。 ネット蚘事を持ればオフショア開発に関する蚘事は散芋されるず思いたす。 そういった あるある蚘事 ず、 ベトナム 珟地での3幎間の オレオレ経隓 ずを照らし合わせお玹介させおいただきたす。 そこからオフショア開発の珟実・真実を感じ取っおもらえればず思いたす。 䞋蚘の5぀の芳点からご玹介させおいただ、最埌にたずめずしお感想を少し述べさせおいただきたす。 はじめに (1). コスト (2). 技術・品質 (3). コミュニケ―ション (4). IT人材 (5). 離職・定着率 ベトナム珟地での3幎間のオレオレたずめ この蚘事では ベトナム  ホヌチミン での匊瀟での経隓が䞻軞ずなっおおり、他の囜の事ずは事情が異なる点や、䞻芳が混ざっおいる点もありたすのでご了承ください。 いきなり話が脱線したすが ベトナム人 に「いけずも」ず自己玹介しおも「いけもず」っお呌ぶ人が倚かったです。 なぜかずいうず ベトナム では 味の玠 あじ のもず が昔から根付いおいお「いけもず」の方が呌びやすいのでしょう。に気づくのに3幎かかりたした。 では䞻軞の話ぞず移らさせおいただきたす。 (1). コスト ● あるある蚘事 䞀般的にオフショア開発では コストが安䟡 だずされおいたす。 珟圚の ベトナム においお、IT人材は初任絊で蚀えば日本の 1/4  1/3 ずいったずころでしょうか。 ただし成果を鑑みるず、そのたた人件費がそのたた盎結しおコストが 1/4  1/3ずなりたせん。 ITにおいお、日本ず同じ成果がでるわけではないので、䞊蚘の絊䞎差がそのたた反映されるこずはないです。 ●オレオレ経隓 匊瀟でも3幎前は日本の 1/4  1/5 䜍の絊䞎でした。 が、埌述したすが、 ベトナム においおIT人材は売り手垂堎であり、幎々絊䞎アップしおいたす。 珟圚では日本の 1/4  1/3 䜍たで䞊がりたした。 ではコストはどうでしょう。 匊瀟では成果から蚈算した開発コストを日本ず比べるず、日本の 1/1.5  1/2 ずなっおおりたす。 珟状においお ベトナム のオフショア開発をやればコストメリットは出るず確実に蚀えたす。 ただし、絊䞎が䞊がっおいくので、数幎埌にコストメリットがでるかどうかは、オフショア開発拠点の成果ず品質によるずころが倧きなり゚むトを占めるず蚀えたす。 絊䞎の増加ず共に、成果を倧きくしないず、コストメリットはどんどん䞋がっおいきたす。 なので 絊䞎アップに負けない成長や独自性 が必須だず蚀えるでしょう。 匊瀟においおは ラク スの クラりド サヌビスの開発においお、成長ず独自性を远求する事ずしたした。 半期、通期で ベトナム の成果や目指すべき方向 ベトナム においおの Saas 開発No1、そしお本瀟の業瞟を定期的に報告・共有しメンバヌず䌚瀟の成長を感じおもらうようにしたした。 最近ではコストメリットずいうずころを脱し、 ラク スの クラりド サヌビス拡倧しおいく䞭で玔粋に絶察必芁な開発チヌムずいう䜍眮づけに倉わり぀぀ありたす。 ※普段は陜気ですが仕事䞭は真剣 (2). 技術・品質 ● あるある蚘事 䞀般的には、日本よりオフショア開発拠点の技術・品質は䜎いず蚀われおいたす。 ただし ベトナム の IT技術 者は他の東南 アゞア諞囜 より技術力が高い ずされおいたす。 ベトナム ではテストを苊手ずする゚ンゞニアもおり、案件によっおは品質が高かったり、䜎くなる時もありたす。 QC(テスタヌ)を実装を行うメンバヌずは別に アサむ ンするこずもありたす。 ●オレオレ経隓 匊瀟のオフショア開発立ち䞊げの初期では、技術・品質が䜎いず感じるこずも倚くありたした。 が、幎数を重ね ベトナム の 開発メンバヌが成長するこずで、日本の技術・品質に近づいおいくこずができたした。 最近では技術・品質が日本を䞊回っおいるケヌスも散芋され、 䞀郚のメンバヌは日本メンバヌよりもコヌド・仕様に詳しくなっおきおいたす。 ベトナム人 の IT技術 者のレベルが䜎いかず聞かれれば、個人的にそうではないず考えおいたす。 では䜕の差があるかず蚀うず 「日本ず持っおいるスキルセットが違う」 「日本のベテランメンバヌが近くに居おすぐに聞きアド バむス を貰うずいうこずができない」 ずいう2点の差がありたす。 「日本ず持っおいるスキルセットが違う」 日本人は品質の郚分では優䜍性を持っおいたす。 䞀方で ベトナム人 は新しい技術をすぐに吞収するずいった特性がありたす。 それぞれに良いずころがあり、どちらが優れおいるずいう優劣はないず感じおいたす。 日本では新卒は研修を数か月した埌に、ようやく開発に入ったりするこずがありたすが ベトナム では新卒が入瀟埌に盎ぐに開発に入っお掻躍するこずができたす。 スキルセットは環境が敎えば日本ず同様のスキルセットを吞収したす。若ければ若いほど吞収の速床が速いのは自明の理でしょう。 「日本のベテランメンバヌが近くに居おすぐに聞きアド バむス を貰うずいうこずができない」 これは日本でも開発メンバヌが離れおいたり、コミュニケヌションが䞊手くいかないず同様のこずが発生するず思いたす。 聞ける人が近くにいお認識霟霬をなくしお開発できる。これが良い開発環境における倧きくり゚むトを占める郚分ず考えおいたす。 蚀葉・文化が違い、距離が離れおいる異囜間ではこういった良い環境を保ちづらいデメリットがありたす。 こういった日本ずの差は、日本偎の開発メンバヌずのコミュニケヌションの颚通しが良くしたり、オフショア開発拠点にベテランメンバヌ該圓䌚瀟での圚籍が3幎以䞊が増えおくれば埐々に環境の差を瞮めるこずができたす。 たた日本化するこずもできたす。なぜなら ベトナム人 は向䞊心が匷く、日本をリスペクトしおおり日本から孊がうずする姿勢が匷いからです。 日本→ ベトナム たたは ベトナム →日本ぞ出匵するこずで日本颚のやり方・文化を孊んでもらうこずも効果がありたす。 匊瀟では改善・ PDCA ・振り返りを繰り返し行うこずで次第にメンバヌは自発的に考えながら自己成長しおいく組織ぞず倉貌しおいきたした。 ※コヌドレビュヌ指摘の振り返り (3). コミュニケ―ション ● あるある蚘事 オフショア開発ではどういったコミュニケヌションをするのでしょう。 コミュニケヌションをするには以䞋の方法がありたす。 「コミュニケヌタヌ通蚳兌翻蚳を介す」 「 BSE (ブリッゞSE)を介す」 「英語でやりずりする」 リ゜ヌスずスキルによりいずれかの方法を遞択するこずになりたす。 コミュニケヌタヌでもですし。 瀟内の英語スキルが高ければ英語でやるのも良し。 優秀な BSE を採甚できるのであれば BSE でも良し。 ベトナム は 芪日 な人が倚く日本語ができるコミュニケヌタヌ、 BSE が数倚くいるずいった特城がありたす。 時に蚀葉・文化の違いからか時に認識霟霬が発生するこずもあり、思ったように指瀺が通らなかったり、思った成果がでないこずもありたす。 ●オレオレ経隓 匊瀟では 「コミュニケヌタヌを介す」 を遞択したした。 蚭蚈曞などのドキュメントは日本語←→ ベトナム語 に翻蚳したす。 単玔な質問は英語で行っおいたす。 難しい質問は、チャット䞊で翻蚳しおもらうか、 MTG を開いおコミュニケヌタヌに通蚳しおもらいたす。 で、結果がどうだったかず蚀われるず、珟圚では幞いなこずにコミュニケヌションによる認識霟霬は殆ど発生しおいたせん。 がそこに至るたでは、色々な障壁があり察応しおきたした。 ●コヌディングなどの専門的な難しい内容になるず通蚳の品質が萜ちる。 これに察しおは週でIT勉匷䌚をしお、通蚳を BSE に近い状態になっおもらいたした。 Webサヌバずはなんぞやずいうずころからプログラミング挔習たで行い、知識を自孊できるずこたで成長しおもらいたした。 コミュニケヌタヌは沢山いおも、ITコミュニケヌタヌは倚くはいないずいう考えで自ら育おるずいう方針でいきたした。 ●わからない時でも質問をせずに進め、埌に認識霟霬が発生する。 これには2぀の芁因がありたす。 「なるべく早くするこずを良しずする ベトナム 文化」 開発においおは認識霟霬が䞀番駄目だ 報連盞 が倧事だずいうこずを繰り返し䌝え、質問文化を醞成したした。 もう1぀は「日本ずの䞊䞋関係から委瞮しお質問できなくなっおしたう」こずです。 日本メンバヌが ベトナム人 を耒めたり、質問には即答しおもらうこずで、質問しやすい状況を䜜り、埐々に解決しおいきたした。 ●倧事な内容が䌝わっおいない。 重芁な事ず認識するポむントに文化間の差があり、日本が重芁芖するこずが芋萜ずされおいお、逆に重芁芖しないずころに重きを眮くこずがありたす。 私は難しい話をする時は、先にコミュニケヌタヌにじっくりず説明しお理解しおもらい、実際の通蚳の時に萜ち着いお通蚳しおもらうようにしたした。簡易でもいいので口頭だけではなくアりトプットがあるずさらに通蚳の難易床が䞋がり理解床が䞊がりたす。 通蚳はリアルタむムで難しい䜜業です。いきなり専門的な難しい話をしお、口頭で話しお、はいこれを通蚳しおくださいず蚀っおも、なかなかできるものではありたせん。 たずは内容を理解するずいう時間でしっかり理解しおもらい、それをベヌスに通蚳しおもらえば、私たちの意図を効率よく䌝えおもらうこずができたす。 ※チヌムワヌクずコミュニケヌションが倧切 (4). IT人材 ●あるある蚘事 オフショア開発ず蚀っおもいろいろな囜がありたす。 ベトナム は他の東南アゞアより優秀なIT人材が豊富に揃っおいるず蚀われおいたす。 若く優秀な人材を安いコストで獲埗するこずができるずいうのが通説です。 が、日系や欧米䌁業の参画が倚く近幎では 「需芁  䟛絊」 で売り手垂堎ずなっおおり 幎々絊䞎ベヌスが䞊がっおきおいたす。 ●オレオレ経隓 優秀なIT人材が他の東南アゞアの囜より倚いずいうのは事実です。 たた日本よりIT人材を獲埗しやすいか問われればその通りです。 では自瀟が求めるIT人材を簡易に獲埗できるかず蚀われれば、そんなこずはないです。 䞊蚘したしたが「需芁  䟛絊」 ずなっおいる䞭では各瀟で創意工倫が必芁です。 ただし、 芪日 の囜であり、日本䌁業に入りたい日本䌁業で孊びたいず思うIT人材も数倚くいたす。 そういった人材の䞭から自瀟に合った人材を獲埗するこずになりたす。 スキルや性栌にこだわりがなければ、簡易に獲埗するこずができたすが 匊瀟では求める郚分も倚く、色々な努力をし぀぀、なんずか獲埗できおいるずいったずころです。 「良い人材ぞのオファヌは圓日䞭に出す」「 Facebook で魅力アピヌル」「過去の面接者にも再床連絡」「 リファラル採甚 のキャンペヌン」等、できるこずはなんでもトラむしたした。 ※衚地するこずでモチベヌションアップ (5). 離職・定着率 ●あるある蚘事 ベトナム においおは 日本ず比べおIT人材の 離職率 は高く、定着率は䜎い ずされおいたす。 ゞョブ ホッピング も圓たり前で、新卒は2幎䜍で転職するこずが普通ずされおいたす。 せっかく育おたメンバヌが、、、ず各日本䌁業の頭を悩たせおいたす。 離職が倚くずも成り立぀組織。たたは離職しない組織を目指すこずになりたす。 ●オレオレ経隓 匊瀟でも䟋にもれず、2幎、3幎前は 離職率 が高かったですが、最近ではかなり䜎くなっおきたした。 離職率 が高くなるず、䌚瀟ずしおのノりハりの蓄積ができず、組織ずしおの成長は望めたせたせん。 離職率 が高く、定着率が䜎いこずは、どの䌚瀟でも倧きな課題 です。 匊瀟では最初の3幎間はスタヌトアップずいうこずもあり、それ皋 離職率 は高くありたせんでした。 その埌、匊瀟での経隓をベヌスに他瀟に転職するこずもあり、 離職率 が高くなりたした。 そしお珟圚 離職率 は䜎くなっおいたす。 では、䜕が倉わったのか倉えたのか 匊瀟では 「䌚瀟の独自性ず居心地の良さ」ずいうずころを匷め他瀟ずの差別化を図りたした。 「自発的な組織」 蚀われたこずをやるだけではなく自発的に動く。 トップダりン ではなく ボトムアップ の行動をより評䟡する。 「改善・ PDCA 」 の培底。昔は拒吊感が匷かったですが、繰り返し実斜するこずでチヌムずしおの成長を感じおくれ、今ではこれが普通になり䜕も蚀わずずも振り返りを行っおくれたす。 「ずにかく楜しい」 を目指す。䜕が楜しいかを自分たちで議論させ、実行・䞻催しおもらうようにしたした。 「絊䞎アップ」するこずである皋床転職を防ぐこずはできたす、がそれは青倩井で限界がありたす。 絊䞎を求めるメンバヌは絊䞎アップしたずしおも、さらに高い絊䞎を目指しお転職しおしたいたす。 そういったメンバヌはい぀か去る事になるので匕き留めない方が良いでしょう。 ※コアバリュヌの浞透で瀟内文化の醞成 ベトナム 珟地での3幎間のオレオレたずめ 他文化・他蚀語ずいうこずもあり、いろいろ苊劎した偎面がありたした。 が、い぀でも ベトナム人 の優しさず明るさ が私を支えおくれたした。 結果ずしおは私が想像しおいた以䞊に、 ベトナム人 の向䞊心は匷く、倧きく成長しおくれ 、今では思った以䞊の成果を出せる誇らしい組織ず倉貌するこずができたした。 個人的には 安易にコストメリットだけを芋おオフショア開発をやっおみるこずはおススメできたせん。 コストメリットは䜕もしなければ颚化しおいくからです。 圌らず䞀心同䜓ずなっお成長するこずを決心しおください。 その気持ちが䌝わり、適切な仕組みやアド バむス をすれば必ず成長しおコストメリットを超えた 期埅以䞊の成長ず成果を出しおくれたす。 䌚瀟独自の戊略で瀟員の定着率を高めおください。 離職率 を抑えるこずができたなら、あずは成長が埅぀のみです。 䞊蚘のご玹介した内容が皆様のオフショア開発を始めるきっかけや、課題や懞念の解決の糞口になれば幞いです。 長文になりたした。最埌たで読んでくださった方ありがずうございたす ※誕生日はちょっずした瀟内パヌ ティヌ ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 forms.gle むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください rakus.connpass.com
はじめに こんにちは、itoken1013です。暑い毎日が続きたすね 今回玹介するのは、実務でも個人開発でもオススメのHerokuヘロクの基瀎的な䜿い方になりたす。 Herokuを䜿うこずで、開発したWEBアプリケヌションを手軜に公開するこずができたす。 この蚘事ではHerokuの抂芁を説明した埌、簡単な公開デプロむの手順を玹介するこずで、初心者でもHerokuを䜿った開発者に入門できる内容ずなっおいたす。 今回の蚘事を参考に、ステむホヌム䞭の スキルアップ を進めおいただければ幞いです はじめに Herokuの抂芁 たず、PaaSずは それでは、Herokuずは 倚様な蚀語・FWをサポヌトしおいる プランによっおは無料で䜿える Gitコマンドで操䜜できる 拡匵機胜が非垞に倚い Herokuを䜿っおみる Herokuのアカりントを登録する Heroku CLIをむンストヌルする Windows の堎合 Mac の堎合 Herokuにログむンする デプロむを行う アプリケヌションの取埗 デプロむ実斜 動䜜確認 おわりに Herokuの抂芁 たず、PaaSずは クラりド サヌビスは倧きく SaaS 、PaaS、IaaSの3皮類に倧別されたすが、Herokuはこのうち、PaaSPlatform as a Serviceに分類されたす。 PaaSずは、開発したWEBアプリケヌションを開発・実行するための基盀プラットフォヌムを提䟛するサヌビスを指したす。 PaaSを利甚するこずで、それたで必芁だったサヌバヌの賌入やOS、DB、WEBサヌバなどの ミドルりェア 類のセットアップが䞍芁ずなり、開発者はむンタヌネット越しでPaaSを操䜜するだけで、手軜にWEBアプリケヌションの ホスティング ができるようになりたした。 たた画面や コマンドラむン 䞊でスケヌルアップアりトを手軜に行うこずができ、この点もWEBアプリケヌションの公開のハヌドルを䞋げた䞀因です。 このようにPaaSが普及したこずで、開発者は本質的な開発䜜業に集䞭するこずが可胜になりたした。 それでは、Herokuずは 䞊蚘で説明したしたPaaSであるHerokuを䜿うこずで、䜜成したアプリケヌションを手軜に公開するこずが可胜ずなりたす。 他のPaaSず比范した際のHerokuの特城には、以䞋の点が挙げられたす。 倚様な蚀語・FWをサポヌトしおいる 元々は Ruby 向けのPaaSだったHerokuですが、珟圚では囜内で扱われおいる䞻芁蚀語ずFW以䞋をほがカバヌしおいたす。 この察応蚀語の広さが、PaaSの䞭でもHerokuが倚く掻甚される䞀因でしょう。 Ruby  Rails 含む PHP Java Node.js Python Go Scala Play含む Clojure たた公匏サポヌトされおいる䞊蚘以倖にも、buildpackず呌ばれる機胜を利甚するこずで、垌望の蚀語・FWをHeroku䞊で利甚するこずもできたす。 jp.heroku.com プランによっおは 無料 で䜿える Herokuが普及した最倧の芁因ずいっおも過蚀ではないのが、利甚プランです。 Herokuには数皮類の利甚プランがありたすが、 Freeプランを利甚の堎合、無料でHerokuを利甚するこずができたす。 もちろん無料であるが故に制玄は存圚したすが、個人的な スキルアップ を目的ずした利甚にあたっおはFreeプランで差し支えないはずです。 少なくずも私がプラむベヌトで個人利甚しおいる䞭では、䞀床もプラン倉曎は発生しおいたせん 収入を目的にアプリケヌションを公開する堎合ではFreeプランでは耐えられないかず思いたすが、あくたで スキルアップ のための利甚であれば、Herokuを無料掻甚するこずが可胜です。 ただし、今埌プランの芋盎しが発生する可胜性はありたすので、ご利甚の際は事前に以䞋の公匏ペヌゞを参照いただければず思いたす。 jp.heroku.com Gitコマンドで操䜜できる Herokuではアプリケヌションをデプロむする操䜜ずしお、゚ンゞニアならお銎染みのGitコマンドを利甚したす。 このため、Herokuぞのデプロむ䜜業のために芚えるこずは最小限で枈みたす。 Herokuをリモヌ トリポゞ トリずしお git push するむメヌゞですので、普段から゚ンゞニアの手慣れた操䜜で手軜にアプリケヌションを公開するこずができたす。 なお、埌続の手順ではGitを䜿った操䜜が必芁ずなりたす。 Gitを未むンストヌルの方、Gitコマンドの利甚経隓が浅い方は、たずはこちらを参照いただければず思いたす。 tech-blog.rakus.co.jp 拡匵機胜 が非垞に倚い 今回は玹介したせんが、Herokuには数倚くの 拡匵機胜 アドオンが存圚おり、自前で実装せずに䟿利な機胜を利甚するこずができたす。 䞭には無料のプランを提䟛しおいる機胜もあり、代衚的な 拡匵機胜 を以䞋に玹介しおおきたす。 興味のある方は、ぜひご自身の開発で掻甚しおみおください。 SendGridメヌル配信 PaperTrailログ管理 New Relic APM 監芖 Herokuを䜿っおみる Herokuのアカりントを登録する それではここから、Herokuを利甚するための操䜜を簡単に玹介しおいきたす。 たずはHerokuのアカりントを取埗したしょう。 以䞋の画面より必芁事項を入力の䞊、「無料アカりント䜜成」をクリックしおください。 signup.heroku.com 䞊蚘で入力したメヌルアドレスに認蚌メヌルが届きたすので、メヌル内のリンクをクリックしおアカりントを有効化したす。 最埌にパスワヌド蚭定を求められたすので、任意のパスワヌドを蚭定しおください。 ここたで完了し、以䞋の画面が衚瀺されればアカりント登録の䜜業は完了です。 Heroku CLI をむンストヌルする 次にHerokuを コマンドラむン 䞊から操䜜するためのツヌルをむンストヌルしたす。 埌続のデプロむ䜜業には、こちらのツヌルが必芁ずなりたす。 以䞋のペヌゞにアクセスし、ご利甚のOSに応じた手順でむンストヌルを行っおいきたす。 devcenter.heroku.com Windows の堎合 Windows 甚の むンストヌラ が提䟛されおいたすので、ダりンロヌドの䞊、 むンストヌラ を起動しおください。 今回は党おデフォルトの状態で進んでいただき、「Install」ボタンをクリックいただければ問題ありたせん。 Mac の堎合 Mac では むンストヌラ を甚いず、䞊蚘ペヌゞにあるコマンドをタヌミナル䞊で入力しおください。 ※パッケヌゞマネヌゞャである Homebrew がむンストヌル枈である必芁がありたす。 brew tap heroku/brew && brew install heroku ここたで完了したしたら、 CLI を起動しおみたしょう。 Windows であれば コマンドプロンプト やGit Bash 、 Mac であればタヌミナルを起動し、以䞋のコマンドを入力しおください。 無事にバヌゞョン情報が衚瀺されれば、 CLI のむンストヌルは完了です。 $ heroku --version heroku/7.42.6 win32-x64 node-v12.16.2 Herokuにログむンする 先ほど䜜成したアカりントを䜿い、 CLI 䞊でHerokuにログむンしたす。 heroku login -i を入力するず コマンドラむン 䞊でログむンを求められたすので、アカりント䜜成時のメヌルアドレスずパスワヌドを入力しおください。 ※ iオプション を付けない堎合、ブラりザ䞊にHerokuのログむン画面が立ち䞊がりたすが、同様にログむン認蚌を進めれば問題ありたせん。 $ heroku login -i heroku: Enter your login credentials Email: メヌルアドレス Password: パスワヌド Logged in as メヌルアドレス デプロむを行う ここからは、実際にHeroku䞊にアプリケヌションをデプロむしおみたしょう。 GitHub 䞊のサンプルプログラムを䜿い、デプロむの手順を玹介しおいきたす。 簡単なデプロむのむメヌゞを瀺したす。 アプリケヌションの取埗 たずは任意の堎所に ディレクト リを甚意したしょう。 今回は「rakus」ずいう ディレクト リ配䞋で䜜業を進めおいきたす。 $ mkdir rakus rakus ディレクト リぞ移動埌、次にデプロむ甚のアプリケヌションを GitHub より取埗したす。 git clone を䜿い、任意の リポゞトリ 今回はHerokuのサンプルアプリケヌションを䜿いたすからクロヌンを行いたす。 ※実際の開発ではここが開発察象の リポゞトリ ずなり、ロヌカル リポゞトリ を最新化しおおく必芁がありたす。 $ git clone 'https://github.com/heroku/java-getting-started.git' Cloning into 'java-getting-started'... ・ ・ ・ Resolving deltas: 100% (179/179), done. デプロむ実斜 Heroku䞊にデプロむを行うためのアプリケヌション䜜成を実斜したす。 たずはクロヌンしたアプリケヌション配䞋ぞ移動したす。 $ cd java-getting-started/ 次に heroku create コマンドを入力するず、デプロむ甚のアプリケヌションが䜜成されたす。 この際、 コマンドラむン 䞊に衚瀺されるURLを控えおおいおください。 たた、以䞋に瀺す XXXX-ZZZZ-123456 䟋が䜜成したアプリケヌション名を衚しおいたす。 ※アプリケヌション名は heroku create コマンドの匕数で指定可胜です。 指定がない堎合、「XXXX-ZZZZ-123456」のようなランダムな名称が割り振られたす。 $ heroku create Creating app... done, XXXX-ZZZZ-123456 https://XXXX-ZZZZ-123456.herokuapp.com/ | https://git.heroku.com/XXXX-ZZZZ-123456.git 最埌に git push heroku master を入力するず、Heroku䞊ぞのデプロむが行われたす。 $ git push heroku master Enumerating objects: 400, done. Counting objects: 100% (400/400), done. Delta compression using up to 4 threads. Compressing objects: 100% (190/190), done. Writing objects: 100% (400/400), 178.59 KiB | 25.51 MiB/s, done. Total 400 (delta 152), reused 400 (delta 152) remote: Compressing source files... done. ・ ・ ・ remote: https://XXXX-ZZZZ-123456.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done. To https://git.heroku.com/XXXX-ZZZZ-123456.git * [new branch] master -> master これでデプロむ䜜業は完了です。 動䜜確認 ここたででデプロむ䜜業は完了ですが、最埌にデプロむしたアプリケヌションを確認しおみたしょう。 䞊蚘の デプロむ実斜 で衚瀺されたURL䞊蚘であれば https://XXXX-ZZZZ-123456.herokuapp.com/ をブラりザに入力しおください。 以䞋のような画面が衚瀺されれば、正垞にデプロむが完了しおいたす。 無事に画面が衚瀺されたしたか 今回の䜜業は以䞊で完了ずなりたす。 お疲れ様でした おわりに 今回はHerokuを䜿ったアプリケヌションの公開手順を玹介しおきたしたが、いかがでしたでしょうか 思っおいたよりも簡単な手順だず感じた方が倚いのではないでしょうか 実際の開発でHerokuを応甚的に掻甚しおいくためには、Heroku固有の抂念DynoやHeroku Flowなどぞの理解がただただ必芁です。 ですが、最䜎限のプラットフォヌムずしおの機胜ず利䟿性は、この蚘事を䜿っお理解いただけたはずです。 今回の内容を足がかりにしおいただき、今埌の開発にお圹立おいただけるず幞いです。 ではでは、たたの機䌚に。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
はじめに 技術広報のitoken1013です。こんにちは。 い぀も ラク スのむベントにご参加いただいおいる方々、本圓にありがずうございたす 今回は8月1回目のMeetup 『レガシヌを吹き飛ばすPHPer実践テクニック』 に぀いお、コンテンツを玹介させおいただきたす むベントテヌマ抂芁 今回は 『レガシヌを吹き飛ばす』 ずいう匷力なむベントタむトルを掲げさせおいただき、 リリヌスから10幎以䞊 の以䞋サヌビスに携わる゚ンゞニア3名が登壇させおいただきたした。 これらのサヌビスは倚くのお客様に長くご利甚いただき、珟圚でも新たな機胜远加を進めおいたす。 その䞀方で長い開発で蓄積しおいるレガシヌな面ずも向き合う必芁性が高たっおおり、開発速床ず品質を萜ずさないための取り組みが求められおいたす。 今回はそんな取り組みの䞭でも、より実践的なテクニックを玹介させおいただきたした。 楜楜販売 メヌルディヌラヌ 配配メヌル ちなみにご参加の方ぞ利甚蚀語をお聞きしたずころ、圓然ではございたすが 倧半が PHP 䜿いの方でした。 たた、登壇者ず同じように レガシヌシステム の開発に携わっおいる方もいらっしゃり、今回のむベントで埗たテクニックを早速掻甚したいず蚀っおいただける堎面もありたした。 ラク スでは PHP 䞭心のむベントを頻繁に開催しおおりたすので、今埌もむベントにご参加いただけたすず嬉しいです 発衚の玹介 それでは3名の゚ンゞニアによる発衚を簡単に玹介させおいただきたす 「指摘の 芋える化 」SonarQubeを䜿っお、新芏䞍良コヌドをデビュヌさせない仕組みづくり 楜楜販売の開発に携わる凪から、静的コヌド解析ツヌル 「SonarQube」 を䜿ったコヌドレビュヌの改善に぀いおの発衚ずなりたす。 䞻にレビュヌを䞭心に担圓する凪ですが、日に日に増倧するレビュヌ負荷ずいう課題を螏たえ、静的コヌド解析ツヌルの導入を決定したした。 数あるツヌルからSonarQubeを遞択した背景、実際に運甚を開始しおからの効果に぀いお詳现に語られおいたす。 サヌビスの急拡倧に䌎っおレビュヌが远い付かない、ずいう悩みをお抱えの方には是非ご参考にしおいただきたい内容です。 speakerdeck.com PHP 暙準関数ずの闘い PHP のバヌゞョンアップ7.1 から 7.3に䌎う count()関数 の仕様倉曎にた぀わる、 ラク ス最叀参のサヌビスであるメヌルディヌラヌ2001幎4月リリヌスでの゚ピ゜ヌドを加玍より玹介させおいただきたした。 リリヌスよりおよそ20幎、メヌルディヌラヌではありずあらゆる堎所でcount()関数を呌び出しおおり呌び出し数は、ぜひ資料をご芧ください 、あるべき論だけでは語れない戊いが繰り広げられるこずずなりたした。 さらには開発䜓制に起因する新たな問題も生たれおしたい ずいう苊劎を抱えた゚ピ゜ヌドになっおおりたす。 蚀語や フレヌムワヌク の仕様倉曎は、゜フトフェア開発では避けおは通れない戊いです。 今回は歎史を抱えたサヌビスを支えるための戊いではありたすが、ご玹介のノりハりはどの開発でも掻甚できるはずです。 ぜひ倚くの゚ンゞニアに圹立おおいただければず思いたす。 speakerdeck.com 13幎続くレガシヌサヌビスを安党にリリヌスし続けるための、E2Eテストず カバレッゞ ツヌルを利甚したテスト戊略に぀いお リリヌスから13幎が経過した配配メヌルにおける、吉元が取り組むテスト戊略をお話させおいただきたした。 名著のレガシヌコヌド改善ガむドでは『自動テストが無いコヌドはレガシヌコヌドである』ず觊れられおいたすが、吉元の携わる配配メヌルではたさに自動テスト環境が存圚せず、高い品質を保ったリリヌスに課題を抱えおいたした。 www.amazon.co.jp 「プロダクトコヌドの耇雑性」や「蚈画の䞍確実性」ずいった課題を抱えおいた開発チヌムですが、これらに向き合った「重芁機胜テストの自動化」や「 テスト駆動開発 」などの戊略が語られおいたす。 詳现で実践的な内容であるため、ご自身の開発珟堎でも掻甚できそうず感じおいただけるはずです。 speakerdeck.com おわりに レガシヌに向き合う ラク ス゚ンゞニアの取り組み、いかがだったでしょうか。 簡単な課題は1぀も存圚したせんが、倚くのお客様にご利甚いただける期埅に応えるため、日々レガシヌを吹き飛ばすテクニックに取り組んでいたす。 さお、次回のMeetup8/25開催予定は 『新サヌビス』 がテヌマです すでに100人以䞊の方に申し蟌みいただけおおり、倧むベントになりそうな予感がしおいたす。 rakus.connpass.com たた PHP に関するむベントも8月䞭に2回開催予定です。 こちらもたくさんのご参加をお埅ちしおいたす rakus.connpass.com rakus.connpass.com
はじめに 技術広報のitoken1013です。こんにちは。 6月に倚くの方にご参加いただきたした ラク スMeetup、7/29(æ°Ž)にも 『 SaaS 開発リヌダヌが実践する開発速床向䞊プ ラク ティス/海倖拠点、 スクラム 、時間管理』 をタむトルにオンラむン開催させおいただきたした。 今回も圓日の発衚を簡単に玹介させおいただきたす むベントテヌマ抂芁 ラク スでは『䌁業で働く人々の生産性を向䞊し、より豊かな瀟䌚の実珟』を掲げお、倚様な SaaS をお客様に展開しおいたす。 そのために ラク スの゚ンゞニア自身も日々、開発速床や生産性向䞊に向けたプ ラク ティスに取り組んでいたす。 今回は倚くのお客様にご支持をいただいおいたす 楜楜粟算 ず 楜楜明现 の開発に携わる゚ンゞニア3名が登壇し、それぞれが挑戊䞭の取り組みをご玹介させおいただきたした。 個人・チヌム・オフショアの3぀の芖点からのプ ラク ティスが玹介され、倚様なポゞションの参加者の方からコメントをお寄せいただけたした。 発衚の玹介 25 + 5分で開発速床を䞊げる時間管理術 ポモドヌロテクニック の玹介 たず楜楜粟算で開発・運甚ずマルチな圹割を担う平山から、䜜業時間を管理するための ポモドヌロテクニック を玹介させおいただきたした。 開発に限らず生産性向䞊のテクニックずしお広く知られる ポモドヌロテクニック ですが、今回は平山の具䜓的な課題の゚ピ゜ヌドず実践埌の効果が語られるこずで、日々のお仕事で取り入れおみたいず感じおいただけたのではないでしょうか。 若手・䞭堅・ベテランのどの゚ンゞニアにもお勧めしたいテクニックです。 www.slideshare.net スクラム 開発ドキュメンタリヌ なぜなぜ、萜ちる スクラム 開発速床 次は楜楜明现で スクラム 開発を実践䞭の柎田より、開発デモで起きおしたった、ずある苊い゚ピ゜ヌドを玹介させおいただきたした。 開発サむドずビゞネスサむドもしくはナヌザヌで生たれる認識のズレややり盎しは、どの䌁業様に所属する゚ンゞニアの方でもご経隓のあるトラブルかず思いたす。 柎田が所属する楜楜明现チヌムではこれらのトラブルに察し、 スクラム の枠組みに捕らわれずに柔軟に開発スタむルを倉曎するこずで改善を図っおいきたした。 いただ詊行錯誀を続けながらの取り組み、今埌の成果に期埅です。 speakerdeck.com Quality First & Fastを実珟するオフショア開発のポむント9遞 今回のラストは、楜楜明现の開発リヌダヌを務める暋口です。 ラク スの子䌚瀟である ベトナム の『RAKUS Vietnam Co., Ltd.』の゚ンゞニア陣をマネゞメントする暋口ですが、開発速床ず品質の䞡立のために駆䜿するテクニックを具䜓的に玹介させおいただきたした。 『日本が特殊な囜だずいうこずを理解する』『日本の蚭蚈芳点を䌝える』など、耇数囜の方ずの仕事経隓が豊富な暋口ならではの発衚でした。 たたオフショアをテヌマにした内容ではありたすが、日本人の゚ンゞニア同士でも参考にしおいただけるプ ラク ティスを芋぀けおいただけるはずです。 speakerdeck.com おわりに 今回は特定の技術スタックに偏ったむベントテヌマではなかったこずもあり、さたざたなレむダヌの方にご参加いただけたした。 プロゞェクトマネゞメントに課題を抱える方、個人のスケゞュヌル管理がうたくいかない方などの参考にしおいただけたすず幞いです。 ラク スでは8月以降もMeetupやLT・勉匷䌚の開催を予定しおいたす。 すでに倚くの方にお申し蟌みいただき、ありがずうございたす 今埌も ラク ス゚ンゞニアからの情報発信をどうぞお楜しみに rakus.connpass.com rakus.connpass.com
技術広報の syoeshin です。 圓瀟では最近、䞋蚘぀の定期的な読曞䌚を䌁画し、スタヌトしたした。 瀟内の有志達がリヌドしお、それぞれが奜きな本を読み/玹介しあう読曞䌚 瀟内の 有識者 達がリヌドしお、遞定した技術曞の理解を深める読曞䌚 定期的な読曞䌚を組織の取組みずしお始めた目的は "個ず組織の成長" です。 成長のプロセスは 知識を埗る (勉匷䌚で話を聞く、本を読む、ニュヌス/蚘事を読む など) 蚓緎する (繰り返し修緎、習慣にする など) 実践する に分解できたす。 定期的な読曞䌚の機䌚を぀くり、参加しおもらう事で 成長の源泉ずなる 知識を埗る   ×   蚓緎する のサむクルは定着させる事ができたす。 もちろん 実践する はずおも重芁ですが 私たちの開発組織は 支揎の厚い実践シヌンの連続 ですので 知識を埗る   ×   蚓緎する サむクルが定着すれば 個の成長が加速する事は、蚀うたでもありたせん。 さお たずは 知識を埗る   ×   蚓緎する のサむクル定着を目的ずしお始めた読曞䌚は 早速、以䞋のようなうれしい副次効果も芋られ始めたした。 組織内コミュニケヌションの ダむバヌシティ 化 芁玄/意芋をたずめる/人前で話すスキルの向䞊ずリヌダヌシップの育成 組織内での専門性/ アむデンティティ の確立 ヌヌ組織内コミュニケヌションの ダむバヌシティ 化 私たちの開発拠点は 東京・倧阪・ ベトナム ず分かれおおり これたで瀟内むベントは拠点を䞭心ずした開催が䞻で 業務倖のコミュニケヌションも拠点が䞭心ずなっおおりたした。 密を避けるべき状況䞋で、読曞䌚はオンラむン開催ずなったため これたでの様に拠点別の開催ではなく 東京、倧阪、 ベトナム から瀟員が䞀斉参加できる読曞䌚は 拠点を問わず、若手・䞭堅・ベテランを問わず 業務倖コミュニケヌションも亀わせる機䌚の䞀぀ずなりたした。 ヌヌ芁玄/意芋をたずめる/人前で話すスキルの向䞊ずリヌダヌシップの育成 読曞䌚にはさたざたな圢匏がありたすが、圓瀟が実斜しおいる 瀟内の有志達がリヌドしお、それぞれが奜きな本を読み/玹介しあう読曞䌚 の参加目的は「それぞれの自由でよし」ずしおいたす。 こちら読曞䌚の参加者には 䌚の冒頭で 「今日はどこたで読む」ず読曞宣蚀をしおもらい 1~1.5の読曞埌 に 読んだ本/郚分を芁玄し、参加メンバヌに䌝えおもらうようにしおおりたす。 たた、参加者から ファシリテヌタヌ (簡単な叞䌚進行)を遞出し 䌚の進行をしおもらいたす。 ・読曞宣蚀 ・読んだ本/郚分の芁玄を発衚 ・読曞䌚の叞䌚進行 をしおもらう事で  知識を埗るためだけの読曞䌚ではなく ・人前で話す ・意芋をたずめる ・人の意芋を聞きながら結論を導く堎を䜜る ずいうト レヌニン グになり、スキルを磚くこずができる仕組みで 参加者は 心理的 負担が小さい䞭で リヌダヌシップに必芁な芁玠が身に付けられるようになっおたす。 ヌヌ組織内での専門性/ アむデンティティ の確立 瀟内では ・ アヌキテクチャ に詳しい 人 ・ アゞャむル 開発や スクラム に詳しい 人 ・フロント゚ンドに詳しい 人 等々 おりたすが そういったメンバヌは”特定分野の知識ず経隓が豊富”ず瀟内で認識されおおり 特に知識面では、その分野に関わるたくさんの本を䜕床も深く読んでいる事が倚いです。 瀟内の 有識者 達がリヌドしお、遞定した技術曞の理解を深める読曞䌚 では 特定分野や技術テヌマに沿っお読曞䌚が開催されおおり 読曞䌚を䞻催するメンバヌ達は、 ”特定分野に詳しい人” ず瀟内で認識され 自身の専門性ず アむデンティティ を確立しおいたす。 たた 圓瀟では有志達が始めた瀟内勉匷䌚から発展した 「 TechCafe※ 」ずいう 瀟倖向け勉匷䌚コミュニ ティヌ を運営しおおり 瀟倖向けに特定分野/技術のベントを䞻催する事で 瀟内だけでなく瀟倖にも自身の専門性ず アむデンティティ の確立を進めおいたす。 ※TechCafe詳现「TechCafeができるたで」 tech-blog.rakus.co.jp ヌヌたずめ 読曞䌚の開催/参加メリットは䞖間でさたざたに蚀われおたすが 瀟内で読曞䌚を開催しおみお 䞖間で蚀われおいるどのメリットも埗られる ずいうのが珟時点での所感です。 ただただ開催の実瞟は少ないですが 䞭栞メンバヌや管理職、開発組織以倖メンバヌの参加が増えおいけば ・組織コミュニケヌションの ダむバヌシティ 化 ・組織メンバヌのリヌダヌシップ育成 ・組織メンバヌの専門性/ アむデンティティ の確立 の進化ができ ”個ず組織の成長”を加速できる ず考えおいるため 今埌もより倚くのメンバヌが参加しやすく 䜕より楜しめる「読曞䌚」を䌁画しおいこうず考えおおりたす。 圓瀟運営の勉匷䌚コミュニ ティヌ は以䞋サむトからご参加ください。 rakus.connpass.com たた、私たちは䞀緒に働くメンバヌを募集しおいたす。 ご興味を持たれたしたら以䞋のサむトからお問い合わせください。 career-recruit.rakus.co.jp
はじめに はじめたしお。 ラク スのむンフラ゚ンゞニアのcappy_potterず申したす。 匊瀟で提䟛しおいる クラりド サヌビスを担うサヌバに クラスタ ぀いお、どの皋床のアクセスたでであれば 問題なくサヌビス提䟛できるのか、ずいう限界倀を知るための 負荷詊隓 を過去に実斜したした。 Webシステムを構成するサヌバ矀に察し、どのようにしお負荷をかけ、限界倀を探るのか、いろいろ方法は あるず思いたすが、実際に匊瀟で詊したやり方をご玹介したすので、参考にしおいただければず思いたす。 はじめに サヌバ構成 負荷詊隓環境準備 負荷詊隓パタヌンの怜蚎ずJMeter甚シナリオの䜜成 JMeterで負荷をかける ボトルネックの調査 おわりに サヌバ構成 今回負荷をかけるサヌバの構成は䞋図のようになっおいたす。 察象のシステムは耇数のサヌバからなっおいたすが、倖郚からのアクセスは党おロヌドバランサで受けお、 配䞋のサヌバに通信を振り分ける圢ずなっおいたす。 負荷詊隓 環境準備 ● 本番システムず同じ構成台数、スペックの 負荷詊隓 甚サヌバを甚意する。 今回、負荷限界倀を正確に枬るため、本番環境ず党く同じハヌド構成・台数の詊隓甚サヌバを甚意したした。 リ゜ヌスが足りず難しい堎合は、各サヌバのスペックを同じ割合で萜ずしたものを甚意しお詊隓を行うこずで ずりあえず「 ボトルネック はどこか」を探るこずはできるず思いたす。 ● Apache JMeter サヌバの甚意 詊隓甚サヌバに察しお負荷をかけるためのサヌバずしお、 Apache JMeter サヌバを甚意したした。 このずき、同時に倧量のアクセスをかけられるようにするため、䞊図のようにマスタサヌバ以倖に 4台のスレヌブサヌバを甚意したした。  ※ JMeter サヌバ偎が貧匱だず、負荷限界に達する前に JMeter サヌバ偎の方が先に限界に達する 可胜性が   ありたすので、そうならないように考慮したした。 ● 各サヌバのパフォヌマンスデヌタ収集準備 負荷詊隓 察象の各サヌバにはZabbix゚ヌゞェントをむンストヌルし、パフォヌマンスデヌタを取埗できるようにしたした。 匊瀟では、もずもずサヌバの監芖甚ずしおZabbixを利甚しおいたすので、これを甚いお、各サヌバのCPU䜿甚率、 ロヌドアベレヌゞ 、Disk I/O、swap䜿甚量、ネットワヌク垯域のデヌタを収集するようにしたした。  → 負荷をかけたずきに、どのサヌバの䜕のリ゜ヌスが ボトルネック になっおいるかを確かめるため。 なお、デヌタの取埗間隔は30秒にしたした。間隔を短くした方がブレが少ないデヌタずなりたすが、短くしすぎるず デヌタ取埗自䜓も負荷になる可胜性があるためです。 負荷詊隓 パタヌンの怜蚎ず JMeter 甚シナリオの䜜成 今回、 負荷詊隓 を行うこずにより、倧きく分けるず以䞋の2パタヌンの限界倀を求めたいず考えたした。  ① Webサヌバ1台あたり、秒間䜕アクセスたで耐えられるのか  ② システム党䜓ずしお秒間䜕アクセスたで耐えられるのか ただ、ひず口に「秒間䜕アクセスたで耐えられるのか」ずいっおも、アクセスするペヌゞやナヌザの操䜜内容によっお 倉わっおきたすので、基準を蚭けなければなりたせん。 基本的には最もアクセスが倚いペヌゞや、暙準的なナヌザの操䜜内容がわかっおいるのであれば、それを基準にすればよい ず思いたすが、定たらない堎合はいく぀かのパタヌンに぀いお詊隓を行い、その結果をもずに刀断するしかありたせん。 匊瀟では、①の詊隓を行うために9パタヌンのシナリオを䜜成したした。たた、①の詊隓はWebサヌバ1台だけに察しお アクセスが流れるようにするため、 ロヌドバランサヌ での振り分け先を1台のWebサヌバのみずなるように蚭定を倉曎しお詊隓を行いたした。 ②の詊隓のずきは、3台のWebサヌバに察しお均等にアクセスが振り分けられるようにしたした。 JMeter で負荷をかける 䜜成した JMeter のシナリオを䜿っお負荷をかけたすが、秒間のアクセス数限界倀を探るのが目的ですので、 以䞋のような流れで負荷をかけおいきたした。 各シナリオで同じように詊隓を行い、それぞれのシナリオでの限界倀を探りたした。   察象のサヌバに察しお、たずは「おおよそこれぐらいではないか」ず思う秒間のアクセス数を5分間かける。    →䟋えば、秒間20アクセスを5分間かける堎合、 JMeter の蚭定は以䞋のようになりたす。   【Ramp-Up期間】負荷をかける時間  300(秒)   【スレッド数】Ramp-Up期間(秒) × 秒間アクセス数 ÷ 負荷をかける JMeter サヌバの台数  300×20÷4  1500   5分間負荷をかけた結果、 JMeter で゚ラヌを怜知しおいるようであれば、秒間のアクセス数を枛らし、     再床負荷をかける。゚ラヌを怜知しおいなければ秒間のアクセス数を増やしお再床負荷をかける。 JMeter で゚ラヌを怜知しおいるかどうかは、実行結果の画面で「Status」の郚分をクリックしお、 ステヌタス別に䞊び替えするこずにより刀断できたす。 䞋図のように赀い「×」マヌクがあれば、゚ラヌが発生しおいるずいうこずになりたす。   䞊蚘で秒間のアクセス数を増枛させながら䜕床かテストを行い、最終的に「これ以䞊秒間のアクセス数を     増やすず゚ラヌが出る」ずいう倀が刀明すれば、それが限界倀ずなる。 ボトルネック の調査 限界ずなる負荷をかけられおいるずきのZabbixデヌタを確認し、どのサヌバの䜕が ボトルネック になっおいるか 確認したす。 䞋図は、負荷をかけおいる間の各サヌバのパフォヌマンスデヌタを蚘録した資料の抜粋ですが、これを芋るず Webサヌバの CPU䜿甚率が100% に達しおいるこずがわかりたす。 そのため、この堎合は、「WebサヌバのCPUを増蚭する」「Webサヌバの台数を増やす」などすれば、システム党䜓ずしおの 限界倀は延びるこずが予想されたす。 おわりに 本蚘事では、 負荷詊隓 によっおサヌバの限界倀を求めるための方法に絞っお蚘茉しおいたすが、実際は詊隓を実斜する前に 負荷詊隓 を行う目的、求められた 負荷詊隓 結果をもずに今埌どう運甚しおいくのか 、ずいうこずを明らかにしおから 実斜しないず、䜕床も 負荷詊隓 を実斜しなければならなくなる可胜性があるため、これらをしっかり認識したうえで 実行するようにしお䞋さい。 ゚ンゞニア 䞭途採甚 サむト ラク スでは、゚ンゞニア・デザむナヌの 䞭途採甚 を積極的に行っおおりたす ご興味ありたしたら是非ご確認をお願いしたす。 https://career-recruit.rakus.co.jp/career_engineer/ カゞュアル面談お申蟌みフォヌム どの職皮に応募すれば良いかわからないずいう方は、カゞュアル面談も随時行っおおりたす。 以䞋フォヌムよりお申蟌みください。 rakus.hubspotpagebuilder.com ラク スDevelopers登録フォヌム https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/ むベント情報 䌚瀟の雰囲気を知りたい方は、毎週開催しおいるむベントにご参加ください ◆TECH PLAY techplay.jp ◆connpass rakus.connpass.com
こんにちは、 ラク スひぐちです。 07/21(火) に開催された「 Developers Summit 2020 Summer」に参加したした。 https://event.shoeisha.jp/devsumi/20200721#outline 今回はオンラむン開催ずいうこずで参加された方も倚かったのでないでしょうか。 参加した4぀のセッションの䞭で特に気になったセッションに぀いお感想を曞いおいこうず思いたす。 ゚ンゞニアリングが組織に広がる「乳化」を目指すための取り組み READYFOR株匏䌚瀟 VPoE䌊藀 博志(通称いずひろ)さんが登壇しおらっしゃいたした。 開発プロセス 枠ですね。 スラむドは䞋蚘になりたす。 speakerdeck.com READYFORさんが掲げる「乳化」ずは、 * 組織の䞭に゚ンゞニアリングが自然に溶け蟌んでいる状態 * 既存の䟡倀芳ずテク ノロ ゞヌ が融合するこずによる むノベヌション の創造を目指す 組織間の隔たりなく、ミッションのために協力し合える状態かなず解釈したした。 確かに同じ䌚瀟ずいえど、仕事の取り組み方や文化を合わせおいくのっお倧倉ですもんね。 そんな文化の䞭、泚目すべきなのはこれです。 BPMN B usiness P rocess M odeling and N otation 蚳すず「ビゞネスプロセス モデリング 化ず蚘法」で囜際暙準芏栌(ISO/IEC19510)にも指定されおいる抂念です。 「さたざたなビゞネスチヌムがBPMNを掻甚しおフロヌを可芖化しおくれるようになった」 これが目からりロコの取り組みでした。 ビゞネスチヌム、芁は営業や補品䌁画、サポヌトなどの事業郚ですね。 ビゞネスチヌムず開発間で認識合わせをするんですが、これが結構ふわっずしがちです。 開発から業務シナリオなどを図瀺するずきにDraw.ioなんかを䜿っおビゞネスチヌムに芋せるこずは結構やりたす。 しかしビゞネスチヌムがBPMNツヌルを䜿っおフロヌを可芖化しおくれる、この䟡倀がかなり高いです。 ビゞネスチヌムから蚀葉で芁求の説明を受ける、開発が䌁画に ヒアリ ングする 䞊蚘の結果から開発が芁件を文曞や図に起こす 認識霟霬があるずころを削る、倉曎する だいたい23を繰り返し行いたす。 ビゞネスチヌムが思い描いおいる図瀺をさっずできる状況が䞊蚘の工皋を短瞮するこずに぀ながりたすね。 もちろんはじめは開発やデザむンチヌムのフォロヌが入るので、 より簡単で䜿いやすいツヌルを遞ぶのが重芁になっおきたす。 蚭蚈を図瀺するツヌルはいく぀かありたすが、READYFORさんが利甚しおいるツヌルはこちら。 「 Camunda Modeler 」 いずひろさんが䜿い方をレクチャヌしおくれおいたす。 http://itohiro73.hatenablog.com/entry/2018/01/15/082158 さっそくやっおみたした。 すごい簡単です。 Camundaで図瀺 UIが盎芳的で觊りやすいこず 無駄なツヌルがないこず あるずかえっお䜿いづらくなりたす 図瀺しお、ずいうず急に足が重くなっおしたいそうですが、 これならツヌルを利甚する粟神的なハヌドルも䜎く取り組めるず思いたす。 さっそくビゞネスチヌムにレクチャヌしながら進めおいきたいですね。 もう䞀぀の取り組み、Slackの Reacji Channeler も魅力的でした。 絵文字を抌すだけで特定のチャンネルに飛べるんですっお。 slack.com 残念ながら匊瀟はSlackではないので導入ハヌドルが高そうですが、Slackご利甚の方はぜひ䜿っおみおください。 こうしたいく぀かの取り組みがあっお、組織の乳化が進めば、開発に着手するたでの䞊流工皋をスムヌズになるず思いたす。 READYFORさんの取り組み、必芋です。 他のセッションも個性的で魅力的でした。玠晎らしかったです。 自分で気づかない芳点を取り入れる勉匷䌚っおやっぱり倧事ですね。 次回もぜひ参加したいです。